@sovereign-sdk/signers 0.0.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,4 +1,6 @@
1
1
  import { MetaMaskInpageProvider } from '@metamask/providers';
2
+ import * as ed from '@noble/ed25519';
3
+ import { PrivKey } from '@noble/secp256k1';
2
4
 
3
5
  /**
4
6
  * A signer interface that can be implemented to provide custom signers for use in Sovereign SDK applications.
@@ -61,4 +63,54 @@ type MetaMaskSnapSignerOpt = {
61
63
  */
62
64
  declare const newMetaMaskSnapSigner: ({ curve, schema, snapId, ...rest }: MetaMaskSnapSignerOpt) => Signer;
63
65
 
64
- export { type MetaMaskSnapSignerOpt, type Signer, type SignerOpt, newMetaMaskSnapSigner };
66
+ declare class Ed25519Signer implements Signer {
67
+ private readonly privateKey;
68
+ constructor(privateKey: ed.Hex);
69
+ sign(message: Uint8Array): Promise<Uint8Array>;
70
+ publicKey(): Promise<Uint8Array>;
71
+ }
72
+
73
+ declare class Secp256k1Signer implements Signer {
74
+ private readonly privateKey;
75
+ constructor(privateKey: PrivKey);
76
+ sign(message: Uint8Array): Promise<Uint8Array>;
77
+ /** Returns the public key in compressed form. */
78
+ publicKey(): Promise<Uint8Array>;
79
+ }
80
+
81
+ /**
82
+ * An error that can be thrown by a signer.
83
+ */
84
+ declare class SignerError extends Error {
85
+ readonly signerId: string;
86
+ /**
87
+ * Create a new SignerError.
88
+ *
89
+ * @param message - The error message
90
+ * @param signerId - The ID of the signer that threw the error
91
+ */
92
+ constructor(message: string, signerId: string);
93
+ }
94
+
95
+ /** Minimal EIP-1193 provider interface (exposed by Privy wallets). */
96
+ type EthereumProvider = {
97
+ request: (args: {
98
+ method: string;
99
+ params?: unknown[];
100
+ }) => Promise<unknown>;
101
+ };
102
+ declare class PrivySignerError extends SignerError {
103
+ constructor(message: string);
104
+ }
105
+ declare class PrivySigner implements Signer {
106
+ private readonly provider;
107
+ private cachedPublicKey?;
108
+ constructor(provider: EthereumProvider);
109
+ private signProvider;
110
+ sign(message: Uint8Array): Promise<Uint8Array>;
111
+ /** Returns the public key in compressed form. */
112
+ publicKey(): Promise<Uint8Array>;
113
+ private cachePublicKey;
114
+ }
115
+
116
+ export { Ed25519Signer, type EthereumProvider, type MetaMaskSnapSignerOpt, PrivySigner, PrivySignerError, Secp256k1Signer, type Signer, type SignerOpt, newMetaMaskSnapSigner };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  import { MetaMaskInpageProvider } from '@metamask/providers';
2
+ import * as ed from '@noble/ed25519';
3
+ import { PrivKey } from '@noble/secp256k1';
2
4
 
3
5
  /**
4
6
  * A signer interface that can be implemented to provide custom signers for use in Sovereign SDK applications.
@@ -61,4 +63,54 @@ type MetaMaskSnapSignerOpt = {
61
63
  */
62
64
  declare const newMetaMaskSnapSigner: ({ curve, schema, snapId, ...rest }: MetaMaskSnapSignerOpt) => Signer;
63
65
 
64
- export { type MetaMaskSnapSignerOpt, type Signer, type SignerOpt, newMetaMaskSnapSigner };
66
+ declare class Ed25519Signer implements Signer {
67
+ private readonly privateKey;
68
+ constructor(privateKey: ed.Hex);
69
+ sign(message: Uint8Array): Promise<Uint8Array>;
70
+ publicKey(): Promise<Uint8Array>;
71
+ }
72
+
73
+ declare class Secp256k1Signer implements Signer {
74
+ private readonly privateKey;
75
+ constructor(privateKey: PrivKey);
76
+ sign(message: Uint8Array): Promise<Uint8Array>;
77
+ /** Returns the public key in compressed form. */
78
+ publicKey(): Promise<Uint8Array>;
79
+ }
80
+
81
+ /**
82
+ * An error that can be thrown by a signer.
83
+ */
84
+ declare class SignerError extends Error {
85
+ readonly signerId: string;
86
+ /**
87
+ * Create a new SignerError.
88
+ *
89
+ * @param message - The error message
90
+ * @param signerId - The ID of the signer that threw the error
91
+ */
92
+ constructor(message: string, signerId: string);
93
+ }
94
+
95
+ /** Minimal EIP-1193 provider interface (exposed by Privy wallets). */
96
+ type EthereumProvider = {
97
+ request: (args: {
98
+ method: string;
99
+ params?: unknown[];
100
+ }) => Promise<unknown>;
101
+ };
102
+ declare class PrivySignerError extends SignerError {
103
+ constructor(message: string);
104
+ }
105
+ declare class PrivySigner implements Signer {
106
+ private readonly provider;
107
+ private cachedPublicKey?;
108
+ constructor(provider: EthereumProvider);
109
+ private signProvider;
110
+ sign(message: Uint8Array): Promise<Uint8Array>;
111
+ /** Returns the public key in compressed form. */
112
+ publicKey(): Promise<Uint8Array>;
113
+ private cachePublicKey;
114
+ }
115
+
116
+ export { Ed25519Signer, type EthereumProvider, type MetaMaskSnapSignerOpt, PrivySigner, PrivySignerError, Secp256k1Signer, type Signer, type SignerOpt, newMetaMaskSnapSigner };
package/dist/index.js CHANGED
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
6
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
7
+ var __getProtoOf = Object.getPrototypeOf;
6
8
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
9
  var __propIsEnum = Object.prototype.propertyIsEnumerable;
