@0xsequence/wallet-core 0.0.0-20250520201059

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 (106) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/CHANGELOG.md +9 -0
  3. package/LICENSE +202 -0
  4. package/dist/envelope.d.ts +34 -0
  5. package/dist/envelope.d.ts.map +1 -0
  6. package/dist/envelope.js +96 -0
  7. package/dist/index.d.ts +6 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +5 -0
  10. package/dist/relayer/index.d.ts +4 -0
  11. package/dist/relayer/index.d.ts.map +1 -0
  12. package/dist/relayer/index.js +3 -0
  13. package/dist/relayer/local.d.ts +28 -0
  14. package/dist/relayer/local.d.ts.map +1 -0
  15. package/dist/relayer/local.js +101 -0
  16. package/dist/relayer/pk-relayer.d.ts +18 -0
  17. package/dist/relayer/pk-relayer.d.ts.map +1 -0
  18. package/dist/relayer/pk-relayer.js +88 -0
  19. package/dist/relayer/relayer.d.ts +39 -0
  20. package/dist/relayer/relayer.d.ts.map +1 -0
  21. package/dist/relayer/relayer.js +1 -0
  22. package/dist/signers/index.d.ts +23 -0
  23. package/dist/signers/index.d.ts.map +1 -0
  24. package/dist/signers/index.js +10 -0
  25. package/dist/signers/passkey.d.ts +41 -0
  26. package/dist/signers/passkey.d.ts.map +1 -0
  27. package/dist/signers/passkey.js +196 -0
  28. package/dist/signers/pk/encrypted.d.ts +37 -0
  29. package/dist/signers/pk/encrypted.d.ts.map +1 -0
  30. package/dist/signers/pk/encrypted.js +123 -0
  31. package/dist/signers/pk/index.d.ts +35 -0
  32. package/dist/signers/pk/index.d.ts.map +1 -0
  33. package/dist/signers/pk/index.js +51 -0
  34. package/dist/signers/session/explicit.d.ts +18 -0
  35. package/dist/signers/session/explicit.d.ts.map +1 -0
  36. package/dist/signers/session/explicit.js +126 -0
  37. package/dist/signers/session/implicit.d.ts +20 -0
  38. package/dist/signers/session/implicit.d.ts.map +1 -0
  39. package/dist/signers/session/implicit.js +120 -0
  40. package/dist/signers/session/index.d.ts +4 -0
  41. package/dist/signers/session/index.d.ts.map +1 -0
  42. package/dist/signers/session/index.js +3 -0
  43. package/dist/signers/session/session.d.ts +11 -0
  44. package/dist/signers/session/session.d.ts.map +1 -0
  45. package/dist/signers/session/session.js +1 -0
  46. package/dist/signers/session-manager.d.ts +33 -0
  47. package/dist/signers/session-manager.d.ts.map +1 -0
  48. package/dist/signers/session-manager.js +181 -0
  49. package/dist/state/cached.d.ts +59 -0
  50. package/dist/state/cached.d.ts.map +1 -0
  51. package/dist/state/cached.js +157 -0
  52. package/dist/state/index.d.ts +61 -0
  53. package/dist/state/index.d.ts.map +1 -0
  54. package/dist/state/index.js +4 -0
  55. package/dist/state/local/index.d.ts +98 -0
  56. package/dist/state/local/index.d.ts.map +1 -0
  57. package/dist/state/local/index.js +247 -0
  58. package/dist/state/local/indexed-db.d.ts +41 -0
  59. package/dist/state/local/indexed-db.d.ts.map +1 -0
  60. package/dist/state/local/indexed-db.js +149 -0
  61. package/dist/state/local/memory.d.ts +41 -0
  62. package/dist/state/local/memory.d.ts.map +1 -0
  63. package/dist/state/local/memory.js +77 -0
  64. package/dist/state/remote/dev-http.d.ts +57 -0
  65. package/dist/state/remote/dev-http.d.ts.map +1 -0
  66. package/dist/state/remote/dev-http.js +162 -0
  67. package/dist/state/remote/index.d.ts +2 -0
  68. package/dist/state/remote/index.d.ts.map +1 -0
  69. package/dist/state/remote/index.js +1 -0
  70. package/dist/state/utils.d.ts +12 -0
  71. package/dist/state/utils.d.ts.map +1 -0
  72. package/dist/state/utils.js +29 -0
  73. package/dist/wallet.d.ts +58 -0
  74. package/dist/wallet.d.ts.map +1 -0
  75. package/dist/wallet.js +306 -0
  76. package/package.json +33 -0
  77. package/src/envelope.ts +148 -0
  78. package/src/index.ts +6 -0
  79. package/src/relayer/index.ts +3 -0
  80. package/src/relayer/local.ts +125 -0
  81. package/src/relayer/pk-relayer.ts +110 -0
  82. package/src/relayer/relayer.ts +52 -0
  83. package/src/signers/index.ts +44 -0
  84. package/src/signers/passkey.ts +284 -0
  85. package/src/signers/pk/encrypted.ts +153 -0
  86. package/src/signers/pk/index.ts +77 -0
  87. package/src/signers/session/explicit.ts +173 -0
  88. package/src/signers/session/implicit.ts +145 -0
  89. package/src/signers/session/index.ts +3 -0
  90. package/src/signers/session/session.ts +26 -0
  91. package/src/signers/session-manager.ts +241 -0
  92. package/src/state/cached.ts +233 -0
  93. package/src/state/index.ts +85 -0
  94. package/src/state/local/index.ts +422 -0
  95. package/src/state/local/indexed-db.ts +204 -0
  96. package/src/state/local/memory.ts +126 -0
  97. package/src/state/remote/dev-http.ts +253 -0
  98. package/src/state/remote/index.ts +1 -0
  99. package/src/state/utils.ts +50 -0
  100. package/src/wallet.ts +390 -0
  101. package/test/constants.ts +15 -0
  102. package/test/session-manager.test.ts +451 -0
  103. package/test/setup.ts +63 -0
  104. package/test/wallet.test.ts +90 -0
  105. package/tsconfig.json +10 -0
  106. package/vitest.config.ts +9 -0
