@0xsequence/wallet-core 3.0.0-beta.9 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/.turbo/turbo-lint.log +4 -0
  3. package/.turbo/turbo-typecheck.log +4 -0
  4. package/CHANGELOG.md +148 -0
  5. package/dist/bundler/bundlers/pimlico.d.ts +3 -2
  6. package/dist/bundler/bundlers/pimlico.d.ts.map +1 -1
  7. package/dist/bundler/bundlers/pimlico.js +9 -3
  8. package/dist/env.d.ts +22 -0
  9. package/dist/env.d.ts.map +1 -0
  10. package/dist/env.js +42 -0
  11. package/dist/index.d.ts +1 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +1 -0
  14. package/dist/signers/index.d.ts +1 -1
  15. package/dist/signers/passkey.d.ts +11 -3
  16. package/dist/signers/passkey.d.ts.map +1 -1
  17. package/dist/signers/passkey.js +12 -6
  18. package/dist/signers/pk/encrypted.d.ts +13 -2
  19. package/dist/signers/pk/encrypted.d.ts.map +1 -1
  20. package/dist/signers/pk/encrypted.js +94 -15
  21. package/dist/signers/pk/index.d.ts +1 -1
  22. package/dist/signers/session/explicit.d.ts.map +1 -1
  23. package/dist/signers/session/explicit.js +2 -2
  24. package/dist/signers/session/implicit.d.ts.map +1 -1
  25. package/dist/signers/session/implicit.js +1 -1
  26. package/dist/state/local/index.d.ts.map +1 -1
  27. package/dist/state/local/index.js +3 -2
  28. package/dist/state/local/indexed-db.d.ts +4 -1
  29. package/dist/state/local/indexed-db.d.ts.map +1 -1
  30. package/dist/state/local/indexed-db.js +12 -2
  31. package/dist/state/remote/dev-http.d.ts +2 -1
  32. package/dist/state/remote/dev-http.d.ts.map +1 -1
  33. package/dist/state/remote/dev-http.js +11 -5
  34. package/dist/state/sequence/index.d.ts +2 -1
  35. package/dist/state/sequence/index.d.ts.map +1 -1
  36. package/dist/state/sequence/index.js +14 -5
  37. package/dist/wallet.js +2 -2
  38. package/eslint.config.js +12 -0
  39. package/package.json +12 -10
  40. package/src/bundler/bundlers/pimlico.ts +10 -4
  41. package/src/env.ts +68 -0
  42. package/src/index.ts +1 -0
  43. package/src/signers/index.ts +1 -1
  44. package/src/signers/passkey.ts +21 -5
  45. package/src/signers/pk/encrypted.ts +103 -14
  46. package/src/signers/pk/index.ts +1 -1
  47. package/src/signers/session/explicit.ts +2 -9
  48. package/src/signers/session/implicit.ts +1 -2
  49. package/src/state/local/index.ts +4 -2
  50. package/src/state/local/indexed-db.ts +15 -2
  51. package/src/state/remote/dev-http.ts +11 -5
  52. package/src/state/sequence/index.ts +15 -6
  53. package/src/wallet.ts +2 -2
  54. package/test/constants.ts +2 -0
  55. package/test/envelope.test.ts +0 -1
  56. package/test/signers-pk.test.ts +1 -1
  57. package/test/signers-session-implicit.test.ts +0 -2
  58. package/test/state/debug.test.ts +2 -3
@@ -1,5 +1,5 @@
1
1
 
2
- 
3
- > @0xsequence/wallet-core@3.0.0-beta.9 build /Users/taylan/Development/Horizon/sequence.js/packages/wallet/core
2
+
3
+ > @0xsequence/wallet-core@3.0.0 build /home/taylan/development/sequence/sequence.js/packages/wallet/core
4
4
  > tsc
5
5
 
@@ -0,0 +1,4 @@
1
+
2
+ > @0xsequence/wallet-core@3.0.0 lint /home/taylan/development/sequence/sequence.js/packages/wallet/core
3
+ > eslint . --max-warnings 0
4
+
@@ -0,0 +1,4 @@
1
+
2
+ > @0xsequence/wallet-core@3.0.0 typecheck /home/taylan/development/sequence/sequence.js/packages/wallet/core
3
+ > tsc --noEmit
4
+
package/CHANGELOG.md CHANGED
@@ -1,5 +1,153 @@
1
1
  # @0xsequence/wallet-core