8
10
  var __objRest = (source, exclude) => {
@@ -29,6 +31,14 @@ var __copyProps = (to, from, except, desc) => {
29
31
  }
30
32
  return to;
31
33
  };
34
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
35
+ // If the importer is in node compatibility mode or this is not an ESM
36
+ // file that has been converted to a CommonJS file using a Babel-
37
+ // compatible transform (i.e. "__esModule" has not been set), then set
38
+ // "default" to the CommonJS "module.exports" for node compatibility.
39
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
40
+ mod
41
+ ));
32
42
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
33
43
  var __async = (__this, __arguments, generator) => {
34
44
  return new Promise((resolve, reject) => {
@@ -54,6 +64,10 @@ var __async = (__this, __arguments, generator) => {
54
64
  // src/index.ts
55
65
  var src_exports = {};
56
66
  __export(src_exports, {
67
+ Ed25519Signer: () => Ed25519Signer,
68
+ PrivySigner: () => PrivySigner,
69
+ PrivySignerError: () => PrivySignerError,
70
+ Secp256k1Signer: () => Secp256k1Signer,
57
71
  newMetaMaskSnapSigner: () => newMetaMaskSnapSigner
58
72
  });
59
73
  module.exports = __toCommonJS(src_exports);
@@ -144,8 +158,104 @@ var newMetaMaskSnapSigner = (_a) => {
144
158
  }
145
159
  };
146
160
  };
161
+
162
+ // src/ed25519.ts
163
+ var ed = __toESM(require("@noble/ed25519"));
164
+ var Ed25519Signer = class {
165
+ constructor(privateKey) {
166
+ this.privateKey = privateKey;
167
+ }
168
+ sign(message) {
169
+ return __async(this, null, function* () {
170
+ return ed.signAsync(message, this.privateKey);
171
+ });
172
+ }
173
+ publicKey() {
174
+ return __async(this, null, function* () {
175
+ return ed.getPublicKeyAsync(this.privateKey);
176
+ });
177
+ }
178
+ };
179
+
180
+ // src/secp256k1.ts
181
+ var import_sha3 = require("@noble/hashes/sha3");
182
+ var import_secp256k1 = require("@noble/secp256k1");
183
+ var Secp256k1Signer = class {
184
+ constructor(privateKey) {
185
+ this.privateKey = privateKey;
186
+ }
187
+ sign(message) {
188
+ return __async(this, null, function* () {
189
+ const msgHash = (0, import_sha3.keccak_256)(message);
190
+ const signature = yield (0, import_secp256k1.signAsync)(msgHash, this.privateKey);
191
+ return signature.toCompactRawBytes();
192
+ });
193
+ }
194
+ /** Returns the public key in compressed form. */
195
+ publicKey() {
196
+ return __async(this, null, function* () {
197
+ return (0, import_secp256k1.getPublicKey)(this.privateKey, true);
198
+ });
199
+ }
200
+ };
201
+
202
+ // src/privy.ts
203
+ var secp = __toESM(require("@noble/secp256k1"));
204
+ var import_ethers = require("ethers");
205
+ var PrivySignerError = class extends SignerError {
206
+ constructor(message) {
207
+ super(message, "Privy");
208
+ }
209
+ };
210
+ var PrivySigner = class {
211
+ constructor(provider) {
212
+ this.provider = provider;
213
+ }
214
+ signProvider(messageHash) {
215
+ return __async(this, null, function* () {
216
+ const signatureHex = yield this.provider.request({
217
+ method: "secp256k1_sign",
218
+ params: [messageHash]
219
+ });
220
+ return signatureHex;
221
+ });
222
+ }
223
+ sign(message) {
224
+ return __async(this, null, function* () {
225
+ const digest = import_ethers.ethers.keccak256(message);
226
+ const signatureBytes = yield this.signProvider(digest);
227
+ const signature = import_ethers.Signature.from(signatureBytes);
228
+ this.cachePublicKey(digest, signature);
229
+ return import_ethers.ethers.getBytes(import_ethers.ethers.concat([signature.r, signature.s]));
230
+ });
231
+ }
232
+ /** Returns the public key in compressed form. */
233
+ publicKey() {
234
+ return __async(this, null, function* () {
235
+ if (!this.cachedPublicKey) {
236
+ throw new PrivySignerError(
237
+ "Public key was not available, you must call sign() first"
238
+ );
239
+ }
240
+ return this.cachedPublicKey;
241
+ });
242
+ }
243
+ cachePublicKey(msgHash, signature) {
244
+ if (this.cachedPublicKey) return;
245
+ let secpSig = secp.Signature.fromCompact(
246
+ import_ethers.ethers.getBytesCopy(import_ethers.ethers.concat([signature.r, signature.s]))
247
+ );
248
+ secpSig = secpSig.addRecoveryBit(signature.yParity);
249
+ const publicKey = secpSig.recoverPublicKey(import_ethers.ethers.getBytes(msgHash));
250
+ this.cachedPublicKey = publicKey.toBytes(true);
251
+ }
252
+ };
147
253
  // Annotate the CommonJS export names for ESM import in node:
148
254
  0 && (module.exports = {
255
+ Ed25519Signer,
256
+ PrivySigner,
257
+ PrivySignerError,
258
+ Secp256k1Signer,
149
259
  newMetaMaskSnapSigner
150
260
  });
151
261
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/snap.ts","../src/errors.ts"],"sourcesContent":["export * from \"./signer\";\nexport * from \"./snap\";\n","/// <reference path=\"./snap-env.d.ts\" />\n\nimport type { MetaMaskInpageProvider } from \"@metamask/providers\";\nimport { bytesToHex, hexToBytes } from \"@sovereign-sdk/utils\";\nimport { SignerError } from \"./errors\";\nimport type { Signer, SignerOpt } from \"./signer\";\n\n/**\n * Options for initializing a MetaMask Snap signer.\n */\nexport type MetaMaskSnapSignerOpt = {\n /**\n * The {@link MetaMaskInpageProvider} to use for the signer.\n *\n * If not provided, the signer will attempt to use the global `window.ethereum` provider.\n */\n provider?: MetaMaskInpageProvider;\n /**\n * The snap ID to use for the signer.\n *\n * Defaults to `npm:@sovereign-sdk/metamask-snap`.\n * Can be changed to `local:localhost:8080` for local development.\n */\n snapId?: string;\n} & SignerOpt;\n\n/**\n * Create a new MetaMask Snap signer.\n *\n * @param options - The {@link MetaMaskSnapSignerOpt} options.\n * @returns A {@link Signer} implementation utilizing Sovereign's MetaMask Snap.\n */\nexport const newMetaMaskSnapSigner = ({\n curve,\n schema,\n snapId = \"npm:@sovereign-sdk/metamask-snap\",\n ...rest\n}: MetaMaskSnapSignerOpt): Signer => {\n const signerId = \"MetaMaskSnap\";\n const provider = rest.provider ?? window.ethereum;\n\n if (!provider) {\n throw new SignerError(\"Failed to find provider for signer\", signerId);\n }\n\n const assertSupported = async () => {\n try {\n await provider.request({\n method: \"wallet_getSnaps\",\n });\n } catch {\n throw new SignerError(\n \"Provider does not support MetaMask snaps\",\n signerId,\n );\n }\n };\n\n const path = 0;\n\n return {\n async publicKey() {\n await assertSupported();\n\n const args = {\n method: \"wallet_invokeSnap\",\n params: {\n snapId,\n request: {\n method: \"getPublicKey\",\n params: { path, curve },\n },\n },\n };\n // biome-ignore lint/suspicious/noExplicitAny: todo\n const { publicKey } = (await provider.request(args)) as any;\n\n return hexToBytes(publicKey);\n },\n async sign(message: Uint8Array) {\n await assertSupported();\n\n const args = {\n method: \"wallet_invokeSnap\",\n params: {\n snapId,\n request: {\n method: \"signTransaction\",\n params: { unsignedTxHex: bytesToHex(message), schema, curve, path },\n },\n },\n };\n // biome-ignore lint/suspicious/noExplicitAny: todo\n const { signature } = (await provider.request(args)) as any;\n\n return hexToBytes(signature);\n },\n };\n};\n","/**\n * An error that can be thrown by a signer.\n */\nexport class SignerError extends Error {\n public readonly signerId: string;\n\n /**\n * Create a new SignerError.\n *\n * @param message - The error message\n * @param signerId - The ID of the signer that threw the error\n */\n constructor(message: string, signerId: string) {\n super(`[${signerId}] ${message}`);\n\n this.signerId = signerId;\n this.name = this.constructor.name;\n this.stack = new Error().stack;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACGA,mBAAuC;;;ACAhC,IAAM,cAAN,cAA0B,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASrC,YAAY,SAAiB,UAAkB;AAC7C,UAAM,IAAI,QAAQ,KAAK,OAAO,EAAE;AAEhC,SAAK,WAAW;AAChB,SAAK,OAAO,KAAK,YAAY;AAC7B,SAAK,QAAQ,IAAI,MAAM,EAAE;AAAA,EAC3B;AACF;;;ADaO,IAAM,wBAAwB,CAAC,OAKD;AALC,eACpC;AAAA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,EAnCX,IAgCsC,IAIjC,iBAJiC,IAIjC;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAnCF,MAAAA;AAsCE,QAAM,WAAW;AACjB,QAAM,YAAWA,MAAA,KAAK,aAAL,OAAAA,MAAiB,OAAO;AAEzC,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,YAAY,sCAAsC,QAAQ;AAAA,EACtE;AAEA,QAAM,kBAAkB,MAAY;AAClC,QAAI;AACF,YAAM,SAAS,QAAQ;AAAA,QACrB,QAAQ;AAAA,MACV,CAAC;AAAA,IACH,SAAQ;AACN,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,OAAO;AAEb,SAAO;AAAA,IACC,YAAY;AAAA;AAChB,cAAM,gBAAgB;AAEtB,cAAM,OAAO;AAAA,UACX,QAAQ;AAAA,UACR,QAAQ;AAAA,YACN;AAAA,YACA,SAAS;AAAA,cACP,QAAQ;AAAA,cACR,QAAQ,EAAE,MAAM,MAAM;AAAA,YACxB;AAAA,UACF;AAAA,QACF;AAEA,cAAM,EAAE,UAAU,IAAK,MAAM,SAAS,QAAQ,IAAI;AAElD,mBAAO,yBAAW,SAAS;AAAA,MAC7B;AAAA;AAAA,IACM,KAAK,SAAqB;AAAA;AAC9B,cAAM,gBAAgB;AAEtB,cAAM,OAAO;AAAA,UACX,QAAQ;AAAA,UACR,QAAQ;AAAA,YACN;AAAA,YACA,SAAS;AAAA,cACP,QAAQ;AAAA,cACR,QAAQ,EAAE,mBAAe,yBAAW,OAAO,GAAG,QAAQ,OAAO,KAAK;AAAA,YACpE;AAAA,UACF;AAAA,QACF;AAEA,cAAM,EAAE,UAAU,IAAK,MAAM,SAAS,QAAQ,IAAI;AAElD,mBAAO,yBAAW,SAAS;AAAA,MAC7B;AAAA;AAAA,EACF;AACF;","names":["_a"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/snap.ts","../src/errors.ts","../src/ed25519.ts","../src/secp256k1.ts","../src/privy.ts"],"sourcesContent":["export * from \"./signer\";\nexport * from \"./snap\";\nexport * from \"./ed25519\";\nexport * from \"./secp256k1\";\nexport * from \"./privy\";\n","/// <reference path=\"./snap-env.d.ts\" />\n\nimport type { MetaMaskInpageProvider } from \"@metamask/providers\";\nimport { bytesToHex, hexToBytes } from \"@sovereign-sdk/utils\";\nimport { SignerError } from \"./errors\";\nimport type { Signer, SignerOpt } from \"./signer\";\n\n/**\n * Options for initializing a MetaMask Snap signer.\n */\nexport type MetaMaskSnapSignerOpt = {\n /**\n * The {@link MetaMaskInpageProvider} to use for the signer.\n *\n * If not provided, the signer will attempt to use the global `window.ethereum` provider.\n */\n provider?: MetaMaskInpageProvider;\n /**\n * The snap ID to use for the signer.\n *\n * Defaults to `npm:@sovereign-sdk/metamask-snap`.\n * Can be changed to `local:localhost:8080` for local development.\n */\n snapId?: string;\n} & SignerOpt;\n\n/**\n * Create a new MetaMask Snap signer.\n *\n * @param options - The {@link MetaMaskSnapSignerOpt} options.\n * @returns A {@link Signer} implementation utilizing Sovereign's MetaMask Snap.\n */\nexport const newMetaMaskSnapSigner = ({\n curve,\n schema,\n snapId = \"npm:@sovereign-sdk/metamask-snap\",\n ...rest\n}: MetaMaskSnapSignerOpt): Signer => {\n const signerId = \"MetaMaskSnap\";\n const provider = rest.provider ?? window.ethereum;\n\n if (!provider) {\n throw new SignerError(\"Failed to find provider for signer\", signerId);\n }\n\n const assertSupported = async () => {\n try {\n await provider.request({\n method: \"wallet_getSnaps\",\n });\n } catch {\n throw new SignerError(\n \"Provider does not support MetaMask snaps\",\n signerId,\n );\n }\n };\n\n const path = 0;\n\n return {\n async publicKey() {\n await assertSupported();\n\n const args = {\n method: \"wallet_invokeSnap\",\n params: {\n snapId,\n request: {\n method: \"getPublicKey\",\n params: { path, curve },\n },\n },\n };\n // biome-ignore lint/suspicious/noExplicitAny: todo\n const { publicKey } = (await provider.request(args)) as any;\n\n return hexToBytes(publicKey);\n },\n async sign(message: Uint8Array) {\n await assertSupported();\n\n const args = {\n method: \"wallet_invokeSnap\",\n params: {\n snapId,\n request: {\n method: \"signTransaction\",\n params: { unsignedTxHex: bytesToHex(message), schema, curve, path },\n },\n },\n };\n // biome-ignore lint/suspicious/noExplicitAny: todo\n const { signature } = (await provider.request(args)) as any;\n\n return hexToBytes(signature);\n },\n };\n};\n","/**\n * An error that can be thrown by a signer.\n */\nexport class SignerError extends Error {\n public readonly signerId: string;\n\n /**\n * Create a new SignerError.\n *\n * @param message - The error message\n * @param signerId - The ID of the signer that threw the error\n */\n constructor(message: string, signerId: string) {\n super(`[${signerId}] ${message}`);\n\n this.signerId = signerId;\n this.name = this.constructor.name;\n this.stack = new Error().stack;\n }\n}\n","import * as ed from \"@noble/ed25519\";\nimport type { Signer } from \"./signer\";\n\nexport class Ed25519Signer implements Signer {\n private readonly privateKey: ed.Hex;\n\n constructor(privateKey: ed.Hex) {\n this.privateKey = privateKey;\n }\n\n public async sign(message: Uint8Array): Promise<Uint8Array> {\n return ed.signAsync(message, this.privateKey);\n }\n\n async publicKey() {\n return ed.getPublicKeyAsync(this.privateKey);\n }\n}\n","import { keccak_256 } from \"@noble/hashes/sha3\";\nimport { type PrivKey, getPublicKey, signAsync } from \"@noble/secp256k1\";\nimport type { Signer } from \"./signer\";\n\nexport class Secp256k1Signer implements Signer {\n private readonly privateKey: PrivKey;\n\n constructor(privateKey: PrivKey) {\n this.privateKey = privateKey;\n }\n\n public async sign(message: Uint8Array): Promise<Uint8Array> {\n const msgHash = keccak_256(message);\n const signature = await signAsync(msgHash, this.privateKey);\n\n return signature.toCompactRawBytes();\n }\n\n /** Returns the public key in compressed form. */\n public async publicKey(): Promise<Uint8Array> {\n return getPublicKey(this.privateKey, true);\n }\n}\n","import * as secp from \"@noble/secp256k1\";\nimport { Signature, ethers } from \"ethers\";\nimport { SignerError } from \"./errors\";\nimport type { Signer } from \"./signer\";\n\n/** Minimal EIP-1193 provider interface (exposed by Privy wallets). */\nexport type EthereumProvider = {\n request: (args: { method: string; params?: unknown[] }) => Promise<unknown>;\n};\n\nexport class PrivySignerError extends SignerError {\n constructor(message: string) {\n super(message, \"Privy\");\n }\n}\n\nexport class PrivySigner implements Signer {\n private readonly provider: EthereumProvider;\n private cachedPublicKey?: Uint8Array;\n\n constructor(provider: EthereumProvider) {\n this.provider = provider;\n }\n\n private async signProvider(messageHash: string): Promise<string> {\n const signatureHex = await this.provider.request({\n method: \"secp256k1_sign\",\n params: [messageHash],\n });\n return signatureHex as string;\n }\n\n async sign(message: Uint8Array): Promise<Uint8Array> {\n const digest = ethers.keccak256(message);\n const signatureBytes = await this.signProvider(digest);\n const signature = Signature.from(signatureBytes);\n this.cachePublicKey(digest, signature);\n return ethers.getBytes(ethers.concat([signature.r, signature.s]));\n }\n\n /** Returns the public key in compressed form. */\n async publicKey(): Promise<Uint8Array> {\n if (!this.cachedPublicKey) {\n throw new PrivySignerError(\n \"Public key was not available, you must call sign() first\",\n );\n }\n\n return this.cachedPublicKey;\n }\n\n private cachePublicKey(msgHash: string, signature: Signature) {\n if (this.cachedPublicKey) return;\n\n let secpSig = secp.Signature.fromCompact(\n ethers.getBytesCopy(ethers.concat([signature.r, signature.s])),\n );\n secpSig = secpSig.addRecoveryBit(signature.yParity);\n const publicKey = secpSig.recoverPublicKey(ethers.getBytes(msgHash));\n\n this.cachedPublicKey = publicKey.toBytes(true);\n }\n}\n"],"mappings":"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","names":["_a"]}
package/dist/index.mjs CHANGED
@@ -120,7 +120,103 @@ var newMetaMaskSnapSigner = (_a) => {
120
120
  }
121
121
  };