@@ -0,0 +1,39 @@
1
+ import { Payload } from '@0xsequence/wallet-primitives';
2
+ import { Address, Hex } from 'ox';
3
+ export interface FeeOption {
4
+ token: Address.Address;
5
+ to: string;
6
+ value: string;
7
+ gasLimit: number;
8
+ }
9
+ export interface FeeQuote {
10
+ _tag: 'FeeQuote';
11
+ _quote: unknown;
12
+ }
13
+ export type OperationUknownStatus = {
14
+ status: 'unknown';
15
+ };
16
+ export type OperationPendingStatus = {
17
+ status: 'pending';
18
+ };
19
+ export type OperationConfirmedStatus = {
20
+ status: 'confirmed';
21
+ transactionHash: Hex.Hex;
22
+ };
23
+ export type OperationFailedStatus = {
24
+ status: 'failed';
25
+ reason: string;
26
+ };
27
+ export type OperationStatus = OperationUknownStatus | OperationPendingStatus | OperationConfirmedStatus | OperationFailedStatus;
28
+ export interface Relayer {
29
+ id: string;
30
+ feeOptions(wallet: Address.Address, chainId: bigint, calls: Payload.Call[]): Promise<{
31
+ options: FeeOption[];
32
+ quote?: FeeQuote;
33
+ }>;
34
+ relay(to: Address.Address, data: Hex.Hex, chainId: bigint, quote?: FeeQuote): Promise<{
35
+ opHash: Hex.Hex;
36
+ }>;
37
+ status(opHash: Hex.Hex, chainId: bigint): Promise<OperationStatus>;
38
+ }
39
+ //# sourceMappingURL=relayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relayer.d.ts","sourceRoot":"","sources":["../../src/relayer/relayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,CAAA;AAEjC,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAA;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,UAAU,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,SAAS,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,SAAS,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,WAAW,CAAA;IACnB,eAAe,EAAE,GAAG,CAAC,GAAG,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,QAAQ,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,eAAe,GACvB,qBAAqB,GACrB,sBAAsB,GACtB,wBAAwB,GACxB,qBAAqB,CAAA;AAEzB,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IAEV,UAAU,CACR,MAAM,EAAE,OAAO,CAAC,OAAO,EACvB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAA;IAEtD,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAA;KAAE,CAAC,CAAA;IAE1G,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;CACnE"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ import { Config, Payload, Signature } from '@0xsequence/wallet-primitives';
2
+ import { Address, Hex } from 'ox';
3
+ import * as State from '../state/index.js';
4
+ export * as Pk from './pk/index.js';
5
+ export * as Passkey from './passkey.js';
6
+ export * as Session from './session/index.js';
7
+ export * from './session-manager.js';
8
+ export interface Signer {
9
+ readonly address: MaybePromise<Address.Address>;
10
+ sign: (wallet: Address.Address, chainId: bigint, payload: Payload.Parented) => Config.SignerSignature<Signature.SignatureOfSignerLeaf>;
11
+ }
12
+ export interface SapientSigner {
13
+ readonly address: MaybePromise<Address.Address>;
14
+ readonly imageHash: MaybePromise<Hex.Hex | undefined>;
15
+ signSapient: (wallet: Address.Address, chainId: bigint, payload: Payload.Parented, imageHash: Hex.Hex) => Config.SignerSignature<Signature.SignatureOfSapientSignerLeaf>;
16
+ }
17
+ export interface Witnessable {
18
+ witness: (stateWriter: State.Writer, wallet: Address.Address, extra?: Object) => Promise<void>;
19
+ }
20
+ type MaybePromise<T> = T | Promise<T>;
21
+ export declare function isSapientSigner(signer: Signer | SapientSigner): signer is SapientSigner;
22
+ export declare function isSigner(signer: Signer | SapientSigner): signer is Signer;
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAA;AAE1C,OAAO,KAAK,EAAE,MAAM,eAAe,CAAA;AACnC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,cAAc,sBAAsB,CAAA;AAEpC,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAE/C,IAAI,EAAE,CACJ,MAAM,EAAE,OAAO,CAAC,OAAO,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,CAAC,QAAQ,KACtB,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAA;CAC7D;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,CAAA;IAErD,WAAW,EAAE,CACX,MAAM,EAAE,OAAO,CAAC,OAAO,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,CAAC,QAAQ,EACzB,SAAS,EAAE,GAAG,CAAC,GAAG,KACf,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAA;CACpE;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC/F;AAED,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AAErC,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,MAAM,IAAI,aAAa,CAEvF;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,MAAM,IAAI,MAAM,CAEzE"}
@@ -0,0 +1,10 @@
1
+ export * as Pk from './pk/index.js';
2
+ export * as Passkey from './passkey.js';
3
+ export * as Session from './session/index.js';
4
+ export * from './session-manager.js';
5
+ export function isSapientSigner(signer) {
6
+ return 'signSapient' in signer;
7
+ }
8
+ export function isSigner(signer) {
9
+ return 'sign' in signer;
10
+ }
@@ -0,0 +1,41 @@
1
+ import { Hex, Address } from 'ox';
2
+ import { Payload, Extensions } from '@0xsequence/wallet-primitives';
3
+ import type { Signature as SignatureTypes } from '@0xsequence/wallet-primitives';
4
+ import { State } from '../index.js';
5
+ import { SapientSigner, Witnessable } from './index.js';
6
+ export type PasskeyOptions = {
7
+ extensions: Pick<Extensions.Extensions, 'passkeys'>;
8
+ publicKey: Extensions.Passkeys.PublicKey;
9
+ credentialId: string;
10
+ embedMetadata?: boolean;
11
+ metadata?: Extensions.Passkeys.PasskeyMetadata;
12
+ };
13
+ export type CreaetePasskeyOptions = {
14
+ stateProvider?: State.Provider;
15
+ requireUserVerification?: boolean;
16
+ credentialName?: string;
17
+ embedMetadata?: boolean;
18
+ };
19
+ export type WitnessMessage = {
20
+ action: 'consent-to-be-part-of-wallet';
21
+ wallet: Address.Address;
22
+ publicKey: Extensions.Passkeys.PublicKey;
23
+ timestamp: number;
24
+ metadata?: Extensions.Passkeys.PasskeyMetadata;
25
+ };
26
+ export declare function isWitnessMessage(message: unknown): message is WitnessMessage;
27
+ export declare class Passkey implements SapientSigner, Witnessable {
28
+ readonly credentialId: string;
29
+ readonly publicKey: Extensions.Passkeys.PublicKey;
30
+ readonly address: Address.Address;
31
+ readonly imageHash: Hex.Hex;
32
+ readonly embedMetadata: boolean;
33
+ readonly metadata?: Extensions.Passkeys.PasskeyMetadata;
34
+ constructor(options: PasskeyOptions);
35
+ static loadFromWitness(stateReader: State.Reader, extensions: Pick<Extensions.Extensions, 'passkeys'>, wallet: Address.Address, imageHash: Hex.Hex): Promise<Passkey>;
36
+ static create(extensions: Pick<Extensions.Extensions, 'passkeys'>, options?: CreaetePasskeyOptions): Promise<Passkey>;
37
+ static find(stateReader: State.Reader, extensions: Pick<Extensions.Extensions, 'passkeys'>): Promise<Passkey | undefined>;
38
+ signSapient(wallet: Address.Address, chainId: bigint, payload: Payload.Parented, imageHash: Hex.Hex): Promise<SignatureTypes.SignatureOfSapientSignerLeaf>;
39
+ witness(stateWriter: State.Writer, wallet: Address.Address, extra?: Object): Promise<void>;
40
+ }
41
+ //# sourceMappingURL=passkey.d.ts.map
@@ -0,0 +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,qBAAqB,GAAG;IAClC,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,qBAAqB;WAoC3F,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"}
@@ -0,0 +1,196 @@
1
+ import { Hex, Bytes, Address, P256, Hash } from 'ox';
2
+ import { Payload, Extensions } from '@0xsequence/wallet-primitives';
3
+ import { WebAuthnP256 } from 'ox';
4
+ export function isWitnessMessage(message) {
5
+ return (typeof message === 'object' &&
6
+ message !== null &&
7
+ 'action' in message &&
8
+ message.action === 'consent-to-be-part-of-wallet');
9
+ }
10
+ export class Passkey {
11
+ credentialId;
12
+ publicKey;
13
+ address;
14
+ imageHash;
15
+ embedMetadata;
16
+ metadata;
17
+ constructor(options) {
18
+ this.address = options.extensions.passkeys;
19
+ this.publicKey = options.publicKey;
20
+ this.credentialId = options.credentialId;
21
+ this.embedMetadata = options.embedMetadata ?? false;
22
+ this.imageHash = Extensions.Passkeys.rootFor(options.publicKey);
23
+ this.metadata = options.metadata;
24
+ }
25
+ static async loadFromWitness(stateReader, extensions, wallet, imageHash) {
26
+ // In the witness we will find the public key, and may find the credential id
27
+ const witness = await stateReader.getWitnessForSapient(wallet, extensions.passkeys, imageHash);
28
+ if (!witness) {
29
+ throw new Error('Witness for wallet not found');
30
+ }
31
+ const payload = witness.payload;
32
+ if (!Payload.isMessage(payload)) {
33
+ throw new Error('Witness payload is not a message');
34
+ }
35
+ const message = JSON.parse(Hex.toString(payload.message));
36
+ if (!isWitnessMessage(message)) {
37
+ throw new Error('Witness payload is not a witness message');
38
+ }
39
+ const metadata = message.publicKey.metadata || message.metadata;
40
+ if (typeof metadata === 'string' || !metadata) {
41
+ throw new Error('Metadata does not contain credential id');
42
+ }
43
+ const decodedSignature = Extensions.Passkeys.decode(Bytes.fromHex(witness.signature.data));
44
+ return new Passkey({
45
+ credentialId: metadata.credentialId,
46
+ extensions,
47
+ publicKey: message.publicKey,
48
+ embedMetadata: decodedSignature.embedMetadata,
49
+ metadata,
50
+ });
51
+ }
52
+ static async create(extensions, options) {
53
+ const name = options?.credentialName ?? `Sequence (${Date.now()})`;
54
+ const credential = await WebAuthnP256.createCredential({
55
+ user: {
56
+ name,
57
+ },
58
+ });
59
+ const x = Hex.fromNumber(credential.publicKey.x);
60
+ const y = Hex.fromNumber(credential.publicKey.y);
61
+ const metadata = {
62
+ credentialId: credential.id,
63
+ };
64
+ const passkey = new Passkey({
65
+ credentialId: credential.id,
66
+ extensions,
67
+ publicKey: {
68
+ requireUserVerification: options?.requireUserVerification ?? true,
69
+ x,
70
+ y,
71
+ metadata: options?.embedMetadata ? metadata : undefined,
72
+ },
73
+ embedMetadata: options?.embedMetadata,
74
+ metadata,
75
+ });
76
+ if (options?.stateProvider) {
77
+ await options.stateProvider.saveTree(Extensions.Passkeys.toTree(passkey.publicKey));
78
+ }
79
+ return passkey;
80
+ }
81
+ static async find(stateReader, extensions) {
82
+ const response = await WebAuthnP256.sign({ challenge: Hex.random(32) });
83
+ if (!response.raw)
84
+ throw new Error('No credential returned');
85
+ const authenticatorDataBytes = Bytes.fromHex(response.metadata.authenticatorData);
86
+ const clientDataHash = Hash.sha256(Bytes.fromString(response.metadata.clientDataJSON), { as: 'Bytes' });
87
+ const messageSignedByAuthenticator = Bytes.concat(authenticatorDataBytes, clientDataHash);
88
+ const messageHash = Hash.sha256(messageSignedByAuthenticator, { as: 'Bytes' }); // Use Bytes output
89
+ const publicKey1 = P256.recoverPublicKey({
90
+ payload: messageHash,
91
+ signature: {
92
+ r: BigInt(response.signature.r),
93
+ s: BigInt(response.signature.s),
94
+ yParity: 0,
95
+ },
96
+ });
97
+ const publicKey2 = P256.recoverPublicKey({
98
+ payload: messageHash,
99
+ signature: {
100
+ r: BigInt(response.signature.r),
101
+ s: BigInt(response.signature.s),
102
+ yParity: 1,
103
+ },
104
+ });
105
+ // Compute the imageHash for all public key combinations
106
+ // - requireUserVerification: true / false
107
+ // - embedMetadata: true / false
108
+ const base1 = {
109
+ x: Hex.fromNumber(publicKey1.x),
110
+ y: Hex.fromNumber(publicKey1.y),
111
+ };
112
+ const base2 = {
113
+ x: Hex.fromNumber(publicKey2.x),
114
+ y: Hex.fromNumber(publicKey2.y),
115
+ };
116
+ const metadata = {
117
+ credentialId: response.raw.id,
118
+ };
119
+ const imageHashes = [
120
+ Extensions.Passkeys.rootFor({ ...base1, requireUserVerification: true }),
121
+ Extensions.Passkeys.rootFor({ ...base1, requireUserVerification: false }),
122
+ Extensions.Passkeys.rootFor({ ...base1, requireUserVerification: true, metadata }),
123
+ Extensions.Passkeys.rootFor({ ...base1, requireUserVerification: false, metadata }),
124
+ Extensions.Passkeys.rootFor({ ...base2, requireUserVerification: true }),
125
+ Extensions.Passkeys.rootFor({ ...base2, requireUserVerification: false }),
126
+ Extensions.Passkeys.rootFor({ ...base2, requireUserVerification: true, metadata }),
127
+ Extensions.Passkeys.rootFor({ ...base2, requireUserVerification: false, metadata }),
128
+ ];
129
+ // Find wallets for all possible image hashes
130
+ const signers = await Promise.all(imageHashes.map(async (imageHash) => {
131
+ const wallets = await stateReader.getWalletsForSapient(extensions.passkeys, imageHash);
132
+ return Object.keys(wallets).map((wallet) => ({
133
+ wallet: Address.from(wallet),
134
+ imageHash,
135
+ }));
136
+ }));
137
+ // Flatten and remove duplicates
138
+ const flattened = signers
139
+ .flat()
140
+ .filter((v, i, self) => self.findIndex((t) => Address.isEqual(t.wallet, v.wallet) && t.imageHash === v.imageHash) === i);
141
+ // If there are no signers, return undefined
142
+ if (flattened.length === 0) {
143
+ return undefined;
144
+ }
145
+ // If there are multiple signers log a warning
146
+ // but we still return the first one
147
+ if (flattened.length > 1) {
148
+ console.warn('Multiple signers found for passkey', flattened);
149
+ }
150
+ return Passkey.loadFromWitness(stateReader, extensions, flattened[0].wallet, flattened[0].imageHash);
151
+ }
152
+ async signSapient(wallet, chainId, payload, imageHash) {
153
+ if (this.imageHash !== imageHash) {
154
+ // TODO: This should never get called, why do we have this?
155
+ throw new Error('Unexpected image hash');
156
+ }
157
+ const challenge = Hex.fromBytes(Payload.hash(wallet, chainId, payload));
158
+ const response = await WebAuthnP256.sign({
159
+ challenge,
160
+ credentialId: this.credentialId,
161
+ userVerification: this.publicKey.requireUserVerification ? 'required' : 'discouraged',
162
+ });
163
+ const authenticatorData = Bytes.fromHex(response.metadata.authenticatorData);
164
+ const rBytes = Bytes.fromNumber(response.signature.r);
165
+ const sBytes = Bytes.fromNumber(response.signature.s);
166
+ const signature = Extensions.Passkeys.encode({
167
+ publicKey: this.publicKey,
168
+ r: rBytes,
169
+ s: sBytes,
170
+ authenticatorData,
171
+ clientDataJSON: response.metadata.clientDataJSON,
172
+ embedMetadata: this.embedMetadata,
173
+ });
174
+ return {
175
+ address: this.address,
176
+ data: Bytes.toHex(signature),
177
+ type: 'sapient_compact',
178
+ };
179
+ }
180
+ async witness(stateWriter, wallet, extra) {
181
+ const payload = Payload.fromMessage(Hex.fromString(JSON.stringify({
182
+ action: 'consent-to-be-part-of-wallet',
183
+ wallet,
184
+ publicKey: this.publicKey,
185
+ metadata: this.metadata,
186
+ timestamp: Date.now(),
187
+ ...extra,
188
+ })));
189
+ const signature = await this.signSapient(wallet, 0n, payload, this.imageHash);
190
+ await stateWriter.saveWitnesses(wallet, 0n, payload, {
191
+ type: 'unrecovered-signer',
192
+ weight: 1n,
193
+ signature,
194
+ });
195
+ }
196
+ }
@@ -0,0 +1,37 @@
1
+ import { Address, PublicKey, Bytes } from 'ox';
2
+ import { PkStore } from './index.js';
3
+ export interface EncryptedData {
4
+ iv: Uint8Array;
5
+ data: ArrayBuffer;
6
+ keyPointer: string;
7
+ address: Address.Address;
8
+ publicKey: PublicKey.PublicKey;
9
+ }
10
+ export declare class EncryptedPksDb {
11
+ private readonly localStorageKeyPrefix;
12
+ private tableName;
13
+ private dbName;
14
+ private dbVersion;
15
+ constructor(localStorageKeyPrefix?: string, tableName?: string);
16
+ private openDB;
17
+ private putData;
18
+ private getData;
19
+ private getAllData;
20
+ generateAndStore(): Promise<EncryptedData>;
21
+ getEncryptedEntry(address: Address.Address): Promise<EncryptedData | undefined>;
22
+ getEncryptedPkStore(address: Address.Address): Promise<EncryptedPkStore | undefined>;
23
+ listAddresses(): Promise<Address.Address[]>;
24
+ remove(address: Address.Address): Promise<void>;
25
+ }
26
+ export declare class EncryptedPkStore implements PkStore {
27
+ private readonly encrypted;
28
+ constructor(encrypted: EncryptedData);
29
+ address(): Address.Address;
30
+ publicKey(): PublicKey.PublicKey;
31
+ signDigest(digest: Bytes.Bytes): Promise<{
32
+ r: bigint;
33
+ s: bigint;
34
+ yParity: number;
35
+ }>;
36
+ }
37
+ //# sourceMappingURL=encrypted.d.ts.map
@@ -0,0 +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,UAAU,CAAA;IACd,IAAI,EAAE,WAAW,CAAA;IACjB,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,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"}
@@ -0,0 +1,123 @@
1
+ import { Hex, Address, Secp256k1 } from 'ox';
2
+ export class EncryptedPksDb {
3
+ localStorageKeyPrefix;
4
+ tableName;
5
+ dbName = 'pk-db';
6
+ dbVersion = 1;
7
+ constructor(localStorageKeyPrefix = 'e_pk_key_', tableName = 'e_pk') {
8
+ this.localStorageKeyPrefix = localStorageKeyPrefix;
9
+ this.tableName = tableName;
10
+ }
11
+ openDB() {
12
+ return new Promise((resolve, reject) => {
13
+ const request = indexedDB.open(this.dbName, this.dbVersion);
14
+ request.onupgradeneeded = () => {
15
+ const db = request.result;
16
+ if (!db.objectStoreNames.contains(this.tableName)) {
17
+ db.createObjectStore(this.tableName);
18
+ }
19
+ };
20
+ request.onsuccess = () => resolve(request.result);
21
+ request.onerror = () => reject(request.error);
22
+ });
23
+ }
24
+ async putData(key, value) {
25
+ const db = await this.openDB();
26
+ return new Promise((resolve, reject) => {
27
+ const tx = db.transaction(this.tableName, 'readwrite');
28
+ const store = tx.objectStore(this.tableName);
29
+ const request = store.put(value, key);
30
+ request.onsuccess = () => resolve();
31
+ request.onerror = () => reject(request.error);
32
+ });
33
+ }
34
+ async getData(key) {
35
+ const db = await this.openDB();
36
+ return new Promise((resolve, reject) => {
37
+ const tx = db.transaction(this.tableName, 'readonly');
38
+ const store = tx.objectStore(this.tableName);
39
+ const request = store.get(key);
40
+ request.onsuccess = () => resolve(request.result);
41
+ request.onerror = () => reject(request.error);
42
+ });
43
+ }
44
+ async getAllData() {
45
+ const db = await this.openDB();
46
+ return new Promise((resolve, reject) => {
47
+ const tx = db.transaction(this.tableName, 'readonly');
48
+ const store = tx.objectStore(this.tableName);
49
+ const request = store.getAll();
50
+ request.onsuccess = () => resolve(request.result);
51
+ request.onerror = () => reject(request.error);
52
+ });
53
+ }
54
+ async generateAndStore() {
55
+ const encryptionKey = await window.crypto.subtle.generateKey({ name: 'AES-GCM', length: 256 }, true, [
56
+ 'encrypt',
57
+ 'decrypt',
58
+ ]);
59
+ const privateKey = Hex.random(32);
60
+ const publicKey = Secp256k1.getPublicKey({ privateKey });
61
+ const address = Address.fromPublicKey(publicKey);
62
+ const keyPointer = this.localStorageKeyPrefix + address;
63
+ const exportedKey = await window.crypto.subtle.exportKey('jwk', encryptionKey);
64
+ window.localStorage.setItem(keyPointer, JSON.stringify(exportedKey));
65
+ const encoder = new TextEncoder();
66
+ const encodedPk = encoder.encode(privateKey);
67
+ const iv = window.crypto.getRandomValues(new Uint8Array(12));
68
+ const encryptedBuffer = await window.crypto.subtle.encrypt({ name: 'AES-GCM', iv }, encryptionKey, encodedPk);
69
+ const encrypted = {
70
+ iv,
71
+ data: encryptedBuffer,
72
+ keyPointer,
73
+ address,
74
+ publicKey,
75
+ };
76
+ const dbKey = `pk_${address}`;
77
+ await this.putData(dbKey, encrypted);
78
+ return encrypted;
79
+ }
80
+ async getEncryptedEntry(address) {
81
+ const dbKey = `pk_${address}`;
82
+ return this.getData(dbKey);
83
+ }
84
+ async getEncryptedPkStore(address) {
85
+ const entry = await this.getEncryptedEntry(address);
86
+ if (!entry)
87
+ return;
88
+ return new EncryptedPkStore(entry);
89
+ }
90
+ async listAddresses() {
91
+ const allEntries = await this.getAllData();
92
+ return allEntries.map((entry) => entry.address);
93
+ }
94
+ async remove(address) {
95
+ const dbKey = `pk_${address}`;
96
+ await this.putData(dbKey, undefined);
97
+ const keyPointer = this.localStorageKeyPrefix + address;
98
+ window.localStorage.removeItem(keyPointer);
99
+ }
100
+ }
101
+ export class EncryptedPkStore {
102
+ encrypted;
103
+ constructor(encrypted) {
104
+ this.encrypted = encrypted;
105
+ }
106
+ address() {
107
+ return this.encrypted.address;
108
+ }
109
+ publicKey() {
110
+ return this.encrypted.publicKey;
111
+ }
112
+ async signDigest(digest) {
113
+ const keyJson = window.localStorage.getItem(this.encrypted.keyPointer);
114
+ if (!keyJson)
115
+ throw new Error('Encryption key not found in localStorage');
116
+ const jwk = JSON.parse(keyJson);
117
+ const encryptionKey = await window.crypto.subtle.importKey('jwk', jwk, { name: 'AES-GCM' }, false, ['decrypt']);
118
+ const decryptedBuffer = await window.crypto.subtle.decrypt({ name: 'AES-GCM', iv: this.encrypted.iv }, encryptionKey, this.encrypted.data);
119
+ const decoder = new TextDecoder();
120
+ const privateKey = decoder.decode(decryptedBuffer);
121
+ return Secp256k1.sign({ payload: digest, privateKey });
122
+ }
123
+ }
@@ -0,0 +1,35 @@
1
+ import type { Payload as PayloadTypes, Signature as SignatureTypes } from '@0xsequence/wallet-primitives';
2
+ import { Address, Bytes, Hex, PublicKey } from 'ox';
3
+ import { Signer as SignerInterface, Witnessable } from '../index.js';
4
+ import { State } from '../../index.js';
5
+ export interface PkStore {
6
+ address(): Address.Address;
7
+ publicKey(): PublicKey.PublicKey;
8
+ signDigest(digest: Bytes.Bytes): Promise<{
9
+ r: bigint;
10
+ s: bigint;
11
+ yParity: number;
12
+ }>;
13
+ }
14
+ export declare class MemoryPkStore implements PkStore {
15
+ private readonly privateKey;
16
+ constructor(privateKey: Hex.Hex);
17
+ address(): Address.Address;
18
+ publicKey(): PublicKey.PublicKey;
19
+ signDigest(digest: Bytes.Bytes): Promise<{
20
+ r: bigint;
21
+ s: bigint;
22
+ yParity: number;
23
+ }>;
24
+ }
25
+ export declare class Pk implements SignerInterface, Witnessable {
26
+ private readonly privateKey;
27
+ readonly address: Address.Address;
28
+ readonly pubKey: PublicKey.PublicKey;
29
+ constructor(privateKey: Hex.Hex | PkStore);
30
+ sign(wallet: Address.Address, chainId: bigint, payload: PayloadTypes.Parented): Promise<SignatureTypes.SignatureOfSignerLeaf>;
31
+ signDigest(digest: Bytes.Bytes): Promise<SignatureTypes.SignatureOfSignerLeaf>;
32
+ witness(stateWriter: State.Writer, wallet: Address.Address, extra?: Object): Promise<void>;
33
+ }
34
+ export * as Encrypted from './encrypted.js';
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signers/pk/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,YAAY,EAAE,SAAS,IAAI,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAEzG,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAa,MAAM,IAAI,CAAA;AAC9D,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAEtC,MAAM,WAAW,OAAO;IACtB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAA;IAC1B,SAAS,IAAI,SAAS,CAAC,SAAS,CAAA;IAChC,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,CAAA;CACpF;AAED,qBAAa,aAAc,YAAW,OAAO;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,GAAG,CAAC,GAAG;IAEhD,OAAO,IAAI,OAAO,CAAC,OAAO;IAI1B,SAAS,IAAI,SAAS,CAAC,SAAS;IAIhC,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;CAGpF;AAED,qBAAa,EAAG,YAAW,eAAe,EAAE,WAAW;IACrD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,SAAgB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAA;IACxC,SAAgB,MAAM,EAAE,SAAS,CAAC,SAAS,CAAA;gBAE/B,UAAU,EAAE,GAAG,CAAC,GAAG,GAAG,OAAO;IAMnC,IAAI,CACR,MAAM,EAAE,OAAO,CAAC,OAAO,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,CAAC,QAAQ,GAC7B,OAAO,CAAC,cAAc,CAAC,qBAAqB,CAAC;IAK1C,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,qBAAqB,CAAC;IAK9E,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAoBjG;AAED,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,51 @@
1
+ import { Payload } from '@0xsequence/wallet-primitives';
2
+ import { Address, Hex, Secp256k1 } from 'ox';
3
+ export class MemoryPkStore {
4
+ privateKey;
5
+ constructor(privateKey) {
6
+ this.privateKey = privateKey;
7
+ }
8
+ address() {
9
+ return Address.fromPublicKey(this.publicKey());
10
+ }
11
+ publicKey() {
12
+ return Secp256k1.getPublicKey({ privateKey: this.privateKey });
13
+ }
14
+ signDigest(digest) {
15
+ return Promise.resolve(Secp256k1.sign({ payload: digest, privateKey: this.privateKey }));
16
+ }
17
+ }
18
+ export class Pk {
19
+ privateKey;
20
+ address;
21
+ pubKey;
22
+ constructor(privateKey) {
23
+ this.privateKey = typeof privateKey === 'string' ? new MemoryPkStore(privateKey) : privateKey;
24
+ this.pubKey = this.privateKey.publicKey();
25
+ this.address = this.privateKey.address();
26
+ }
27
+ async sign(wallet, chainId, payload) {
28
+ const hash = Payload.hash(wallet, chainId, payload);
29
+ return this.signDigest(hash);
30
+ }
31
+ async signDigest(digest) {
32
+ const signature = await this.privateKey.signDigest(digest);
33
+ return { ...signature, type: 'hash' };
34
+ }
35
+ async witness(stateWriter, wallet, extra) {
36
+ const payload = Payload.fromMessage(Hex.fromString(JSON.stringify({
37
+ action: 'consent-to-be-part-of-wallet',
38
+ wallet,
39
+ signer: this.address,
40
+ timestamp: Date.now(),
41
+ ...extra,
42
+ })));
43
+ const signature = await this.sign(wallet, 0n, payload);
44
+ await stateWriter.saveWitnesses(wallet, 0n, payload, {
45
+ type: 'unrecovered-signer',
46
+ weight: 1n,
47
+ signature,
48
+ });
49
+ }
50
+ }
51
+ export * as Encrypted from './encrypted.js';
@@ -0,0 +1,18 @@
1
+ import { Payload, Permission, SessionSignature } from '@0xsequence/wallet-primitives';
2
+ import { Address, Hex, Provider } from 'ox';
3
+ import { SessionSigner } from './session.js';
4
+ import { PkStore } from '../pk/index.js';
5
+ export type ExplicitParams = Omit<Permission.SessionPermissions, 'signer'>;
6
+ export declare class Explicit implements SessionSigner {
7
+ private readonly _privateKey;
8
+ readonly address: Address.Address;
9
+ readonly sessionPermissions: Permission.SessionPermissions;
10
+ constructor(privateKey: Hex.Hex | PkStore, sessionPermissions: ExplicitParams);
11
+ findSupportedPermission(wallet: Address.Address, _chainId: bigint, call: Payload.Call, provider?: Provider.Provider): Promise<Permission.Permission | undefined>;
12
+ supportedCall(wallet: Address.Address, chainId: bigint, call: Payload.Call, provider?: Provider.Provider): Promise<boolean>;
13
+ signCall(wallet: Address.Address, chainId: bigint, call: Payload.Call, nonce: {
14
+ space: bigint;
15
+ nonce: bigint;
16
+ }, provider?: Provider.Provider): Promise<SessionSignature.SessionCallSignature>;
17
+ }
18
+ //# sourceMappingURL=explicit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explicit.d.ts","sourceRoot":"","sources":["../../../src/signers/session/explicit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAS,MAAM,+BAA+B,CAAA;AAC5F,OAAO,EAAiB,OAAO,EAAe,GAAG,EAAE,QAAQ,EAAa,MAAM,IAAI,CAAA;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAiB,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAEvD,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAA;AAE1E,qBAAa,QAAS,YAAW,aAAa;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,SAAgB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAA;IACxC,SAAgB,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,CAAA;gBAErD,UAAU,EAAE,GAAG,CAAC,GAAG,GAAG,OAAO,EAAE,kBAAkB,EAAE,cAAc;IASvE,uBAAuB,CAC3B,MAAM,EAAE,OAAO,CAAC,OAAO,EACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,CAAC,IAAI,EAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAC3B,OAAO,CAAC,UAAU,CAAC,UAAU,GAAG,SAAS,CAAC;IA0CvC,aAAa,CACjB,MAAM,EAAE,OAAO,CAAC,OAAO,EACvB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,OAAO,CAAC,IAAI,EAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAC3B,OAAO,CAAC,OAAO,CAAC;IASb,QAAQ,CACZ,MAAM,EAAE,OAAO,CAAC,OAAO,EACvB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,OAAO,CAAC,IAAI,EAClB,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,CAAA;KACd,EACD,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAC3B,OAAO,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;CAoBlD"}