2
2
 
3
+ ## 3.0.0
4
+
5
+ ### Patch Changes
6
+
7
+ - f68be62: ethauth support
8
+ - 49d8a2f: New chains, minor fixes
9
+ - 3411232: Beta release with dapp connector fixes
10
+ - 23cb9e9: New chains, relayer rpc fix
11
+ - f5f6a7a: dapp-client updates
12
+ - e7de3b1: Fix signer 404 error, minor fixes
13
+ - 493836f: multicall3 optimization
14
+ - 30e1f1a: 3.0.0 beta
15
+ - d5017e8: Beta release for v3
16
+ - 24a5fab: Final RC before 3.0.0
17
+ - e5e1a03: Apple auth fixes
18
+ - 0b63113: Apple auth fix
19
+ - a89134a: Userdata service updates
20
+ - 7c6c811: 3.0.0-beta.3 with fixes
21
+ - 3.0.0 release
22
+ - 98ce38b: 3.0.0-beta.2 with identity instrument updates
23
+ - 747e6b5: Relayer fee options fix
24
+ - 40c19ff: dapp client updates for EOA login
25
+ - 6d5de25: 3.0.0-beta.1
26
+ - 934acd1: RC5 upgrade
27
+ - Updated dependencies [f68be62]
28
+ - Updated dependencies [49d8a2f]
29
+ - Updated dependencies [3411232]
30
+ - Updated dependencies [23cb9e9]
31
+ - Updated dependencies [f5f6a7a]
32
+ - Updated dependencies [e7de3b1]
33
+ - Updated dependencies [493836f]
34
+ - Updated dependencies [30e1f1a]
35
+ - Updated dependencies [d5017e8]
36
+ - Updated dependencies [24a5fab]
37
+ - Updated dependencies [e5e1a03]
38
+ - Updated dependencies [0b63113]
39
+ - Updated dependencies [a89134a]
40
+ - Updated dependencies [7c6c811]
41
+ - Updated dependencies
42
+ - Updated dependencies [98ce38b]
43
+ - Updated dependencies [747e6b5]
44
+ - Updated dependencies [40c19ff]
45
+ - Updated dependencies [6d5de25]
46
+ - Updated dependencies [934acd1]
47
+ - @0xsequence/guard@3.0.0
48
+ - @0xsequence/relayer@3.0.0
49
+ - @0xsequence/wallet-primitives@3.0.0
50
+
51
+ ## 3.0.0-beta.19
52
+
53
+ ### Patch Changes
54
+
55
+ - Final RC before 3.0.0
56
+ - Updated dependencies
57
+ - @0xsequence/guard@3.0.0-beta.19
58
+ - @0xsequence/relayer@3.0.0-beta.19
59
+ - @0xsequence/wallet-primitives@3.0.0-beta.19
60
+
61
+ ## 3.0.0-beta.18
62
+
63
+ ### Patch Changes
64
+
65
+ - multicall3 optimization
66
+ - Updated dependencies
67
+ - @0xsequence/guard@3.0.0-beta.18
68
+ - @0xsequence/relayer@3.0.0-beta.18
69
+ - @0xsequence/wallet-primitives@3.0.0-beta.18
70
+
71
+ ## 3.0.0-beta.17
72
+
73
+ ### Patch Changes
74
+
75
+ - New chains, relayer rpc fix
76
+ - Updated dependencies
77
+ - @0xsequence/guard@3.0.0-beta.17
78
+ - @0xsequence/relayer@3.0.0-beta.17
79
+ - @0xsequence/wallet-primitives@3.0.0-beta.17
80
+
81
+ ## 3.0.0-beta.16
82
+
83
+ ### Patch Changes
84
+
85
+ - ethauth support
86
+ - Updated dependencies
87
+ - @0xsequence/guard@3.0.0-beta.16
88
+ - @0xsequence/relayer@3.0.0-beta.16
89
+ - @0xsequence/wallet-primitives@3.0.0-beta.16
90
+
91
+ ## 3.0.0-beta.15
92
+
93
+ ### Patch Changes
94
+
95
+ - New chains, minor fixes
96
+ - Updated dependencies
97
+ - @0xsequence/guard@3.0.0-beta.15
98
+ - @0xsequence/relayer@3.0.0-beta.15
99
+ - @0xsequence/wallet-primitives@3.0.0-beta.15
100
+
101
+ ## 3.0.0-beta.14
102
+
103
+ ### Patch Changes
104
+
105
+ - Relayer fee options fix
106
+ - Updated dependencies
107
+ - @0xsequence/guard@3.0.0-beta.14
108
+ - @0xsequence/relayer@3.0.0-beta.14
109
+ - @0xsequence/wallet-primitives@3.0.0-beta.14
110
+
111
+ ## 3.0.0-beta.13
112
+
113
+ ### Patch Changes
114
+
115
+ - Userdata service updates
116
+ - Updated dependencies
117
+ - @0xsequence/guard@3.0.0-beta.13
118
+ - @0xsequence/relayer@3.0.0-beta.13
119
+ - @0xsequence/wallet-primitives@3.0.0-beta.13
120
+
121
+ ## 3.0.0-beta.12
122
+
123
+ ### Patch Changes
124
+
125
+ - Beta release with dapp connector fixes
126
+ - Updated dependencies
127
+ - @0xsequence/guard@3.0.0-beta.12
128
+ - @0xsequence/relayer@3.0.0-beta.12
129
+ - @0xsequence/wallet-primitives@3.0.0-beta.12
130
+
131
+ ## 3.0.0-beta.11
132
+
133
+ ### Patch Changes
134
+
135
+ - 3.0.0 beta
136
+ - Updated dependencies
137
+ - @0xsequence/guard@3.0.0-beta.11
138
+ - @0xsequence/relayer@3.0.0-beta.11
139
+ - @0xsequence/wallet-primitives@3.0.0-beta.11
140
+
141
+ ## 3.0.0-beta.10
142
+
143
+ ### Patch Changes
144
+
145
+ - dapp-client updates
146
+ - Updated dependencies
147
+ - @0xsequence/guard@3.0.0-beta.10
148
+ - @0xsequence/relayer@3.0.0-beta.10
149
+ - @0xsequence/wallet-primitives@3.0.0-beta.10
150
+
3
151
  ## 3.0.0-beta.9
