@sip-protocol/sdk 0.7.3 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +267 -0
- package/dist/{TransportWebUSB-TQ7WZ4LE.mjs → TransportWebUSB-YQMAGJAJ.mjs} +12 -9
- package/dist/browser.d.mts +10 -4
- package/dist/browser.d.ts +10 -4
- package/dist/browser.js +47556 -19603
- package/dist/browser.mjs +628 -48
- package/dist/chunk-4GRJ5MAW.mjs +152 -0
- package/dist/chunk-5D7A3L3W.mjs +717 -0
- package/dist/chunk-64AYA5F5.mjs +7834 -0
- package/dist/chunk-GMDGB22A.mjs +379 -0
- package/dist/chunk-I534WKN7.mjs +328 -0
- package/dist/chunk-IBZVA5Y7.mjs +1003 -0
- package/dist/chunk-PRRZAWJE.mjs +223 -0
- package/dist/{chunk-UJCSKKID.mjs → chunk-XGB3TDIC.mjs} +13 -1
- package/dist/{chunk-3M3HNQCW.mjs → chunk-YWGJ77A2.mjs} +28656 -13103
- package/dist/{chunk-6WGN57S2.mjs → chunk-Z3K7W5S3.mjs} +48 -0
- package/dist/constants-LHAAUC2T.mjs +51 -0
- package/dist/dist-2OGQ7FED.mjs +3957 -0
- package/dist/dist-IFHPYLDX.mjs +254 -0
- package/dist/fulfillment_proof-ANHVPKTB.mjs +21 -0
- package/dist/funding_proof-ICFZ5LHY.mjs +21 -0
- package/dist/{index-DIBZHOOQ.d.ts → index-DXh2IGkz.d.ts} +21239 -10304
- package/dist/{index-8MQz13eJ.d.mts → index-DeE1ZzA4.d.mts} +21239 -10304
- package/dist/index.d.mts +9 -3
- package/dist/index.d.ts +9 -3
- package/dist/index.js +48396 -19623
- package/dist/index.mjs +537 -19
- package/dist/interface-Bf7w1PLW.d.mts +679 -0
- package/dist/interface-Bf7w1PLW.d.ts +679 -0
- package/dist/{noir-DKfEzWy9.d.mts → noir-kzbLVTei.d.mts} +31 -21
- package/dist/{noir-DKfEzWy9.d.ts → noir-kzbLVTei.d.ts} +31 -21
- package/dist/proofs/halo2.d.mts +151 -0
- package/dist/proofs/halo2.d.ts +151 -0
- package/dist/proofs/halo2.js +350 -0
- package/dist/proofs/halo2.mjs +11 -0
- package/dist/proofs/kimchi.d.mts +160 -0
- package/dist/proofs/kimchi.d.ts +160 -0
- package/dist/proofs/kimchi.js +431 -0
- package/dist/proofs/kimchi.mjs +13 -0
- package/dist/proofs/noir.d.mts +1 -1
- package/dist/proofs/noir.d.ts +1 -1
- package/dist/proofs/noir.js +74 -18
- package/dist/proofs/noir.mjs +84 -24
- package/dist/solana-U3MEGU7W.mjs +280 -0
- package/dist/validity_proof-3POXLPNY.mjs +21 -0
- package/package.json +44 -11
- package/src/adapters/index.ts +41 -0
- package/src/adapters/jupiter.ts +571 -0
- package/src/adapters/near-intents.ts +135 -0
- package/src/advisor/advisor.ts +653 -0
- package/src/advisor/index.ts +54 -0
- package/src/advisor/tools.ts +303 -0
- package/src/advisor/types.ts +164 -0
- package/src/chains/ethereum/announcement.ts +536 -0
- package/src/chains/ethereum/bnb-optimizations.ts +474 -0
- package/src/chains/ethereum/commitment.ts +522 -0
- package/src/chains/ethereum/constants.ts +462 -0
- package/src/chains/ethereum/deployment.ts +596 -0
- package/src/chains/ethereum/gas-estimation.ts +538 -0
- package/src/chains/ethereum/index.ts +268 -0
- package/src/chains/ethereum/optimizations.ts +614 -0
- package/src/chains/ethereum/privacy-adapter.ts +855 -0
- package/src/chains/ethereum/registry.ts +584 -0
- package/src/chains/ethereum/rpc.ts +905 -0
- package/src/chains/ethereum/stealth.ts +491 -0
- package/src/chains/ethereum/token.ts +790 -0
- package/src/chains/ethereum/transfer.ts +637 -0
- package/src/chains/ethereum/types.ts +456 -0
- package/src/chains/ethereum/viewing-key.ts +455 -0
- package/src/chains/near/commitment.ts +608 -0
- package/src/chains/near/constants.ts +284 -0
- package/src/chains/near/function-call.ts +871 -0
- package/src/chains/near/history.ts +654 -0
- package/src/chains/near/implicit-account.ts +840 -0
- package/src/chains/near/index.ts +393 -0
- package/src/chains/near/native-transfer.ts +658 -0
- package/src/chains/near/nep141.ts +775 -0
- package/src/chains/near/privacy-adapter.ts +889 -0
- package/src/chains/near/resolver.ts +971 -0
- package/src/chains/near/rpc.ts +1016 -0
- package/src/chains/near/stealth.ts +419 -0
- package/src/chains/near/types.ts +317 -0
- package/src/chains/near/viewing-key.ts +876 -0
- package/src/chains/solana/anchor-transfer.ts +386 -0
- package/src/chains/solana/commitment.ts +577 -0
- package/src/chains/solana/constants.ts +126 -12
- package/src/chains/solana/ephemeral-keys.ts +543 -0
- package/src/chains/solana/index.ts +252 -1
- package/src/chains/solana/key-derivation.ts +418 -0
- package/src/chains/solana/kit-compat.ts +334 -0
- package/src/chains/solana/optimizations.ts +560 -0
- package/src/chains/solana/privacy-adapter.ts +605 -0
- package/src/chains/solana/providers/generic.ts +47 -6
- package/src/chains/solana/providers/helius-enhanced-types.ts +336 -0
- package/src/chains/solana/providers/helius-enhanced.ts +623 -0
- package/src/chains/solana/providers/helius.ts +186 -33
- package/src/chains/solana/providers/index.ts +31 -0
- package/src/chains/solana/providers/interface.ts +61 -18
- package/src/chains/solana/providers/quicknode.ts +409 -0
- package/src/chains/solana/providers/triton.ts +426 -0
- package/src/chains/solana/providers/webhook.ts +338 -67
- package/src/chains/solana/rpc-client.ts +1150 -0
- package/src/chains/solana/scan.ts +83 -66
- package/src/chains/solana/sol-transfer.ts +732 -0
- package/src/chains/solana/spl-transfer.ts +886 -0
- package/src/chains/solana/stealth-scanner.ts +703 -0
- package/src/chains/solana/sunspot-verifier.ts +453 -0
- package/src/chains/solana/transaction-builder.ts +755 -0
- package/src/chains/solana/transfer.ts +74 -5
- package/src/chains/solana/types.ts +57 -6
- package/src/chains/solana/utils.ts +110 -0
- package/src/chains/solana/viewing-key.ts +807 -0
- package/src/compliance/fireblocks.ts +921 -0
- package/src/compliance/index.ts +23 -0
- package/src/compliance/range-sas.ts +398 -33
- package/src/config/endpoints.ts +100 -0
- package/src/crypto.ts +11 -8
- package/src/errors.ts +82 -0
- package/src/evm/erc4337-relayer.ts +830 -0
- package/src/evm/index.ts +47 -0
- package/src/fees/calculator.ts +396 -0
- package/src/fees/index.ts +87 -0
- package/src/fees/near-contract.ts +429 -0
- package/src/fees/types.ts +268 -0
- package/src/index.ts +686 -1
- package/src/intent.ts +6 -3
- package/src/logger.ts +324 -0
- package/src/network/index.ts +80 -0
- package/src/network/proxy.ts +691 -0
- package/src/optimizations/index.ts +541 -0
- package/src/oracle/types.ts +1 -0
- package/src/privacy-backends/arcium-types.ts +727 -0
- package/src/privacy-backends/arcium.ts +719 -0
- package/src/privacy-backends/combined-privacy.ts +866 -0
- package/src/privacy-backends/cspl-token.ts +595 -0
- package/src/privacy-backends/cspl-types.ts +512 -0
- package/src/privacy-backends/cspl.ts +907 -0
- package/src/privacy-backends/health.ts +488 -0
- package/src/privacy-backends/inco-types.ts +323 -0
- package/src/privacy-backends/inco.ts +616 -0
- package/src/privacy-backends/index.ts +254 -4
- package/src/privacy-backends/interface.ts +649 -6
- package/src/privacy-backends/lru-cache.ts +343 -0
- package/src/privacy-backends/magicblock.ts +458 -0
- package/src/privacy-backends/mock.ts +258 -0
- package/src/privacy-backends/privacycash.ts +13 -17
- package/src/privacy-backends/private-swap.ts +570 -0
- package/src/privacy-backends/rate-limiter.ts +683 -0
- package/src/privacy-backends/registry.ts +414 -2
- package/src/privacy-backends/router.ts +283 -3
- package/src/privacy-backends/shadowwire.ts +449 -0
- package/src/privacy-backends/sip-native.ts +3 -0
- package/src/privacy-logger.ts +191 -0
- package/src/production-safety.ts +373 -0
- package/src/proofs/aggregator.ts +1029 -0
- package/src/proofs/browser-composer.ts +1150 -0
- package/src/proofs/browser.ts +113 -25
- package/src/proofs/cache/index.ts +127 -0
- package/src/proofs/cache/interface.ts +545 -0
- package/src/proofs/cache/key-generator.ts +188 -0
- package/src/proofs/cache/lru-cache.ts +481 -0
- package/src/proofs/cache/multi-tier-cache.ts +575 -0
- package/src/proofs/cache/persistent-cache.ts +788 -0
- package/src/proofs/compliance-proof.ts +872 -0
- package/src/proofs/composer/base.ts +923 -0
- package/src/proofs/composer/index.ts +25 -0
- package/src/proofs/composer/interface.ts +518 -0
- package/src/proofs/composer/types.ts +383 -0
- package/src/proofs/converters/halo2.ts +452 -0
- package/src/proofs/converters/index.ts +208 -0
- package/src/proofs/converters/interface.ts +363 -0
- package/src/proofs/converters/kimchi.ts +462 -0
- package/src/proofs/converters/noir.ts +451 -0
- package/src/proofs/fallback.ts +888 -0
- package/src/proofs/halo2.ts +42 -0
- package/src/proofs/index.ts +471 -0
- package/src/proofs/interface.ts +13 -0
- package/src/proofs/kimchi.ts +42 -0
- package/src/proofs/lazy.ts +1004 -0
- package/src/proofs/mock.ts +25 -1
- package/src/proofs/noir.ts +110 -29
- package/src/proofs/orchestrator.ts +960 -0
- package/src/proofs/parallel/concurrency.ts +297 -0
- package/src/proofs/parallel/dependency-graph.ts +602 -0
- package/src/proofs/parallel/executor.ts +420 -0
- package/src/proofs/parallel/index.ts +131 -0
- package/src/proofs/parallel/interface.ts +685 -0
- package/src/proofs/parallel/worker-pool.ts +644 -0
- package/src/proofs/providers/halo2.ts +560 -0
- package/src/proofs/providers/index.ts +34 -0
- package/src/proofs/providers/kimchi.ts +641 -0
- package/src/proofs/validator.ts +881 -0
- package/src/proofs/verifier.ts +867 -0
- package/src/quantum/index.ts +112 -0
- package/src/quantum/winternitz-vault.ts +639 -0
- package/src/quantum/wots.ts +611 -0
- package/src/settlement/backends/direct-chain.ts +1 -0
- package/src/settlement/index.ts +9 -0
- package/src/settlement/router.ts +732 -46
- package/src/solana/index.ts +72 -0
- package/src/solana/jito-relayer.ts +687 -0
- package/src/solana/noir-verifier-types.ts +430 -0
- package/src/solana/noir-verifier.ts +816 -0
- package/src/stealth/address-derivation.ts +193 -0
- package/src/stealth/ed25519.ts +431 -0
- package/src/stealth/index.ts +233 -0
- package/src/stealth/meta-address.ts +221 -0
- package/src/stealth/secp256k1.ts +368 -0
- package/src/stealth/utils.ts +194 -0
- package/src/stealth.ts +50 -1504
- package/src/sync/index.ts +106 -0
- package/src/sync/manager.ts +504 -0
- package/src/sync/mock-provider.ts +318 -0
- package/src/sync/oblivious.ts +625 -0
- package/src/tokens/index.ts +15 -0
- package/src/tokens/registry.ts +301 -0
- package/src/utils/deprecation.ts +94 -0
- package/src/utils/index.ts +9 -0
- package/src/wallet/ethereum/index.ts +68 -0
- package/src/wallet/ethereum/metamask-privacy.ts +420 -0
- package/src/wallet/ethereum/multi-wallet.ts +646 -0
- package/src/wallet/ethereum/privacy-adapter.ts +700 -0
- package/src/wallet/ethereum/types.ts +3 -1
- package/src/wallet/ethereum/walletconnect-adapter.ts +675 -0
- package/src/wallet/hardware/index.ts +10 -0
- package/src/wallet/hardware/ledger-privacy.ts +414 -0
- package/src/wallet/index.ts +71 -0
- package/src/wallet/near/adapter.ts +626 -0
- package/src/wallet/near/index.ts +86 -0
- package/src/wallet/near/meteor-wallet.ts +1153 -0
- package/src/wallet/near/my-near-wallet.ts +790 -0
- package/src/wallet/near/wallet-selector.ts +702 -0
- package/src/wallet/solana/adapter.ts +6 -4
- package/src/wallet/solana/index.ts +13 -0
- package/src/wallet/solana/privacy-adapter.ts +567 -0
- package/src/wallet/sui/types.ts +6 -4
- package/src/zcash/rpc-client.ts +13 -6
- package/dist/chunk-2XIVXWHA.mjs +0 -1930
- package/dist/chunk-3INS3PR5.mjs +0 -884
- package/dist/chunk-3OVABDRH.mjs +0 -17096
- package/dist/chunk-7RFRWDCW.mjs +0 -1504
- package/dist/chunk-DLDWZFYC.mjs +0 -1495
- package/dist/chunk-E6SZWREQ.mjs +0 -57
- package/dist/chunk-F6F73W35.mjs +0 -16166
- package/dist/chunk-G33LB27A.mjs +0 -16166
- package/dist/chunk-HGU6HZRC.mjs +0 -231
- package/dist/chunk-L2K34JCU.mjs +0 -1496
- package/dist/chunk-OFDBEIEK.mjs +0 -16166
- package/dist/chunk-SF7YSLF5.mjs +0 -1515
- package/dist/chunk-SN4ZDTVW.mjs +0 -16166
- package/dist/chunk-WWUSGOXE.mjs +0 -17129
- package/dist/constants-VOI7BSLK.mjs +0 -27
- package/dist/index-B71aXVzk.d.ts +0 -13264
- package/dist/index-BYZbDjal.d.ts +0 -11390
- package/dist/index-CHB3KuOB.d.mts +0 -11859
- package/dist/index-CzWPI6Le.d.ts +0 -11859
- package/dist/index-pOIIuwfV.d.mts +0 -13264
- package/dist/index-xbWjohNq.d.mts +0 -11390
- package/dist/solana-4O4K45VU.mjs +0 -46
- package/dist/solana-5EMCTPTS.mjs +0 -46
- package/dist/solana-NDABAZ6P.mjs +0 -56
- package/dist/solana-Q4NAVBTS.mjs +0 -46
- package/dist/solana-ZYO63LY5.mjs +0 -46
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NEAR Chain Constants
|
|
3
|
+
*
|
|
4
|
+
* Token addresses, RPC endpoints, and configuration for NEAR same-chain privacy.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Get environment variable or return default
|
|
11
|
+
* Works in both Node.js and browser environments
|
|
12
|
+
*/
|
|
13
|
+
function getEnvVar(name: string, defaultValue: string): string {
|
|
14
|
+
if (typeof process !== 'undefined' && process.env) {
|
|
15
|
+
return process.env[name] || defaultValue
|
|
16
|
+
}
|
|
17
|
+
return defaultValue
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* NEAR RPC endpoints by network
|
|
22
|
+
*/
|
|
23
|
+
export const NEAR_RPC_ENDPOINTS = {
|
|
24
|
+
mainnet: getEnvVar('NEAR_MAINNET_RPC', 'https://rpc.mainnet.near.org'),
|
|
25
|
+
testnet: getEnvVar('NEAR_TESTNET_RPC', 'https://rpc.testnet.near.org'),
|
|
26
|
+
betanet: getEnvVar('NEAR_BETANET_RPC', 'https://rpc.betanet.near.org'),
|
|
27
|
+
localnet: getEnvVar('NEAR_LOCALNET_RPC', 'http://localhost:3030'),
|
|
28
|
+
} as const
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* NEAR network types
|
|
32
|
+
*/
|
|
33
|
+
export type NEARNetwork = keyof typeof NEAR_RPC_ENDPOINTS
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* NEAR explorer URLs by network
|
|
37
|
+
*/
|
|
38
|
+
export const NEAR_EXPLORER_URLS = {
|
|
39
|
+
mainnet: 'https://nearblocks.io',
|
|
40
|
+
testnet: 'https://testnet.nearblocks.io',
|
|
41
|
+
betanet: 'https://betanet.nearblocks.io',
|
|
42
|
+
localnet: getEnvVar('NEAR_LOCALNET_EXPLORER', 'http://localhost:3000'),
|
|
43
|
+
} as const
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Common NEP-141 token contract addresses on NEAR mainnet
|
|
47
|
+
*/
|
|
48
|
+
export const NEAR_TOKEN_CONTRACTS = {
|
|
49
|
+
/** Wrapped NEAR (wNEAR) */
|
|
50
|
+
wNEAR: 'wrap.near',
|
|
51
|
+
/** USD Coin (USDC.e) - Bridged from Ethereum */
|
|
52
|
+
USDC: 'a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.factory.bridge.near',
|
|
53
|
+
/** Tether USD (USDT.e) - Bridged from Ethereum */
|
|
54
|
+
USDT: 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near',
|
|
55
|
+
/** Aurora */
|
|
56
|
+
AURORA: 'aaaaaa20d9e0e2461697782ef11675f668207961.factory.bridge.near',
|
|
57
|
+
/** REF Finance */
|
|
58
|
+
REF: 'token.v2.ref-finance.near',
|
|
59
|
+
/** Linear Protocol */
|
|
60
|
+
LINEAR: 'linear-protocol.near',
|
|
61
|
+
/** Meta Pool stNEAR */
|
|
62
|
+
stNEAR: 'meta-pool.near',
|
|
63
|
+
} as const
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Token decimals for NEAR tokens
|
|
67
|
+
*/
|
|
68
|
+
export const NEAR_TOKEN_DECIMALS: Record<string, number> = {
|
|
69
|
+
NEAR: 24,
|
|
70
|
+
wNEAR: 24,
|
|
71
|
+
USDC: 6,
|
|
72
|
+
USDT: 6,
|
|
73
|
+
AURORA: 18,
|
|
74
|
+
REF: 18,
|
|
75
|
+
LINEAR: 24,
|
|
76
|
+
stNEAR: 24,
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* SIP announcement prefix for NEAR memos
|
|
81
|
+
* Format: SIP:1:<ephemeral_pubkey_hex>:<view_tag_hex>
|
|
82
|
+
*/
|
|
83
|
+
export const SIP_MEMO_PREFIX = 'SIP:1:'
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* NEAR implicit account length (64 hex characters = 32 bytes)
|
|
87
|
+
*/
|
|
88
|
+
export const NEAR_IMPLICIT_ACCOUNT_LENGTH = 64
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Minimum NEAR account ID length (e.g., "a.near")
|
|
92
|
+
*/
|
|
93
|
+
export const NEAR_ACCOUNT_ID_MIN_LENGTH = 2
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Maximum NEAR account ID length (64 chars for implicit, longer for named)
|
|
97
|
+
*/
|
|
98
|
+
export const NEAR_ACCOUNT_ID_MAX_LENGTH = 64
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Ed25519 key size in bytes
|
|
102
|
+
*/
|
|
103
|
+
export const ED25519_KEY_BYTES = 32
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Ed25519 key hex length including '0x' prefix
|
|
107
|
+
*/
|
|
108
|
+
export const ED25519_KEY_HEX_LENGTH = 66
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* View tag minimum value
|
|
112
|
+
*/
|
|
113
|
+
export const VIEW_TAG_MIN = 0
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* View tag maximum value (1 byte)
|
|
117
|
+
*/
|
|
118
|
+
export const VIEW_TAG_MAX = 255
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Default gas for NEAR transactions (300 TGas)
|
|
122
|
+
*/
|
|
123
|
+
export const DEFAULT_GAS = 300_000_000_000_000n
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Minimum storage balance for NEAR accounts (0.00125 NEAR)
|
|
127
|
+
*/
|
|
128
|
+
export const STORAGE_BALANCE_MIN = 1_250_000_000_000_000_000_000n
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Default storage deposit for NEP-141 token registration (0.0125 NEAR)
|
|
132
|
+
*/
|
|
133
|
+
export const STORAGE_DEPOSIT_DEFAULT = 12_500_000_000_000_000_000_000n
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* One yoctoNEAR (smallest unit)
|
|
137
|
+
*/
|
|
138
|
+
export const ONE_YOCTO = 1n
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* One NEAR in yoctoNEAR
|
|
142
|
+
*/
|
|
143
|
+
export const ONE_NEAR = 1_000_000_000_000_000_000_000_000n
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Get explorer URL for a transaction
|
|
147
|
+
*/
|
|
148
|
+
export function getExplorerUrl(
|
|
149
|
+
txHash: string,
|
|
150
|
+
network: NEARNetwork = 'mainnet'
|
|
151
|
+
): string {
|
|
152
|
+
const baseUrl = NEAR_EXPLORER_URLS[network]
|
|
153
|
+
return `${baseUrl}/txns/${txHash}`
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Get explorer URL for an account
|
|
158
|
+
*/
|
|
159
|
+
export function getAccountExplorerUrl(
|
|
160
|
+
accountId: string,
|
|
161
|
+
network: NEARNetwork = 'mainnet'
|
|
162
|
+
): string {
|
|
163
|
+
const baseUrl = NEAR_EXPLORER_URLS[network]
|
|
164
|
+
return `${baseUrl}/address/${accountId}`
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Get token contract address from symbol
|
|
169
|
+
*/
|
|
170
|
+
export function getTokenContract(symbol: string): string | undefined {
|
|
171
|
+
return NEAR_TOKEN_CONTRACTS[symbol as keyof typeof NEAR_TOKEN_CONTRACTS]
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Get token decimals from symbol
|
|
176
|
+
*
|
|
177
|
+
* @deprecated Use `getTokenDecimals(symbol, 'near')` from the main SDK export
|
|
178
|
+
* which throws on unknown tokens instead of silently returning 24.
|
|
179
|
+
*/
|
|
180
|
+
export function getNEARTokenDecimals(symbol: string): number {
|
|
181
|
+
return NEAR_TOKEN_DECIMALS[symbol] ?? 24 // Default to 24 (NEAR decimals)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Check if an account ID is an implicit account (64 hex chars)
|
|
186
|
+
*/
|
|
187
|
+
export function isImplicitAccount(accountId: string): boolean {
|
|
188
|
+
return (
|
|
189
|
+
accountId.length === NEAR_IMPLICIT_ACCOUNT_LENGTH &&
|
|
190
|
+
/^[0-9a-f]{64}$/i.test(accountId)
|
|
191
|
+
)
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Check if an account ID is a named account (e.g., "alice.near")
|
|
196
|
+
*/
|
|
197
|
+
export function isNamedAccount(accountId: string): boolean {
|
|
198
|
+
return (
|
|
199
|
+
!isImplicitAccount(accountId) &&
|
|
200
|
+
/^[a-z0-9._-]+$/.test(accountId) &&
|
|
201
|
+
accountId.includes('.')
|
|
202
|
+
)
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Validate a NEAR account ID format
|
|
207
|
+
*/
|
|
208
|
+
export function isValidAccountId(accountId: string): boolean {
|
|
209
|
+
if (!accountId || typeof accountId !== 'string') {
|
|
210
|
+
return false
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Implicit accounts: 64 hex characters
|
|
214
|
+
if (isImplicitAccount(accountId)) {
|
|
215
|
+
return true
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// Named accounts: lowercase alphanumeric with dots, dashes, underscores
|
|
219
|
+
// Min 2 chars, max 64 chars
|
|
220
|
+
if (
|
|
221
|
+
accountId.length >= NEAR_ACCOUNT_ID_MIN_LENGTH &&
|
|
222
|
+
accountId.length <= NEAR_ACCOUNT_ID_MAX_LENGTH &&
|
|
223
|
+
/^[a-z0-9._-]+$/.test(accountId) &&
|
|
224
|
+
!accountId.startsWith('.') &&
|
|
225
|
+
!accountId.startsWith('-') &&
|
|
226
|
+
!accountId.startsWith('_') &&
|
|
227
|
+
!accountId.endsWith('.') &&
|
|
228
|
+
!accountId.endsWith('-') &&
|
|
229
|
+
!accountId.endsWith('_')
|
|
230
|
+
) {
|
|
231
|
+
return true
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
return false
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Sanitize a URL by masking potential credentials
|
|
239
|
+
*
|
|
240
|
+
* @param url - URL string to sanitize
|
|
241
|
+
* @returns Sanitized URL safe for logging/error messages
|
|
242
|
+
*/
|
|
243
|
+
export function sanitizeUrl(url: string): string {
|
|
244
|
+
try {
|
|
245
|
+
const parsed = new URL(url)
|
|
246
|
+
|
|
247
|
+
if (parsed.username || parsed.password) {
|
|
248
|
+
parsed.username = '***'
|
|
249
|
+
parsed.password = ''
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
const sensitivePatterns = [
|
|
253
|
+
'api-key',
|
|
254
|
+
'apikey',
|
|
255
|
+
'api_key',
|
|
256
|
+
'key',
|
|
257
|
+
'token',
|
|
258
|
+
'x-token',
|
|
259
|
+
'secret',
|
|
260
|
+
'auth',
|
|
261
|
+
]
|
|
262
|
+
const keysToMask: string[] = []
|
|
263
|
+
for (const [key] of parsed.searchParams) {
|
|
264
|
+
const keyLower = key.toLowerCase()
|
|
265
|
+
if (
|
|
266
|
+
sensitivePatterns.some(
|
|
267
|
+
(pattern) => keyLower === pattern || keyLower.includes(pattern)
|
|
268
|
+
)
|
|
269
|
+
) {
|
|
270
|
+
keysToMask.push(key)
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
for (const key of keysToMask) {
|
|
274
|
+
parsed.searchParams.set(key, '***')
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
return parsed.toString()
|
|
278
|
+
} catch {
|
|
279
|
+
return url
|
|
280
|
+
.replace(/api-key=[^&]+/gi, 'api-key=***')
|
|
281
|
+
.replace(/apikey=[^&]+/gi, 'apikey=***')
|
|
282
|
+
.replace(/token=[^&]+/gi, 'token=***')
|
|
283
|
+
}
|
|
284
|
+
}
|