@1money/protocol-ts-sdk 1.0.15 → 1.1.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.
Files changed (39) hide show
  1. package/.claude/settings.local.json +14 -2
  2. package/.env.integration.example +19 -0
  3. package/AGENTS.md +28 -0
  4. package/LICENSE +21 -0
  5. package/README.md +21 -55
  6. package/es/__integration__/config.d.ts +24 -0
  7. package/es/__integration__/helpers.d.ts +75 -0
  8. package/es/__integration__/setup.d.ts +26 -0
  9. package/es/api/accounts/index.d.ts +7 -1
  10. package/es/api/accounts/types.d.ts +4 -2
  11. package/es/api/checkpoints/index.d.ts +7 -1
  12. package/es/api/checkpoints/types.d.ts +4 -16
  13. package/es/api/index.js +45 -4
  14. package/es/api/tokens/index.d.ts +13 -1
  15. package/es/api/tokens/types.d.ts +27 -9
  16. package/es/api/transactions/index.d.ts +7 -2
  17. package/es/api/transactions/types.d.ts +149 -2
  18. package/es/client/core.d.ts +1 -1
  19. package/es/client/index.js +3 -3
  20. package/es/index.js +58 -8
  21. package/es/utils/index.js +13 -4
  22. package/lib/__integration__/config.d.ts +24 -0
  23. package/lib/__integration__/helpers.d.ts +75 -0
  24. package/lib/__integration__/setup.d.ts +26 -0
  25. package/lib/api/accounts/index.d.ts +7 -1
  26. package/lib/api/accounts/types.d.ts +4 -2
  27. package/lib/api/checkpoints/index.d.ts +7 -1
  28. package/lib/api/checkpoints/types.d.ts +4 -16
  29. package/lib/api/index.js +47 -6
  30. package/lib/api/tokens/index.d.ts +13 -1
  31. package/lib/api/tokens/types.d.ts +27 -9
  32. package/lib/api/transactions/index.d.ts +7 -2
  33. package/lib/api/transactions/types.d.ts +149 -2
  34. package/lib/client/core.d.ts +1 -1
  35. package/lib/client/index.js +5 -5
  36. package/lib/index.js +60 -10
  37. package/lib/utils/index.js +13 -4
  38. package/package.json +12 -3
  39. package/umd/1money-protocol-ts-sdk.min.js +2 -2