122
122
  };
123
+
124
+ // src/ed25519.ts
125
+ import * as ed from "@noble/ed25519";
126
+ var Ed25519Signer = class {
127
+ constructor(privateKey) {
128
+ this.privateKey = privateKey;
129
+ }
130
+ sign(message) {
131
+ return __async(this, null, function* () {
132
+ return ed.signAsync(message, this.privateKey);
133
+ });
134
+ }
135
+ publicKey() {
136
+ return __async(this, null, function* () {
137
+ return ed.getPublicKeyAsync(this.privateKey);
138
+ });
139
+ }
140
+ };
141
+
142
+ // src/secp256k1.ts
143
+ import { keccak_256 } from "@noble/hashes/sha3";
144
+ import { getPublicKey, signAsync as signAsync2 } from "@noble/secp256k1";
145
+ var Secp256k1Signer = class {
146
+ constructor(privateKey) {
147
+ this.privateKey = privateKey;
148
+ }
149
+ sign(message) {
150
+ return __async(this, null, function* () {
151
+ const msgHash = keccak_256(message);
152
+ const signature = yield signAsync2(msgHash, this.privateKey);
153
+ return signature.toCompactRawBytes();
154
+ });
155
+ }
156
+ /** Returns the public key in compressed form. */
157
+ publicKey() {
158
+ return __async(this, null, function* () {
159
+ return getPublicKey(this.privateKey, true);
160
+ });
161
+ }
162
+ };
163
+
164
+ // src/privy.ts
165
+ import * as secp from "@noble/secp256k1";
166
+ import { Signature as Signature2, ethers } from "ethers";
167
+ var PrivySignerError = class extends SignerError {
168
+ constructor(message) {
169
+ super(message, "Privy");
170
+ }
171
+ };
172
+ var PrivySigner = class {
173
+ constructor(provider) {
174
+ this.provider = provider;
175
+ }
176
+ signProvider(messageHash) {
177
+ return __async(this, null, function* () {
178
+ const signatureHex = yield this.provider.request({
179
+ method: "secp256k1_sign",
180
+ params: [messageHash]
181
+ });
182
+ return signatureHex;
183
+ });
184
+ }
185
+ sign(message) {
186
+ return __async(this, null, function* () {
187
+ const digest = ethers.keccak256(message);
188
+ const signatureBytes = yield this.signProvider(digest);
189
+ const signature = Signature2.from(signatureBytes);
190
+ this.cachePublicKey(digest, signature);
191
+ return ethers.getBytes(ethers.concat([signature.r, signature.s]));
192
+ });
193
+ }
194
+ /** Returns the public key in compressed form. */
195
+ publicKey() {
196
+ return __async(this, null, function* () {
197
+ if (!this.cachedPublicKey) {
198
+ throw new PrivySignerError(
199
+ "Public key was not available, you must call sign() first"
200
+ );
201
+ }
202
+ return this.cachedPublicKey;
203
+ });
204
+ }
205
+ cachePublicKey(msgHash, signature) {
206
+ if (this.cachedPublicKey) return;
207
+ let secpSig = secp.Signature.fromCompact(
208
+ ethers.getBytesCopy(ethers.concat([signature.r, signature.s]))
209
+ );
210
+ secpSig = secpSig.addRecoveryBit(signature.yParity);
211
+ const publicKey = secpSig.recoverPublicKey(ethers.getBytes(msgHash));
212
+ this.cachedPublicKey = publicKey.toBytes(true);
213
+ }
214
+ };
123
215
  export {
216
+ Ed25519Signer,
217
+ PrivySigner,
218
+ PrivySignerError,
219
+ Secp256k1Signer,
124
220
  newMetaMaskSnapSigner
125
221
  };
