@kynesyslabs/demosdk 2.3.20 → 2.3.22
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/build/bridge/nativeBridge.d.ts +116 -0
- package/build/bridge/nativeBridge.js +224 -0
- package/build/bridge/nativeBridge.js.map +1 -1
- package/build/types/web2/index.d.ts +3 -2
- package/build/types/web2/index.js.map +1 -1
- package/build/websdk/Web2Calls.js +37 -5
- package/build/websdk/Web2Calls.js.map +1 -1
- package/build/websdk/utils/canonicalJson.d.ts +3 -0
- package/build/websdk/utils/canonicalJson.js +68 -0
- package/build/websdk/utils/canonicalJson.js.map +1 -0
- package/package.json +3 -2
|
@@ -24,4 +24,120 @@ export declare const methods: {
|
|
|
24
24
|
* @returns Signed transaction ready for demos.confirm() and demos.broadcast()
|
|
25
25
|
*/
|
|
26
26
|
generateOperationTx(compiled: BridgeOperationCompiled, demos: Demos): Promise<Transaction>;
|
|
27
|
+
/**
|
|
28
|
+
* Generates gasless bridge operation signature for meta-transaction
|
|
29
|
+
* @param userPrivateKey User's private key for signing gasless authorization
|
|
30
|
+
* @param userPublicKey User's public key (address)
|
|
31
|
+
* @param nonce User nonce for replay protection
|
|
32
|
+
* @param originChain Origin chain name
|
|
33
|
+
* @param destChain Destination chain name
|
|
34
|
+
* @param token Token contract address
|
|
35
|
+
* @param recipient Recipient address
|
|
36
|
+
* @param amount Amount to bridge
|
|
37
|
+
* @param bridgeFeeBps Bridge fee in basis points (optional)
|
|
38
|
+
* @returns Signature for gasless bridge operation authorization
|
|
39
|
+
*/
|
|
40
|
+
generateGaslessBridgeSignature(userPrivateKey: string, userPublicKey: string, nonce: number, originChain: string, destChain: string, token: string, recipient: string, amount: string, bridgeFeeBps?: number): string;
|
|
41
|
+
/**
|
|
42
|
+
* Generates gasless deposit signature for USDC deposits
|
|
43
|
+
* @param userPrivateKey User's private key for signing gasless authorization
|
|
44
|
+
* @param userPublicKey User's public key (address)
|
|
45
|
+
* @param nonce User nonce for replay protection
|
|
46
|
+
* @param usdcAddress USDC contract address
|
|
47
|
+
* @param amount Amount to deposit
|
|
48
|
+
* @param chainKey Chain key (e.g., "eth.sepolia")
|
|
49
|
+
* @returns Signature for gasless deposit authorization
|
|
50
|
+
*/
|
|
51
|
+
generateGaslessDepositSignature(userPrivateKey: string, userPublicKey: string, nonce: number, usdcAddress: string, amount: string, chainKey: string): string;
|
|
52
|
+
/**
|
|
53
|
+
* Initiates a gasless bridge operation through Demos RPC
|
|
54
|
+
* @param userPublicKey User's public key (address)
|
|
55
|
+
* @param signature User's signature for gasless authorization
|
|
56
|
+
* @param nonce User nonce for replay protection
|
|
57
|
+
* @param originChain Origin chain name
|
|
58
|
+
* @param destChain Destination chain name
|
|
59
|
+
* @param token Token contract address
|
|
60
|
+
* @param recipient Recipient address
|
|
61
|
+
* @param amount Amount to bridge
|
|
62
|
+
* @param bridgeFeeBps Bridge fee in basis points (optional)
|
|
63
|
+
* @returns RPC request for gasless bridge initiation
|
|
64
|
+
*/
|
|
65
|
+
generateGaslessBridgeOperation(userPublicKey: string, signature: string, nonce: number, originChain: string, destChain: string, token: string, recipient: string, amount: string, bridgeFeeBps?: number): RPCRequest;
|
|
66
|
+
/**
|
|
67
|
+
* Executes a gasless USDC deposit through Demos RPC
|
|
68
|
+
* @param userPublicKey User's public key (address)
|
|
69
|
+
* @param signature User's signature for gasless authorization
|
|
70
|
+
* @param nonce User nonce for replay protection
|
|
71
|
+
* @param chainKey Chain key (e.g., "eth.sepolia")
|
|
72
|
+
* @param usdcAddress USDC contract address
|
|
73
|
+
* @param amount Amount to deposit
|
|
74
|
+
* @returns RPC request for gasless deposit execution
|
|
75
|
+
*/
|
|
76
|
+
generateGaslessDepositOperation(userPublicKey: string, signature: string, nonce: number, chainKey: string, usdcAddress: string, amount: string): RPCRequest;
|
|
77
|
+
/**
|
|
78
|
+
* Complete gasless bridge flow helper - combines signature generation and operation creation
|
|
79
|
+
* @param userPrivateKey User's private key for signing
|
|
80
|
+
* @param userPublicKey User's public key (address)
|
|
81
|
+
* @param nonce User nonce for replay protection
|
|
82
|
+
* @param originChain Origin chain name
|
|
83
|
+
* @param destChain Destination chain name
|
|
84
|
+
* @param token Token contract address
|
|
85
|
+
* @param recipient Recipient address
|
|
86
|
+
* @param amount Amount to bridge
|
|
87
|
+
* @param bridgeFeeBps Bridge fee in basis points (optional)
|
|
88
|
+
* @returns Object with signature and RPC request for gasless bridge
|
|
89
|
+
*/
|
|
90
|
+
generateCompleteGaslessBridge(userPrivateKey: string, userPublicKey: string, nonce: number, originChain: string, destChain: string, token: string, recipient: string, amount: string, bridgeFeeBps?: number): {
|
|
91
|
+
signature: string;
|
|
92
|
+
bridgeOperation: RPCRequest;
|
|
93
|
+
depositOperation: RPCRequest;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Generates atomic deposit and bridge signature for the new combined method
|
|
97
|
+
* @param userPrivateKey User's private key for signing gasless authorization
|
|
98
|
+
* @param userPublicKey User's public key (address)
|
|
99
|
+
* @param nonce User nonce for replay protection
|
|
100
|
+
* @param tokenName Human-readable token name (e.g., "usdc", "eth")
|
|
101
|
+
* @param depositAmount Amount to deposit and bridge (must be equal)
|
|
102
|
+
* @param destChain Destination chain name
|
|
103
|
+
* @param recipient Recipient address
|
|
104
|
+
* @param bridgeFeeBps Bridge fee in basis points (optional)
|
|
105
|
+
* @param chainId Chain ID for signature verification
|
|
106
|
+
* @param contractAddress Contract address for signature verification
|
|
107
|
+
* @returns Signature for atomic deposit and bridge authorization
|
|
108
|
+
*/
|
|
109
|
+
generateAtomicDepositAndBridgeSignature(userPrivateKey: string, userPublicKey: string, nonce: number, tokenName: string, depositAmount: string, destChain: string, recipient: string, bridgeFeeBps: number, chainId: number, contractAddress: string): string;
|
|
110
|
+
/**
|
|
111
|
+
* Executes atomic gasless deposit and bridge through Demos RPC
|
|
112
|
+
* @param userPublicKey User's public key (address)
|
|
113
|
+
* @param signature User's signature for gasless authorization
|
|
114
|
+
* @param nonce User nonce for replay protection
|
|
115
|
+
* @param chainKey Chain key (e.g., "eth.sepolia")
|
|
116
|
+
* @param tokenName Human-readable token name (e.g., "usdc", "eth")
|
|
117
|
+
* @param depositAmount Amount to deposit and bridge
|
|
118
|
+
* @param destChain Destination chain name
|
|
119
|
+
* @param recipient Recipient address
|
|
120
|
+
* @param bridgeFeeBps Bridge fee in basis points
|
|
121
|
+
* @returns RPC request for atomic deposit and bridge execution
|
|
122
|
+
*/
|
|
123
|
+
generateAtomicDepositAndBridgeOperation(userPublicKey: string, signature: string, nonce: number, chainKey: string, tokenName: string, depositAmount: string, destChain: string, recipient: string, bridgeFeeBps?: number): RPCRequest;
|
|
124
|
+
/**
|
|
125
|
+
* RECOMMENDED: Complete atomic deposit and bridge flow helper
|
|
126
|
+
* @param userPrivateKey User's private key for signing
|
|
127
|
+
* @param userPublicKey User's public key (address)
|
|
128
|
+
* @param nonce User nonce for replay protection
|
|
129
|
+
* @param tokenName Human-readable token name (e.g., "usdc", "eth")
|
|
130
|
+
* @param depositAmount Amount to deposit and bridge (equal values)
|
|
131
|
+
* @param destChain Destination chain name (origin chain is automatic)
|
|
132
|
+
* @param recipient Recipient address
|
|
133
|
+
* @param bridgeFeeBps Bridge fee in basis points (optional)
|
|
134
|
+
* @param chainId Chain ID (for signature verification)
|
|
135
|
+
* @param contractAddress Contract address (for signature verification)
|
|
136
|
+
* @param chainKey Chain key format (e.g., "eth.sepolia")
|
|
137
|
+
* @returns Object with signature and RPC request for atomic operation
|
|
138
|
+
*/
|
|
139
|
+
generateAtomicDepositAndBridge(userPrivateKey: string, userPublicKey: string, nonce: number, tokenName: string, depositAmount: string, destChain: string, recipient: string, bridgeFeeBps?: number, chainId?: number, contractAddress?: string, chainKey?: string): {
|
|
140
|
+
signature: string;
|
|
141
|
+
operation: RPCRequest;
|
|
142
|
+
};
|
|
27
143
|
};
|
|
@@ -104,5 +104,229 @@ exports.methods = {
|
|
|
104
104
|
// to complete the transaction flow, following the same pattern as pay() transactions
|
|
105
105
|
return signedTx;
|
|
106
106
|
},
|
|
107
|
+
/**
|
|
108
|
+
* Generates gasless bridge operation signature for meta-transaction
|
|
109
|
+
* @param userPrivateKey User's private key for signing gasless authorization
|
|
110
|
+
* @param userPublicKey User's public key (address)
|
|
111
|
+
* @param nonce User nonce for replay protection
|
|
112
|
+
* @param originChain Origin chain name
|
|
113
|
+
* @param destChain Destination chain name
|
|
114
|
+
* @param token Token contract address
|
|
115
|
+
* @param recipient Recipient address
|
|
116
|
+
* @param amount Amount to bridge
|
|
117
|
+
* @param bridgeFeeBps Bridge fee in basis points (optional)
|
|
118
|
+
* @returns Signature for gasless bridge operation authorization
|
|
119
|
+
*/
|
|
120
|
+
generateGaslessBridgeSignature(userPrivateKey, userPublicKey, nonce, originChain, destChain, token, recipient, amount, bridgeFeeBps = 0) {
|
|
121
|
+
// Create the same message format as used in smart contract and node validation
|
|
122
|
+
const messageData = {
|
|
123
|
+
action: "LIQUIDITY_TANK_BRIDGE",
|
|
124
|
+
user: userPublicKey,
|
|
125
|
+
nonce: nonce,
|
|
126
|
+
originChain: originChain,
|
|
127
|
+
destChain: destChain,
|
|
128
|
+
token: token,
|
|
129
|
+
recipient: recipient,
|
|
130
|
+
amount: amount,
|
|
131
|
+
bridgeFeeBps: bridgeFeeBps
|
|
132
|
+
};
|
|
133
|
+
const messageHash = encryption_1.Hashing.sha256(JSON.stringify(messageData));
|
|
134
|
+
const signature = encryption_1.Cryptography.sign(messageHash, userPrivateKey);
|
|
135
|
+
return (0, encryption_1.uint8ArrayToHex)(signature);
|
|
136
|
+
},
|
|
137
|
+
/**
|
|
138
|
+
* Generates gasless deposit signature for USDC deposits
|
|
139
|
+
* @param userPrivateKey User's private key for signing gasless authorization
|
|
140
|
+
* @param userPublicKey User's public key (address)
|
|
141
|
+
* @param nonce User nonce for replay protection
|
|
142
|
+
* @param usdcAddress USDC contract address
|
|
143
|
+
* @param amount Amount to deposit
|
|
144
|
+
* @param chainKey Chain key (e.g., "eth.sepolia")
|
|
145
|
+
* @returns Signature for gasless deposit authorization
|
|
146
|
+
*/
|
|
147
|
+
generateGaslessDepositSignature(userPrivateKey, userPublicKey, nonce, usdcAddress, amount, chainKey) {
|
|
148
|
+
// Create the same message format as used in smart contract and node validation
|
|
149
|
+
const messageData = {
|
|
150
|
+
action: "LIQUIDITY_TANK_DEPOSIT",
|
|
151
|
+
user: userPublicKey,
|
|
152
|
+
nonce: nonce,
|
|
153
|
+
usdcAddress: usdcAddress,
|
|
154
|
+
amount: amount,
|
|
155
|
+
chainKey: chainKey
|
|
156
|
+
};
|
|
157
|
+
const messageHash = encryption_1.Hashing.sha256(JSON.stringify(messageData));
|
|
158
|
+
const signature = encryption_1.Cryptography.sign(messageHash, userPrivateKey);
|
|
159
|
+
return (0, encryption_1.uint8ArrayToHex)(signature);
|
|
160
|
+
},
|
|
161
|
+
/**
|
|
162
|
+
* Initiates a gasless bridge operation through Demos RPC
|
|
163
|
+
* @param userPublicKey User's public key (address)
|
|
164
|
+
* @param signature User's signature for gasless authorization
|
|
165
|
+
* @param nonce User nonce for replay protection
|
|
166
|
+
* @param originChain Origin chain name
|
|
167
|
+
* @param destChain Destination chain name
|
|
168
|
+
* @param token Token contract address
|
|
169
|
+
* @param recipient Recipient address
|
|
170
|
+
* @param amount Amount to bridge
|
|
171
|
+
* @param bridgeFeeBps Bridge fee in basis points (optional)
|
|
172
|
+
* @returns RPC request for gasless bridge initiation
|
|
173
|
+
*/
|
|
174
|
+
generateGaslessBridgeOperation(userPublicKey, signature, nonce, originChain, destChain, token, recipient, amount, bridgeFeeBps = 0) {
|
|
175
|
+
const nodeCallPayload = {
|
|
176
|
+
method: "initiateGaslessBridge",
|
|
177
|
+
params: [{
|
|
178
|
+
user: userPublicKey,
|
|
179
|
+
signature: signature,
|
|
180
|
+
nonce: nonce,
|
|
181
|
+
originChain: originChain,
|
|
182
|
+
destChain: destChain,
|
|
183
|
+
token: token,
|
|
184
|
+
recipient: recipient,
|
|
185
|
+
amount: amount,
|
|
186
|
+
bridgeFeeBps: bridgeFeeBps
|
|
187
|
+
}]
|
|
188
|
+
};
|
|
189
|
+
return nodeCallPayload;
|
|
190
|
+
},
|
|
191
|
+
/**
|
|
192
|
+
* Executes a gasless USDC deposit through Demos RPC
|
|
193
|
+
* @param userPublicKey User's public key (address)
|
|
194
|
+
* @param signature User's signature for gasless authorization
|
|
195
|
+
* @param nonce User nonce for replay protection
|
|
196
|
+
* @param chainKey Chain key (e.g., "eth.sepolia")
|
|
197
|
+
* @param usdcAddress USDC contract address
|
|
198
|
+
* @param amount Amount to deposit
|
|
199
|
+
* @returns RPC request for gasless deposit execution
|
|
200
|
+
*/
|
|
201
|
+
generateGaslessDepositOperation(userPublicKey, signature, nonce, chainKey, usdcAddress, amount) {
|
|
202
|
+
const nodeCallPayload = {
|
|
203
|
+
method: "executeGaslessDeposit",
|
|
204
|
+
params: [{
|
|
205
|
+
user: userPublicKey,
|
|
206
|
+
signature: signature,
|
|
207
|
+
nonce: nonce,
|
|
208
|
+
chainKey: chainKey,
|
|
209
|
+
usdcAddress: usdcAddress,
|
|
210
|
+
amount: amount
|
|
211
|
+
}]
|
|
212
|
+
};
|
|
213
|
+
return nodeCallPayload;
|
|
214
|
+
},
|
|
215
|
+
/**
|
|
216
|
+
* Complete gasless bridge flow helper - combines signature generation and operation creation
|
|
217
|
+
* @param userPrivateKey User's private key for signing
|
|
218
|
+
* @param userPublicKey User's public key (address)
|
|
219
|
+
* @param nonce User nonce for replay protection
|
|
220
|
+
* @param originChain Origin chain name
|
|
221
|
+
* @param destChain Destination chain name
|
|
222
|
+
* @param token Token contract address
|
|
223
|
+
* @param recipient Recipient address
|
|
224
|
+
* @param amount Amount to bridge
|
|
225
|
+
* @param bridgeFeeBps Bridge fee in basis points (optional)
|
|
226
|
+
* @returns Object with signature and RPC request for gasless bridge
|
|
227
|
+
*/
|
|
228
|
+
generateCompleteGaslessBridge(userPrivateKey, userPublicKey, nonce, originChain, destChain, token, recipient, amount, bridgeFeeBps = 0) {
|
|
229
|
+
// Generate signatures
|
|
230
|
+
const bridgeSignature = this.generateGaslessBridgeSignature(userPrivateKey, userPublicKey, nonce, originChain, destChain, token, recipient, amount, bridgeFeeBps);
|
|
231
|
+
const depositSignature = this.generateGaslessDepositSignature(userPrivateKey, userPublicKey, nonce + 1, token, amount, `${originChain.toLowerCase()}.${process.env.NODE_ENV === 'production' ? 'mainnet' : 'sepolia'}`);
|
|
232
|
+
// Generate operations
|
|
233
|
+
const bridgeOperation = this.generateGaslessBridgeOperation(userPublicKey, bridgeSignature, nonce, originChain, destChain, token, recipient, amount, bridgeFeeBps);
|
|
234
|
+
const depositOperation = this.generateGaslessDepositOperation(userPublicKey, depositSignature, nonce + 1, `${originChain.toLowerCase()}.${process.env.NODE_ENV === 'production' ? 'mainnet' : 'sepolia'}`, token, amount);
|
|
235
|
+
return {
|
|
236
|
+
signature: bridgeSignature,
|
|
237
|
+
bridgeOperation,
|
|
238
|
+
depositOperation
|
|
239
|
+
};
|
|
240
|
+
},
|
|
241
|
+
/**
|
|
242
|
+
* Generates atomic deposit and bridge signature for the new combined method
|
|
243
|
+
* @param userPrivateKey User's private key for signing gasless authorization
|
|
244
|
+
* @param userPublicKey User's public key (address)
|
|
245
|
+
* @param nonce User nonce for replay protection
|
|
246
|
+
* @param tokenName Human-readable token name (e.g., "usdc", "eth")
|
|
247
|
+
* @param depositAmount Amount to deposit and bridge (must be equal)
|
|
248
|
+
* @param destChain Destination chain name
|
|
249
|
+
* @param recipient Recipient address
|
|
250
|
+
* @param bridgeFeeBps Bridge fee in basis points (optional)
|
|
251
|
+
* @param chainId Chain ID for signature verification
|
|
252
|
+
* @param contractAddress Contract address for signature verification
|
|
253
|
+
* @returns Signature for atomic deposit and bridge authorization
|
|
254
|
+
*/
|
|
255
|
+
generateAtomicDepositAndBridgeSignature(userPrivateKey, userPublicKey, nonce, tokenName, depositAmount, destChain, recipient, bridgeFeeBps = 0, chainId, contractAddress) {
|
|
256
|
+
// Create the same message format as used in smart contract verification
|
|
257
|
+
const messageData = {
|
|
258
|
+
action: "LIQUIDITY_TANK_DEPOSIT_AND_BRIDGE",
|
|
259
|
+
user: userPublicKey,
|
|
260
|
+
nonce: nonce,
|
|
261
|
+
tokenName: tokenName,
|
|
262
|
+
depositAmount: depositAmount,
|
|
263
|
+
originChain: chainId.toString(), // Automatically detected from block.chainid
|
|
264
|
+
destChain: destChain,
|
|
265
|
+
recipient: recipient,
|
|
266
|
+
bridgeFeeBps: bridgeFeeBps,
|
|
267
|
+
chainId: chainId,
|
|
268
|
+
contractAddress: contractAddress
|
|
269
|
+
};
|
|
270
|
+
const messageHash = encryption_1.Hashing.sha256(JSON.stringify(messageData));
|
|
271
|
+
const signature = encryption_1.Cryptography.sign(messageHash, userPrivateKey);
|
|
272
|
+
return (0, encryption_1.uint8ArrayToHex)(signature);
|
|
273
|
+
},
|
|
274
|
+
/**
|
|
275
|
+
* Executes atomic gasless deposit and bridge through Demos RPC
|
|
276
|
+
* @param userPublicKey User's public key (address)
|
|
277
|
+
* @param signature User's signature for gasless authorization
|
|
278
|
+
* @param nonce User nonce for replay protection
|
|
279
|
+
* @param chainKey Chain key (e.g., "eth.sepolia")
|
|
280
|
+
* @param tokenName Human-readable token name (e.g., "usdc", "eth")
|
|
281
|
+
* @param depositAmount Amount to deposit and bridge
|
|
282
|
+
* @param destChain Destination chain name
|
|
283
|
+
* @param recipient Recipient address
|
|
284
|
+
* @param bridgeFeeBps Bridge fee in basis points
|
|
285
|
+
* @returns RPC request for atomic deposit and bridge execution
|
|
286
|
+
*/
|
|
287
|
+
generateAtomicDepositAndBridgeOperation(userPublicKey, signature, nonce, chainKey, tokenName, depositAmount, destChain, recipient, bridgeFeeBps = 0) {
|
|
288
|
+
const nodeCallPayload = {
|
|
289
|
+
method: "executeAtomicDepositAndBridge",
|
|
290
|
+
params: [{
|
|
291
|
+
user: userPublicKey,
|
|
292
|
+
signature: signature,
|
|
293
|
+
nonce: nonce,
|
|
294
|
+
chainKey: chainKey,
|
|
295
|
+
tokenName: tokenName,
|
|
296
|
+
depositAmount: depositAmount,
|
|
297
|
+
destChain: destChain,
|
|
298
|
+
recipient: recipient,
|
|
299
|
+
bridgeFeeBps: bridgeFeeBps
|
|
300
|
+
}]
|
|
301
|
+
};
|
|
302
|
+
return nodeCallPayload;
|
|
303
|
+
},
|
|
304
|
+
/**
|
|
305
|
+
* RECOMMENDED: Complete atomic deposit and bridge flow helper
|
|
306
|
+
* @param userPrivateKey User's private key for signing
|
|
307
|
+
* @param userPublicKey User's public key (address)
|
|
308
|
+
* @param nonce User nonce for replay protection
|
|
309
|
+
* @param tokenName Human-readable token name (e.g., "usdc", "eth")
|
|
310
|
+
* @param depositAmount Amount to deposit and bridge (equal values)
|
|
311
|
+
* @param destChain Destination chain name (origin chain is automatic)
|
|
312
|
+
* @param recipient Recipient address
|
|
313
|
+
* @param bridgeFeeBps Bridge fee in basis points (optional)
|
|
314
|
+
* @param chainId Chain ID (for signature verification)
|
|
315
|
+
* @param contractAddress Contract address (for signature verification)
|
|
316
|
+
* @param chainKey Chain key format (e.g., "eth.sepolia")
|
|
317
|
+
* @returns Object with signature and RPC request for atomic operation
|
|
318
|
+
*/
|
|
319
|
+
generateAtomicDepositAndBridge(userPrivateKey, userPublicKey, nonce, tokenName, depositAmount, destChain, recipient, bridgeFeeBps = 0, chainId = 11155111, // Default to Sepolia
|
|
320
|
+
contractAddress = "0x...", // Should be provided by caller
|
|
321
|
+
chainKey = "eth.sepolia") {
|
|
322
|
+
// REVIEW: Generate signature for the atomic operation
|
|
323
|
+
const signature = this.generateAtomicDepositAndBridgeSignature(userPrivateKey, userPublicKey, nonce, tokenName, depositAmount, destChain, recipient, bridgeFeeBps, chainId, contractAddress);
|
|
324
|
+
// REVIEW: Generate the atomic operation RPC request
|
|
325
|
+
const operation = this.generateAtomicDepositAndBridgeOperation(userPublicKey, signature, nonce, chainKey, tokenName, depositAmount, destChain, recipient, bridgeFeeBps);
|
|
326
|
+
return {
|
|
327
|
+
signature,
|
|
328
|
+
operation
|
|
329
|
+
};
|
|
330
|
+
}
|
|
107
331
|
};
|
|
108
332
|
//# sourceMappingURL=nativeBridge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeBridge.js","sourceRoot":"","sources":["../../../src/bridge/nativeBridge.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nativeBridge.js","sourceRoot":"","sources":["../../../src/bridge/nativeBridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,9 @@ export interface IWeb2Result {
|
|
|
10
10
|
statusText: string;
|
|
11
11
|
headers: IncomingHttpHeaders;
|
|
12
12
|
data: any;
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
responseHash: string;
|
|
14
|
+
responseHeadersHash: string;
|
|
15
|
+
requestHash?: string;
|
|
15
16
|
txHash?: string;
|
|
16
17
|
}
|
|
17
18
|
export interface IWeb2Request {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/types/web2/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/types/web2/index.ts"],"names":[],"mappings":";;;AAyCA,IAAY,eAGX;AAHD,WAAY,eAAe;IACvB,oCAAiB,CAAA;IACjB,6CAA0B,CAAA;AAC9B,CAAC,EAHW,eAAe,+BAAf,eAAe,QAG1B"}
|
|
@@ -4,6 +4,7 @@ exports.web2Calls = exports.Web2Proxy = void 0;
|
|
|
4
4
|
const types_1 = require("../types");
|
|
5
5
|
const skeletons_1 = require("./utils/skeletons");
|
|
6
6
|
const DemosTransactions_1 = require("./DemosTransactions");
|
|
7
|
+
const canonicalJson_1 = require("./utils/canonicalJson");
|
|
7
8
|
class Web2Proxy {
|
|
8
9
|
constructor(sessionId, demos) {
|
|
9
10
|
this._sessionId = sessionId;
|
|
@@ -23,22 +24,50 @@ class Web2Proxy {
|
|
|
23
24
|
*/
|
|
24
25
|
async startProxy({ url, method, options = {
|
|
25
26
|
headers: {},
|
|
26
|
-
payload:
|
|
27
|
+
payload: undefined,
|
|
27
28
|
authorization: "",
|
|
28
29
|
}, }) {
|
|
29
30
|
// Create a fresh copy of web2Request for each call
|
|
30
31
|
const freshWeb2Request = { ...skeletons_1.web2_request };
|
|
32
|
+
// Shallow-merge headers without mutating caller's object
|
|
33
|
+
const callerHeaders = options?.headers ? { ...options.headers } : {};
|
|
31
34
|
freshWeb2Request.raw = {
|
|
32
35
|
...freshWeb2Request.raw,
|
|
33
36
|
action: types_1.EnumWeb2Actions.START_PROXY,
|
|
34
37
|
method,
|
|
35
38
|
url,
|
|
36
|
-
headers:
|
|
39
|
+
headers: callerHeaders,
|
|
37
40
|
};
|
|
41
|
+
// Validate and canonicalize
|
|
42
|
+
let canonicalPayload = undefined;
|
|
43
|
+
if (options?.payload !== undefined) {
|
|
44
|
+
if (typeof options.payload === "object") {
|
|
45
|
+
(0, canonicalJson_1.validatePureJson)(options.payload);
|
|
46
|
+
canonicalPayload = (0, canonicalJson_1.canonicalJSONStringify)(options.payload);
|
|
47
|
+
// Only set JSON content-type if not already set by caller
|
|
48
|
+
if (!Object.keys(callerHeaders).some(h => h.toLowerCase() === "content-type")) {
|
|
49
|
+
callerHeaders["Content-Type"] = "application/json";
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else if (typeof options.payload === "string") {
|
|
53
|
+
// Heuristic warning for accidental double-stringify
|
|
54
|
+
if ((0, canonicalJson_1.looksLikeJsonString)(options.payload)) {
|
|
55
|
+
console.warn("[Web2Calls] String payload looks like JSON. It will be used as raw bytes; if you intended object canonicalization, pass the object instead.");
|
|
56
|
+
}
|
|
57
|
+
canonicalPayload = options.payload;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// numbers/booleans/null are allowed by fetch/XHR as body. Use JSON.stringify semantics explicitly
|
|
61
|
+
canonicalPayload = JSON.stringify(options.payload);
|
|
62
|
+
if (!Object.keys(callerHeaders).some(h => h.toLowerCase() === "content-type")) {
|
|
63
|
+
callerHeaders["Content-Type"] = "application/json";
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
38
67
|
const response = await this._demos.call("web2ProxyRequest", {
|
|
39
68
|
web2Request: freshWeb2Request,
|
|
40
69
|
sessionId: this._sessionId,
|
|
41
|
-
payload:
|
|
70
|
+
payload: canonicalPayload, // can be undefined ⇒ no body
|
|
42
71
|
authorization: options?.authorization,
|
|
43
72
|
});
|
|
44
73
|
const web2Payload = {
|
|
@@ -54,8 +83,11 @@ class Web2Proxy {
|
|
|
54
83
|
timestamp: Date.now(),
|
|
55
84
|
status: response.response.status,
|
|
56
85
|
headers: response.response.headers,
|
|
57
|
-
|
|
58
|
-
|
|
86
|
+
responseHash: response.response.responseHash,
|
|
87
|
+
responseHeadersHash: response.response.responseHeadersHash,
|
|
88
|
+
...(response.response.requestHash
|
|
89
|
+
? { requestHash: response.response.requestHash }
|
|
90
|
+
: {}),
|
|
59
91
|
statusText: response.response.statusText,
|
|
60
92
|
},
|
|
61
93
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Web2Calls.js","sourceRoot":"","sources":["../../../src/websdk/Web2Calls.ts"],"names":[],"mappings":";;;AAAA,mCAAyC;AACzC,iDAAgD;AAChD,2DAAuD;
|
|
1
|
+
{"version":3,"file":"Web2Calls.js","sourceRoot":"","sources":["../../../src/websdk/Web2Calls.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.canonicalJSONStringify = canonicalJSONStringify;
|
|
4
|
+
exports.validatePureJson = validatePureJson;
|
|
5
|
+
exports.looksLikeJsonString = looksLikeJsonString;
|
|
6
|
+
function canonicalJSONStringify(value) {
|
|
7
|
+
strictValidate(value, new Set());
|
|
8
|
+
return stableStringify(value);
|
|
9
|
+
}
|
|
10
|
+
// Strict validation: reject undefined/function/symbol/BigInt anywhere
|
|
11
|
+
function strictValidate(value, seen) {
|
|
12
|
+
const t = typeof value;
|
|
13
|
+
if (t === "undefined" ||
|
|
14
|
+
t === "function" ||
|
|
15
|
+
t === "symbol" ||
|
|
16
|
+
t === "bigint") {
|
|
17
|
+
throw new Error(`Non-JSON value encountered: ${t}`);
|
|
18
|
+
}
|
|
19
|
+
if (value === null)
|
|
20
|
+
return;
|
|
21
|
+
if (t !== "object")
|
|
22
|
+
return;
|
|
23
|
+
if (seen.has(value))
|
|
24
|
+
throw new Error("Circular reference detected in JSON payload");
|
|
25
|
+
seen.add(value);
|
|
26
|
+
if (Array.isArray(value)) {
|
|
27
|
+
for (const v of value)
|
|
28
|
+
strictValidate(v, seen);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const proto = Object.getPrototypeOf(value);
|
|
32
|
+
if (proto !== Object.prototype && proto !== null) {
|
|
33
|
+
throw new Error(`Only plain objects are supported. Found prototype: ${proto?.constructor?.name}`);
|
|
34
|
+
}
|
|
35
|
+
for (const v of Object.values(value)) {
|
|
36
|
+
strictValidate(v, seen);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function validatePureJson(value, seen = new Set()) {
|
|
40
|
+
// Backward-compatible validator: same strict rules as above
|
|
41
|
+
strictValidate(value, seen);
|
|
42
|
+
}
|
|
43
|
+
function looksLikeJsonString(str) {
|
|
44
|
+
const s = str.trim();
|
|
45
|
+
return ((s.startsWith("{") && s.endsWith("}")) ||
|
|
46
|
+
(s.startsWith("[") && s.endsWith("]")));
|
|
47
|
+
}
|
|
48
|
+
function stableStringify(value) {
|
|
49
|
+
const t = typeof value;
|
|
50
|
+
if (value === null || t === "number" || t === "boolean" || t === "string") {
|
|
51
|
+
return JSON.stringify(value);
|
|
52
|
+
}
|
|
53
|
+
if (Array.isArray(value)) {
|
|
54
|
+
const items = value.map(v => stableStringify(v));
|
|
55
|
+
return `[${items.join(",")}]`;
|
|
56
|
+
}
|
|
57
|
+
// object (validated as plain)
|
|
58
|
+
const obj = value;
|
|
59
|
+
const keys = Object.keys(obj).sort();
|
|
60
|
+
const parts = [];
|
|
61
|
+
for (const key of keys) {
|
|
62
|
+
const k = JSON.stringify(key);
|
|
63
|
+
const v = stableStringify(obj[key]);
|
|
64
|
+
parts.push(`${k}:${v}`);
|
|
65
|
+
}
|
|
66
|
+
return `{${parts.join(",")}}`;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=canonicalJson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonicalJson.js","sourceRoot":"","sources":["../../../../src/websdk/utils/canonicalJson.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kynesyslabs/demosdk",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.22",
|
|
4
4
|
"description": "Demosdk is a JavaScript/TypeScript SDK that provides a unified interface for interacting with Demos network",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -46,7 +46,8 @@
|
|
|
46
46
|
"test:referrals": "rm -rf build && jest --testMatch '**/tests/**/referrals.spec*.ts' --testPathIgnorePatterns **/tests/**/chainProvider* **/tests/utils/* **/tests/**/template* --verbose",
|
|
47
47
|
"test:evm": "rm -rf build && jest --testMatch '**/tests/**/evm.spec*.ts' --testPathIgnorePatterns **/tests/**/chainProvider* **/tests/utils/* **/tests/**/template* --verbose",
|
|
48
48
|
"test:aptos": "node --require ts-node/register --require tsconfig-paths/register --test src/tests/multichain/aptos.node.spec.ts",
|
|
49
|
-
"test:aptos:only": "node --require ts-node/register --require tsconfig-paths/register --test --test-only src/tests/multichain/aptos.node.spec.ts"
|
|
49
|
+
"test:aptos:only": "node --require ts-node/register --require tsconfig-paths/register --test --test-only src/tests/multichain/aptos.node.spec.ts",
|
|
50
|
+
"test:canonical": "jest --testPathPattern=utils.test.ts --verbose"
|
|
50
51
|
},
|
|
51
52
|
"dependencies": {
|
|
52
53
|
"@aptos-labs/ts-sdk": "^1.28.0",
|