@@ -23,6 +23,7 @@ export interface MintInfo {
23
23
  black_list: AddressSchema[];
24
24
  white_list: AddressSchema[];
25
25
  metadata_update_authorities: AddressSchema[];
26
+ bridge_mint_authorities: AddressSchema[];
26
27
  supply: U256Schema;
27
28
  decimals: number;
28
29
  is_paused: boolean;
@@ -34,11 +35,12 @@ export interface KeyValuePair {
34
35
  value: string;
35
36
  }
36
37
  export declare enum AuthorityType {
37
- MasterMint = "MasterMint",
38
+ MasterMint = "MasterMintBurn",
38
39
  MintBurnTokens = "MintBurnTokens",
39
40
  Pause = "Pause",
40
41
  ManageList = "ManageList",
41
- UpdateMetadata = "UpdateMetadata"
42
+ UpdateMetadata = "UpdateMetadata",
43
+ Bridge = "Bridge"
42
44
  }
43
45
  export declare enum AuthorityAction {
44
46
  Grant = "Grant",
@@ -55,7 +57,6 @@ export declare enum PauseAction {
55
57
  export interface RestSignature extends Signature {
56
58
  }
57
59
  export interface TokenManageListPayload {
58
- recent_checkpoint: number;
59
60
  chain_id: number;
60
61
  nonce: number;
61
62
  action: ManageListAction;
@@ -64,7 +65,6 @@ export interface TokenManageListPayload {
64
65
  signature: RestSignature;
65
66
  }
66
67
  export interface TokenBurnPayload {
67
- recent_checkpoint: number;
68
68
  chain_id: number;
69
69
  nonce: number;
70
70
  recipient: string;
@@ -73,7 +73,6 @@ export interface TokenBurnPayload {
73
73
  signature: RestSignature;
74
74
  }
75
75
  export interface TokenAuthorityPayload {
76
- recent_checkpoint: number;
77
76
  chain_id: number;
78
77
  nonce: number;
79
78
  action: AuthorityAction;
@@ -84,7 +83,6 @@ export interface TokenAuthorityPayload {
84
83
  signature: RestSignature;
85
84
  }
86
85
  export interface TokenIssuePayload {
87
- recent_checkpoint: number;
88
86
  chain_id: number;
89
87
  nonce: number;
90
88
  symbol: string;
@@ -95,7 +93,6 @@ export interface TokenIssuePayload {
95
93
  signature: RestSignature;
96
94
  }
97
95
  export interface TokenMintPayload {
98
- recent_checkpoint: number;
99
96
  chain_id: number;
100
97
  nonce: number;
101
98
  recipient: string;
@@ -104,7 +101,6 @@ export interface TokenMintPayload {
104
101
  signature: RestSignature;
105
102
  }
106
103
  export interface TokenPausePayload {
107
- recent_checkpoint: number;
108
104
  chain_id: number;
109
105
  nonce: number;
110
106
  action: PauseAction;
@@ -112,7 +108,6 @@ export interface TokenPausePayload {
112
108
  signature: RestSignature;
113
109
  }
114
110
  export interface TokenMetadataPayload {
115
- recent_checkpoint: number;
116
111
  chain_id: number;
117
112
  nonce: number;
118
113
  name: string;
@@ -121,3 +116,26 @@ export interface TokenMetadataPayload {
121
116
  additional_metadata: KeyValuePair[];
122
117
  signature: RestSignature;
123
118
  }
119
+ export interface TokenBridgeAndMintPayload {
120
+ chain_id: number;
121
+ nonce: number;
122
+ recipient: string;
123
+ value: string;
124
+ token: string;
125
+ source_chain_id: number;
126
+ source_tx_hash: string;
127
+ bridge_metadata: string;
128
+ signature: RestSignature;
129
+ }
130
+ export interface TokenBurnAndBridgePayload {
131
+ bridge_metadata: string;
132
+ chain_id: number;
133
+ destination_address: string;
134
+ destination_chain_id: number;
135
+ escrow_fee: string;
136
+ nonce: number;
137
+ sender: string;
138
+ token: string;
139
+ value: string;
140
+ signature: RestSignature;
141
+ }
@@ -1,6 +1,5 @@
1
1
  import type { Hash } from '../../api/types';
2
- import type { Transaction } from '../../api/checkpoints/types';
3
- import type { TransactionReceipt, EstimateFee, PaymentPayload } from './types';
2
+ import type { EstimateFee, PaymentPayload, Transaction, TransactionReceipt, FinalizedTransactionReceipt } from './types';
4
3
  /**
5
4
  * Transactions API methods
6
5
  */
@@ -17,6 +16,12 @@ export declare const transactionsApi: {
17
16
  * @returns Promise with transaction receipt response
18
17
  */
19
18
  getReceiptByHash: (hash: string) => import("../../client/index.js").PromiseWrapper<"custom", TransactionReceipt, TransactionReceipt, TransactionReceipt, import("../../client/index.js").ParsedError<string>, import("../../client/index.js").ParsedError<string> | TransactionReceipt, import("../../client/index.js").ParsedError<"timeout">, ""> & Promise<TransactionReceipt>;
19
+ /**
20
+ * Get finalized transaction by hash
21
+ * @param hash Hash of the transaction to lookup
22
+ * @returns Promise with finalized transaction receipt response
23
+ */
24
+ getFinalizedByHash: (hash: string) => import("../../client/index.js").PromiseWrapper<"custom", FinalizedTransactionReceipt, FinalizedTransactionReceipt, FinalizedTransactionReceipt, import("../../client/index.js").ParsedError<string>, import("../../client/index.js").ParsedError<string> | FinalizedTransactionReceipt, import("../../client/index.js").ParsedError<"timeout">, ""> & Promise<FinalizedTransactionReceipt>;
20
25
  /**
21
26
  * Estimate transaction fee
22
27
  * @param from Address of the transaction author
@@ -1,5 +1,5 @@
1
+ import { AuthorityType, RestSignature } from '../tokens/types';
1
2
  import { AddressSchema, B256Schema } from '../types';
2
- import { RestSignature } from '../tokens/types';
3
3
  export interface TransactionReceipt {
4
4
  success: boolean;
5
5
  transaction_hash: B256Schema;
@@ -10,11 +10,14 @@ export interface TransactionReceipt {
10
10
  to?: AddressSchema;
11
11
  token_address?: AddressSchema;
12
12
  }
13
+ export interface FinalizedTransactionReceipt extends TransactionReceipt {
14
+ epoch: number;
15
+ counter_signatures: RestSignature[];
16
+ }
13
17
  export interface EstimateFee {
14
18
  fee: string;
15
19
  }
16
20
  export interface PaymentPayload {
17
- recent_checkpoint: number;
18
21
  chain_id: number;
19
22
  nonce: number;
20
23
  recipient: AddressSchema;
@@ -22,3 +25,147 @@ export interface PaymentPayload {
22
25
  token: AddressSchema;
23
26
  signature: RestSignature;
24
27
  }
28
+ export interface TokenCreateData {
29
+ decimals: number;
30
+ is_private: boolean;
31
+ master_authority: AddressSchema;
32
+ name: string;
33
+ symbol: string;
34
+ }
35
+ export interface TokenTransferData {
36
+ recipient: AddressSchema;
37
+ token: AddressSchema;
38
+ value: string;
39
+ }
40
+ export interface TokenMintData {
41
+ recipient: AddressSchema;
42
+ token: AddressSchema;
43
+ value: string;
44
+ }
45
+ export interface TokenGrantAuthorityData {
46
+ authority_address: AddressSchema;
47
+ authority_type: AuthorityType;
48
+ token: AddressSchema;
49
+ value: string;
50
+ }
51
+ export interface TokenRevokeAuthorityData {
52
+ authority_address: AddressSchema;
53
+ authority_type: AuthorityType;
54
+ token: AddressSchema;
55
+ value: string;
56
+ }
57
+ export interface TokenBlacklistAccountData {
58
+ address: AddressSchema;
59
+ token: AddressSchema;
60
+ }
61
+ export interface TokenWhitelistAccountData {
62
+ address: AddressSchema;
63
+ token: AddressSchema;
64
+ }
65
+ export interface TokenBridgeAndMintData {
66
+ bridge_metadata: string | null;
67
+ recipient: AddressSchema;
68
+ source_chain_id: number;
69
+ source_tx_hash: string;
70
+ token: AddressSchema;
71
+ value: string;
72
+ }
73
+ export interface TokenBurnData {
74
+ recipient: AddressSchema;
75
+ token: AddressSchema;
76
+ value: string;
77
+ }
78
+ export interface TokenBurnAndBridgeData {
79
+ bridge_metadata: string | null;
80
+ destination_address: AddressSchema;
81
+ destination_chain_id: number;
82
+ escrow_fee: string;
83
+ sender: AddressSchema;
84
+ token: AddressSchema;
85
+ value: string;
86
+ }
87
+ export interface TokenCloseAccountData {
88
+ token: AddressSchema;
89
+ }
90
+ export interface TokenPauseData {
91
+ token: AddressSchema;
92
+ }
93
+ export interface TokenUpdateMetadataData {
94
+ metadata: {
95
+ name: string;
96
+ uri: string;
97
+ additional_metadata: Array<{
98
+ key: string;
99
+ value: string;
100
+ }>;
101
+ };
102
+ token: AddressSchema;
103
+ }
104
+ export interface RawData {
105
+ input: string;
106
+ token: AddressSchema;
107
+ }
108
+ export interface TokenUnpauseData {
109
+ token: AddressSchema;
110
+ }
111
+ interface BaseTransaction {
112
+ hash: B256Schema;
113
+ checkpoint_hash?: B256Schema;
114
+ checkpoint_number?: number;
115
+ transaction_index?: number;
116
+ chain_id: number;
117
+ from: AddressSchema;
118
+ nonce: number;
119
+ signature: {
120
+ r: string;
121
+ s: string;
122
+ v: number;
123
+ };
124
+ }
125
+ export type Transaction = (BaseTransaction & {
126
+ transaction_type: 'TokenCreate';
127
+ data: TokenCreateData;
128
+ }) | (BaseTransaction & {
129
+ transaction_type: 'TokenTransfer';
130
+ data: TokenTransferData;
131
+ }) | (BaseTransaction & {
132
+ transaction_type: 'TokenMint';
133
+ data: TokenMintData;
134
+ }) | (BaseTransaction & {
135
+ transaction_type: 'TokenGrantAuthority';
136
+ data: TokenGrantAuthorityData;
137
+ }) | (BaseTransaction & {
138
+ transaction_type: 'TokenRevokeAuthority';
139
+ data: TokenRevokeAuthorityData;
140
+ }) | (BaseTransaction & {
141
+ transaction_type: 'TokenBlacklistAccount';
142
+ data: TokenBlacklistAccountData;
143
+ }) | (BaseTransaction & {
144
+ transaction_type: 'TokenWhitelistAccount';
145
+ data: TokenWhitelistAccountData;
146
+ }) | (BaseTransaction & {
147
+ transaction_type: 'TokenBridgeAndMint';
148
+ data: TokenBridgeAndMintData;
149
+ }) | (BaseTransaction & {
150
+ transaction_type: 'TokenBurn';
151
+ data: TokenBurnData;
152
+ }) | (BaseTransaction & {
153
+ transaction_type: 'TokenBurnAndBridge';
154
+ data: TokenBurnAndBridgeData;
155
+ }) | (BaseTransaction & {
156
+ transaction_type: 'TokenCloseAccount';
157
+ data: TokenCloseAccountData;
158
+ }) | (BaseTransaction & {
159
+ transaction_type: 'TokenPause';
160
+ data: TokenPauseData;
161
+ }) | (BaseTransaction & {
162
+ transaction_type: 'TokenUnpause';
163
+ data: TokenUnpauseData;
164
+ }) | (BaseTransaction & {
165
+ transaction_type: 'TokenUpdateMetadata';
166
+ data: TokenUpdateMetadataData;
167
+ }) | (BaseTransaction & {
168
+ transaction_type: 'Raw';
169
+ data: RawData;
170
+ });
171
+ export {};
@@ -1,4 +1,4 @@
1
- import type { AxiosStatic, AxiosRequestConfig, RawAxiosResponseHeaders, AxiosResponseHeaders, RawAxiosRequestHeaders, AxiosRequestHeaders } from 'axios';
1
+ import type { AxiosRequestConfig, AxiosRequestHeaders, AxiosResponseHeaders, AxiosStatic, RawAxiosRequestHeaders, RawAxiosResponseHeaders } from 'axios';
2
2
  export type ParsedError<T extends string = string> = {
3
3
  name: T;
4
4
  message: string;
@@ -1,4 +1,4 @@
1
- import axios$1 from'axios';import'viem';import'@ethereumjs/rlp';function _typeof(ele) {
1
+ import'viem';import'@ethereumjs/rlp';import axios$1 from'axios';function _typeof(ele) {
2
2
  if (typeof ele !== 'object')
3
3
  return (typeof ele).toLowerCase();
4
4
  const typeStr = Object.prototype.toString.call(ele);
@@ -261,9 +261,9 @@ class Request {
261
261
  if (isTimeout)
262
262
  return;
263
263
  cleanup();
264
- console.error(`[1Money client]: Error(${err.status ?? 500}, ${err.code ?? 'UNKNOWN'}), Message: ${err.message}, Config: ${err.config?.method}, ${err.config?.baseURL ?? ''}${err.config?.url ?? ''}, ${JSON.stringify(err.config?.headers ?? {})}, Request: ${JSON.stringify(err.config?.data ?? {})};`);
265
- const status = err.response?.status ?? 500;
266
264
  const data = err.response?.data ?? {};
265
+ console.error(`[1Money client]: Error(${err.status ?? 500}, ${err.code ?? 'UNKNOWN'}), Message: ${err.message}, Config: ${err.config?.method}, ${err.config?.baseURL ?? ''}${err.config?.url ?? ''}, ${JSON.stringify(err.config?.headers ?? {})}, Request: ${JSON.stringify(err.config?.data ?? {})}, Response: ${JSON.stringify(data)};`);
266
+ const status = err.response?.status ?? 500;
267
267
  const headers = err.response?.headers ?? {};
268
268
  try {
269
269
  let res = data;
package/es/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import axios$1 from'axios';import {hexToBytes as hexToBytes$1,stringToBytes,keccak256,bytesToHex as bytesToHex$1,numberToHex,stringToHex,boolToHex}from'viem';import {encode}from'@ethereumjs/rlp';/**
1
+ import {hexToBytes as hexToBytes$1,stringToBytes,keccak256,bytesToHex as bytesToHex$1,numberToHex,stringToHex,boolToHex}from'viem';import {encode}from'@ethereumjs/rlp';import axios$1 from'axios';/**
2
2
  * Derives the token account address given the wallet address and mint address.
3
3
  *
4
4
  * Address is 20 byte, 160 bits. Let's say if we want to support 50 billion
@@ -719,9 +719,10 @@ function encodePayload(payload) {
719
719
  // hex-encoded data → raw bytes
720
720
  return hexToBytes$1(v);
721
721
  }
722
- else if (!isNaN(+v)) {
722
+ else if (/^\d+$/.test(v)) {
723
723
  // number-like string → hex → bytes
724
- return v === '0' ? new Uint8Array([]) : hexToBytes$1(numberToHex(+v));
724
+ // Use BigInt for large numbers to avoid overflow
725
+ return v === '0' ? new Uint8Array([]) : hexToBytes$1(numberToHex(BigInt(v)));
725
726
  }
726
727
  else {
727
728
  // plain string → UTF-8 bytes
@@ -777,8 +778,16 @@ function toHex(value) {
777
778
  case 'bigint':
778
779
  return numberToHex(value);
779
780
  case 'string':
780
- if (!isNaN(+value))
781
- return numberToHex(+value);
781
+ // Only accept valid integer strings (no decimals, no whitespace, no empty)
782
+ if (/^-?\d+$/.test(value)) {
783
+ // Use BigInt for potentially large numbers to avoid overflow
784
+ try {
785
+ return numberToHex(BigInt(value));
786
+ }
787
+ catch {
788
+ return numberToHex(+value);
789
+ }
790
+ }
782
791
  return stringToHex(value);
783
792
  case 'uint8array':
784
793
  case 'uint16array':
@@ -1096,9 +1105,9 @@ class Request {
1096
1105
  if (isTimeout)
1097
1106
  return;
1098
1107
  cleanup();
1099
- console.error(`[1Money client]: Error(${err.status ?? 500}, ${err.code ?? 'UNKNOWN'}), Message: ${err.message}, Config: ${err.config?.method}, ${err.config?.baseURL ?? ''}${err.config?.url ?? ''}, ${JSON.stringify(err.config?.headers ?? {})}, Request: ${JSON.stringify(err.config?.data ?? {})};`);
1100
- const status = err.response?.status ?? 500;
1101
1108
  const data = err.response?.data ?? {};
1109
+ console.error(`[1Money client]: Error(${err.status ?? 500}, ${err.code ?? 'UNKNOWN'}), Message: ${err.message}, Config: ${err.config?.method}, ${err.config?.baseURL ?? ''}${err.config?.url ?? ''}, ${JSON.stringify(err.config?.headers ?? {})}, Request: ${JSON.stringify(err.config?.data ?? {})}, Response: ${JSON.stringify(data)};`);
1110
+ const status = err.response?.status ?? 500;
1102
1111
  const headers = err.response?.headers ?? {};
1103
1112
  try {
1104
1113
  let res = data;
@@ -1223,6 +1232,14 @@ const accountsApi = {
1223
1232
  getNonce: (address) => {
1224
1233
  return get(`${API_PREFIX$4}/nonce?address=${address}`, { withCredentials: false });
1225
1234
  },
1235
+ /**
1236
+ * Get account bbnonce
1237
+ * @param address Address of the account to lookup nonce for
1238
+ * @returns Promise with bbnonce info response
1239
+ */
1240
+ getBbNonce: (address) => {
1241
+ return get(`${API_PREFIX$4}/bbnonce?address=${address}`, { withCredentials: false });
1242
+ },
1226
1243
  /**
1227
1244
  * Get associated token account
1228
1245
  * @param address Address of the account to lookup associated token account for
@@ -1261,6 +1278,14 @@ const checkpointsApi = {
1261
1278
  */
1262
1279
  getByNumber: (number, full = false) => {
1263
1280
  return get(`${API_PREFIX$3}/by_number?number=${number}&full=${full}`, { withCredentials: false });
1281
+ },
1282
+ /**
1283
+ * Get checkpoint receipts by number
1284
+ * @param number Number of the checkpoint to lookup
1285
+ * @returns Promise with checkpoint receipts response
1286
+ */
1287
+ getReceiptsByNumber: (number) => {
1288
+ return get(`${API_PREFIX$3}/receipts/by_number?number=${number}`, { withCredentials: false });
1264
1289
  }
1265
1290
  };const API_PREFIX$2 = `/${API_VERSION}/tokens`;
1266
1291
  /**
@@ -1338,6 +1363,22 @@ const tokensApi = {
1338
1363
  */
1339
1364
  updateMetadata: (payload) => {
1340
1365
  return post(`${API_PREFIX$2}/update_metadata`, payload, { withCredentials: false });
1366
+ },
1367
+ /**
1368
+ * Bridge and mint tokens
1369
+ * @param payload Token bridge and mint request payload
1370
+ * @returns Promise with transaction hash response
1371
+ */
1372
+ bridgeAndMint: (payload) => {
1373
+ return post(`${API_PREFIX$2}/bridge_and_mint`, payload, { withCredentials: false });
1374
+ },
1375
+ /**
1376
+ * Burn and bridge tokens
1377
+ * @param payload Token burn and bridge request payload
1378
+ * @returns Promise with transaction hash response
1379
+ */
1380
+ burnAndBridge: (payload) => {
1381
+ return post(`${API_PREFIX$2}/burn_and_bridge`, payload, { withCredentials: false });
1341
1382
  }
1342
1383
  };const API_PREFIX$1 = `/${API_VERSION}/transactions`;
1343
1384
  /**
@@ -1360,6 +1401,14 @@ const transactionsApi = {
1360
1401
  getReceiptByHash: (hash) => {
1361
1402
  return get(`${API_PREFIX$1}/receipt/by_hash?hash=${hash}`, { withCredentials: false });
1362
1403
  },
1404
+ /**
1405
+ * Get finalized transaction by hash
1406
+ * @param hash Hash of the transaction to lookup
1407
+ * @returns Promise with finalized transaction receipt response
1408
+ */
1409
+ getFinalizedByHash: (hash) => {
1410
+ return get(`${API_PREFIX$1}/finalized/by_hash?hash=${hash}`, { withCredentials: false });
1411
+ },
1363
1412
  /**
1364
1413
  * Estimate transaction fee
1365
1414
  * @param from Address of the transaction author
@@ -1397,11 +1446,12 @@ const chainApi = {
1397
1446
  };// Authority types
1398
1447
  var AuthorityType;
1399
1448
  (function (AuthorityType) {
1400
- AuthorityType["MasterMint"] = "MasterMint";
1449
+ AuthorityType["MasterMint"] = "MasterMintBurn";
1401
1450
  AuthorityType["MintBurnTokens"] = "MintBurnTokens";
1402
1451
  AuthorityType["Pause"] = "Pause";
1403
1452
  AuthorityType["ManageList"] = "ManageList";
1404
1453
  AuthorityType["UpdateMetadata"] = "UpdateMetadata";
1454
+ AuthorityType["Bridge"] = "Bridge";
1405
1455
  })(AuthorityType || (AuthorityType = {}));
1406
1456
  var AuthorityAction;
1407
1457
  (function (AuthorityAction) {
package/es/utils/index.js CHANGED
@@ -719,9 +719,10 @@ function encodePayload(payload) {
719
719
  // hex-encoded data → raw bytes
720
720
  return hexToBytes$1(v);
721
721
  }
722
- else if (!isNaN(+v)) {
722
+ else if (/^\d+$/.test(v)) {
723
723
  // number-like string → hex → bytes
724
- return v === '0' ? new Uint8Array([]) : hexToBytes$1(numberToHex(+v));
724
+ // Use BigInt for large numbers to avoid overflow
725
+ return v === '0' ? new Uint8Array([]) : hexToBytes$1(numberToHex(BigInt(v)));
725
726
  }
726
727
  else {
727
728
  // plain string → UTF-8 bytes
@@ -777,8 +778,16 @@ function toHex(value) {
777
778
  case 'bigint':
778
779
  return numberToHex(value);
779
780
  case 'string':
780
- if (!isNaN(+value))
781
- return numberToHex(+value);
781
+ // Only accept valid integer strings (no decimals, no whitespace, no empty)
782
+ if (/^-?\d+$/.test(value)) {
783
+ // Use BigInt for potentially large numbers to avoid overflow
784
+ try {
785
+ return numberToHex(BigInt(value));
786
+ }
787
+ catch {
788
+ return numberToHex(+value);
789
+ }
790
+ }
782
791
  return stringToHex(value);
783
792
  case 'uint8array':
784
793
  case 'uint16array':
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Integration test configuration
3
+ *
4
+ * Environment variables:
5
+ * - INTEGRATION_TEST_NETWORK: Network to use (local, testnet, mainnet)
6
+ * - INTEGRATION_TEST_OPERATOR_KEY: Operator private key
7
+ * - INTEGRATION_TEST_MASTER_KEY: Master account private key
8
+ * - RUN_INTEGRATION_TESTS: Set to 'true' to run integration tests
9
+ */
10
+ export interface IntegrationTestConfig {
11
+ network: 'local' | 'testnet' | 'mainnet';
12
+ operatorKey: string;
13
+ masterKey: string;
14
+ enabled: boolean;
15
+ timeout: number;
16
+ }
17
+ /**
18
+ * Get integration test configuration from environment variables
19
+ */
20
+ export declare function getConfig(): IntegrationTestConfig;
21
+ /**
22
+ * Check if integration tests should run
23
+ */
24
+ export declare function shouldRunIntegrationTests(): boolean;
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Integration test helper utilities
3
+ */
4
+ import type { RestSignature } from '../api/tokens/types';
5
+ import type { TestAccount } from './setup';
6
+ import type { Payload } from '../utils/interface';
7
+ /**
8
+ * Create API client for integration tests
9
+ */
10
+ export declare function createTestClient(): {
11
+ accounts: typeof import("../api/accounts").accountsApi;
12
+ checkpoints: typeof import("../api/checkpoints").checkpointsApi;
13
+ tokens: typeof import("../api/tokens").tokensApi;
14
+ transactions: typeof import("../api/transactions").transactionsApi;
15
+ chain: typeof import("../api/chain").chainApi;
16
+ };
17
+ /**
18
+ * Sign a payload with an account and return RestSignature format
19
+ */
20
+ export declare function signPayload(payload: Payload, account: TestAccount): Promise<RestSignature>;
21
+ /**
22
+ * Wait for a transaction to be finalized
23
+ * @param txHash Transaction hash
24
+ * @param maxRetries Maximum number of retries
25
+ * @param retryDelay Delay between retries in milliseconds
26
+ */
27
+ export declare function waitForFinalization(txHash: string, maxRetries?: number, retryDelay?: number): Promise<boolean>;
28
+ /**
29
+ * Wait for a specific amount of time
30
+ */
31
+ export declare function wait(ms: number): Promise<void>;
32
+ /**
33
+ * Get current checkpoint number
34
+ */
35
+ export declare function getCurrentCheckpoint(): Promise<number>;
36
+ /**
37
+ * Get account nonce
38
+ */
39
+ export declare function getAccountNonce(address: string): Promise<number>;
40
+ /**
41
+ * Get chain ID
42
+ */
43
+ export declare function getChainId(): Promise<number>;
44
+ /**
45
+ * Derive token address from owner and nonce
46
+ */
47
+ export declare function deriveTokenAddress(owner: string, nonce: number): string;
48
+ /**
49
+ * Assert that a value is defined (throws if undefined/null)
50
+ */
51
+ export declare function assertDefined<T>(value: T | undefined | null, message?: string): asserts value is T;
52
+ /**
53
+ * Format test section header
54
+ */
55
+ export declare function logSection(title: string): void;
56
+ /**
57
+ * Format test step log
58
+ */
59
+ export declare function logStep(step: string, detail?: string): void;
60
+ /**
61
+ * Generate a random token symbol for testing
62
+ */
63
+ export declare function generateRandomSymbol(prefix?: string): string;
64
+ /**
65
+ * Normalize an address to checksum format for comparison
66
+ */
67
+ export declare function normalizeAddress(address: string): string;
68
+ /**
69
+ * Check if two addresses are equal (case-insensitive)
70
+ */
71
+ export declare function addressEquals(addr1: string, addr2: string): boolean;
72
+ /**
73
+ * Check if an array of addresses includes a specific address (case-insensitive)
74
+ */
75
+ export declare function addressArrayIncludes(addresses: string[], targetAddress: string): boolean;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Integration test setup and account generation
3
+ */
4
+ import type { PrivateKeyAccount } from 'viem/accounts';
5
+ export interface TestAccount extends PrivateKeyAccount {
6
+ privateKey: `0x${string}`;
7
+ }
8
+ export interface TestAccounts {
9
+ operator: TestAccount;
10
+ master: TestAccount;
11
+ user1: TestAccount;
12
+ user2: TestAccount;
13
+ user3: TestAccount;
14
+ }
15
+ /**
16
+ * Generate and cache test accounts
17
+ */
18
+ export declare function getTestAccounts(): TestAccounts;
19
+ /**
20
+ * Log test account information
21
+ */
22
+ export declare function logTestAccounts(): void;
23
+ /**
24
+ * Reset test accounts (for cleanup)
25
+ */
26
+ export declare function resetTestAccounts(): void;
@@ -1,4 +1,4 @@
1
- import type { AccountInfo, AssociatedTokenAccount } from './types';
1
+ import type { AccountInfo, AssociatedTokenAccount, BbNonceInfo } from './types';
2
2
  /**
3
3
  * Accounts API methods
4
4
  */
@@ -9,6 +9,12 @@ export declare const accountsApi: {
9
9
  * @returns Promise with account info response
10
10
  */
11
11
  getNonce: (address: string) => import("../../client/index.js").PromiseWrapper<"custom", AccountInfo, AccountInfo, AccountInfo, import("../../client/index.js").ParsedError<string>, import("../../client/index.js").ParsedError<string> | AccountInfo, import("../../client/index.js").ParsedError<"timeout">, ""> & Promise<AccountInfo>;
12
+ /**
13
+ * Get account bbnonce
14
+ * @param address Address of the account to lookup nonce for
15
+ * @returns Promise with bbnonce info response
16
+ */
17
+ getBbNonce: (address: string) => import("../../client/index.js").PromiseWrapper<"custom", BbNonceInfo, BbNonceInfo, BbNonceInfo, import("../../client/index.js").ParsedError<string>, import("../../client/index.js").ParsedError<string> | BbNonceInfo, import("../../client/index.js").ParsedError<"timeout">, ""> & Promise<BbNonceInfo>;
12
18
  /**
13
19
  * Get associated token account
14
20
  * @param address Address of the account to lookup associated token account for
@@ -1,9 +1,11 @@
1
- import { AddressSchema, U256Schema } from '../types';
1
+ import { U256Schema } from '../types';
2
2
  export interface AccountInfo {
3
3
  nonce: number;
4
4
  }
5
+ export interface BbNonceInfo {
6
+ bbnonce: number;
7
+ }
5
8
  export interface AssociatedTokenAccount {
6
- token_account_address: AddressSchema;
7
9
  balance: U256Schema;
8
10
  nonce: number;
9
11
  }
@@ -1,4 +1,4 @@
1
- import type { CheckpointNumberResponse, Checkpoint } from './types';
1
+ import type { Checkpoint, CheckpointNumberResponse, CheckpointReceipts } from './types';
2
2
  /**
3
3
  * Checkpoint API methods
4
4
  */
@@ -22,5 +22,11 @@ export declare const checkpointsApi: {
22
22
  * @returns Promise with checkpoint response
23
23
  */
24
24
  getByNumber: (number: number | string, full?: boolean) => import("../../client/index.js").PromiseWrapper<"custom", Checkpoint, Checkpoint, Checkpoint, import("../../client/index.js").ParsedError<string>, import("../../client/index.js").ParsedError<string> | Checkpoint, import("../../client/index.js").ParsedError<"timeout">, ""> & Promise<Checkpoint>;
25
+ /**
26
+ * Get checkpoint receipts by number
27
+ * @param number Number of the checkpoint to lookup
28
+ * @returns Promise with checkpoint receipts response
29
+ */
30
+ getReceiptsByNumber: (number: number | string) => import("../../client/index.js").PromiseWrapper<"custom", CheckpointReceipts, CheckpointReceipts, CheckpointReceipts, import("../../client/index.js").ParsedError<string>, import("../../client/index.js").ParsedError<string> | CheckpointReceipts, import("../../client/index.js").ParsedError<"timeout">, ""> & Promise<CheckpointReceipts>;
25
31
  };
26
32
  export default checkpointsApi;