126
222
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/snap.ts","../src/errors.ts"],"sourcesContent":["/// <reference path=\"./snap-env.d.ts\" />\n\nimport type { MetaMaskInpageProvider } from \"@metamask/providers\";\nimport { bytesToHex, hexToBytes } from \"@sovereign-sdk/utils\";\nimport { SignerError } from \"./errors\";\nimport type { Signer, SignerOpt } from \"./signer\";\n\n/**\n * Options for initializing a MetaMask Snap signer.\n */\nexport type MetaMaskSnapSignerOpt = {\n /**\n * The {@link MetaMaskInpageProvider} to use for the signer.\n *\n * If not provided, the signer will attempt to use the global `window.ethereum` provider.\n */\n provider?: MetaMaskInpageProvider;\n /**\n * The snap ID to use for the signer.\n *\n * Defaults to `npm:@sovereign-sdk/metamask-snap`.\n * Can be changed to `local:localhost:8080` for local development.\n */\n snapId?: string;\n} & SignerOpt;\n\n/**\n * Create a new MetaMask Snap signer.\n *\n * @param options - The {@link MetaMaskSnapSignerOpt} options.\n * @returns A {@link Signer} implementation utilizing Sovereign's MetaMask Snap.\n */\nexport const newMetaMaskSnapSigner = ({\n curve,\n schema,\n snapId = \"npm:@sovereign-sdk/metamask-snap\",\n ...rest\n}: MetaMaskSnapSignerOpt): Signer => {\n const signerId = \"MetaMaskSnap\";\n const provider = rest.provider ?? window.ethereum;\n\n if (!provider) {\n throw new SignerError(\"Failed to find provider for signer\", signerId);\n }\n\n const assertSupported = async () => {\n try {\n await provider.request({\n method: \"wallet_getSnaps\",\n });\n } catch {\n throw new SignerError(\n \"Provider does not support MetaMask snaps\",\n signerId,\n );\n }\n };\n\n const path = 0;\n\n return {\n async publicKey() {\n await assertSupported();\n\n const args = {\n method: \"wallet_invokeSnap\",\n params: {\n snapId,\n request: {\n method: \"getPublicKey\",\n params: { path, curve },\n },\n },\n };\n // biome-ignore lint/suspicious/noExplicitAny: todo\n const { publicKey } = (await provider.request(args)) as any;\n\n return hexToBytes(publicKey);\n },\n async sign(message: Uint8Array) {\n await assertSupported();\n\n const args = {\n method: \"wallet_invokeSnap\",\n params: {\n snapId,\n request: {\n method: \"signTransaction\",\n params: { unsignedTxHex: bytesToHex(message), schema, curve, path },\n },\n },\n };\n // biome-ignore lint/suspicious/noExplicitAny: todo\n const { signature } = (await provider.request(args)) as any;\n\n return hexToBytes(signature);\n },\n };\n};\n","/**\n * An error that can be thrown by a signer.\n */\nexport class SignerError extends Error {\n public readonly signerId: string;\n\n /**\n * Create a new SignerError.\n *\n * @param message - The error message\n * @param signerId - The ID of the signer that threw the error\n */\n constructor(message: string, signerId: string) {\n super(`[${signerId}] ${message}`);\n\n this.signerId = signerId;\n this.name = this.constructor.name;\n this.stack = new Error().stack;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,SAAS,YAAY,kBAAkB;;;ACAhC,IAAM,cAAN,cAA0B,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASrC,YAAY,SAAiB,UAAkB;AAC7C,UAAM,IAAI,QAAQ,KAAK,OAAO,EAAE;AAEhC,SAAK,WAAW;AAChB,SAAK,OAAO,KAAK,YAAY;AAC7B,SAAK,QAAQ,IAAI,MAAM,EAAE;AAAA,EAC3B;AACF;;;ADaO,IAAM,wBAAwB,CAAC,OAKD;AALC,eACpC;AAAA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,EAnCX,IAgCsC,IAIjC,iBAJiC,IAIjC;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAnCF,MAAAA;AAsCE,QAAM,WAAW;AACjB,QAAM,YAAWA,MAAA,KAAK,aAAL,OAAAA,MAAiB,OAAO;AAEzC,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,YAAY,sCAAsC,QAAQ;AAAA,EACtE;AAEA,QAAM,kBAAkB,MAAY;AAClC,QAAI;AACF,YAAM,SAAS,QAAQ;AAAA,QACrB,QAAQ;AAAA,MACV,CAAC;AAAA,IACH,SAAQ;AACN,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,OAAO;AAEb,SAAO;AAAA,IACC,YAAY;AAAA;AAChB,cAAM,gBAAgB;AAEtB,cAAM,OAAO;AAAA,UACX,QAAQ;AAAA,UACR,QAAQ;AAAA,YACN;AAAA,YACA,SAAS;AAAA,cACP,QAAQ;AAAA,cACR,QAAQ,EAAE,MAAM,MAAM;AAAA,YACxB;AAAA,UACF;AAAA,QACF;AAEA,cAAM,EAAE,UAAU,IAAK,MAAM,SAAS,QAAQ,IAAI;AAElD,eAAO,WAAW,SAAS;AAAA,MAC7B;AAAA;AAAA,IACM,KAAK,SAAqB;AAAA;AAC9B,cAAM,gBAAgB;AAEtB,cAAM,OAAO;AAAA,UACX,QAAQ;AAAA,UACR,QAAQ;AAAA,YACN;AAAA,YACA,SAAS;AAAA,cACP,QAAQ;AAAA,cACR,QAAQ,EAAE,eAAe,WAAW,OAAO,GAAG,QAAQ,OAAO,KAAK;AAAA,YACpE;AAAA,UACF;AAAA,QACF;AAEA,cAAM,EAAE,UAAU,IAAK,MAAM,SAAS,QAAQ,IAAI;AAElD,eAAO,WAAW,SAAS;AAAA,MAC7B;AAAA;AAAA,EACF;AACF;","names":["_a"]}
1
+ {"version":3,"sources":["../src/snap.ts","../src/errors.ts","../src/ed25519.ts","../src/secp256k1.ts","../src/privy.ts"],"sourcesContent":["/// <reference path=\"./snap-env.d.ts\" />\n\nimport type { MetaMaskInpageProvider } from \"@metamask/providers\";\nimport { bytesToHex, hexToBytes } from \"@sovereign-sdk/utils\";\nimport { SignerError } from \"./errors\";\nimport type { Signer, SignerOpt } from \"./signer\";\n\n/**\n * Options for initializing a MetaMask Snap signer.\n */\nexport type MetaMaskSnapSignerOpt = {\n /**\n * The {@link MetaMaskInpageProvider} to use for the signer.\n *\n * If not provided, the signer will attempt to use the global `window.ethereum` provider.\n */\n provider?: MetaMaskInpageProvider;\n /**\n * The snap ID to use for the signer.\n *\n * Defaults to `npm:@sovereign-sdk/metamask-snap`.\n * Can be changed to `local:localhost:8080` for local development.\n */\n snapId?: string;\n} & SignerOpt;\n\n/**\n * Create a new MetaMask Snap signer.\n *\n * @param options - The {@link MetaMaskSnapSignerOpt} options.\n * @returns A {@link Signer} implementation utilizing Sovereign's MetaMask Snap.\n */\nexport const newMetaMaskSnapSigner = ({\n curve,\n schema,\n snapId = \"npm:@sovereign-sdk/metamask-snap\",\n ...rest\n}: MetaMaskSnapSignerOpt): Signer => {\n const signerId = \"MetaMaskSnap\";\n const provider = rest.provider ?? window.ethereum;\n\n if (!provider) {\n throw new SignerError(\"Failed to find provider for signer\", signerId);\n }\n\n const assertSupported = async () => {\n try {\n await provider.request({\n method: \"wallet_getSnaps\",\n });\n } catch {\n throw new SignerError(\n \"Provider does not support MetaMask snaps\",\n signerId,\n );\n }\n };\n\n const path = 0;\n\n return {\n async publicKey() {\n await assertSupported();\n\n const args = {\n method: \"wallet_invokeSnap\",\n params: {\n snapId,\n request: {\n method: \"getPublicKey\",\n params: { path, curve },\n },\n },\n };\n // biome-ignore lint/suspicious/noExplicitAny: todo\n const { publicKey } = (await provider.request(args)) as any;\n\n return hexToBytes(publicKey);\n },\n async sign(message: Uint8Array) {\n await assertSupported();\n\n const args = {\n method: \"wallet_invokeSnap\",\n params: {\n snapId,\n request: {\n method: \"signTransaction\",\n params: { unsignedTxHex: bytesToHex(message), schema, curve, path },\n },\n },\n };\n // biome-ignore lint/suspicious/noExplicitAny: todo\n const { signature } = (await provider.request(args)) as any;\n\n return hexToBytes(signature);\n },\n };\n};\n","/**\n * An error that can be thrown by a signer.\n */\nexport class SignerError extends Error {\n public readonly signerId: string;\n\n /**\n * Create a new SignerError.\n *\n * @param message - The error message\n * @param signerId - The ID of the signer that threw the error\n */\n constructor(message: string, signerId: string) {\n super(`[${signerId}] ${message}`);\n\n this.signerId = signerId;\n this.name = this.constructor.name;\n this.stack = new Error().stack;\n }\n}\n","import * as ed from \"@noble/ed25519\";\nimport type { Signer } from \"./signer\";\n\nexport class Ed25519Signer implements Signer {\n private readonly privateKey: ed.Hex;\n\n constructor(privateKey: ed.Hex) {\n this.privateKey = privateKey;\n }\n\n public async sign(message: Uint8Array): Promise<Uint8Array> {\n return ed.signAsync(message, this.privateKey);\n }\n\n async publicKey() {\n return ed.getPublicKeyAsync(this.privateKey);\n }\n}\n","import { keccak_256 } from \"@noble/hashes/sha3\";\nimport { type PrivKey, getPublicKey, signAsync } from \"@noble/secp256k1\";\nimport type { Signer } from \"./signer\";\n\nexport class Secp256k1Signer implements Signer {\n private readonly privateKey: PrivKey;\n\n constructor(privateKey: PrivKey) {\n this.privateKey = privateKey;\n }\n\n public async sign(message: Uint8Array): Promise<Uint8Array> {\n const msgHash = keccak_256(message);\n const signature = await signAsync(msgHash, this.privateKey);\n\n return signature.toCompactRawBytes();\n }\n\n /** Returns the public key in compressed form. */\n public async publicKey(): Promise<Uint8Array> {\n return getPublicKey(this.privateKey, true);\n }\n}\n","import * as secp from \"@noble/secp256k1\";\nimport { Signature, ethers } from \"ethers\";\nimport { SignerError } from \"./errors\";\nimport type { Signer } from \"./signer\";\n\n/** Minimal EIP-1193 provider interface (exposed by Privy wallets). */\nexport type EthereumProvider = {\n request: (args: { method: string; params?: unknown[] }) => Promise<unknown>;\n};\n\nexport class PrivySignerError extends SignerError {\n constructor(message: string) {\n super(message, \"Privy\");\n }\n}\n\nexport class PrivySigner implements Signer {\n private readonly provider: EthereumProvider;\n private cachedPublicKey?: Uint8Array;\n\n constructor(provider: EthereumProvider) {\n this.provider = provider;\n }\n\n private async signProvider(messageHash: string): Promise<string> {\n const signatureHex = await this.provider.request({\n method: \"secp256k1_sign\",\n params: [messageHash],\n });\n return signatureHex as string;\n }\n\n async sign(message: Uint8Array): Promise<Uint8Array> {\n const digest = ethers.keccak256(message);\n const signatureBytes = await this.signProvider(digest);\n const signature = Signature.from(signatureBytes);\n this.cachePublicKey(digest, signature);\n return ethers.getBytes(ethers.concat([signature.r, signature.s]));\n }\n\n /** Returns the public key in compressed form. */\n async publicKey(): Promise<Uint8Array> {\n if (!this.cachedPublicKey) {\n throw new PrivySignerError(\n \"Public key was not available, you must call sign() first\",\n );\n }\n\n return this.cachedPublicKey;\n }\n\n private cachePublicKey(msgHash: string, signature: Signature) {\n if (this.cachedPublicKey) return;\n\n let secpSig = secp.Signature.fromCompact(\n ethers.getBytesCopy(ethers.concat([signature.r, signature.s])),\n );\n secpSig = secpSig.addRecoveryBit(signature.yParity);\n const publicKey = secpSig.recoverPublicKey(ethers.getBytes(msgHash));\n\n this.cachedPublicKey = publicKey.toBytes(true);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,SAAS,YAAY,kBAAkB;;;ACAhC,IAAM,cAAN,cAA0B,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASrC,YAAY,SAAiB,UAAkB;AAC7C,UAAM,IAAI,QAAQ,KAAK,OAAO,EAAE;AAEhC,SAAK,WAAW;AAChB,SAAK,OAAO,KAAK,YAAY;AAC7B,SAAK,QAAQ,IAAI,MAAM,EAAE;AAAA,EAC3B;AACF;;;ADaO,IAAM,wBAAwB,CAAC,OAKD;AALC,eACpC;AAAA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,EAnCX,IAgCsC,IAIjC,iBAJiC,IAIjC;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAnCF,MAAAA;AAsCE,QAAM,WAAW;AACjB,QAAM,YAAWA,MAAA,KAAK,aAAL,OAAAA,MAAiB,OAAO;AAEzC,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,YAAY,sCAAsC,QAAQ;AAAA,EACtE;AAEA,QAAM,kBAAkB,MAAY;AAClC,QAAI;AACF,YAAM,SAAS,QAAQ;AAAA,QACrB,QAAQ;AAAA,MACV,CAAC;AAAA,IACH,SAAQ;AACN,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,OAAO;AAEb,SAAO;AAAA,IACC,YAAY;AAAA;AAChB,cAAM,gBAAgB;AAEtB,cAAM,OAAO;AAAA,UACX,QAAQ;AAAA,UACR,QAAQ;AAAA,YACN;AAAA,YACA,SAAS;AAAA,cACP,QAAQ;AAAA,cACR,QAAQ,EAAE,MAAM,MAAM;AAAA,YACxB;AAAA,UACF;AAAA,QACF;AAEA,cAAM,EAAE,UAAU,IAAK,MAAM,SAAS,QAAQ,IAAI;AAElD,eAAO,WAAW,SAAS;AAAA,MAC7B;AAAA;AAAA,IACM,KAAK,SAAqB;AAAA;AAC9B,cAAM,gBAAgB;AAEtB,cAAM,OAAO;AAAA,UACX,QAAQ;AAAA,UACR,QAAQ;AAAA,YACN;AAAA,YACA,SAAS;AAAA,cACP,QAAQ;AAAA,cACR,QAAQ,EAAE,eAAe,WAAW,OAAO,GAAG,QAAQ,OAAO,KAAK;AAAA,YACpE;AAAA,UACF;AAAA,QACF;AAEA,cAAM,EAAE,UAAU,IAAK,MAAM,SAAS,QAAQ,IAAI;AAElD,eAAO,WAAW,SAAS;AAAA,MAC7B;AAAA;AAAA,EACF;AACF;;;AElGA,YAAY,QAAQ;AAGb,IAAM,gBAAN,MAAsC;AAAA,EAG3C,YAAY,YAAoB;AAC9B,SAAK,aAAa;AAAA,EACpB;AAAA,EAEa,KAAK,SAA0C;AAAA;AAC1D,aAAU,aAAU,SAAS,KAAK,UAAU;AAAA,IAC9C;AAAA;AAAA,EAEM,YAAY;AAAA;AAChB,aAAU,qBAAkB,KAAK,UAAU;AAAA,IAC7C;AAAA;AACF;;;ACjBA,SAAS,kBAAkB;AAC3B,SAAuB,cAAc,aAAAC,kBAAiB;AAG/C,IAAM,kBAAN,MAAwC;AAAA,EAG7C,YAAY,YAAqB;AAC/B,SAAK,aAAa;AAAA,EACpB;AAAA,EAEa,KAAK,SAA0C;AAAA;AAC1D,YAAM,UAAU,WAAW,OAAO;AAClC,YAAM,YAAY,MAAMC,WAAU,SAAS,KAAK,UAAU;AAE1D,aAAO,UAAU,kBAAkB;AAAA,IACrC;AAAA;AAAA;AAAA,EAGa,YAAiC;AAAA;AAC5C,aAAO,aAAa,KAAK,YAAY,IAAI;AAAA,IAC3C;AAAA;AACF;;;ACtBA,YAAY,UAAU;AACtB,SAAS,aAAAC,YAAW,cAAc;AAS3B,IAAM,mBAAN,cAA+B,YAAY;AAAA,EAChD,YAAY,SAAiB;AAC3B,UAAM,SAAS,OAAO;AAAA,EACxB;AACF;AAEO,IAAM,cAAN,MAAoC;AAAA,EAIzC,YAAY,UAA4B;AACtC,SAAK,WAAW;AAAA,EAClB;AAAA,EAEc,aAAa,aAAsC;AAAA;AAC/D,YAAM,eAAe,MAAM,KAAK,SAAS,QAAQ;AAAA,QAC/C,QAAQ;AAAA,QACR,QAAQ,CAAC,WAAW;AAAA,MACtB,CAAC;AACD,aAAO;AAAA,IACT;AAAA;AAAA,EAEM,KAAK,SAA0C;AAAA;AACnD,YAAM,SAAS,OAAO,UAAU,OAAO;AACvC,YAAM,iBAAiB,MAAM,KAAK,aAAa,MAAM;AACrD,YAAM,YAAYC,WAAU,KAAK,cAAc;AAC/C,WAAK,eAAe,QAAQ,SAAS;AACrC,aAAO,OAAO,SAAS,OAAO,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC;AAAA,IAClE;AAAA;AAAA;AAAA,EAGM,YAAiC;AAAA;AACrC,UAAI,CAAC,KAAK,iBAAiB;AACzB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,aAAO,KAAK;AAAA,IACd;AAAA;AAAA,EAEQ,eAAe,SAAiB,WAAsB;AAC5D,QAAI,KAAK,gBAAiB;AAE1B,QAAI,UAAe,eAAU;AAAA,MAC3B,OAAO,aAAa,OAAO,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC;AAAA,IAC/D;AACA,cAAU,QAAQ,eAAe,UAAU,OAAO;AAClD,UAAM,YAAY,QAAQ,iBAAiB,OAAO,SAAS,OAAO,CAAC;AAEnE,SAAK,kBAAkB,UAAU,QAAQ,IAAI;AAAA,EAC/C;AACF;","names":["_a","signAsync","signAsync","Signature","Signature"]}
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@sovereign-sdk/signers",
3
- "version": "0.0.4",
3
+ "version": "0.2.0",
4
4
  "description": "Signer interface and default implementations for use with Sovereign SDK applications",
5
+ "repository": "github:Sovereign-Labs/sovereign-sdk-web3-js",
5
6
  "files": [
6
7
  "dist",
7
8
  "README.md",
@@ -31,6 +32,10 @@
31
32
  "access": "public"
32
33
  },
33
34
  "dependencies": {
35
+ "@noble/ed25519": "^2.1.0",
36
+ "@noble/hashes": "^1.5.0",
37
+ "@noble/secp256k1": "^2.3.0",
38
+ "ethers": "^6.15.0",
34
39
  "@sovereign-sdk/utils": "^0.0.3"
35
40
  },
36
41
  "scripts": {