Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 18 additions & 18 deletions merged-packages/stellar-wallet-snap/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,22 @@ ENVIRONMENT=local
LOG_LEVEL=all

# Mainnet RPC URLs
RPC_URL_MAINNET=https://mainnet.sorobanrpc.com
STELLAR_RPC_URL_MAINNET=https://mainnet.sorobanrpc.com

# Mainnet Horizon URLs
HORIZON_URL_MAINNET=https://horizon.stellar.org
STELLAR_HORIZON_URL_MAINNET=https://horizon.stellar.org

# Mainnet Explorer Base URLs
EXPLORER_MAINNET_BASE_URL=https://stellar.expert/explorer/public
STELLAR_EXPLORER_MAINNET_BASE_URL=https://stellar.expert/explorer/public

# Testnet RPC URLs
RPC_URL_TESTNET=https://soroban-testnet.stellar.org
STELLAR_RPC_URL_TESTNET=https://soroban-testnet.stellar.org

# Testnet Horizon URLs
HORIZON_URL_TESTNET=https://horizon-testnet.stellar.org
STELLAR_HORIZON_URL_TESTNET=https://horizon-testnet.stellar.org

# Testnet Explorer Base URLs
EXPLORER_TESTNET_BASE_URL=https://stellar.expert/explorer/testnet
STELLAR_EXPLORER_TESTNET_BASE_URL=https://stellar.expert/explorer/testnet

# Token API Base URL
TOKEN_API_BASE_URL=https://tokens.api.cx.metamask.io
Expand All @@ -44,37 +44,37 @@ PRICE_API_BASE_URL=https://price.api.cx.metamask.io
SECURITY_ALERTS_API_BASE_URL=https://security-alerts.api.cx.metamask.io

# Cache TTL Milliseconds for base fee
#BASE_FEE_TTL_MILLISECONDS=
#STELLAR_BASE_FEE_TTL_MILLISECONDS=

# Cache TTL Milliseconds for load on chain account
#LOAD_ON_CHAIN_ACCOUNT_TTL_MILLISECONDS=
#STELLAR_LOAD_ON_CHAIN_ACCOUNT_TTL_MILLISECONDS=

# Cache TTL Milliseconds for SEP41 transfer simulate transaction
#SIMULATE_TRANSACTION_TTL_MILLISECONDS=
#STELLAR_SIMULATE_TRANSACTION_TTL_MILLISECONDS=

# Cache TTL Milliseconds for sep41 asset balance
#SEP41_ASSET_BALANCE_TTL_MILLISECONDS=
#STELLAR_SEP41_ASSET_BALANCE_TTL_MILLISECONDS=

# Cache TTL Milliseconds for spot prices
#SPOT_PRICES_TTL_MILLISECONDS=
#STELLAR_SPOT_PRICES_TTL_MILLISECONDS=

# Cache TTL Milliseconds for fiat exchange rates
#FIAT_EXCHANGE_RATES_TTL_MILLISECONDS=
#STELLAR_FIAT_EXCHANGE_RATES_TTL_MILLISECONDS=

# Cache TTL Milliseconds for historical prices
#HISTORICAL_PRICES_TTL_MILLISECONDS=
#STELLAR_HISTORICAL_PRICES_TTL_MILLISECONDS=

# Inclusion fee multiplier (applied to Stellar network base fee per operation)
#BASE_FEE_MULTIPLIER=
#STELLAR_BASE_FEE_MULTIPLIER=

# Maximum fee threshold in XLM
#MAX_FEE_THRESHOLD_IN_XLM=
#STELLAR_MAX_FEE_THRESHOLD_IN_XLM=

# Maximum background reschedules for the track-transaction cron job while Horizon has not
#TRACK_TRANSACTION_MAX_RESCHEDULES=10
#STELLAR_TRACK_TRANSACTION_MAX_RESCHEDULES=10

# Maximum number of reconcile attempts for a pending transaction
#MAX_RECONCILE_ATTEMPTS=5
#STELLAR_MAX_RECONCILE_ATTEMPTS=5