4
152
 
5
153
  ### Patch Changes
@@ -4,11 +4,12 @@ import { Provider, Hex, Address } from 'ox';
4
4
  import { UserOperation } from 'ox/erc4337';
5
5
  import { Relayer } from '@0xsequence/relayer';
6
6
  export declare class PimlicoBundler implements Bundler {
7
- readonly kind: 'bundler';
7
+ readonly kind = "bundler";
8
8
  readonly id: string;
9
9
  readonly provider: Provider.Provider;
10
10
  readonly bundlerRpcUrl: string;
11
- constructor(bundlerRpcUrl: string, provider: Provider.Provider | string);
11
+ private readonly fetcher;
12
+ constructor(bundlerRpcUrl: string, provider: Provider.Provider | string, fetcher?: typeof fetch);
12
13
  isAvailable(entrypoint: Address.Address, chainId: number): Promise<boolean>;
13
14
  relay(entrypoint: Address.Address, userOperation: UserOperation.RpcV07): Promise<{
14
15
  opHash: Hex.Hex;
@@ -1 +1 @@
1
- {"version":3,"file":"pimlico.d.ts","sourceRoot":"","sources":["../../../src/bundler/bundlers/pimlico.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAgB,MAAM,IAAI,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAa7C,qBAAa,cAAe,YAAW,OAAO;IAC5C,SAAgB,IAAI,EAAE,SAAS,CAAY;IAC3C,SAAgB,EAAE,EAAE,MAAM,CAAA;IAE1B,SAAgB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAA;IAC3C,SAAgB,aAAa,EAAE,MAAM,CAAA;gBAEzB,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,GAAG,MAAM;IAMjE,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAa3E,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAA;KAAE,CAAC;IAKrG,cAAc,CAClB,MAAM,EAAE,OAAO,CAAC,OAAO,EACvB,OAAO,EAAE,OAAO,CAAC,YAAY,GAC5B,OAAO,CACR;QACE,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAA;QACpC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAA;KAC9B,EAAE,CACJ;IAgCD,OAAO,CAAC,4BAA4B;IAiB9B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;YA4DnE,UAAU;CAWzB"}
1
+ {"version":3,"file":"pimlico.d.ts","sourceRoot":"","sources":["../../../src/bundler/bundlers/pimlico.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAgB,MAAM,IAAI,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAa7C,qBAAa,cAAe,YAAW,OAAO;IAC5C,SAAgB,IAAI,aAAY;IAChC,SAAgB,EAAE,EAAE,MAAM,CAAA;IAE1B,SAAgB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAA;IAC3C,SAAgB,aAAa,EAAE,MAAM,CAAA;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;gBAE1B,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK;IAWzF,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAa3E,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAA;KAAE,CAAC;IAKrG,cAAc,CAClB,MAAM,EAAE,OAAO,CAAC,OAAO,EACvB,OAAO,EAAE,OAAO,CAAC,YAAY,GAC5B,OAAO,CACR;QACE,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAA;QACpC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAA;KAC9B,EAAE,CACJ;IAgCD,OAAO,CAAC,4BAA4B;IAiB9B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;YA4DnE,UAAU;CAWzB"}
@@ -6,10 +6,16 @@ export class PimlicoBundler {
6
6
  id;
7
7
  provider;
8
8
  bundlerRpcUrl;
9
- constructor(bundlerRpcUrl, provider) {
9
+ fetcher;
10
+ constructor(bundlerRpcUrl, provider, fetcher) {
10
11
  this.id = `pimlico-erc4337-${bundlerRpcUrl}`;
11
12
  this.provider = typeof provider === 'string' ? Provider.from(RpcTransport.fromHttp(provider)) : provider;
12
13
  this.bundlerRpcUrl = bundlerRpcUrl;
14
+ const resolvedFetch = fetcher ?? globalThis.fetch;
15
+ if (!resolvedFetch) {
16
+ throw new Error('fetch is not available');
17
+ }
18
+ this.fetcher = resolvedFetch;
13
19
  }
14
20
  async isAvailable(entrypoint, chainId) {
15
21
  const [bundlerChainId, supportedEntryPoints] = await Promise.all([
@@ -68,7 +74,7 @@ export class PimlicoBundler {
68
74
  try {
69
75
  pimlico = await this.bundlerRpc('pimlico_getUserOperationStatus', [opHash]);
70
76
  }
71
- catch (_) {
77
+ catch {
72
78
  /* ignore - not Pimlico or endpoint down */
73
79
  }
74
80
  if (pimlico) {
@@ -114,7 +120,7 @@ export class PimlicoBundler {
114
120
  }
115
121
  async bundlerRpc(method, params) {
116
122
  const body = JSON.stringify({ jsonrpc: '2.0', id: 1, method, params });
117
- const res = await fetch(this.bundlerRpcUrl, {
123
+ const res = await this.fetcher(this.bundlerRpcUrl, {
118
124
  method: 'POST',
119
125
  headers: { 'content-type': 'application/json' },
120
126
  body,
package/dist/env.d.ts ADDED
@@ -0,0 +1,22 @@
1
+ export type StorageLike = {
2
+ getItem: (key: string) => string | null;
3
+ setItem: (key: string, value: string) => void;
4
+ removeItem: (key: string) => void;
5
+ };
6
+ export type CryptoLike = {
7
+ subtle: SubtleCrypto;
8
+ getRandomValues: <T extends ArrayBufferView>(array: T) => T;
9
+ };
10
+ export type TextEncodingLike = {
11
+ TextEncoder: typeof TextEncoder;
12
+ TextDecoder: typeof TextDecoder;
13
+ };
14
+ export type CoreEnv = {
15
+ fetch?: typeof fetch;
16
+ crypto?: CryptoLike;
17
+ storage?: StorageLike;
18
+ indexedDB?: IDBFactory;
19
+ text?: Partial<TextEncodingLike>;
20
+ };
21
+ export declare function resolveCoreEnv(env?: CoreEnv): CoreEnv;
22
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;IACvC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7C,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,YAAY,CAAA;IACpB,eAAe,EAAE,CAAC,CAAC,SAAS,eAAe,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CAAA;CAC5D,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,OAAO,WAAW,CAAA;IAC/B,WAAW,EAAE,OAAO,WAAW,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IACpB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,SAAS,CAAC,EAAE,UAAU,CAAA;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;CACjC,CAAA;AAYD,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO,CAiCrD"}
package/dist/env.js ADDED
@@ -0,0 +1,42 @@
1
+ function isStorageLike(value) {
2
+ if (!value || typeof value !== 'object')
3
+ return false;
4
+ const candidate = value;
5
+ return (typeof candidate.getItem === 'function' &&
6
+ typeof candidate.setItem === 'function' &&
7
+ typeof candidate.removeItem === 'function');
8
+ }
9
+ export function resolveCoreEnv(env) {
10
+ const globalObj = globalThis;
11
+ const windowObj = typeof window !== 'undefined' ? window : (globalObj.window ?? {});
12
+ let storage;
13
+ let text;
14
+ if (isStorageLike(env?.storage)) {
15
+ storage = env.storage;
16
+ }
17
+ else if (isStorageLike(windowObj.localStorage)) {
18
+ storage = windowObj.localStorage;
19
+ }
20
+ else if (isStorageLike(globalObj.localStorage)) {
21
+ storage = globalObj.localStorage;
22
+ }
23
+ if (env?.text) {
24
+ if (!env.text.TextEncoder || !env.text.TextDecoder) {
25
+ throw new Error('env.text must provide both TextEncoder and TextDecoder');
26
+ }
27
+ text = env.text;
28
+ }
29
+ else {
30
+ text = {
31
+ TextEncoder: windowObj.TextEncoder ?? globalObj.TextEncoder,
32
+ TextDecoder: windowObj.TextDecoder ?? globalObj.TextDecoder,
33
+ };
34
+ }
35
+ return {
36
+ fetch: env?.fetch ?? windowObj.fetch ?? globalObj.fetch,
37
+ crypto: env?.crypto ?? windowObj.crypto ?? globalObj.crypto,
38
+ storage,
39
+ indexedDB: env?.indexedDB ?? windowObj.indexedDB ?? globalObj.indexedDB,
40
+ text,
41
+ };
42
+ }
package/dist/index.d.ts CHANGED
@@ -4,5 +4,6 @@ export * as State from './state/index.js';
4
4
  export * as Bundler from './bundler/index.js';
5
5
  export * as Envelope from './envelope.js';
6
6
  export * as Utils from './utils/index.js';
7
+ export * from './env.js';
7
8
  export { type ExplicitSessionConfig, type ExplicitSession, type ImplicitSession, type Session, } from './utils/session/types.js';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAE3B,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,OAAO,GACb,MAAM,0BAA0B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAE3B,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,cAAc,UAAU,CAAA;AACxB,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,OAAO,GACb,MAAM,0BAA0B,CAAA"}
package/dist/index.js CHANGED
@@ -4,3 +4,4 @@ export * as State from './state/index.js';
4
4
  export * as Bundler from './bundler/index.js';
5
5
  export * as Envelope from './envelope.js';
6
6
  export * as Utils from './utils/index.js';
7
+ export * from './env.js';
@@ -16,7 +16,7 @@ export interface SapientSigner {
16
16
  signSapient: (wallet: Address.Address, chainId: number, payload: Payload.Parented, imageHash: Hex.Hex) => Config.SignerSignature<Signature.SignatureOfSapientSignerLeaf>;
17
17
  }
18
18
  export interface Witnessable {
19
- witness: (stateWriter: State.Writer, wallet: Address.Address, extra?: Object) => Promise<void>;
19
+ witness: (stateWriter: State.Writer, wallet: Address.Address, extra?: object) => Promise<void>;
20
20
  }
21
21
  type MaybePromise<T> = T | Promise<T>;
22
22
  export declare function isSapientSigner(signer: Signer | SapientSigner): signer is SapientSigner;
@@ -1,20 +1,27 @@
1
1
  import { Hex, Address } from 'ox';
2
2
  import { Payload, Extensions } from '@0xsequence/wallet-primitives';
3
3
  import type { Signature as SignatureTypes } from '@0xsequence/wallet-primitives';
4
+ import { WebAuthnP256 } from 'ox';
4
5
  import { State } from '../index.js';
5
6
  import { SapientSigner, Witnessable } from './index.js';
7
+ export type WebAuthnLike = Pick<typeof WebAuthnP256, 'createCredential' | 'sign'>;
6
8
  export type PasskeyOptions = {
7
9
  extensions: Pick<Extensions.Extensions, 'passkeys'>;
8
10
  publicKey: Extensions.Passkeys.PublicKey;
9
11
  credentialId: string;
10
12
  embedMetadata?: boolean;
11
13
  metadata?: Extensions.Passkeys.PasskeyMetadata;
14
+ webauthn?: WebAuthnLike;
12
15
  };
13
16
  export type CreatePasskeyOptions = {
14
17
  stateProvider?: State.Provider;
15
18
  requireUserVerification?: boolean;
16
19
  credentialName?: string;
17
20
  embedMetadata?: boolean;
21
+ webauthn?: WebAuthnLike;
22
+ };
23
+ export type FindPasskeyOptions = {
24
+ webauthn?: WebAuthnLike;
18
25
  };
19
26
  export type WitnessMessage = {
20
27
  action: 'consent-to-be-part-of-wallet';
@@ -31,11 +38,12 @@ export declare class Passkey implements SapientSigner, Witnessable {
31
38
  readonly imageHash: Hex.Hex;
32
39
  readonly embedMetadata: boolean;
33
40
  readonly metadata?: Extensions.Passkeys.PasskeyMetadata;
41
+ private readonly webauthn;
34
42
  constructor(options: PasskeyOptions);
35
- static loadFromWitness(stateReader: State.Reader, extensions: Pick<Extensions.Extensions, 'passkeys'>, wallet: Address.Address, imageHash: Hex.Hex): Promise<Passkey>;
43
+ static loadFromWitness(stateReader: State.Reader, extensions: Pick<Extensions.Extensions, 'passkeys'>, wallet: Address.Address, imageHash: Hex.Hex, options?: FindPasskeyOptions): Promise<Passkey>;
36
44
  static create(extensions: Pick<Extensions.Extensions, 'passkeys'>, options?: CreatePasskeyOptions): Promise<Passkey>;
37
- static find(stateReader: State.Reader, extensions: Pick<Extensions.Extensions, 'passkeys'>): Promise<Passkey | undefined>;
45
+ static find(stateReader: State.Reader, extensions: Pick<Extensions.Extensions, 'passkeys'>, options?: FindPasskeyOptions): Promise<Passkey | undefined>;
38
46
  signSapient(wallet: Address.Address, chainId: number, payload: Payload.Parented, imageHash: Hex.Hex): Promise<SignatureTypes.SignatureOfSapientSignerLeaf>;
39
- witness(stateWriter: State.Writer, wallet: Address.Address, extra?: Object): Promise<void>;
47
+ witness(stateWriter: State.Writer, wallet: Address.Address, extra?: object): Promise<void>;
40
48
  }
41
49
  //# sourceMappingURL=passkey.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"passkey.d.ts","sourceRoot":"","sources":["../../src/signers/passkey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAS,OAAO,EAAc,MAAM,IAAI,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,KAAK,EAAE,SAAS,IAAI,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAEhF,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAEvD,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;IACnD,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAA;IACxC,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAA;CAC/C,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAA;IAC9B,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,8BAA8B,CAAA;IACtC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAA;IACvB,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAA;IACxC,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAA;CAC/C,CAAA;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,cAAc,CAO5E;AAED,qBAAa,OAAQ,YAAW,aAAa,EAAE,WAAW;IACxD,SAAgB,YAAY,EAAE,MAAM,CAAA;IAEpC,SAAgB,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAA;IACxD,SAAgB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAA;IACxC,SAAgB,SAAS,EAAE,GAAG,CAAC,GAAG,CAAA;IAClC,SAAgB,aAAa,EAAE,OAAO,CAAA;IACtC,SAAgB,QAAQ,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAA;gBAElD,OAAO,EAAE,cAAc;WAStB,eAAe,CAC1B,WAAW,EAAE,KAAK,CAAC,MAAM,EACzB,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,EACnD,MAAM,EAAE,OAAO,CAAC,OAAO,EACvB,SAAS,EAAE,GAAG,CAAC,GAAG;WAkCP,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,EAAE,oBAAoB;WAoC1F,IAAI,CACf,WAAW,EAAE,KAAK,CAAC,MAAM,EACzB,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,GAClD,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAyFzB,WAAW,CACf,MAAM,EAAE,OAAO,CAAC,OAAO,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,CAAC,QAAQ,EACzB,SAAS,EAAE,GAAG,CAAC,GAAG,GACjB,OAAO,CAAC,cAAc,CAAC,4BAA4B,CAAC;IAkCjD,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAqBjG"}
1
+ {"version":3,"file":"passkey.d.ts","sourceRoot":"","sources":["../../src/signers/passkey.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ export class Passkey {
14
14
  imageHash;
15
15
  embedMetadata;
16
16
  metadata;
17
+ webauthn;
17
18
  constructor(options) {
18
19
  this.address = options.extensions.passkeys;
19
20
  this.publicKey = options.publicKey;
@@ -21,8 +22,9 @@ export class Passkey {
21
22
  this.embedMetadata = options.embedMetadata ?? false;
22
23
  this.imageHash = Extensions.Passkeys.rootFor(options.publicKey);
23
24
  this.metadata = options.metadata;
25
+ this.webauthn = options.webauthn ?? WebAuthnP256;
24
26
  }
25
- static async loadFromWitness(stateReader, extensions, wallet, imageHash) {
27
+ static async loadFromWitness(stateReader, extensions, wallet, imageHash, options) {
26
28
  // In the witness we will find the public key, and may find the credential id
27
29
  const witness = await stateReader.getWitnessForSapient(wallet, extensions.passkeys, imageHash);
28
30
  if (!witness) {
@@ -47,11 +49,13 @@ export class Passkey {
47
49
  publicKey: message.publicKey,
48
50
  embedMetadata: decodedSignature.embedMetadata,
49
51
  metadata,
52
+ webauthn: options?.webauthn,
50
53
  });
51
54
  }
52
55
  static async create(extensions, options) {
56
+ const webauthn = options?.webauthn ?? WebAuthnP256;
53
57
  const name = options?.credentialName ?? `Sequence (${Date.now()})`;
54
- const credential = await WebAuthnP256.createCredential({
58
+ const credential = await webauthn.createCredential({
55
59
  user: {
56
60
  name,
57
61
  },
@@ -72,14 +76,16 @@ export class Passkey {
72
76
  },
73
77
  embedMetadata: options?.embedMetadata,
74
78
  metadata,
79
+ webauthn,
75
80
  });
76
81
  if (options?.stateProvider) {
77
82
  await options.stateProvider.saveTree(Extensions.Passkeys.toTree(passkey.publicKey));
78
83
  }
79
84
  return passkey;
80
85
  }
81
- static async find(stateReader, extensions) {
82
- const response = await WebAuthnP256.sign({ challenge: Hex.random(32) });
86
+ static async find(stateReader, extensions, options) {
87
+ const webauthn = options?.webauthn ?? WebAuthnP256;
88
+ const response = await webauthn.sign({ challenge: Hex.random(32) });
83
89
  if (!response.raw)
84
90
  throw new Error('No credential returned');
85
91
  const authenticatorDataBytes = Bytes.fromHex(response.metadata.authenticatorData);
@@ -147,7 +153,7 @@ export class Passkey {
147
153
  if (flattened.length > 1) {
148
154
  console.warn('Multiple signers found for passkey', flattened);
149
155
  }
150
- return Passkey.loadFromWitness(stateReader, extensions, flattened[0].wallet, flattened[0].imageHash);
156
+ return Passkey.loadFromWitness(stateReader, extensions, flattened[0].wallet, flattened[0].imageHash, options);
151
157
  }
152
158
  async signSapient(wallet, chainId, payload, imageHash) {
153
159
  if (this.imageHash !== imageHash) {
@@ -155,7 +161,7 @@ export class Passkey {
155
161
  throw new Error('Unexpected image hash');
156
162
  }
157
163
  const challenge = Hex.fromBytes(Payload.hash(wallet, chainId, payload));
158
- const response = await WebAuthnP256.sign({
164
+ const response = await this.webauthn.sign({
159
165
  challenge,
160
166
  credentialId: this.credentialId,
161
167
  userVerification: this.publicKey.requireUserVerification ? 'required' : 'discouraged',
@@ -1,4 +1,5 @@
1
1
  import { Address, PublicKey, Bytes } from 'ox';
2
+ import { type CoreEnv } from '../../env.js';
2
3
  import { PkStore } from './index.js';
3
4
  export interface EncryptedData {
4
5
  iv: BufferSource;
@@ -9,11 +10,17 @@ export interface EncryptedData {
9
10
  }
10
11
  export declare class EncryptedPksDb {
11
12
  private readonly localStorageKeyPrefix;
13
+ private readonly env?;
12
14
  private tableName;
13
15
  private dbName;
14
16
  private dbVersion;
15
- constructor(localStorageKeyPrefix?: string, tableName?: string);
17
+ constructor(localStorageKeyPrefix?: string, tableName?: string, env?: CoreEnv | undefined);
16
18
  private computeDbKey;
19
+ private getIndexedDB;
20
+ private getStorage;
21
+ private getCrypto;
22
+ private getTextEncoderCtor;
23
+ private getTextDecoderCtor;
17
24
  private openDB;
18
25
  private putData;
19
26
  private getData;
@@ -26,7 +33,11 @@ export declare class EncryptedPksDb {
26
33
  }
27
34
  export declare class EncryptedPkStore implements PkStore {
28
35
  private readonly encrypted;
29
- constructor(encrypted: EncryptedData);
36
+ private readonly env?;
37
+ constructor(encrypted: EncryptedData, env?: CoreEnv | undefined);
38
+ private getStorage;
39
+ private getCrypto;
40
+ private getTextDecoderCtor;
30
41
  address(): Address.Address;
31
42
  publicKey(): PublicKey.PublicKey;
32
43
  signDigest(digest: Bytes.Bytes): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"encrypted.d.ts","sourceRoot":"","sources":["../../../src/signers/pk/encrypted.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,OAAO,EAAE,SAAS,EAAa,KAAK,EAAE,MAAM,IAAI,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,YAAY,CAAA;IAChB,IAAI,EAAE,YAAY,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAA;IACxB,SAAS,EAAE,SAAS,CAAC,SAAS,CAAA;CAC/B;AAED,qBAAa,cAAc;IAMvB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IALxC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAY;gBAGV,qBAAqB,GAAE,MAAoB,EAC5D,SAAS,GAAE,MAAe;IAK5B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,MAAM;YAcA,OAAO;YAWP,OAAO;YAWP,UAAU;IAWlB,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC;IAiC1C,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAK/E,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAMpF,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAK3C,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO;CAMtC;AAED,qBAAa,gBAAiB,YAAW,OAAO;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,aAAa;IAErD,OAAO,IAAI,OAAO,CAAC,OAAO;IAI1B,SAAS,IAAI,SAAS,CAAC,SAAS;IAI1B,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAc1F"}
1
+ {"version":3,"file":"encrypted.d.ts","sourceRoot":"","sources":["../../../src/signers/pk/encrypted.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,OAAO,EAAE,SAAS,EAAa,KAAK,EAAE,MAAM,IAAI,CAAA;AAC9D,OAAO,EAAkB,KAAK,OAAO,EAA4D,MAAM,cAAc,CAAA;AACrH,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,YAAY,CAAA;IAChB,IAAI,EAAE,YAAY,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAA;IACxB,SAAS,EAAE,SAAS,CAAC,SAAS,CAAA;CAC/B;AAED,qBAAa,cAAc;IAMvB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IAEtC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;IAPvB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAY;gBAGV,qBAAqB,GAAE,MAAoB,EAC5D,SAAS,GAAE,MAAe,EACT,GAAG,CAAC,EAAE,OAAO,YAAA;IAKhC,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,MAAM;YAcA,OAAO;YAWP,OAAO;YAWP,UAAU;IAWlB,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC;IAqC1C,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAK/E,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAMpF,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAK3C,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO;CAMtC;AAED,qBAAa,gBAAiB,YAAW,OAAO;IAE5C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;gBADJ,SAAS,EAAE,aAAa,EACxB,GAAG,CAAC,EAAE,OAAO,YAAA;IAGhC,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,IAAI,OAAO,CAAC,OAAO;IAI1B,SAAS,IAAI,SAAS,CAAC,SAAS;IAI1B,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAkB1F"}