@dynamic-labs-wallet/node-svm 1.0.76 → 1.0.77
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/index.cjs +64 -23
- package/index.esm.js +64 -23
- package/package.json +2 -2
- package/src/client/client.d.ts +8 -3
- package/src/client/client.d.ts.map +1 -1
- package/src/delegatedClient.d.ts +8 -3
- package/src/delegatedClient.d.ts.map +1 -1
package/index.cjs
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
var node = require('@dynamic-labs-wallet/node');
|
|
4
4
|
var web3_js = require('@solana/web3.js');
|
|
5
5
|
|
|
6
|
+
function _extends() {
|
|
7
|
+
_extends = Object.assign || function assign(target) {
|
|
8
|
+
for(var i = 1; i < arguments.length; i++){
|
|
9
|
+
var source = arguments[i];
|
|
10
|
+
for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
|
|
11
|
+
}
|
|
12
|
+
return target;
|
|
13
|
+
};
|
|
14
|
+
return _extends.apply(this, arguments);
|
|
15
|
+
}
|
|
16
|
+
|
|
6
17
|
const ERROR_CREATE_WALLET_ACCOUNT = 'Error creating svm wallet account';
|
|
7
18
|
const ERROR_SIGN_RAW_MESSAGE = 'Error signing raw message';
|
|
8
19
|
|
|
@@ -164,7 +175,7 @@ class DynamicSvmWalletClient extends node.DynamicWalletClient {
|
|
|
164
175
|
* @param message The message to sign (Uint8Array)
|
|
165
176
|
* @param walletMetadata Wallet metadata (the full object returned by createWalletAccount/importPrivateKey, with backupInfo merged from any subsequent updatePassword/refresh/reshare)
|
|
166
177
|
* @param password The password for encrypted backup shares
|
|
167
|
-
*/ async signMessage({ message, walletMetadata, password = undefined, externalServerKeyShares }) {
|
|
178
|
+
*/ async signMessage({ message, walletMetadata, password = undefined, externalServerKeyShares, context }) {
|
|
168
179
|
const { accountAddress } = walletMetadata;
|
|
169
180
|
if (!accountAddress) {
|
|
170
181
|
throw new Error('Account address is required');
|
|
@@ -172,13 +183,17 @@ class DynamicSvmWalletClient extends node.DynamicWalletClient {
|
|
|
172
183
|
try {
|
|
173
184
|
const messageBytes = typeof message === 'string' ? new TextEncoder().encode(message) : message;
|
|
174
185
|
const messageHex = toHex(messageBytes);
|
|
186
|
+
const resolvedContext = context != null ? context : {
|
|
187
|
+
svmMessage: typeof message === 'string' ? message : messageHex
|
|
188
|
+
};
|
|
175
189
|
const signatureEd25519 = await this.sign({
|
|
176
190
|
message: messageHex,
|
|
177
191
|
accountAddress,
|
|
178
192
|
chainName: this.chainName,
|
|
179
193
|
password,
|
|
180
194
|
externalServerKeyShares,
|
|
181
|
-
walletMetadata
|
|
195
|
+
walletMetadata,
|
|
196
|
+
context: resolvedContext
|
|
182
197
|
});
|
|
183
198
|
return encodeBase58(signatureEd25519);
|
|
184
199
|
} catch (error) {
|
|
@@ -199,7 +214,7 @@ class DynamicSvmWalletClient extends node.DynamicWalletClient {
|
|
|
199
214
|
* @param message The pre-formatted hex message to sign
|
|
200
215
|
* @param walletMetadata Wallet metadata (the full object returned by createWalletAccount/importPrivateKey, with backupInfo merged from any subsequent updatePassword/refresh/reshare)
|
|
201
216
|
* @param password The password for encrypted backup shares
|
|
202
|
-
*/ async signRawMessage({ message, walletMetadata, password = undefined, externalServerKeyShares }) {
|
|
217
|
+
*/ async signRawMessage({ message, walletMetadata, password = undefined, externalServerKeyShares, context }) {
|
|
203
218
|
const { accountAddress } = walletMetadata;
|
|
204
219
|
if (!accountAddress) {
|
|
205
220
|
throw new Error('Account address is required');
|
|
@@ -213,7 +228,8 @@ class DynamicSvmWalletClient extends node.DynamicWalletClient {
|
|
|
213
228
|
password,
|
|
214
229
|
externalServerKeyShares,
|
|
215
230
|
isFormatted: true,
|
|
216
|
-
walletMetadata
|
|
231
|
+
walletMetadata,
|
|
232
|
+
context
|
|
217
233
|
});
|
|
218
234
|
return encodeBase58(signatureEd25519);
|
|
219
235
|
} catch (error) {
|
|
@@ -230,7 +246,7 @@ class DynamicSvmWalletClient extends node.DynamicWalletClient {
|
|
|
230
246
|
}
|
|
231
247
|
}
|
|
232
248
|
//todo:should txn just be a string?
|
|
233
|
-
async signTransaction({ walletMetadata, transaction, password = undefined, externalServerKeyShares, sponsor = false }) {
|
|
249
|
+
async signTransaction({ walletMetadata, transaction, password = undefined, externalServerKeyShares, sponsor = false, chainId, context }) {
|
|
234
250
|
const { accountAddress } = walletMetadata;
|
|
235
251
|
if (!accountAddress) {
|
|
236
252
|
throw new Error('Account address is required');
|
|
@@ -254,6 +270,21 @@ class DynamicSvmWalletClient extends node.DynamicWalletClient {
|
|
|
254
270
|
const messageBytes = transaction.serializeMessage();
|
|
255
271
|
messageToSign = toHex(Buffer.isBuffer(messageBytes) ? messageBytes : messageBytes);
|
|
256
272
|
}
|
|
273
|
+
// Mirrors the browser SVM client: svmTransaction context requires a chainId,
|
|
274
|
+
// so it's only attached when the caller provides one. Not derivable when
|
|
275
|
+
// `transaction` is a raw hex string (no Transaction object to serialize).
|
|
276
|
+
const resolvedContext = chainId !== undefined && typeof transaction !== 'string' ? _extends({}, context, {
|
|
277
|
+
svmTransaction: {
|
|
278
|
+
chainId,
|
|
279
|
+
method: 'signAndSendTransaction',
|
|
280
|
+
serializedTransactions: [
|
|
281
|
+
encodeBase58(transaction instanceof web3_js.VersionedTransaction ? transaction.serialize() : transaction.serialize({
|
|
282
|
+
requireAllSignatures: false,
|
|
283
|
+
verifySignatures: false
|
|
284
|
+
}))
|
|
285
|
+
]
|
|
286
|
+
}
|
|
287
|
+
}) : context;
|
|
257
288
|
const signatureEd25519 = await this.sign({
|
|
258
289
|
message: messageToSign,
|
|
259
290
|
accountAddress,
|
|
@@ -261,7 +292,8 @@ class DynamicSvmWalletClient extends node.DynamicWalletClient {
|
|
|
261
292
|
password,
|
|
262
293
|
externalServerKeyShares,
|
|
263
294
|
walletMetadata,
|
|
264
|
-
walletOperation: node.WalletOperation.SIGN_TRANSACTION
|
|
295
|
+
walletOperation: node.WalletOperation.SIGN_TRANSACTION,
|
|
296
|
+
context: resolvedContext
|
|
265
297
|
});
|
|
266
298
|
if (!signatureEd25519) {
|
|
267
299
|
throw new Error('Signature is undefined');
|
|
@@ -504,17 +536,6 @@ async function sendTransaction({ signedTransaction, rpcUrl = 'https://api.devnet
|
|
|
504
536
|
return txid;
|
|
505
537
|
}
|
|
506
538
|
|
|
507
|
-
function _extends() {
|
|
508
|
-
_extends = Object.assign || function assign(target) {
|
|
509
|
-
for(var i = 1; i < arguments.length; i++){
|
|
510
|
-
var source = arguments[i];
|
|
511
|
-
for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
|
|
512
|
-
}
|
|
513
|
-
return target;
|
|
514
|
-
};
|
|
515
|
-
return _extends.apply(this, arguments);
|
|
516
|
-
}
|
|
517
|
-
|
|
518
539
|
const logError = node.createLogError('node-svm');
|
|
519
540
|
/**
|
|
520
541
|
* Creates a delegated SVM wallet client for functional operations
|
|
@@ -532,11 +553,14 @@ const logError = node.createLogError('node-svm');
|
|
|
532
553
|
};
|
|
533
554
|
/**
|
|
534
555
|
* Signs a message using delegated signing for SVM
|
|
535
|
-
*/ const delegatedSignMessage = async (client, { walletId, shareSetId, walletApiKey, keyShare, message, derivationPath, isFormatted = false })=>{
|
|
556
|
+
*/ const delegatedSignMessage = async (client, { walletId, shareSetId, walletApiKey, keyShare, message, derivationPath, isFormatted = false, context })=>{
|
|
536
557
|
try {
|
|
537
558
|
if (!keyShare || !walletId || !walletApiKey) {
|
|
538
559
|
throw new Error('Delegated key share, wallet ID, and wallet API key are required to sign a message');
|
|
539
560
|
}
|
|
561
|
+
const resolvedContext = context != null ? context : {
|
|
562
|
+
svmMessage: message
|
|
563
|
+
};
|
|
540
564
|
const signatureEd25519 = await node.delegatedSignMessage(client, {
|
|
541
565
|
walletId,
|
|
542
566
|
shareSetId,
|
|
@@ -545,7 +569,8 @@ const logError = node.createLogError('node-svm');
|
|
|
545
569
|
message,
|
|
546
570
|
chainName: client.chainName,
|
|
547
571
|
derivationPath,
|
|
548
|
-
isFormatted
|
|
572
|
+
isFormatted,
|
|
573
|
+
context: resolvedContext
|
|
549
574
|
});
|
|
550
575
|
return encodeBase58(signatureEd25519);
|
|
551
576
|
} catch (error) {
|
|
@@ -598,7 +623,7 @@ const logError = node.createLogError('node-svm');
|
|
|
598
623
|
* signerAddress: senderAddress, // Explicitly specify who signs
|
|
599
624
|
* });
|
|
600
625
|
*
|
|
601
|
-
*/ const delegatedSignTransaction = async (client, { walletId, shareSetId, walletApiKey, keyShare, transaction, signerAddress, derivationPath })=>{
|
|
626
|
+
*/ const delegatedSignTransaction = async (client, { walletId, shareSetId, walletApiKey, keyShare, transaction, signerAddress, derivationPath, chainId, context })=>{
|
|
602
627
|
try {
|
|
603
628
|
if (!keyShare || !walletId || !walletApiKey) {
|
|
604
629
|
throw new Error('Delegated key share, wallet ID, and wallet API key are required to sign a transaction');
|
|
@@ -613,6 +638,20 @@ const logError = node.createLogError('node-svm');
|
|
|
613
638
|
const messageBytes = transaction.serializeMessage();
|
|
614
639
|
messageToSign = messageBytes.toString('hex');
|
|
615
640
|
}
|
|
641
|
+
// Mirrors the browser SVM client: svmTransaction context requires a chainId,
|
|
642
|
+
// so it's only attached when the caller provides one.
|
|
643
|
+
const resolvedContext = chainId !== undefined ? _extends({}, context, {
|
|
644
|
+
svmTransaction: {
|
|
645
|
+
chainId,
|
|
646
|
+
method: 'signAndSendTransaction',
|
|
647
|
+
serializedTransactions: [
|
|
648
|
+
encodeBase58(transaction instanceof web3_js.VersionedTransaction ? transaction.serialize() : transaction.serialize({
|
|
649
|
+
requireAllSignatures: false,
|
|
650
|
+
verifySignatures: false
|
|
651
|
+
}))
|
|
652
|
+
]
|
|
653
|
+
}
|
|
654
|
+
}) : context;
|
|
616
655
|
const signatureEd25519 = await node.delegatedSignMessage(client, {
|
|
617
656
|
walletId,
|
|
618
657
|
shareSetId,
|
|
@@ -621,7 +660,8 @@ const logError = node.createLogError('node-svm');
|
|
|
621
660
|
message: messageToSign,
|
|
622
661
|
chainName: client.chainName,
|
|
623
662
|
derivationPath,
|
|
624
|
-
isFormatted: false
|
|
663
|
+
isFormatted: false,
|
|
664
|
+
context: resolvedContext
|
|
625
665
|
});
|
|
626
666
|
if (!signatureEd25519) {
|
|
627
667
|
throw new Error('Signature is undefined');
|
|
@@ -695,7 +735,7 @@ const logError = node.createLogError('node-svm');
|
|
|
695
735
|
* message: hash,
|
|
696
736
|
* });
|
|
697
737
|
*
|
|
698
|
-
*/ const delegatedSignRawMessage = async (client, { walletId, shareSetId, walletApiKey, keyShare, message, derivationPath })=>{
|
|
738
|
+
*/ const delegatedSignRawMessage = async (client, { walletId, shareSetId, walletApiKey, keyShare, message, derivationPath, context })=>{
|
|
699
739
|
if (!keyShare || !walletId || !walletApiKey) {
|
|
700
740
|
throw new Error('Delegated key share, wallet ID, and wallet API key are required to sign a raw message');
|
|
701
741
|
}
|
|
@@ -707,7 +747,8 @@ const logError = node.createLogError('node-svm');
|
|
|
707
747
|
keyShare,
|
|
708
748
|
message: node.stripHexPrefix(message),
|
|
709
749
|
derivationPath,
|
|
710
|
-
isFormatted: true
|
|
750
|
+
isFormatted: true,
|
|
751
|
+
context
|
|
711
752
|
});
|
|
712
753
|
} catch (error) {
|
|
713
754
|
logError({
|
package/index.esm.js
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import { createLogError, DynamicWalletClient, getMPCChainConfig, stripHexPrefix, WalletOperation, SOLANA_RPC_URL, createDelegatedWalletClient, delegatedSignMessage as delegatedSignMessage$1, revokeDelegation as revokeDelegation$1 } from '@dynamic-labs-wallet/node';
|
|
2
2
|
import { PublicKey, VersionedTransaction, Keypair, Transaction, Connection, SystemProgram } from '@solana/web3.js';
|
|
3
3
|
|
|
4
|
+
function _extends() {
|
|
5
|
+
_extends = Object.assign || function assign(target) {
|
|
6
|
+
for(var i = 1; i < arguments.length; i++){
|
|
7
|
+
var source = arguments[i];
|
|
8
|
+
for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
|
|
9
|
+
}
|
|
10
|
+
return target;
|
|
11
|
+
};
|
|
12
|
+
return _extends.apply(this, arguments);
|
|
13
|
+
}
|
|
14
|
+
|
|
4
15
|
const ERROR_CREATE_WALLET_ACCOUNT = 'Error creating svm wallet account';
|
|
5
16
|
const ERROR_SIGN_RAW_MESSAGE = 'Error signing raw message';
|
|
6
17
|
|
|
@@ -162,7 +173,7 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
|
|
|
162
173
|
* @param message The message to sign (Uint8Array)
|
|
163
174
|
* @param walletMetadata Wallet metadata (the full object returned by createWalletAccount/importPrivateKey, with backupInfo merged from any subsequent updatePassword/refresh/reshare)
|
|
164
175
|
* @param password The password for encrypted backup shares
|
|
165
|
-
*/ async signMessage({ message, walletMetadata, password = undefined, externalServerKeyShares }) {
|
|
176
|
+
*/ async signMessage({ message, walletMetadata, password = undefined, externalServerKeyShares, context }) {
|
|
166
177
|
const { accountAddress } = walletMetadata;
|
|
167
178
|
if (!accountAddress) {
|
|
168
179
|
throw new Error('Account address is required');
|
|
@@ -170,13 +181,17 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
|
|
|
170
181
|
try {
|
|
171
182
|
const messageBytes = typeof message === 'string' ? new TextEncoder().encode(message) : message;
|
|
172
183
|
const messageHex = toHex(messageBytes);
|
|
184
|
+
const resolvedContext = context != null ? context : {
|
|
185
|
+
svmMessage: typeof message === 'string' ? message : messageHex
|
|
186
|
+
};
|
|
173
187
|
const signatureEd25519 = await this.sign({
|
|
174
188
|
message: messageHex,
|
|
175
189
|
accountAddress,
|
|
176
190
|
chainName: this.chainName,
|
|
177
191
|
password,
|
|
178
192
|
externalServerKeyShares,
|
|
179
|
-
walletMetadata
|
|
193
|
+
walletMetadata,
|
|
194
|
+
context: resolvedContext
|
|
180
195
|
});
|
|
181
196
|
return encodeBase58(signatureEd25519);
|
|
182
197
|
} catch (error) {
|
|
@@ -197,7 +212,7 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
|
|
|
197
212
|
* @param message The pre-formatted hex message to sign
|
|
198
213
|
* @param walletMetadata Wallet metadata (the full object returned by createWalletAccount/importPrivateKey, with backupInfo merged from any subsequent updatePassword/refresh/reshare)
|
|
199
214
|
* @param password The password for encrypted backup shares
|
|
200
|
-
*/ async signRawMessage({ message, walletMetadata, password = undefined, externalServerKeyShares }) {
|
|
215
|
+
*/ async signRawMessage({ message, walletMetadata, password = undefined, externalServerKeyShares, context }) {
|
|
201
216
|
const { accountAddress } = walletMetadata;
|
|
202
217
|
if (!accountAddress) {
|
|
203
218
|
throw new Error('Account address is required');
|
|
@@ -211,7 +226,8 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
|
|
|
211
226
|
password,
|
|
212
227
|
externalServerKeyShares,
|
|
213
228
|
isFormatted: true,
|
|
214
|
-
walletMetadata
|
|
229
|
+
walletMetadata,
|
|
230
|
+
context
|
|
215
231
|
});
|
|
216
232
|
return encodeBase58(signatureEd25519);
|
|
217
233
|
} catch (error) {
|
|
@@ -228,7 +244,7 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
|
|
|
228
244
|
}
|
|
229
245
|
}
|
|
230
246
|
//todo:should txn just be a string?
|
|
231
|
-
async signTransaction({ walletMetadata, transaction, password = undefined, externalServerKeyShares, sponsor = false }) {
|
|
247
|
+
async signTransaction({ walletMetadata, transaction, password = undefined, externalServerKeyShares, sponsor = false, chainId, context }) {
|
|
232
248
|
const { accountAddress } = walletMetadata;
|
|
233
249
|
if (!accountAddress) {
|
|
234
250
|
throw new Error('Account address is required');
|
|
@@ -252,6 +268,21 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
|
|
|
252
268
|
const messageBytes = transaction.serializeMessage();
|
|
253
269
|
messageToSign = toHex(Buffer.isBuffer(messageBytes) ? messageBytes : messageBytes);
|
|
254
270
|
}
|
|
271
|
+
// Mirrors the browser SVM client: svmTransaction context requires a chainId,
|
|
272
|
+
// so it's only attached when the caller provides one. Not derivable when
|
|
273
|
+
// `transaction` is a raw hex string (no Transaction object to serialize).
|
|
274
|
+
const resolvedContext = chainId !== undefined && typeof transaction !== 'string' ? _extends({}, context, {
|
|
275
|
+
svmTransaction: {
|
|
276
|
+
chainId,
|
|
277
|
+
method: 'signAndSendTransaction',
|
|
278
|
+
serializedTransactions: [
|
|
279
|
+
encodeBase58(transaction instanceof VersionedTransaction ? transaction.serialize() : transaction.serialize({
|
|
280
|
+
requireAllSignatures: false,
|
|
281
|
+
verifySignatures: false
|
|
282
|
+
}))
|
|
283
|
+
]
|
|
284
|
+
}
|
|
285
|
+
}) : context;
|
|
255
286
|
const signatureEd25519 = await this.sign({
|
|
256
287
|
message: messageToSign,
|
|
257
288
|
accountAddress,
|
|
@@ -259,7 +290,8 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
|
|
|
259
290
|
password,
|
|
260
291
|
externalServerKeyShares,
|
|
261
292
|
walletMetadata,
|
|
262
|
-
walletOperation: WalletOperation.SIGN_TRANSACTION
|
|
293
|
+
walletOperation: WalletOperation.SIGN_TRANSACTION,
|
|
294
|
+
context: resolvedContext
|
|
263
295
|
});
|
|
264
296
|
if (!signatureEd25519) {
|
|
265
297
|
throw new Error('Signature is undefined');
|
|
@@ -502,17 +534,6 @@ async function sendTransaction({ signedTransaction, rpcUrl = 'https://api.devnet
|
|
|
502
534
|
return txid;
|
|
503
535
|
}
|
|
504
536
|
|
|
505
|
-
function _extends() {
|
|
506
|
-
_extends = Object.assign || function assign(target) {
|
|
507
|
-
for(var i = 1; i < arguments.length; i++){
|
|
508
|
-
var source = arguments[i];
|
|
509
|
-
for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
|
|
510
|
-
}
|
|
511
|
-
return target;
|
|
512
|
-
};
|
|
513
|
-
return _extends.apply(this, arguments);
|
|
514
|
-
}
|
|
515
|
-
|
|
516
537
|
const logError = createLogError('node-svm');
|
|
517
538
|
/**
|
|
518
539
|
* Creates a delegated SVM wallet client for functional operations
|
|
@@ -530,11 +551,14 @@ const logError = createLogError('node-svm');
|
|
|
530
551
|
};
|
|
531
552
|
/**
|
|
532
553
|
* Signs a message using delegated signing for SVM
|
|
533
|
-
*/ const delegatedSignMessage = async (client, { walletId, shareSetId, walletApiKey, keyShare, message, derivationPath, isFormatted = false })=>{
|
|
554
|
+
*/ const delegatedSignMessage = async (client, { walletId, shareSetId, walletApiKey, keyShare, message, derivationPath, isFormatted = false, context })=>{
|
|
534
555
|
try {
|
|
535
556
|
if (!keyShare || !walletId || !walletApiKey) {
|
|
536
557
|
throw new Error('Delegated key share, wallet ID, and wallet API key are required to sign a message');
|
|
537
558
|
}
|
|
559
|
+
const resolvedContext = context != null ? context : {
|
|
560
|
+
svmMessage: message
|
|
561
|
+
};
|
|
538
562
|
const signatureEd25519 = await delegatedSignMessage$1(client, {
|
|
539
563
|
walletId,
|
|
540
564
|
shareSetId,
|
|
@@ -543,7 +567,8 @@ const logError = createLogError('node-svm');
|
|
|
543
567
|
message,
|
|
544
568
|
chainName: client.chainName,
|
|
545
569
|
derivationPath,
|
|
546
|
-
isFormatted
|
|
570
|
+
isFormatted,
|
|
571
|
+
context: resolvedContext
|
|
547
572
|
});
|
|
548
573
|
return encodeBase58(signatureEd25519);
|
|
549
574
|
} catch (error) {
|
|
@@ -596,7 +621,7 @@ const logError = createLogError('node-svm');
|
|
|
596
621
|
* signerAddress: senderAddress, // Explicitly specify who signs
|
|
597
622
|
* });
|
|
598
623
|
*
|
|
599
|
-
*/ const delegatedSignTransaction = async (client, { walletId, shareSetId, walletApiKey, keyShare, transaction, signerAddress, derivationPath })=>{
|
|
624
|
+
*/ const delegatedSignTransaction = async (client, { walletId, shareSetId, walletApiKey, keyShare, transaction, signerAddress, derivationPath, chainId, context })=>{
|
|
600
625
|
try {
|
|
601
626
|
if (!keyShare || !walletId || !walletApiKey) {
|
|
602
627
|
throw new Error('Delegated key share, wallet ID, and wallet API key are required to sign a transaction');
|
|
@@ -611,6 +636,20 @@ const logError = createLogError('node-svm');
|
|
|
611
636
|
const messageBytes = transaction.serializeMessage();
|
|
612
637
|
messageToSign = messageBytes.toString('hex');
|
|
613
638
|
}
|
|
639
|
+
// Mirrors the browser SVM client: svmTransaction context requires a chainId,
|
|
640
|
+
// so it's only attached when the caller provides one.
|
|
641
|
+
const resolvedContext = chainId !== undefined ? _extends({}, context, {
|
|
642
|
+
svmTransaction: {
|
|
643
|
+
chainId,
|
|
644
|
+
method: 'signAndSendTransaction',
|
|
645
|
+
serializedTransactions: [
|
|
646
|
+
encodeBase58(transaction instanceof VersionedTransaction ? transaction.serialize() : transaction.serialize({
|
|
647
|
+
requireAllSignatures: false,
|
|
648
|
+
verifySignatures: false
|
|
649
|
+
}))
|
|
650
|
+
]
|
|
651
|
+
}
|
|
652
|
+
}) : context;
|
|
614
653
|
const signatureEd25519 = await delegatedSignMessage$1(client, {
|
|
615
654
|
walletId,
|
|
616
655
|
shareSetId,
|
|
@@ -619,7 +658,8 @@ const logError = createLogError('node-svm');
|
|
|
619
658
|
message: messageToSign,
|
|
620
659
|
chainName: client.chainName,
|
|
621
660
|
derivationPath,
|
|
622
|
-
isFormatted: false
|
|
661
|
+
isFormatted: false,
|
|
662
|
+
context: resolvedContext
|
|
623
663
|
});
|
|
624
664
|
if (!signatureEd25519) {
|
|
625
665
|
throw new Error('Signature is undefined');
|
|
@@ -693,7 +733,7 @@ const logError = createLogError('node-svm');
|
|
|
693
733
|
* message: hash,
|
|
694
734
|
* });
|
|
695
735
|
*
|
|
696
|
-
*/ const delegatedSignRawMessage = async (client, { walletId, shareSetId, walletApiKey, keyShare, message, derivationPath })=>{
|
|
736
|
+
*/ const delegatedSignRawMessage = async (client, { walletId, shareSetId, walletApiKey, keyShare, message, derivationPath, context })=>{
|
|
697
737
|
if (!keyShare || !walletId || !walletApiKey) {
|
|
698
738
|
throw new Error('Delegated key share, wallet ID, and wallet API key are required to sign a raw message');
|
|
699
739
|
}
|
|
@@ -705,7 +745,8 @@ const logError = createLogError('node-svm');
|
|
|
705
745
|
keyShare,
|
|
706
746
|
message: stripHexPrefix(message),
|
|
707
747
|
derivationPath,
|
|
708
|
-
isFormatted: true
|
|
748
|
+
isFormatted: true,
|
|
749
|
+
context
|
|
709
750
|
});
|
|
710
751
|
} catch (error) {
|
|
711
752
|
logError({
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs-wallet/node-svm",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.77",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@dynamic-labs-wallet/node": "1.0.
|
|
7
|
+
"@dynamic-labs-wallet/node": "1.0.77",
|
|
8
8
|
"@solana/web3.js": "^1.98.2"
|
|
9
9
|
},
|
|
10
10
|
"publishConfig": {
|
package/src/client/client.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ServerKeyShare, DynamicWalletClient, type Ed25519KeygenResult, type ThresholdSignatureScheme, type TraceContext, type DynamicWalletClientProps, type WalletMetadata } from '@dynamic-labs-wallet/node';
|
|
2
|
+
import type { SignMessageContext } from '@dynamic-labs/sdk-api-core';
|
|
2
3
|
import { Transaction, VersionedTransaction } from '@solana/web3.js';
|
|
3
4
|
export declare class DynamicSvmWalletClient extends DynamicWalletClient {
|
|
4
5
|
readonly chainName = "SVM";
|
|
@@ -34,11 +35,12 @@ export declare class DynamicSvmWalletClient extends DynamicWalletClient {
|
|
|
34
35
|
* @param walletMetadata Wallet metadata (the full object returned by createWalletAccount/importPrivateKey, with backupInfo merged from any subsequent updatePassword/refresh/reshare)
|
|
35
36
|
* @param password The password for encrypted backup shares
|
|
36
37
|
*/
|
|
37
|
-
signMessage({ message, walletMetadata, password, externalServerKeyShares, }: {
|
|
38
|
+
signMessage({ message, walletMetadata, password, externalServerKeyShares, context, }: {
|
|
38
39
|
message: string | Uint8Array;
|
|
39
40
|
walletMetadata: WalletMetadata;
|
|
40
41
|
password?: string;
|
|
41
42
|
externalServerKeyShares?: ServerKeyShare[];
|
|
43
|
+
context?: SignMessageContext;
|
|
42
44
|
}): Promise<string>;
|
|
43
45
|
/**
|
|
44
46
|
* Signs a pre-formatted (raw) message without additional encoding.
|
|
@@ -48,19 +50,22 @@ export declare class DynamicSvmWalletClient extends DynamicWalletClient {
|
|
|
48
50
|
* @param walletMetadata Wallet metadata (the full object returned by createWalletAccount/importPrivateKey, with backupInfo merged from any subsequent updatePassword/refresh/reshare)
|
|
49
51
|
* @param password The password for encrypted backup shares
|
|
50
52
|
*/
|
|
51
|
-
signRawMessage({ message, walletMetadata, password, externalServerKeyShares, }: {
|
|
53
|
+
signRawMessage({ message, walletMetadata, password, externalServerKeyShares, context, }: {
|
|
52
54
|
message: string;
|
|
53
55
|
walletMetadata: WalletMetadata;
|
|
54
56
|
password?: string;
|
|
55
57
|
externalServerKeyShares?: ServerKeyShare[];
|
|
58
|
+
context?: SignMessageContext;
|
|
56
59
|
}): Promise<string>;
|
|
57
|
-
signTransaction({ walletMetadata, transaction, password, externalServerKeyShares, sponsor, }: {
|
|
60
|
+
signTransaction({ walletMetadata, transaction, password, externalServerKeyShares, sponsor, chainId, context, }: {
|
|
58
61
|
walletMetadata: WalletMetadata;
|
|
59
62
|
transaction: VersionedTransaction | Transaction | string;
|
|
60
63
|
password?: string;
|
|
61
64
|
externalServerKeyShares?: ServerKeyShare[];
|
|
62
65
|
/** If true, requests gas sponsorship from Dynamic before signing. */
|
|
63
66
|
sponsor?: boolean;
|
|
67
|
+
chainId?: string;
|
|
68
|
+
context?: SignMessageContext;
|
|
64
69
|
}): Promise<string>;
|
|
65
70
|
/**
|
|
66
71
|
* Exports the private key for a given wallet
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,YAAY,EAGjB,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EAGpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAW,WAAW,EAAE,oBAAoB,EAAa,MAAM,iBAAiB,CAAC;AAUxF,qBAAa,sBAAuB,SAAQ,mBAAmB;IAC7D,QAAQ,CAAC,SAAS,SAAS;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;gBAEZ,EACV,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,oBAAoB,EACpB,MAAM,EACN,KAAK,GACN,EAAE,wBAAwB;IAW3B;;;;;OAKG;IACG,mBAAmB,CAAC,EACxB,wBAAwB,EACxB,QAAQ,EACR,OAAO,EACP,eAAuB,GACxB,EAAE;QACD,wBAAwB,EAAE,wBAAwB,CAAC;QACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;QACjC,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,cAAc,CAAC;QAC/B,YAAY,EAAE,UAAU,GAAG,MAAM,CAAC;QAClC,uBAAuB,EAAE,cAAc,EAAE,CAAC;QAC1C,iCAAiC,EAAE,KAAK,CAAC;YACvC,KAAK,EAAE,cAAc,CAAC;YACtB,+BAA+B,EAAE,OAAO,CAAC;SAC1C,CAAC,CAAC;KACJ,CAAC;IAuEI,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU;;;IAW5D;;;;;;OAMG;IACG,WAAW,CAAC,EAChB,OAAO,EACP,cAAc,EACd,QAAoB,EACpB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
|
package/src/delegatedClient.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { DelegatedWalletClient, ServerKeyShare } from '@dynamic-labs-wallet/node';
|
|
2
|
+
import type { SignMessageContext } from '@dynamic-labs/sdk-api-core';
|
|
2
3
|
import type { Transaction } from '@solana/web3.js';
|
|
3
4
|
import { VersionedTransaction } from '@solana/web3.js';
|
|
4
5
|
export type DelegatedSvmClientConfig = {
|
|
@@ -18,7 +19,7 @@ export declare const createDelegatedSvmWalletClient: ({ environmentId, baseApiUr
|
|
|
18
19
|
/**
|
|
19
20
|
* Signs a message using delegated signing for SVM
|
|
20
21
|
*/
|
|
21
|
-
export declare const delegatedSignMessage: (client: DelegatedSvmWalletClient, { walletId, shareSetId, walletApiKey, keyShare, message, derivationPath, isFormatted, }: {
|
|
22
|
+
export declare const delegatedSignMessage: (client: DelegatedSvmWalletClient, { walletId, shareSetId, walletApiKey, keyShare, message, derivationPath, isFormatted, context, }: {
|
|
22
23
|
walletId: string;
|
|
23
24
|
/**
|
|
24
25
|
* Optional. The `shareSetId` from the `wallet.delegation.created`
|
|
@@ -33,6 +34,7 @@ export declare const delegatedSignMessage: (client: DelegatedSvmWalletClient, {
|
|
|
33
34
|
message: string;
|
|
34
35
|
derivationPath?: Uint32Array;
|
|
35
36
|
isFormatted?: boolean;
|
|
37
|
+
context?: SignMessageContext;
|
|
36
38
|
}) => Promise<string>;
|
|
37
39
|
/**
|
|
38
40
|
* Signs a transaction using delegated signing for SVM
|
|
@@ -74,7 +76,7 @@ export declare const delegatedSignMessage: (client: DelegatedSvmWalletClient, {
|
|
|
74
76
|
* });
|
|
75
77
|
*
|
|
76
78
|
*/
|
|
77
|
-
export declare const delegatedSignTransaction: (client: DelegatedSvmWalletClient, { walletId, shareSetId, walletApiKey, keyShare, transaction, signerAddress, derivationPath, }: {
|
|
79
|
+
export declare const delegatedSignTransaction: (client: DelegatedSvmWalletClient, { walletId, shareSetId, walletApiKey, keyShare, transaction, signerAddress, derivationPath, chainId, context, }: {
|
|
78
80
|
walletId: string;
|
|
79
81
|
/**
|
|
80
82
|
* Optional. The `shareSetId` from the `wallet.delegation.created`
|
|
@@ -89,6 +91,8 @@ export declare const delegatedSignTransaction: (client: DelegatedSvmWalletClient
|
|
|
89
91
|
transaction: VersionedTransaction | Transaction;
|
|
90
92
|
signerAddress?: string;
|
|
91
93
|
derivationPath?: Uint32Array;
|
|
94
|
+
chainId?: string;
|
|
95
|
+
context?: SignMessageContext;
|
|
92
96
|
}) => Promise<VersionedTransaction | Transaction>;
|
|
93
97
|
/**
|
|
94
98
|
* Signs a pre-formatted (raw) message using delegated signing for SVM.
|
|
@@ -124,7 +128,7 @@ export declare const delegatedSignTransaction: (client: DelegatedSvmWalletClient
|
|
|
124
128
|
* });
|
|
125
129
|
*
|
|
126
130
|
*/
|
|
127
|
-
export declare const delegatedSignRawMessage: (client: DelegatedSvmWalletClient, { walletId, shareSetId, walletApiKey, keyShare, message, derivationPath, }: {
|
|
131
|
+
export declare const delegatedSignRawMessage: (client: DelegatedSvmWalletClient, { walletId, shareSetId, walletApiKey, keyShare, message, derivationPath, context, }: {
|
|
128
132
|
walletId: string;
|
|
129
133
|
/**
|
|
130
134
|
* Optional. The `shareSetId` from the `wallet.delegation.created`
|
|
@@ -138,6 +142,7 @@ export declare const delegatedSignRawMessage: (client: DelegatedSvmWalletClient,
|
|
|
138
142
|
keyShare: ServerKeyShare;
|
|
139
143
|
message: string;
|
|
140
144
|
derivationPath?: Uint32Array;
|
|
145
|
+
context?: SignMessageContext;
|
|
141
146
|
}) => Promise<string>;
|
|
142
147
|
/**
|
|
143
148
|
* Revoke delegation - delegates to the node package
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delegatedClient.d.ts","sourceRoot":"","sources":["../../packages/src/delegatedClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAQvF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAa,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAMlE,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,qBAAqB,GAAG;IAC7D,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,8BAA8B,sEAMxC,wBAAwB,KAAG,wBAU7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,WACvB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"delegatedClient.d.ts","sourceRoot":"","sources":["../../packages/src/delegatedClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAQvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAa,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAMlE,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,qBAAqB,GAAG;IAC7D,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,8BAA8B,sEAMxC,wBAAwB,KAAG,wBAU7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,WACvB,wBAAwB,oGAU7B;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B,KACA,OAAO,CAAC,MAAM,CA4BhB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,wBAAwB,WAC3B,wBAAwB,mHAW7B;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,GAAG,CAAC;IACd,WAAW,EAAE,oBAAoB,GAAG,WAAW,CAAC;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B,KACA,OAAO,CAAC,oBAAoB,GAAG,WAAW,CA0F5C,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,uBAAuB,WAC1B,wBAAwB,uFAS7B;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B,KACA,OAAO,CAAC,MAAM,CAwBhB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,WAAkB,wBAAwB,gBAAgB;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,kBAE1G,CAAC"}
|