# Maximum age of a pending transaction in milliseconds
#MAX_PENDING_TRANSACTION_AGE=30000
#STELLAR_MAX_PENDING_TRANSACTION_AGE=30000
13 changes: 13 additions & 0 deletions merged-packages/stellar-wallet-snap/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@

MetaMask Snap that implements Stellar account management, signing, sends, trustlines, and related multichain client APIs.

## Installation

```bash
npm install @metamask/stellar-wallet-snap
# or
yarn add @metamask/stellar-wallet-snap
```

## Configuration

Rename `.env.example` to `.env`. Runtime settings are loaded from `.env`.
Expand Down Expand Up @@ -67,3 +75,8 @@ provider.request({
},
});
```


## Contributing

This package is part of the Internal Snaps monorepo. See the [contribution processes](../../docs/processes/) for development, testing, building, and release instructions.
27 changes: 16 additions & 11 deletions merged-packages/stellar-wallet-snap/package.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
{
"name": "@metamask/stellar-wallet-snap",
"version": "0.0.1",
"description": "A Stellar wallet Snap.",
"description": "A Stellar wallet Snap",
"keywords": [
"Ethereum",
"MetaMask"
],
"license": "(MIT-0 OR Apache-2.0)",
"homepage": "https://github.com/MetaMask/internal-snaps/tree/main/packages/stellar-wallet-snap#readme",
"bugs": {
"url": "https://github.com/MetaMask/internal-snaps/issues"
},
"license": "(MIT OR Apache-2.0)",
"repository": {
"type": "git",
"url": "https://github.com/MetaMask/snap-stellar-wallet.git"
"url": "https://github.com/MetaMask/internal-snaps.git"
},
"files": [
"dist/",
Expand Down Expand Up @@ -43,28 +48,28 @@
"test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch"
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
"@metamask/auto-changelog": "^6.1.1",
"@metamask/key-tree": "^10.1.1",
"@metamask/keyring-api": "^23.7.0",
"@metamask/keyring-snap-sdk": "^9.2.1",
"@metamask/snaps-cli": "^8.4.0",
"@metamask/snaps-jest": "^10.1.0",
"@metamask/snaps-sdk": "^11.1.0",
"@metamask/superstruct": "^3.2.1",
"@metamask/snaps-cli": "^8.4.1",
"@metamask/snaps-jest": "^10.2.0",
"@metamask/snaps-sdk": "^11.2.0",
"@metamask/superstruct": "^3.4.1",
"@metamask/utils": "^11.11.0",

@stanleyyconsensys stanleyyconsensys Aug 18, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

by purpose not allign metamask/utils

stellar namespace is included in "@metamask/utils": "^11.11.0",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we could also bump the other packages to ^11.11.0 instead of downgrading this one

"@stellar/stellar-sdk": "^15.0.1",
"@types/jest": "^30.0.0",
"async-mutex": "^0.5.0",
"bignumber.js": "^9.3.1",
"concurrently": "^10.0.3",
"dotenv": "^17.2.1",
"jest": "^30.0.3",
"jest": "30.0.3",
"jest-it-up": "^2.0.2",
"jest-transform-stub": "2.0.0",
"lodash": "^4.18.1",
"lodash": "^4.17.21",

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

align with other snap, downgrade doesnt cause issue

but 18.1 fix some security issue, which we should address in other PR

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

instead of forcing this down, perhaps we can bump the other packages?

"oxfmt": "^0.45.0",
"qrcode-generator": "^2.0.4",
"ts-jest": "^29.4.11"
"ts-jest": "^29.4.1"
},
"engines": {
"node": ">=20"
Expand Down
62 changes: 34 additions & 28 deletions merged-packages/stellar-wallet-snap/snap.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,39 +12,45 @@ const config: SnapConfig = {
environment: {
ENVIRONMENT: process.env.ENVIRONMENT ?? '',
LOG_LEVEL: process.env.LOG_LEVEL ?? '',
RPC_URL_MAINNET: process.env.RPC_URL_MAINNET ?? '',

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

adding prefix STELLAR to distinguish the CI env

HORIZON_URL_MAINNET: process.env.HORIZON_URL_MAINNET ?? '',
EXPLORER_MAINNET_BASE_URL: process.env.EXPLORER_MAINNET_BASE_URL ?? '',
RPC_URL_TESTNET: process.env.RPC_URL_TESTNET ?? '',
HORIZON_URL_TESTNET: process.env.HORIZON_URL_TESTNET ?? '',
EXPLORER_TESTNET_BASE_URL: process.env.EXPLORER_TESTNET_BASE_URL ?? '',
TRANSACTION_TIMEOUT: process.env.TRANSACTION_TIMEOUT ?? '',
TRANSACTION_POLLING_ATTEMPTS:
process.env.TRANSACTION_POLLING_ATTEMPTS ?? '',
TRACK_TRANSACTION_MAX_RESCHEDULES:
process.env.TRACK_TRANSACTION_MAX_RESCHEDULES ?? '',
STELLAR_RPC_URL_MAINNET: process.env.STELLAR_RPC_URL_MAINNET ?? '',
STELLAR_HORIZON_URL_MAINNET: process.env.STELLAR_HORIZON_URL_MAINNET ?? '',
STELLAR_EXPLORER_MAINNET_BASE_URL:
process.env.STELLAR_EXPLORER_MAINNET_BASE_URL ?? '',
STELLAR_RPC_URL_TESTNET: process.env.STELLAR_RPC_URL_TESTNET ?? '',
STELLAR_HORIZON_URL_TESTNET: process.env.STELLAR_HORIZON_URL_TESTNET ?? '',
STELLAR_EXPLORER_TESTNET_BASE_URL:
process.env.STELLAR_EXPLORER_TESTNET_BASE_URL ?? '',
STELLAR_TRANSACTION_TIMEOUT: process.env.STELLAR_TRANSACTION_TIMEOUT ?? '',
STELLAR_TRANSACTION_POLLING_ATTEMPTS:
process.env.STELLAR_TRANSACTION_POLLING_ATTEMPTS ?? '',
STELLAR_TRACK_TRANSACTION_MAX_RESCHEDULES:
process.env.STELLAR_TRACK_TRANSACTION_MAX_RESCHEDULES ?? '',
TOKEN_API_BASE_URL: process.env.TOKEN_API_BASE_URL ?? '',
STATIC_API_BASE_URL: process.env.STATIC_API_BASE_URL ?? '',
PRICE_API_BASE_URL: process.env.PRICE_API_BASE_URL ?? '',
SECURITY_ALERTS_API_BASE_URL:
process.env.SECURITY_ALERTS_API_BASE_URL ?? '',
FIAT_EXCHANGE_RATES_TTL_MILLISECONDS:
process.env.FIAT_EXCHANGE_RATES_TTL_MILLISECONDS ?? '',
HISTORICAL_PRICES_TTL_MILLISECONDS:
process.env.HISTORICAL_PRICES_TTL_MILLISECONDS ?? '',
SPOT_PRICES_TTL_MILLISECONDS:
process.env.SPOT_PRICES_TTL_MILLISECONDS ?? '',
BASE_FEE_TTL_MILLISECONDS: process.env.BASE_FEE_TTL_MILLISECONDS ?? '',
LOAD_ON_CHAIN_ACCOUNT_TTL_MILLISECONDS:
process.env.LOAD_ON_CHAIN_ACCOUNT_TTL_MILLISECONDS ?? '',
SIMULATE_TRANSACTION_TTL_MILLISECONDS:
process.env.SIMULATE_TRANSACTION_TTL_MILLISECONDS ?? '',
SEP41_ASSET_BALANCE_TTL_MILLISECONDS:
process.env.SEP41_ASSET_BALANCE_TTL_MILLISECONDS ?? '',
BASE_FEE_MULTIPLIER: process.env.BASE_FEE_MULTIPLIER ?? '',
MAX_FEE_THRESHOLD_IN_XLM: process.env.MAX_FEE_THRESHOLD_IN_XLM ?? '',
MAX_RECONCILE_ATTEMPTS: process.env.MAX_RECONCILE_ATTEMPTS ?? '',
MAX_PENDING_TRANSACTION_AGE: process.env.MAX_PENDING_TRANSACTION_AGE ?? '',
STELLAR_FIAT_EXCHANGE_RATES_TTL_MILLISECONDS:
process.env.STELLAR_FIAT_EXCHANGE_RATES_TTL_MILLISECONDS ?? '',
STELLAR_HISTORICAL_PRICES_TTL_MILLISECONDS:
process.env.STELLAR_HISTORICAL_PRICES_TTL_MILLISECONDS ?? '',
STELLAR_SPOT_PRICES_TTL_MILLISECONDS:
process.env.STELLAR_SPOT_PRICES_TTL_MILLISECONDS ?? '',
STELLAR_BASE_FEE_TTL_MILLISECONDS:
process.env.STELLAR_BASE_FEE_TTL_MILLISECONDS ?? '',
STELLAR_LOAD_ON_CHAIN_ACCOUNT_TTL_MILLISECONDS:
process.env.STELLAR_LOAD_ON_CHAIN_ACCOUNT_TTL_MILLISECONDS ?? '',
STELLAR_SIMULATE_TRANSACTION_TTL_MILLISECONDS:
process.env.STELLAR_SIMULATE_TRANSACTION_TTL_MILLISECONDS ?? '',
STELLAR_SEP41_ASSET_BALANCE_TTL_MILLISECONDS:
process.env.STELLAR_SEP41_ASSET_BALANCE_TTL_MILLISECONDS ?? '',
STELLAR_BASE_FEE_MULTIPLIER: process.env.STELLAR_BASE_FEE_MULTIPLIER ?? '',
STELLAR_MAX_FEE_THRESHOLD_IN_XLM:
process.env.STELLAR_MAX_FEE_THRESHOLD_IN_XLM ?? '',
STELLAR_MAX_RECONCILE_ATTEMPTS:
process.env.STELLAR_MAX_RECONCILE_ATTEMPTS ?? '',
STELLAR_MAX_PENDING_TRANSACTION_AGE:
process.env.STELLAR_MAX_PENDING_TRANSACTION_AGE ?? '',
},
polyfills: true,
};
Expand Down
49 changes: 27 additions & 22 deletions merged-packages/stellar-wallet-snap/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -189,35 +189,35 @@ export const AppConfig = create(
environment: process.env.ENVIRONMENT,
networks: {
[KnownCaip2ChainId.Mainnet]: {
rpcUrl: process.env.RPC_URL_MAINNET,
horizonUrl: process.env.HORIZON_URL_MAINNET,
rpcUrl: process.env.STELLAR_RPC_URL_MAINNET,
horizonUrl: process.env.STELLAR_HORIZON_URL_MAINNET,
explorerBaseUrl:
process.env.EXPLORER_MAINNET_BASE_URL === ''
process.env.STELLAR_EXPLORER_MAINNET_BASE_URL === ''
? DEFAULT_EXPLORER_MAINNET_BASE_URL
: (process.env.EXPLORER_MAINNET_BASE_URL ??
: (process.env.STELLAR_EXPLORER_MAINNET_BASE_URL ??
DEFAULT_EXPLORER_MAINNET_BASE_URL),
},
[KnownCaip2ChainId.Testnet]: {
rpcUrl: process.env.RPC_URL_TESTNET,
horizonUrl: process.env.HORIZON_URL_TESTNET,
rpcUrl: process.env.STELLAR_RPC_URL_TESTNET,
horizonUrl: process.env.STELLAR_HORIZON_URL_TESTNET,
explorerBaseUrl:
process.env.EXPLORER_TESTNET_BASE_URL === ''
process.env.STELLAR_EXPLORER_TESTNET_BASE_URL === ''
? DEFAULT_EXPLORER_TESTNET_BASE_URL
: (process.env.EXPLORER_TESTNET_BASE_URL ??
: (process.env.STELLAR_EXPLORER_TESTNET_BASE_URL ??
DEFAULT_EXPLORER_TESTNET_BASE_URL),
},
},
selectedNetwork: KnownCaip2ChainId.Mainnet,
logLevel: process.env.LOG_LEVEL,
transaction: {
timeout: process.env.TRANSACTION_TIMEOUT,
pollingAttempts: process.env.TRANSACTION_POLLING_ATTEMPTS,
baseFeeMultiplier: process.env.BASE_FEE_MULTIPLIER,
maxFeeThresholdInXLM: process.env.MAX_FEE_THRESHOLD_IN_XLM,
timeout: process.env.STELLAR_TRANSACTION_TIMEOUT,
pollingAttempts: process.env.STELLAR_TRANSACTION_POLLING_ATTEMPTS,
baseFeeMultiplier: process.env.STELLAR_BASE_FEE_MULTIPLIER,
maxFeeThresholdInXLM: process.env.STELLAR_MAX_FEE_THRESHOLD_IN_XLM,
trackTransactionMaxReschedules:
process.env.TRACK_TRANSACTION_MAX_RESCHEDULES,
maxReconcileAttempts: process.env.MAX_RECONCILE_ATTEMPTS,
maxPendingTransactionAge: process.env.MAX_PENDING_TRANSACTION_AGE,
process.env.STELLAR_TRACK_TRANSACTION_MAX_RESCHEDULES,
maxReconcileAttempts: process.env.STELLAR_MAX_RECONCILE_ATTEMPTS,
maxPendingTransactionAge: process.env.STELLAR_MAX_PENDING_TRANSACTION_AGE,
},
api: {
tokenApi: {
Expand Down Expand Up @@ -248,13 +248,18 @@ export const AppConfig = create(
},
cache: {
ttlMilliseconds: {
spotPrices: process.env.SPOT_PRICES_TTL_MILLISECONDS,
fiatExchangeRates: process.env.FIAT_EXCHANGE_RATES_TTL_MILLISECONDS,
historicalPrices: process.env.HISTORICAL_PRICES_TTL_MILLISECONDS,
baseFee: process.env.BASE_FEE_TTL_MILLISECONDS,
loadOnChainAccount: process.env.LOAD_ON_CHAIN_ACCOUNT_TTL_MILLISECONDS,
simulateTransaction: process.env.SIMULATE_TRANSACTION_TTL_MILLISECONDS,
sep41AssetBalance: process.env.SEP41_ASSET_BALANCE_TTL_MILLISECONDS,
spotPrices: process.env.STELLAR_SPOT_PRICES_TTL_MILLISECONDS,
fiatExchangeRates:
process.env.STELLAR_FIAT_EXCHANGE_RATES_TTL_MILLISECONDS,
historicalPrices:
process.env.STELLAR_HISTORICAL_PRICES_TTL_MILLISECONDS,
baseFee: process.env.STELLAR_BASE_FEE_TTL_MILLISECONDS,
loadOnChainAccount:
process.env.STELLAR_LOAD_ON_CHAIN_ACCOUNT_TTL_MILLISECONDS,
simulateTransaction:
process.env.STELLAR_SIMULATE_TRANSACTION_TTL_MILLISECONDS,
sep41AssetBalance:
process.env.STELLAR_SEP41_ASSET_BALANCE_TTL_MILLISECONDS,
},
},
},
Expand Down
24 changes: 11 additions & 13 deletions merged-packages/stellar-wallet-snap/tsconfig.json
Original file line number Diff line number Diff line change
@@ -1,21 +1,19 @@
{
"extends": "../../tsconfig.packages.json",
"compilerOptions": {
"module": "preserve",
"moduleResolution": "bundler",
"target": "es2023",
"lib": ["ES2023", "DOM"],
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"noErrorTruncation": true,
"noUncheckedIndexedAccess": true,
"resolveJsonModule": true,
"resolveJsonModule": true /* lets us import JSON modules from within TypeScript modules. */,
"jsx": "react-jsx",
"jsxImportSource": "@metamask/snaps-sdk",
"exactOptionalPropertyTypes": false,
"types": ["jest"],
"esModuleInterop": true,
"noEmit": true,
"strict": true
"forceConsistentCasingInFileNames": true,
"noErrorTruncation": true,
"noUncheckedIndexedAccess": true,
"skipLibCheck": true,
"lib": ["ES2023", "DOM"],
"target": "es2023",
"module": "preserve",
"moduleResolution": "bundler",
"types": ["jest"]
},
"include": ["**/*.ts", "**/*.tsx", "locales/*.json"]
}