@spacesops/wdk-react-native-core 1.0.0-beta.65 → 1.0.0-beta.67
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/dist/__tests__/utils/validation.test.js +41 -0
- package/dist/__tests__/utils/validation.test.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/schemas.d.ts +11 -6
- package/dist/utils/schemas.js +18 -2
- package/dist/utils/schemas.js.map +1 -1
- package/dist/utils/types.js +6 -0
- package/dist/utils/utils/schemas.js +173 -0
- package/dist/utils/utils/validation.js +151 -0
- package/dist/utils/validation.js +2 -2
- package/dist/utils/validation.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/utils/typeGuards.test.ts +9 -0
- package/src/__tests__/utils/validation.test.ts +42 -0
- package/src/index.ts +4 -0
- package/src/utils/schemas.ts +49 -4
- package/src/utils/typeGuards.ts +3 -2
- package/src/utils/validation.ts +2 -2
|
@@ -34,6 +34,44 @@ describe('validation', () => {
|
|
|
34
34
|
};
|
|
35
35
|
expect(() => validateTokenConfigs(validConfigs)).not.toThrow();
|
|
36
36
|
});
|
|
37
|
+
it('should accept non-EVM token contract addresses', () => {
|
|
38
|
+
const configs = {
|
|
39
|
+
ton: {
|
|
40
|
+
native: { symbol: 'TON', name: 'Toncoin', decimals: 9, address: null },
|
|
41
|
+
tokens: [
|
|
42
|
+
{
|
|
43
|
+
address: 'EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs',
|
|
44
|
+
symbol: 'USDT',
|
|
45
|
+
name: 'Tether USD',
|
|
46
|
+
decimals: 6,
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
},
|
|
50
|
+
tron: {
|
|
51
|
+
native: { symbol: 'TRX', name: 'TRON', decimals: 6, address: null },
|
|
52
|
+
tokens: [
|
|
53
|
+
{
|
|
54
|
+
address: 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t',
|
|
55
|
+
symbol: 'USDT',
|
|
56
|
+
name: 'Tether USD',
|
|
57
|
+
decimals: 6,
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
},
|
|
61
|
+
solana: {
|
|
62
|
+
native: { symbol: 'SOL', name: 'Solana', decimals: 9, address: null },
|
|
63
|
+
tokens: [
|
|
64
|
+
{
|
|
65
|
+
address: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',
|
|
66
|
+
symbol: 'USDT',
|
|
67
|
+
name: 'Tether USD',
|
|
68
|
+
decimals: 6,
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
expect(() => validateTokenConfigs(configs)).not.toThrow();
|
|
74
|
+
});
|
|
37
75
|
it('should throw for invalid token configs', () => {
|
|
38
76
|
expect(() => validateTokenConfigs({})).toThrow();
|
|
39
77
|
expect(() => validateTokenConfigs(null)).toThrow();
|
|
@@ -100,6 +138,9 @@ describe('validation', () => {
|
|
|
100
138
|
expect(() => validateTokenAddress(null)).not.toThrow();
|
|
101
139
|
expect(() => validateTokenAddress('0x1234567890123456789012345678901234567890')).not.toThrow();
|
|
102
140
|
expect(() => validateTokenAddress('0xABCDEFabcdef1234567890123456789012345678')).not.toThrow();
|
|
141
|
+
expect(() => validateTokenAddress('TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t')).not.toThrow();
|
|
142
|
+
expect(() => validateTokenAddress('Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB')).not.toThrow();
|
|
143
|
+
expect(() => validateTokenAddress('EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs')).not.toThrow();
|
|
103
144
|
});
|
|
104
145
|
it('should throw for invalid token addresses', () => {
|
|
105
146
|
expect(() => validateTokenAddress('invalid')).toThrow();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.test.js","sourceRoot":"","sources":["../../../src/__tests__/utils/validation.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,8BAA8B,EAC9B,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,GAChB,MAAM,wBAAwB,CAAA;AAG/B,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,YAAY,GAAmB;gBACnC,QAAQ,EAAE;oBACR,OAAO,EAAE,CAAC;oBACV,UAAU,EAAE,UAAU;iBACvB;aACF,CAAA;YACD,MAAM,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;QAClE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,EAAoB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;YACpE,MAAM,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,IAAiC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;YACjF,MAAM,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,EAA+B,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;QACjF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,YAAY,GAAiB;gBACjC,QAAQ,EAAE;oBACR,MAAM,EAAE;wBACN,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE,EAAE;wBACZ,OAAO,EAAE,IAAI;qBACd;oBACD,MAAM,EAAE,EAAE;iBACX;aACF,CAAA;YACD,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;QAChE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;YAChE,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,IAA+B,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;YAC7E,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAA6B,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;QAC7E,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC9C,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,CAAC,GAAG,EAAE,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;YAC7D,MAAM,CAAC,GAAG,EAAE,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;YAChE,MAAM,CAAC,GAAG,EAAE,CAAC,8BAA8B,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;QACvE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,CAAC,GAAG,EAAE,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;YAC1D,MAAM,CAAC,GAAG,EAAE,CAAC,8BAA8B,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;YAC3D,MAAM,CAAC,GAAG,EAAE,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;YAChE,MAAM,CAAC,GAAG,EAAE,CAAC,8BAA8B,CAAC,MAA2B,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;QACrF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,GAAG,GAAG;gBACV,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;gBAClB,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;aACnB,CAAA;YACD,MAAM,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;QAChG,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,GAAG,GAAG;gBACV,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;aACnB,CAAA;YACD,MAAM,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;YAC1F,MAAM,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;YAChF,MAAM,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;QACtF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;YACnD,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;YACnD,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;QACvD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;YAChD,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;YACjD,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;QACnD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;YAC3D,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;YAClE,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;QAC9D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;YAC/C,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;YACjD,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;YAClE,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;QAChE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;YACtD,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,4CAA4C,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;YAC9F,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,4CAA4C,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"validation.test.js","sourceRoot":"","sources":["../../../src/__tests__/utils/validation.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export type { UseWalletManagerResult, WalletInfo } from './hooks/useWalletManage
|
|
|
17
17
|
export { useBalance, useBalancesForWallet, useBalancesForWallets, useRefreshBalance, balanceQueryKeys } from './hooks/useBalance';
|
|
18
18
|
export type { AccountInfo } from './store/walletStore';
|
|
19
19
|
export { validateNetworkConfigs, validateTokenConfigs, validateBalanceRefreshInterval, validateAccountIndex, validateTokenAddress, } from './utils/validation';
|
|
20
|
-
export { networkConfigSchema, networkConfigsSchema, tokenConfigSchema, tokenConfigsSchema, walletAddressesSchema, walletBalancesSchema, accountIndexSchema, networkNameSchema, balanceStringSchema, ethereumAddressSchema, sparkAddressSchema, bitcoinAddressSchema, addressSchema, } from './utils/schemas';
|
|
20
|
+
export { networkConfigSchema, networkConfigsSchema, tokenConfigSchema, tokenConfigsSchema, walletAddressesSchema, walletBalancesSchema, accountIndexSchema, networkNameSchema, balanceStringSchema, ethereumAddressSchema, tokenContractAddressSchema, sparkAddressSchema, bitcoinAddressSchema, addressSchema, } from './utils/schemas';
|
|
21
21
|
export { isNetworkConfigs, isTokenConfigs, isEthereumAddress, isValidAccountIndex, isValidNetworkName, } from './utils/typeGuards';
|
|
22
22
|
export { WorkletLifecycleService } from './services/workletLifecycleService';
|
|
23
23
|
export { AddressService } from './services/addressService';
|
package/dist/index.js
CHANGED
|
@@ -16,7 +16,7 @@ export { useBalance, useBalancesForWallet, useBalancesForWallets, useRefreshBala
|
|
|
16
16
|
// Validation Utilities (for validating configs before use)
|
|
17
17
|
export { validateNetworkConfigs, validateTokenConfigs, validateBalanceRefreshInterval, validateAccountIndex, validateTokenAddress, } from './utils/validation';
|
|
18
18
|
// Zod Schemas (for runtime validation)
|
|
19
|
-
export { networkConfigSchema, networkConfigsSchema, tokenConfigSchema, tokenConfigsSchema, walletAddressesSchema, walletBalancesSchema, accountIndexSchema, networkNameSchema, balanceStringSchema, ethereumAddressSchema, sparkAddressSchema, bitcoinAddressSchema, addressSchema, } from './utils/schemas';
|
|
19
|
+
export { networkConfigSchema, networkConfigsSchema, tokenConfigSchema, tokenConfigsSchema, walletAddressesSchema, walletBalancesSchema, accountIndexSchema, networkNameSchema, balanceStringSchema, ethereumAddressSchema, tokenContractAddressSchema, sparkAddressSchema, bitcoinAddressSchema, addressSchema, } from './utils/schemas';
|
|
20
20
|
// Type Guards (for runtime type checking)
|
|
21
21
|
export { isNetworkConfigs, isTokenConfigs, isEthereumAddress, isValidAccountIndex, isValidNetworkName, } from './utils/typeGuards';
|
|
22
22
|
// Services
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqBH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7D,8BAA8B;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAG1D,qBAAqB;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE3D,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGjI,2DAA2D;AAC3D,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,8BAA8B,EAC9B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,oBAAoB,CAAA;AAE3B,uCAAuC;AACvC,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,GACd,MAAM,iBAAiB,CAAA;AAExB,0CAA0C;AAC1C,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,oBAAoB,CAAA;AAE3B,WAAW;AACX,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAE1E,oBAAoB;AACpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AACnG,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAIxG,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAEhE,+BAA+B;AAC/B,OAAO,EACL,oBAAoB,EACpB,SAAS,EACT,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,6BAA6B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqBH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7D,8BAA8B;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAG1D,qBAAqB;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE3D,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGjI,2DAA2D;AAC3D,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,8BAA8B,EAC9B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,oBAAoB,CAAA;AAE3B,uCAAuC;AACvC,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,0BAA0B,EAC1B,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,GACd,MAAM,iBAAiB,CAAA;AAExB,0CAA0C;AAC1C,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,oBAAoB,CAAA;AAE3B,WAAW;AACX,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAE1E,oBAAoB;AACpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AACnG,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAIxG,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAEhE,+BAA+B;AAC/B,OAAO,EACL,oBAAoB,EACpB,SAAS,EACT,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,6BAA6B,CAAA"}
|
package/dist/utils/schemas.d.ts
CHANGED
|
@@ -9,6 +9,11 @@ import { z } from 'zod';
|
|
|
9
9
|
* Ethereum address schema (0x followed by 40 hex characters)
|
|
10
10
|
*/
|
|
11
11
|
export declare const ethereumAddressSchema: z.ZodString;
|
|
12
|
+
/**
|
|
13
|
+
* Token contract address schema — EVM, TON, Tron, Solana, and other worklet-supported formats.
|
|
14
|
+
* Wallet receive addresses use {@link addressSchema}; token mint/contract IDs are chain-specific.
|
|
15
|
+
*/
|
|
16
|
+
export declare const tokenContractAddressSchema: z.ZodUnion<[z.ZodString, z.ZodString, z.ZodString, z.ZodString]>;
|
|
12
17
|
/**
|
|
13
18
|
* Spark address schema (Bech32 format: spark1/sparkt1/sparkrt1 followed by base32 characters)
|
|
14
19
|
*/
|
|
@@ -108,7 +113,7 @@ export declare const tokenConfigSchema: z.ZodObject<{
|
|
|
108
113
|
symbol: z.ZodString;
|
|
109
114
|
name: z.ZodString;
|
|
110
115
|
decimals: z.ZodNumber;
|
|
111
|
-
address: z.ZodUnion<[z.ZodString, z.ZodNull]>;
|
|
116
|
+
address: z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodString, z.ZodString, z.ZodString]>, z.ZodNull]>;
|
|
112
117
|
}, "strip", z.ZodTypeAny, {
|
|
113
118
|
symbol: string;
|
|
114
119
|
name: string;
|
|
@@ -128,7 +133,7 @@ export declare const networkTokensSchema: z.ZodObject<{
|
|
|
128
133
|
symbol: z.ZodString;
|
|
129
134
|
name: z.ZodString;
|
|
130
135
|
decimals: z.ZodNumber;
|
|
131
|
-
address: z.ZodUnion<[z.ZodString, z.ZodNull]>;
|
|
136
|
+
address: z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodString, z.ZodString, z.ZodString]>, z.ZodNull]>;
|
|
132
137
|
}, "strip", z.ZodTypeAny, {
|
|
133
138
|
symbol: string;
|
|
134
139
|
name: string;
|
|
@@ -144,7 +149,7 @@ export declare const networkTokensSchema: z.ZodObject<{
|
|
|
144
149
|
symbol: z.ZodString;
|
|
145
150
|
name: z.ZodString;
|
|
146
151
|
decimals: z.ZodNumber;
|
|
147
|
-
address: z.ZodUnion<[z.ZodString, z.ZodNull]>;
|
|
152
|
+
address: z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodString, z.ZodString, z.ZodString]>, z.ZodNull]>;
|
|
148
153
|
}, "strip", z.ZodTypeAny, {
|
|
149
154
|
symbol: string;
|
|
150
155
|
name: string;
|
|
@@ -191,7 +196,7 @@ export declare const tokenConfigsSchema: z.ZodEffects<z.ZodRecord<z.ZodString, z
|
|
|
191
196
|
symbol: z.ZodString;
|
|
192
197
|
name: z.ZodString;
|
|
193
198
|
decimals: z.ZodNumber;
|
|
194
|
-
address: z.ZodUnion<[z.ZodString, z.ZodNull]>;
|
|
199
|
+
address: z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodString, z.ZodString, z.ZodString]>, z.ZodNull]>;
|
|
195
200
|
}, "strip", z.ZodTypeAny, {
|
|
196
201
|
symbol: string;
|
|
197
202
|
name: string;
|
|
@@ -207,7 +212,7 @@ export declare const tokenConfigsSchema: z.ZodEffects<z.ZodRecord<z.ZodString, z
|
|
|
207
212
|
symbol: z.ZodString;
|
|
208
213
|
name: z.ZodString;
|
|
209
214
|
decimals: z.ZodNumber;
|
|
210
|
-
address: z.ZodUnion<[z.ZodString, z.ZodNull]>;
|
|
215
|
+
address: z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodString, z.ZodString, z.ZodString]>, z.ZodNull]>;
|
|
211
216
|
}, "strip", z.ZodTypeAny, {
|
|
212
217
|
symbol: string;
|
|
213
218
|
name: string;
|
|
@@ -306,7 +311,7 @@ export declare const balanceFetchResultSchema: z.ZodObject<{
|
|
|
306
311
|
success: z.ZodBoolean;
|
|
307
312
|
network: z.ZodString;
|
|
308
313
|
accountIndex: z.ZodNumber;
|
|
309
|
-
tokenAddress: z.ZodUnion<[z.ZodString, z.ZodNull]>;
|
|
314
|
+
tokenAddress: z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodString, z.ZodString, z.ZodString]>, z.ZodNull]>;
|
|
310
315
|
balance: z.ZodUnion<[z.ZodString, z.ZodNull]>;
|
|
311
316
|
error: z.ZodOptional<z.ZodString>;
|
|
312
317
|
}, "strip", z.ZodTypeAny, {
|
package/dist/utils/schemas.js
CHANGED
|
@@ -11,6 +11,22 @@ import { z } from 'zod';
|
|
|
11
11
|
export const ethereumAddressSchema = z.string().regex(/^0x[a-fA-F0-9]{40}$/, {
|
|
12
12
|
message: 'Must be a valid Ethereum address (0x followed by 40 hex characters)',
|
|
13
13
|
});
|
|
14
|
+
/**
|
|
15
|
+
* Token contract address schema — EVM, TON, Tron, Solana, and other worklet-supported formats.
|
|
16
|
+
* Wallet receive addresses use {@link addressSchema}; token mint/contract IDs are chain-specific.
|
|
17
|
+
*/
|
|
18
|
+
export const tokenContractAddressSchema = z.union([
|
|
19
|
+
ethereumAddressSchema,
|
|
20
|
+
z.string().regex(/^T[1-9A-HJ-NP-Za-km-z]{33}$/, {
|
|
21
|
+
message: 'Must be a valid Tron token contract address',
|
|
22
|
+
}),
|
|
23
|
+
z.string().regex(/^[1-9A-HJ-NP-Za-km-z]{32,44}$/, {
|
|
24
|
+
message: 'Must be a valid Solana token mint address',
|
|
25
|
+
}),
|
|
26
|
+
z.string().regex(/^(EQ|UQ)[A-Za-z0-9_-]{46}$/, {
|
|
27
|
+
message: 'Must be a valid TON jetton master address',
|
|
28
|
+
}),
|
|
29
|
+
]);
|
|
14
30
|
/**
|
|
15
31
|
* Spark address schema (Bech32 format: spark1/sparkt1/sparkrt1 followed by base32 characters)
|
|
16
32
|
*/
|
|
@@ -55,7 +71,7 @@ export const tokenConfigSchema = z.object({
|
|
|
55
71
|
symbol: z.string().min(1),
|
|
56
72
|
name: z.string().min(1),
|
|
57
73
|
decimals: z.number().int().min(0).max(18),
|
|
58
|
-
address: z.union([
|
|
74
|
+
address: z.union([tokenContractAddressSchema, z.null()]),
|
|
59
75
|
});
|
|
60
76
|
/**
|
|
61
77
|
* Network tokens schema
|
|
@@ -120,7 +136,7 @@ export const balanceFetchResultSchema = z.object({
|
|
|
120
136
|
success: z.boolean(),
|
|
121
137
|
network: networkNameSchema,
|
|
122
138
|
accountIndex: accountIndexSchema,
|
|
123
|
-
tokenAddress: z.union([
|
|
139
|
+
tokenAddress: z.union([tokenContractAddressSchema, z.null()]),
|
|
124
140
|
balance: z.union([balanceStringSchema, z.null()]),
|
|
125
141
|
error: z.string().optional(),
|
|
126
142
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/utils/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE;IAC3E,OAAO,EAAE,qEAAqE;CAC/E,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,kCAAkC,EAAE;IACrF,OAAO,EAAE,uFAAuF;CACjG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AAElB;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAClD,6IAA6I,EAC7I;IACE,OAAO,EAAE,yEAAyE;CACnF,CACF,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,CAAA;AAEvG;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACxC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC1C,gBAAgB,EAAE,qBAAqB,CAAC,QAAQ,EAAE;IAClD,iBAAiB,EAAE,qBAAqB,CAAC,QAAQ,EAAE;IACnD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;CACpD,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAC1C,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE;IACnC,OAAO,EAAE,kFAAkF;CAC5F,CAAC,EACF,mBAAmB,CACpB,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;IACrD,OAAO,EAAE,kDAAkD;CAC5D,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/utils/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE;IAC3E,OAAO,EAAE,qEAAqE;CAC/E,CAAC,CAAA;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC;IAChD,qBAAqB;IACrB,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,6BAA6B,EAAE;QAC9C,OAAO,EAAE,6CAA6C;KACvD,CAAC;IACF,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,+BAA+B,EAAE;QAChD,OAAO,EAAE,2CAA2C;KACrD,CAAC;IACF,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,4BAA4B,EAAE;QAC7C,OAAO,EAAE,2CAA2C;KACrD,CAAC;CACH,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,kCAAkC,EAAE;IACrF,OAAO,EAAE,uFAAuF;CACjG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AAElB;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAClD,6IAA6I,EAC7I;IACE,OAAO,EAAE,yEAAyE;CACnF,CACF,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,CAAA;AAEvG;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACxC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC1C,gBAAgB,EAAE,qBAAqB,CAAC,QAAQ,EAAE;IAClD,iBAAiB,EAAE,qBAAqB,CAAC,QAAQ,EAAE;IACnD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;CACpD,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAC1C,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE;IACnC,OAAO,EAAE,kFAAkF;CAC5F,CAAC,EACF,mBAAmB,CACpB,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;IACrD,OAAO,EAAE,kDAAkD;CAC5D,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,0BAA0B,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;CACzD,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;CACnC,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CACxC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EACjB,mBAAmB,CACpB,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;IACrD,OAAO,EAAE,gDAAgD;CAC1D,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAA;AAEhE;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE;IACpE,OAAO,EAAE,kFAAkF;CAC5F,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAET;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE;IACrE,OAAO,EAAE,uCAAuC;CACjD,CAAC,CAAA;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAC3C,iBAAiB,EACjB,CAAC,CAAC,MAAM,CACN,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;IAC3B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC7B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAC,EACF,aAAa,CACd,CACF,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAC1C,iBAAiB,EACjB,CAAC,CAAC,MAAM,CACN,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;IAC3B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC7B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAC,EACF,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAC1C,CACF,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;AAE3E;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,OAAO,EAAE,iBAAiB;IAC1B,YAAY,EAAE,kBAAkB;IAChC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,0BAA0B,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACjD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,YAAY,EAAE,kBAAkB;IAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACzC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;CAC1C,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE;IAC7D,OAAO,EAAE,kCAAkC;CAC5C,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC;IACjD,qBAAqB;IACrB,CAAC,CAAC,MAAM,EAAE,EAAE,gBAAgB;IAC5B,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,gCAAgC;CAC7D,CAAC,CAAA"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod Schemas for Runtime Validation
|
|
3
|
+
*
|
|
4
|
+
* Provides Zod schemas for all WDK types to replace manual if/else type guards.
|
|
5
|
+
* These schemas provide better error messages and are easier to maintain.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
/**
|
|
9
|
+
* Ethereum address schema (0x followed by 40 hex characters)
|
|
10
|
+
*/
|
|
11
|
+
export const ethereumAddressSchema = z.string().regex(/^0x[a-fA-F0-9]{40}$/, {
|
|
12
|
+
message: 'Must be a valid Ethereum address (0x followed by 40 hex characters)',
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* Token contract address schema — EVM, TON, Tron, Solana, and other worklet-supported formats.
|
|
16
|
+
* Wallet receive addresses use {@link addressSchema}; token mint/contract IDs are chain-specific.
|
|
17
|
+
*/
|
|
18
|
+
export const tokenContractAddressSchema = z.union([
|
|
19
|
+
ethereumAddressSchema,
|
|
20
|
+
z.string().regex(/^T[1-9A-HJ-NP-Za-km-z]{33}$/, {
|
|
21
|
+
message: 'Must be a valid Tron token contract address',
|
|
22
|
+
}),
|
|
23
|
+
z.string().regex(/^[1-9A-HJ-NP-Za-km-z]{32,44}$/, {
|
|
24
|
+
message: 'Must be a valid Solana token mint address',
|
|
25
|
+
}),
|
|
26
|
+
z.string().regex(/^(EQ|UQ)[A-Za-z0-9_-]{46}$/, {
|
|
27
|
+
message: 'Must be a valid TON jetton master address',
|
|
28
|
+
}),
|
|
29
|
+
]);
|
|
30
|
+
/**
|
|
31
|
+
* Spark address schema (Bech32 format: spark1/sparkt1/sparkrt1 followed by base32 characters)
|
|
32
|
+
*/
|
|
33
|
+
export const sparkAddressSchema = z.string().regex(/^spark(1|t1|rt1|test1)[a-z0-9]+$/, {
|
|
34
|
+
message: 'Must be a valid Spark address (spark1/sparkt1/sparkrt1 followed by base32 characters)',
|
|
35
|
+
}).min(14).max(90);
|
|
36
|
+
/**
|
|
37
|
+
* Bitcoin address schema — mainnet/testnet/regtest bech32 (bc1/tb1/bcrt1) and legacy Base58.
|
|
38
|
+
*/
|
|
39
|
+
export const bitcoinAddressSchema = z.string().regex(/^(bc1[qp][a-z0-9]{11,71}|tb1[qp][a-z0-9]{11,71}|bcrt1[qp][a-z0-9]{11,71}|[13][a-km-zA-HJ-NP-Z1-9]{25,34}|[mn2][a-km-zA-HJ-NP-Z1-9]{25,34})$/, {
|
|
40
|
+
message: 'Must be a valid Bitcoin address (bech32 bc1/tb1/bcrt1 or legacy Base58)',
|
|
41
|
+
});
|
|
42
|
+
/**
|
|
43
|
+
* Address schema (Ethereum, Spark, or Bitcoin)
|
|
44
|
+
*/
|
|
45
|
+
export const addressSchema = z.union([ethereumAddressSchema, sparkAddressSchema, bitcoinAddressSchema]);
|
|
46
|
+
/**
|
|
47
|
+
* Network configuration schema
|
|
48
|
+
*/
|
|
49
|
+
export const networkConfigSchema = z.object({
|
|
50
|
+
chainId: z.number().int().positive(),
|
|
51
|
+
blockchain: z.string().min(1),
|
|
52
|
+
provider: z.string().min(1).optional(),
|
|
53
|
+
bundlerUrl: z.string().min(1).optional(),
|
|
54
|
+
paymasterUrl: z.string().min(1).optional(),
|
|
55
|
+
paymasterAddress: ethereumAddressSchema.optional(),
|
|
56
|
+
entryPointAddress: ethereumAddressSchema.optional(),
|
|
57
|
+
transferMaxFee: z.number().nonnegative().optional(),
|
|
58
|
+
});
|
|
59
|
+
/**
|
|
60
|
+
* Network configurations schema
|
|
61
|
+
*/
|
|
62
|
+
export const networkConfigsSchema = z.record(z.string().regex(/^[a-zA-Z0-9_-]+$/, {
|
|
63
|
+
message: 'Network name must contain only alphanumeric characters, hyphens, and underscores',
|
|
64
|
+
}), networkConfigSchema).refine((configs) => Object.keys(configs).length > 0, {
|
|
65
|
+
message: 'NetworkConfigs must contain at least one network',
|
|
66
|
+
});
|
|
67
|
+
/**
|
|
68
|
+
* Token configuration schema
|
|
69
|
+
*/
|
|
70
|
+
export const tokenConfigSchema = z.object({
|
|
71
|
+
symbol: z.string().min(1),
|
|
72
|
+
name: z.string().min(1),
|
|
73
|
+
decimals: z.number().int().min(0).max(18),
|
|
74
|
+
address: z.union([tokenContractAddressSchema, z.null()]),
|
|
75
|
+
});
|
|
76
|
+
/**
|
|
77
|
+
* Network tokens schema
|
|
78
|
+
*/
|
|
79
|
+
export const networkTokensSchema = z.object({
|
|
80
|
+
native: tokenConfigSchema,
|
|
81
|
+
tokens: z.array(tokenConfigSchema),
|
|
82
|
+
});
|
|
83
|
+
/**
|
|
84
|
+
* Token configurations schema
|
|
85
|
+
*/
|
|
86
|
+
export const tokenConfigsSchema = z.record(z.string().min(1), networkTokensSchema).refine((configs) => Object.keys(configs).length > 0, {
|
|
87
|
+
message: 'TokenConfigs must contain at least one network',
|
|
88
|
+
});
|
|
89
|
+
/**
|
|
90
|
+
* Account index schema
|
|
91
|
+
*/
|
|
92
|
+
export const accountIndexSchema = z.number().int().nonnegative();
|
|
93
|
+
/**
|
|
94
|
+
* Network name schema
|
|
95
|
+
*/
|
|
96
|
+
export const networkNameSchema = z.string().regex(/^[a-zA-Z0-9_-]+$/, {
|
|
97
|
+
message: 'Network name must contain only alphanumeric characters, hyphens, and underscores',
|
|
98
|
+
}).min(1);
|
|
99
|
+
/**
|
|
100
|
+
* Balance string schema (valid number string)
|
|
101
|
+
*/
|
|
102
|
+
export const balanceStringSchema = z.string().regex(/^-?\d+(\.\d+)?$/, {
|
|
103
|
+
message: 'Balance must be a valid number string',
|
|
104
|
+
});
|
|
105
|
+
/**
|
|
106
|
+
* Wallet addresses schema
|
|
107
|
+
* Maps network -> accountIndex -> address
|
|
108
|
+
*/
|
|
109
|
+
export const walletAddressesSchema = z.record(networkNameSchema, z.record(z.string().transform((val) => {
|
|
110
|
+
const num = parseInt(val, 10);
|
|
111
|
+
if (isNaN(num) || num < 0) {
|
|
112
|
+
throw new Error('Account index must be a non-negative integer');
|
|
113
|
+
}
|
|
114
|
+
return num;
|
|
115
|
+
}), addressSchema));
|
|
116
|
+
/**
|
|
117
|
+
* Wallet balances schema
|
|
118
|
+
* Maps network -> accountIndex -> tokenAddress -> balance
|
|
119
|
+
*/
|
|
120
|
+
export const walletBalancesSchema = z.record(networkNameSchema, z.record(z.string().transform((val) => {
|
|
121
|
+
const num = parseInt(val, 10);
|
|
122
|
+
if (isNaN(num) || num < 0) {
|
|
123
|
+
throw new Error('Account index must be a non-negative integer');
|
|
124
|
+
}
|
|
125
|
+
return num;
|
|
126
|
+
}), z.record(z.string(), balanceStringSchema)));
|
|
127
|
+
/**
|
|
128
|
+
* Balance loading states schema
|
|
129
|
+
* Maps "network-accountIndex-tokenAddress" -> boolean
|
|
130
|
+
*/
|
|
131
|
+
export const balanceLoadingStatesSchema = z.record(z.string(), z.boolean());
|
|
132
|
+
/**
|
|
133
|
+
* Balance fetch result schema
|
|
134
|
+
*/
|
|
135
|
+
export const balanceFetchResultSchema = z.object({
|
|
136
|
+
success: z.boolean(),
|
|
137
|
+
network: networkNameSchema,
|
|
138
|
+
accountIndex: accountIndexSchema,
|
|
139
|
+
tokenAddress: z.union([tokenContractAddressSchema, z.null()]),
|
|
140
|
+
balance: z.union([balanceStringSchema, z.null()]),
|
|
141
|
+
error: z.string().optional(),
|
|
142
|
+
});
|
|
143
|
+
/**
|
|
144
|
+
* Wallet schema
|
|
145
|
+
*/
|
|
146
|
+
export const walletSchema = z.object({
|
|
147
|
+
accountIndex: accountIndexSchema,
|
|
148
|
+
identifier: z.string().min(1),
|
|
149
|
+
name: z.string().min(1),
|
|
150
|
+
createdAt: z.number().int().nonnegative(),
|
|
151
|
+
updatedAt: z.number().int().nonnegative(),
|
|
152
|
+
});
|
|
153
|
+
/**
|
|
154
|
+
* Worklet response schemas for runtime validation
|
|
155
|
+
*/
|
|
156
|
+
export const workletResponseSchema = z.object({
|
|
157
|
+
result: z.string(),
|
|
158
|
+
error: z.string().optional(),
|
|
159
|
+
});
|
|
160
|
+
/**
|
|
161
|
+
* Balance response schema (numeric string)
|
|
162
|
+
*/
|
|
163
|
+
export const balanceResponseSchema = z.string().regex(/^\d+$/, {
|
|
164
|
+
message: 'Balance must be a numeric string',
|
|
165
|
+
});
|
|
166
|
+
/**
|
|
167
|
+
* Account method response schema (union of possible return types)
|
|
168
|
+
*/
|
|
169
|
+
export const accountMethodResponseSchema = z.union([
|
|
170
|
+
balanceResponseSchema,
|
|
171
|
+
z.string(), // For addresses
|
|
172
|
+
z.object({}).passthrough(), // For other responses (objects)
|
|
173
|
+
]);
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation utilities for WDK provider props and inputs
|
|
3
|
+
*
|
|
4
|
+
* These functions throw errors for invalid inputs.
|
|
5
|
+
* Uses Zod schemas for validation with better error messages.
|
|
6
|
+
* For type guards (boolean returns), see typeGuards.ts
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { networkConfigsSchema, tokenConfigsSchema, accountIndexSchema, networkNameSchema, balanceStringSchema, tokenContractAddressSchema, } from './schemas';
|
|
10
|
+
/**
|
|
11
|
+
* Extract error message from Zod error
|
|
12
|
+
*/
|
|
13
|
+
function getZodErrorMessage(error) {
|
|
14
|
+
if (error instanceof z.ZodError) {
|
|
15
|
+
// Get the first error message for simplicity
|
|
16
|
+
const firstIssue = error.issues[0];
|
|
17
|
+
if (firstIssue) {
|
|
18
|
+
return firstIssue.message;
|
|
19
|
+
}
|
|
20
|
+
return 'Validation failed';
|
|
21
|
+
}
|
|
22
|
+
if (error instanceof Error) {
|
|
23
|
+
return error.message;
|
|
24
|
+
}
|
|
25
|
+
return String(error);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Validate network configuration
|
|
29
|
+
*/
|
|
30
|
+
export function validateNetworkConfigs(networkConfigs) {
|
|
31
|
+
try {
|
|
32
|
+
networkConfigsSchema.parse(networkConfigs);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
throw new Error(`Invalid networkConfigs: ${getZodErrorMessage(error)}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Validate token configuration
|
|
40
|
+
*/
|
|
41
|
+
export function validateTokenConfigs(tokenConfigs) {
|
|
42
|
+
try {
|
|
43
|
+
tokenConfigsSchema.parse(tokenConfigs);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
throw new Error(`Invalid tokenConfigs: ${getZodErrorMessage(error)}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Validate balance refresh interval
|
|
51
|
+
*/
|
|
52
|
+
export function validateBalanceRefreshInterval(interval) {
|
|
53
|
+
if (interval !== undefined) {
|
|
54
|
+
if (typeof interval !== 'number') {
|
|
55
|
+
throw new Error('balanceRefreshInterval must be a number');
|
|
56
|
+
}
|
|
57
|
+
if (interval < 0) {
|
|
58
|
+
throw new Error('balanceRefreshInterval must be a non-negative number');
|
|
59
|
+
}
|
|
60
|
+
if (!Number.isFinite(interval)) {
|
|
61
|
+
throw new Error('balanceRefreshInterval must be a finite number');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Validate that an object has required methods
|
|
67
|
+
*
|
|
68
|
+
* @param obj - Object to validate
|
|
69
|
+
* @param requiredMethods - Array of required method names
|
|
70
|
+
* @param objectName - Name of the object for error messages
|
|
71
|
+
*/
|
|
72
|
+
export function validateRequiredMethods(obj, requiredMethods, objectName) {
|
|
73
|
+
if (!obj || typeof obj !== 'object') {
|
|
74
|
+
throw new Error(`${objectName} must be an object`);
|
|
75
|
+
}
|
|
76
|
+
for (const methodName of requiredMethods) {
|
|
77
|
+
if (typeof obj[methodName] !== 'function') {
|
|
78
|
+
throw new Error(`${objectName} must have a ${methodName} method`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Validate account index
|
|
84
|
+
*/
|
|
85
|
+
export function validateAccountIndex(accountIndex) {
|
|
86
|
+
try {
|
|
87
|
+
accountIndexSchema.parse(accountIndex);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
const message = getZodErrorMessage(error);
|
|
91
|
+
throw new Error(`Invalid accountIndex: ${message}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Validate network name
|
|
96
|
+
*/
|
|
97
|
+
export function validateNetworkName(network) {
|
|
98
|
+
try {
|
|
99
|
+
networkNameSchema.parse(network);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
const message = getZodErrorMessage(error);
|
|
103
|
+
// Provide a fallback message if Zod error doesn't have a clear message
|
|
104
|
+
if (message === 'Validation failed' || !message) {
|
|
105
|
+
throw new Error('network must be a non-empty string containing only alphanumeric characters, hyphens, and underscores');
|
|
106
|
+
}
|
|
107
|
+
throw new Error(`Invalid network name: ${message}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Validate token address (can be null for native tokens)
|
|
112
|
+
*/
|
|
113
|
+
export function validateTokenAddress(tokenAddress) {
|
|
114
|
+
if (tokenAddress === null) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
tokenContractAddressSchema.parse(tokenAddress);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
const message = getZodErrorMessage(error);
|
|
122
|
+
throw new Error(`Invalid tokenAddress: ${message}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Validate balance string
|
|
127
|
+
*/
|
|
128
|
+
export function validateBalance(balance) {
|
|
129
|
+
try {
|
|
130
|
+
balanceStringSchema.parse(balance);
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
const message = getZodErrorMessage(error);
|
|
134
|
+
throw new Error(`Invalid balance: ${message}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Validate wallet parameters (network, accountIndex, optional tokenAddress)
|
|
139
|
+
* Convenience function to validate common wallet operation parameters
|
|
140
|
+
*
|
|
141
|
+
* @param network - Network name
|
|
142
|
+
* @param accountIndex - Account index
|
|
143
|
+
* @param tokenAddress - Optional token address (null for native tokens)
|
|
144
|
+
*/
|
|
145
|
+
export function validateWalletParams(network, accountIndex, tokenAddress) {
|
|
146
|
+
validateNetworkName(network);
|
|
147
|
+
validateAccountIndex(accountIndex);
|
|
148
|
+
if (tokenAddress !== undefined) {
|
|
149
|
+
validateTokenAddress(tokenAddress);
|
|
150
|
+
}
|
|
151
|
+
}
|
package/dist/utils/validation.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* For type guards (boolean returns), see typeGuards.ts
|
|
7
7
|
*/
|
|
8
8
|
import { z } from 'zod';
|
|
9
|
-
import { networkConfigsSchema, tokenConfigsSchema, accountIndexSchema, networkNameSchema, balanceStringSchema,
|
|
9
|
+
import { networkConfigsSchema, tokenConfigsSchema, accountIndexSchema, networkNameSchema, balanceStringSchema, tokenContractAddressSchema, } from './schemas';
|
|
10
10
|
/**
|
|
11
11
|
* Extract error message from Zod error
|
|
12
12
|
*/
|
|
@@ -115,7 +115,7 @@ export function validateTokenAddress(tokenAddress) {
|
|
|
115
115
|
return;
|
|
116
116
|
}
|
|
117
117
|
try {
|
|
118
|
-
|
|
118
|
+
tokenContractAddressSchema.parse(tokenAddress);
|
|
119
119
|
}
|
|
120
120
|
catch (error) {
|
|
121
121
|
const message = getZodErrorMessage(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spacesops/wdk-react-native-core",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.67",
|
|
4
4
|
"description": "Core functionality for React Native wallets - wallet management, balance fetching, and worklet operations",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
isValidAccountIndex,
|
|
14
14
|
isValidNetworkName,
|
|
15
15
|
isValidBalanceString,
|
|
16
|
+
isValidAddress,
|
|
16
17
|
} from '../../utils/typeGuards'
|
|
17
18
|
import type { NetworkConfig, NetworkConfigs, TokenConfig, TokenConfigs } from '../../types'
|
|
18
19
|
|
|
@@ -160,6 +161,14 @@ describe('typeGuards', () => {
|
|
|
160
161
|
})
|
|
161
162
|
})
|
|
162
163
|
|
|
164
|
+
describe('isValidAddress', () => {
|
|
165
|
+
it('should accept TON, Tron, and Solana wallet addresses', () => {
|
|
166
|
+
expect(isValidAddress('UQCt4XDZ_rgMu14lE5ENox6yqHxx3c9df-gHLynhEEKbTRV0')).toBe(true)
|
|
167
|
+
expect(isValidAddress('TVKDsaESudgCQReXPNvStw2n2BXnmodyeC')).toBe(true)
|
|
168
|
+
expect(isValidAddress('Ed9f9Koh6rqMvFXccVJp5bNuxFs8rYdbVibW9JXRskLU')).toBe(true)
|
|
169
|
+
})
|
|
170
|
+
})
|
|
171
|
+
|
|
163
172
|
describe('isValidAccountIndex', () => {
|
|
164
173
|
it('should return true for valid account indices', () => {
|
|
165
174
|
expect(isValidAccountIndex(0)).toBe(true)
|
|
@@ -49,6 +49,45 @@ describe('validation', () => {
|
|
|
49
49
|
expect(() => validateTokenConfigs(validConfigs)).not.toThrow()
|
|
50
50
|
})
|
|
51
51
|
|
|
52
|
+
it('should accept non-EVM token contract addresses', () => {
|
|
53
|
+
const configs: TokenConfigs = {
|
|
54
|
+
ton: {
|
|
55
|
+
native: { symbol: 'TON', name: 'Toncoin', decimals: 9, address: null },
|
|
56
|
+
tokens: [
|
|
57
|
+
{
|
|
58
|
+
address: 'EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs',
|
|
59
|
+
symbol: 'USDT',
|
|
60
|
+
name: 'Tether USD',
|
|
61
|
+
decimals: 6,
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
tron: {
|
|
66
|
+
native: { symbol: 'TRX', name: 'TRON', decimals: 6, address: null },
|
|
67
|
+
tokens: [
|
|
68
|
+
{
|
|
69
|
+
address: 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t',
|
|
70
|
+
symbol: 'USDT',
|
|
71
|
+
name: 'Tether USD',
|
|
72
|
+
decimals: 6,
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
solana: {
|
|
77
|
+
native: { symbol: 'SOL', name: 'Solana', decimals: 9, address: null },
|
|
78
|
+
tokens: [
|
|
79
|
+
{
|
|
80
|
+
address: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',
|
|
81
|
+
symbol: 'USDT',
|
|
82
|
+
name: 'Tether USD',
|
|
83
|
+
decimals: 6,
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
},
|
|
87
|
+
}
|
|
88
|
+
expect(() => validateTokenConfigs(configs)).not.toThrow()
|
|
89
|
+
})
|
|
90
|
+
|
|
52
91
|
it('should throw for invalid token configs', () => {
|
|
53
92
|
expect(() => validateTokenConfigs({} as TokenConfigs)).toThrow()
|
|
54
93
|
expect(() => validateTokenConfigs(null as unknown as TokenConfigs)).toThrow()
|
|
@@ -124,6 +163,9 @@ describe('validation', () => {
|
|
|
124
163
|
expect(() => validateTokenAddress(null)).not.toThrow()
|
|
125
164
|
expect(() => validateTokenAddress('0x1234567890123456789012345678901234567890')).not.toThrow()
|
|
126
165
|
expect(() => validateTokenAddress('0xABCDEFabcdef1234567890123456789012345678')).not.toThrow()
|
|
166
|
+
expect(() => validateTokenAddress('TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t')).not.toThrow()
|
|
167
|
+
expect(() => validateTokenAddress('Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB')).not.toThrow()
|
|
168
|
+
expect(() => validateTokenAddress('EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs')).not.toThrow()
|
|
127
169
|
})
|
|
128
170
|
|
|
129
171
|
it('should throw for invalid token addresses', () => {
|
package/src/index.ts
CHANGED
package/src/utils/schemas.ts
CHANGED
|
@@ -14,6 +14,23 @@ export const ethereumAddressSchema = z.string().regex(/^0x[a-fA-F0-9]{40}$/, {
|
|
|
14
14
|
message: 'Must be a valid Ethereum address (0x followed by 40 hex characters)',
|
|
15
15
|
})
|
|
16
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Token contract address schema — EVM, TON, Tron, Solana, and other worklet-supported formats.
|
|
19
|
+
* Wallet receive addresses use {@link addressSchema}; token mint/contract IDs are chain-specific.
|
|
20
|
+
*/
|
|
21
|
+
export const tokenContractAddressSchema = z.union([
|
|
22
|
+
ethereumAddressSchema,
|
|
23
|
+
z.string().regex(/^T[1-9A-HJ-NP-Za-km-z]{33}$/, {
|
|
24
|
+
message: 'Must be a valid Tron token contract address',
|
|
25
|
+
}),
|
|
26
|
+
z.string().regex(/^[1-9A-HJ-NP-Za-km-z]{32,44}$/, {
|
|
27
|
+
message: 'Must be a valid Solana token mint address',
|
|
28
|
+
}),
|
|
29
|
+
z.string().regex(/^(EQ|UQ)[A-Za-z0-9_-]{46}$/, {
|
|
30
|
+
message: 'Must be a valid TON jetton master address',
|
|
31
|
+
}),
|
|
32
|
+
])
|
|
33
|
+
|
|
17
34
|
/**
|
|
18
35
|
* Spark address schema (Bech32 format: spark1/sparkt1/sparkrt1 followed by base32 characters)
|
|
19
36
|
*/
|
|
@@ -32,9 +49,37 @@ export const bitcoinAddressSchema = z.string().regex(
|
|
|
32
49
|
)
|
|
33
50
|
|
|
34
51
|
/**
|
|
35
|
-
*
|
|
52
|
+
* TON user-friendly wallet address (EQ/UQ + base64url).
|
|
53
|
+
*/
|
|
54
|
+
export const tonAddressSchema = z.string().regex(/^(EQ|UQ)[A-Za-z0-9_-]{46}$/, {
|
|
55
|
+
message: 'Must be a valid TON address (EQ/UQ user-friendly format)',
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Tron Base58Check wallet address.
|
|
60
|
+
*/
|
|
61
|
+
export const tronAddressSchema = z.string().regex(/^T[1-9A-HJ-NP-Za-km-z]{33}$/, {
|
|
62
|
+
message: 'Must be a valid Tron address',
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Solana Base58 wallet address.
|
|
36
67
|
*/
|
|
37
|
-
export const
|
|
68
|
+
export const solanaAddressSchema = z.string().regex(/^[1-9A-HJ-NP-Za-km-z]{32,44}$/, {
|
|
69
|
+
message: 'Must be a valid Solana address',
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Address schema (Ethereum, Spark, Bitcoin, TON, Tron, or Solana)
|
|
74
|
+
*/
|
|
75
|
+
export const addressSchema = z.union([
|
|
76
|
+
ethereumAddressSchema,
|
|
77
|
+
sparkAddressSchema,
|
|
78
|
+
bitcoinAddressSchema,
|
|
79
|
+
tonAddressSchema,
|
|
80
|
+
tronAddressSchema,
|
|
81
|
+
solanaAddressSchema,
|
|
82
|
+
])
|
|
38
83
|
|
|
39
84
|
/**
|
|
40
85
|
* Network configuration schema
|
|
@@ -69,7 +114,7 @@ export const tokenConfigSchema = z.object({
|
|
|
69
114
|
symbol: z.string().min(1),
|
|
70
115
|
name: z.string().min(1),
|
|
71
116
|
decimals: z.number().int().min(0).max(18),
|
|
72
|
-
address: z.union([
|
|
117
|
+
address: z.union([tokenContractAddressSchema, z.null()]),
|
|
73
118
|
})
|
|
74
119
|
|
|
75
120
|
/**
|
|
@@ -158,7 +203,7 @@ export const balanceFetchResultSchema = z.object({
|
|
|
158
203
|
success: z.boolean(),
|
|
159
204
|
network: networkNameSchema,
|
|
160
205
|
accountIndex: accountIndexSchema,
|
|
161
|
-
tokenAddress: z.union([
|
|
206
|
+
tokenAddress: z.union([tokenContractAddressSchema, z.null()]),
|
|
162
207
|
balance: z.union([balanceStringSchema, z.null()]),
|
|
163
208
|
error: z.string().optional(),
|
|
164
209
|
})
|
package/src/utils/typeGuards.ts
CHANGED
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
accountIndexSchema,
|
|
22
22
|
networkNameSchema,
|
|
23
23
|
balanceStringSchema,
|
|
24
|
+
addressSchema,
|
|
24
25
|
} from './schemas'
|
|
25
26
|
import type {
|
|
26
27
|
NetworkConfig,
|
|
@@ -104,10 +105,10 @@ export function isBitcoinAddress(value: unknown): value is string {
|
|
|
104
105
|
}
|
|
105
106
|
|
|
106
107
|
/**
|
|
107
|
-
* Type guard to check if a value is a valid address (Ethereum, Spark, or
|
|
108
|
+
* Type guard to check if a value is a valid address (Ethereum, Spark, Bitcoin, TON, Tron, or Solana)
|
|
108
109
|
*/
|
|
109
110
|
export function isValidAddress(value: unknown): value is string {
|
|
110
|
-
return
|
|
111
|
+
return addressSchema.safeParse(value).success
|
|
111
112
|
}
|
|
112
113
|
|
|
113
114
|
/**
|
package/src/utils/validation.ts
CHANGED
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
accountIndexSchema,
|
|
14
14
|
networkNameSchema,
|
|
15
15
|
balanceStringSchema,
|
|
16
|
-
|
|
16
|
+
tokenContractAddressSchema,
|
|
17
17
|
} from './schemas'
|
|
18
18
|
import type { NetworkConfigs, TokenConfigs } from '../types'
|
|
19
19
|
|
|
@@ -133,7 +133,7 @@ export function validateTokenAddress(tokenAddress: string | null): void {
|
|
|
133
133
|
return
|
|
134
134
|
}
|
|
135
135
|
try {
|
|
136
|
-
|
|
136
|
+
tokenContractAddressSchema.parse(tokenAddress)
|
|
137
137
|
} catch (error) {
|
|
138
138
|
const message = getZodErrorMessage(error)
|
|
139
139
|
throw new Error(`Invalid tokenAddress: ${message}`)
|