@turnkey/core 1.0.0-beta.2 → 1.0.0-beta.5

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 (89) hide show
  1. package/dist/__clients__/core.d.ts +92 -9
  2. package/dist/__clients__/core.d.ts.map +1 -1
  3. package/dist/__clients__/core.js +699 -535
  4. package/dist/__clients__/core.js.map +1 -1
  5. package/dist/__clients__/core.mjs +702 -538
  6. package/dist/__clients__/core.mjs.map +1 -1
  7. package/dist/__generated__/sdk-client-base.d.ts +1 -1
  8. package/dist/__generated__/sdk-client-base.d.ts.map +1 -1
  9. package/dist/__generated__/sdk-client-base.js +156 -253
  10. package/dist/__generated__/sdk-client-base.js.map +1 -1
  11. package/dist/__generated__/sdk-client-base.mjs +156 -253
  12. package/dist/__generated__/sdk-client-base.mjs.map +1 -1
  13. package/dist/__generated__/version.d.ts +1 -1
  14. package/dist/__generated__/version.js +1 -1
  15. package/dist/__generated__/version.mjs +1 -1
  16. package/dist/__inputs__/public_api.types.d.ts +377 -504
  17. package/dist/__inputs__/public_api.types.d.ts.map +1 -1
  18. package/dist/__types__/base.d.ts +193 -75
  19. package/dist/__types__/base.d.ts.map +1 -1
  20. package/dist/__types__/base.js +14 -13
  21. package/dist/__types__/base.js.map +1 -1
  22. package/dist/__types__/base.mjs +15 -14
  23. package/dist/__types__/base.mjs.map +1 -1
  24. package/dist/__wallet__/base.d.ts +11 -0
  25. package/dist/__wallet__/base.d.ts.map +1 -1
  26. package/dist/__wallet__/base.js +12 -1
  27. package/dist/__wallet__/base.js.map +1 -1
  28. package/dist/__wallet__/base.mjs +12 -1
  29. package/dist/__wallet__/base.mjs.map +1 -1
  30. package/dist/__wallet__/connector.d.ts +31 -4
  31. package/dist/__wallet__/connector.d.ts.map +1 -1
  32. package/dist/__wallet__/connector.js +35 -5
  33. package/dist/__wallet__/connector.js.map +1 -1
  34. package/dist/__wallet__/connector.mjs +35 -5
  35. package/dist/__wallet__/connector.mjs.map +1 -1
  36. package/dist/__wallet__/mobile/manager.d.ts +21 -5
  37. package/dist/__wallet__/mobile/manager.d.ts.map +1 -1
  38. package/dist/__wallet__/mobile/manager.js +28 -11
  39. package/dist/__wallet__/mobile/manager.js.map +1 -1
  40. package/dist/__wallet__/mobile/manager.mjs +28 -11
  41. package/dist/__wallet__/mobile/manager.mjs.map +1 -1
  42. package/dist/__wallet__/stamper.d.ts +73 -2
  43. package/dist/__wallet__/stamper.d.ts.map +1 -1
  44. package/dist/__wallet__/stamper.js +81 -15
  45. package/dist/__wallet__/stamper.js.map +1 -1
  46. package/dist/__wallet__/stamper.mjs +82 -16
  47. package/dist/__wallet__/stamper.mjs.map +1 -1
  48. package/dist/__wallet__/wallet-connect/base.d.ts +102 -19
  49. package/dist/__wallet__/wallet-connect/base.d.ts.map +1 -1
  50. package/dist/__wallet__/wallet-connect/base.js +198 -77
  51. package/dist/__wallet__/wallet-connect/base.js.map +1 -1
  52. package/dist/__wallet__/wallet-connect/base.mjs +198 -77
  53. package/dist/__wallet__/wallet-connect/base.mjs.map +1 -1
  54. package/dist/__wallet__/wallet-connect/client.d.ts +50 -17
  55. package/dist/__wallet__/wallet-connect/client.d.ts.map +1 -1
  56. package/dist/__wallet__/wallet-connect/client.js +76 -19
  57. package/dist/__wallet__/wallet-connect/client.js.map +1 -1
  58. package/dist/__wallet__/wallet-connect/client.mjs +76 -19
  59. package/dist/__wallet__/wallet-connect/client.mjs.map +1 -1
  60. package/dist/__wallet__/web/manager.d.ts +20 -12
  61. package/dist/__wallet__/web/manager.d.ts.map +1 -1
  62. package/dist/__wallet__/web/manager.js +29 -21
  63. package/dist/__wallet__/web/manager.js.map +1 -1
  64. package/dist/__wallet__/web/manager.mjs +29 -21
  65. package/dist/__wallet__/web/manager.mjs.map +1 -1
  66. package/dist/__wallet__/web/native/ethereum.d.ts +45 -11
  67. package/dist/__wallet__/web/native/ethereum.d.ts.map +1 -1
  68. package/dist/__wallet__/web/native/ethereum.js +58 -17
  69. package/dist/__wallet__/web/native/ethereum.js.map +1 -1
  70. package/dist/__wallet__/web/native/ethereum.mjs +58 -17
  71. package/dist/__wallet__/web/native/ethereum.mjs.map +1 -1
  72. package/dist/__wallet__/web/native/solana.d.ts +56 -3
  73. package/dist/__wallet__/web/native/solana.d.ts.map +1 -1
  74. package/dist/__wallet__/web/native/solana.js +95 -36
  75. package/dist/__wallet__/web/native/solana.js.map +1 -1
  76. package/dist/__wallet__/web/native/solana.mjs +95 -36
  77. package/dist/__wallet__/web/native/solana.mjs.map +1 -1
  78. package/dist/index.d.ts +2 -1
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +2 -10
  81. package/dist/index.js.map +1 -1
  82. package/dist/index.mjs +2 -2
  83. package/dist/utils.d.ts +59 -13
  84. package/dist/utils.d.ts.map +1 -1
  85. package/dist/utils.js +105 -30
  86. package/dist/utils.js.map +1 -1
  87. package/dist/utils.mjs +103 -29
  88. package/dist/utils.mjs.map +1 -1
  89. package/package.json +8 -8
@@ -8,7 +8,12 @@ class MobileWalletManager {
8
8
  /**
9
9
  * Constructs a MobileWalletManager that only uses WalletConnect.
10
10
  *
11
- * @param cfg - Wallet manager configuration (uses only WalletConnect fields).
11
+ * - Determines enabled chains based on provided namespaces for Ethereum and Solana.
12
+ * - Initializes WalletConnect wallet interface and maps it to supported chains.
13
+ * - Optionally enables stamping and connecting flows based on feature flags that live in the cfg.
14
+ * - Sets up `CrossPlatformWalletStamper` and `CrossPlatformWalletConnector` if auth or connecting features are enabled.
15
+ *
16
+ * @param cfg - Wallet manager configuration (we only use WalletConnect fields).
12
17
  */
13
18
  constructor(cfg) {
14
19
  // queue of async initialization functions
@@ -18,12 +23,15 @@ class MobileWalletManager {
18
23
  // maps a blockchain chain to its corresponding wallet interface types
19
24
  this.chainToInterfaces = {};
20
25
  /**
21
- * Registers a wallet interface as supporting a specific blockchain chain.
26
+ * Registers a wallet interface type as supporting a specific blockchain chain.
27
+ *
28
+ * @param chain - Chain (e.g., Ethereum, Solana).
29
+ * @param interfaceType - Wallet interface type to associate with the chain.
22
30
  */
23
- this.addChainInterface = (chain, iface) => {
31
+ this.addChainInterface = (chain, interfaceType) => {
24
32
  if (!this.chainToInterfaces[chain])
25
33
  this.chainToInterfaces[chain] = [];
26
- this.chainToInterfaces[chain].push(iface);
34
+ this.chainToInterfaces[chain].push(interfaceType);
27
35
  };
28
36
  const ethereumNamespaces = cfg.chains.ethereum?.walletConnectNamespaces ?? [];
29
37
  const solanaNamespaces = cfg.chains.solana?.walletConnectNamespaces ?? [];
@@ -52,30 +60,39 @@ class MobileWalletManager {
52
60
  }
53
61
  }
54
62
  /**
55
- * Initializes the wallet manager and WalletConnect client.
63
+ * Initializes WalletConnect components and any registered wallet interfaces.
64
+ *
65
+ * - First initializes the low-level WalletConnect client with the provided config.
66
+ * - Then initializes higher-level wallet interface `WalletConnectWallet` using registered async initializers.
56
67
  *
57
- * @param cfg - Wallet manager configuration.
68
+ * @param cfg - Wallet manager configuration used for initializing the WalletConnect client.
58
69
  */
59
70
  async init(cfg) {
60
71
  if (this.wcClient) {
61
72
  await this.wcClient.init(cfg.walletConnect);
62
73
  }
74
+ // we initialize the high-level WalletConnectWallet
75
+ // we do this because we can't init this inside the constructor since it's async
63
76
  await Promise.all(this.initializers.map((fn) => fn()));
64
- await this.stamper?.init();
65
77
  }
66
78
  /**
67
79
  * Retrieves available wallet providers, optionally filtered by chain.
68
80
  *
81
+ * - If a chain is specified, filters wallet interfaces that support that chain.
82
+ * - Aggregates providers across all registered wallet interfaces.
83
+ * - Filters WalletConnect results to match the specified chain.
84
+ *
69
85
  * @param chain - Optional chain to filter providers by.
70
- * @throws If no wallet interface is registered for the given chain.
86
+ * @returns A promise that resolves to an array of `WalletProvider` objects.
87
+ * @throws {Error} If no wallet interface is registered for the given chain.
71
88
  */
72
89
  async getProviders(chain) {
73
90
  if (chain) {
74
- const ifaceTypes = this.chainToInterfaces[chain];
75
- if (!ifaceTypes || ifaceTypes.length === 0) {
91
+ const interfaceType = this.chainToInterfaces[chain];
92
+ if (!interfaceType || interfaceType.length === 0) {
76
93
  throw new Error(`No wallet supports chain: ${chain}`);
77
94
  }
78
- const walletsToQuery = ifaceTypes
95
+ const walletsToQuery = interfaceType
79
96
  .map((iface) => this.wallets[iface])
80
97
  .filter(Boolean);
81
98
  const providersArrays = await Promise.all(walletsToQuery.map((wallet) => wallet.getProviders()));
@@ -1 +1 @@
1
- {"version":3,"file":"manager.mjs","sources":["../../../src/__wallet__/mobile/manager.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.mjs","sources":["../../../src/__wallet__/mobile/manager.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -2,18 +2,89 @@ import { type WalletInterface, type TStamp, type TStamper, type WalletProvider,
2
2
  export declare class CrossPlatformWalletStamper implements TStamper {
3
3
  private readonly ctx;
4
4
  private activeInterfaceType?;
5
+ /**
6
+ * Constructs a CrossPlatformWalletStamper.
7
+ *
8
+ * - Validates that at least one wallet interface is provided.
9
+ * - For each wallet interface, creates an internal `WalletStamper` bound to it.
10
+ * - Ensures the stamper instance is always initialized in a usable state.
11
+ *
12
+ * @param wallets - A partial mapping of wallet interfaces by type.
13
+ * @throws {Error} If no wallet interfaces are provided.
14
+ */
5
15
  constructor(wallets: Partial<Record<WalletInterfaceType, WalletInterface>>);
6
- init(): Promise<void>;
16
+ /**
17
+ * Stamps a payload using the specified wallet interface and provider.
18
+ *
19
+ * - Uses the explicitly provided interface and provider if given.
20
+ * - Falls back to the default interface and stored provider otherwise.
21
+ *
22
+ * @param payload - The string payload to sign.
23
+ * @param interfaceType - Optional wallet interface type (defaults to the active or first available).
24
+ * @param provider - Optional provider (defaults to the one set via `setProvider`).
25
+ * @returns A `TStamp` object containing the stamp header name and encoded value.
26
+ * @throws {Error} If no provider is available for the selected interface.
27
+ */
7
28
  stamp(payload: string, interfaceType?: WalletInterfaceType, provider?: WalletProvider): Promise<TStamp>;
29
+ /**
30
+ * Retrieves the public key for the given provider.
31
+ *
32
+ * @param interfaceType - Optional wallet interface type (defaults to the active or first available).
33
+ * @param provider - Wallet provider for which to fetch the public key.
34
+ * @returns A promise resolving to the public key in hex format.
35
+ */
8
36
  getPublicKey(interfaceType: WalletInterfaceType | undefined, provider: WalletProvider): Promise<string>;
37
+ /**
38
+ * Sets the active provider for a given wallet interface.
39
+ *
40
+ * - The active provider is used as a fallback in `stamp` if none is passed explicitly.
41
+ *
42
+ * @param interfaceType - Wallet interface type.
43
+ * @param provider - Provider instance to associate with the interface.
44
+ */
9
45
  setProvider(interfaceType: WalletInterfaceType, provider: WalletProvider): void;
10
- getWalletInterface(interfaceType?: WalletInterfaceType): WalletInterface;
46
+ /**
47
+ * Determines the default wallet interface to use when none is specified.
48
+ *
49
+ * - Preference order: Active provider > Ethereum > Solana > WalletConnect.
50
+ *
51
+ * @returns The default wallet interface type.
52
+ * @throws {Error} If no wallet interfaces are initialized.
53
+ */
11
54
  private defaultInterface;
55
+ /**
56
+ * Retrieves the internal context for a given wallet interface.
57
+ *
58
+ * @param interfaceType - Wallet interface type.
59
+ * @returns The context including wallet, stamper, and optional provider.
60
+ * @throws {Error} If the interface is not initialized.
61
+ */
12
62
  private getCtx;
13
63
  }
14
64
  export declare class WalletStamper {
15
65
  private readonly wallet;
66
+ /**
67
+ * Constructs a WalletStamper bound to a single wallet interface.
68
+ *
69
+ * @param wallet - The wallet interface used for signing.
70
+ */
16
71
  constructor(wallet: WalletInterface);
72
+ /**
73
+ * Signs a payload and returns a standardized stamp header.
74
+ *
75
+ * - For Ethereum:
76
+ * - Signs using EIP-191.
77
+ * - Recovers and compresses the public key.
78
+ * - Converts the signature into DER format.
79
+ * - For Solana:
80
+ * - Signs using Ed25519.
81
+ * - Fetches the public key directly from the wallet.
82
+ *
83
+ * @param payload - The payload to sign.
84
+ * @param provider - The wallet provider used for signing.
85
+ * @returns A `TStamp` containing the header name and base64url-encoded JSON value.
86
+ * @throws {Error} If signing or public key recovery fails.
87
+ */
17
88
  stamp(payload: string, provider: WalletProvider): Promise<TStamp>;
18
89
  }
19
90
  //# sourceMappingURL=stamper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stamper.d.ts","sourceRoot":"","sources":["../../src/__wallet__/stamper.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,mBAAmB,EACpB,MAAM,QAAQ,CAAC;AAsBhB,qBAAa,0BAA2B,YAAW,QAAQ;IACzD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,mBAAmB,CAAC,CAAsB;gBAEtC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;IAUpE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrB,KAAK,CACT,OAAO,EAAE,MAAM,EACf,aAAa,GAAE,mBAA6C,EAC5D,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,MAAM,CAAC;IAaZ,YAAY,CAChB,aAAa,iCAA+C,EAC5D,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,CAAC;IAIlB,WAAW,CACT,aAAa,EAAE,mBAAmB,EAClC,QAAQ,EAAE,cAAc,GACvB,IAAI;IAKP,kBAAkB,CAChB,aAAa,GAAE,mBAA6C,GAC3D,eAAe;IAIlB,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,MAAM;CASf;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,eAAe;IAE9C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;CAqDxE"}
1
+ {"version":3,"file":"stamper.d.ts","sourceRoot":"","sources":["../../src/__wallet__/stamper.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,mBAAmB,EACpB,MAAM,QAAQ,CAAC;AAsBhB,qBAAa,0BAA2B,YAAW,QAAQ;IACzD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,mBAAmB,CAAC,CAAsB;IAElD;;;;;;;;;OASG;gBACS,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;IAiB1E;;;;;;;;;;;OAWG;IACG,KAAK,CACT,OAAO,EAAE,MAAM,EACf,aAAa,GAAE,mBAA6C,EAC5D,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,MAAM,CAAC;IAalB;;;;;;OAMG;IACG,YAAY,CAChB,aAAa,iCAA+C,EAC5D,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,CAAC;IAIlB;;;;;;;OAOG;IACH,WAAW,CACT,aAAa,EAAE,mBAAmB,EAClC,QAAQ,EAAE,cAAc,GACvB,IAAI;IAKP;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;;;;;OAMG;IACH,OAAO,CAAC,MAAM;CASf;AAED,qBAAa,aAAa;IAMZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC;;;;OAIG;gBAC0B,MAAM,EAAE,eAAe;IAEpD;;;;;;;;;;;;;;;OAeG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;CAqDxE"}
@@ -8,21 +8,39 @@ const SIGNATURE_SCHEME_TK_API_SECP256K1_EIP191 = "SIGNATURE_SCHEME_TK_API_SECP25
8
8
  const SIGNATURE_SCHEME_TK_API_ED25519 = "SIGNATURE_SCHEME_TK_API_ED25519";
9
9
  const STAMP_HEADER_NAME = "X-Stamp";
10
10
  class CrossPlatformWalletStamper {
11
+ /**
12
+ * Constructs a CrossPlatformWalletStamper.
13
+ *
14
+ * - Validates that at least one wallet interface is provided.
15
+ * - For each wallet interface, creates an internal `WalletStamper` bound to it.
16
+ * - Ensures the stamper instance is always initialized in a usable state.
17
+ *
18
+ * @param wallets - A partial mapping of wallet interfaces by type.
19
+ * @throws {Error} If no wallet interfaces are provided.
20
+ */
11
21
  constructor(wallets) {
12
22
  this.ctx = {};
13
- for (const [interfaceType, wallet] of Object.entries(wallets)) {
14
- const typedInterface = interfaceType;
15
- this.ctx[typedInterface] = {
16
- wallet,
17
- stamper: new WalletStamper(wallet),
18
- };
23
+ const walletEntries = Object.entries(wallets).filter(([, w]) => Boolean(w));
24
+ if (walletEntries.length === 0) {
25
+ throw new Error("Cannot create WalletStamper: no wallet interfaces provided");
19
26
  }
20
- }
21
- async init() {
22
- if (!Object.keys(this.ctx).length) {
23
- throw new Error("No interfaces initialized in WalletStamper");
27
+ for (const [interfaceType, wallet] of walletEntries) {
28
+ const typed = interfaceType;
29
+ this.ctx[typed] = { wallet, stamper: new WalletStamper(wallet) };
24
30
  }
25
31
  }
32
+ /**
33
+ * Stamps a payload using the specified wallet interface and provider.
34
+ *
35
+ * - Uses the explicitly provided interface and provider if given.
36
+ * - Falls back to the default interface and stored provider otherwise.
37
+ *
38
+ * @param payload - The string payload to sign.
39
+ * @param interfaceType - Optional wallet interface type (defaults to the active or first available).
40
+ * @param provider - Optional provider (defaults to the one set via `setProvider`).
41
+ * @returns A `TStamp` object containing the stamp header name and encoded value.
42
+ * @throws {Error} If no provider is available for the selected interface.
43
+ */
26
44
  async stamp(payload, interfaceType = this.defaultInterface(), provider) {
27
45
  const ctx = this.getCtx(interfaceType);
28
46
  const selectedProvider = provider ?? ctx.provider;
@@ -31,16 +49,36 @@ class CrossPlatformWalletStamper {
31
49
  }
32
50
  return ctx.stamper.stamp(payload, selectedProvider);
33
51
  }
52
+ /**
53
+ * Retrieves the public key for the given provider.
54
+ *
55
+ * @param interfaceType - Optional wallet interface type (defaults to the active or first available).
56
+ * @param provider - Wallet provider for which to fetch the public key.
57
+ * @returns A promise resolving to the public key in hex format.
58
+ */
34
59
  async getPublicKey(interfaceType = this.defaultInterface(), provider) {
35
60
  return this.getCtx(interfaceType).wallet.getPublicKey(provider);
36
61
  }
62
+ /**
63
+ * Sets the active provider for a given wallet interface.
64
+ *
65
+ * - The active provider is used as a fallback in `stamp` if none is passed explicitly.
66
+ *
67
+ * @param interfaceType - Wallet interface type.
68
+ * @param provider - Provider instance to associate with the interface.
69
+ */
37
70
  setProvider(interfaceType, provider) {
38
71
  this.getCtx(interfaceType).provider = provider;
39
72
  this.activeInterfaceType = interfaceType;
40
73
  }
41
- getWalletInterface(interfaceType = this.defaultInterface()) {
42
- return this.getCtx(interfaceType).wallet;
43
- }
74
+ /**
75
+ * Determines the default wallet interface to use when none is specified.
76
+ *
77
+ * - Preference order: Active provider > Ethereum > Solana > WalletConnect.
78
+ *
79
+ * @returns The default wallet interface type.
80
+ * @throws {Error} If no wallet interfaces are initialized.
81
+ */
44
82
  defaultInterface() {
45
83
  if (this.activeInterfaceType) {
46
84
  return this.activeInterfaceType;
@@ -57,6 +95,13 @@ class CrossPlatformWalletStamper {
57
95
  }
58
96
  throw new Error("No interfaces initialized");
59
97
  }
98
+ /**
99
+ * Retrieves the internal context for a given wallet interface.
100
+ *
101
+ * @param interfaceType - Wallet interface type.
102
+ * @returns The context including wallet, stamper, and optional provider.
103
+ * @throws {Error} If the interface is not initialized.
104
+ */
60
105
  getCtx(interfaceType) {
61
106
  const ctx = this.ctx[interfaceType];
62
107
  if (!ctx) {
@@ -66,9 +111,30 @@ class CrossPlatformWalletStamper {
66
111
  }
67
112
  }
68
113
  class WalletStamper {
114
+ /**
115
+ * Constructs a WalletStamper bound to a single wallet interface.
116
+ *
117
+ * @param wallet - The wallet interface used for signing.
118
+ */
69
119
  constructor(wallet) {
70
120
  this.wallet = wallet;
71
121
  }
122
+ /**
123
+ * Signs a payload and returns a standardized stamp header.
124
+ *
125
+ * - For Ethereum:
126
+ * - Signs using EIP-191.
127
+ * - Recovers and compresses the public key.
128
+ * - Converts the signature into DER format.
129
+ * - For Solana:
130
+ * - Signs using Ed25519.
131
+ * - Fetches the public key directly from the wallet.
132
+ *
133
+ * @param payload - The payload to sign.
134
+ * @param provider - The wallet provider used for signing.
135
+ * @returns A `TStamp` containing the header name and base64url-encoded JSON value.
136
+ * @throws {Error} If signing or public key recovery fails.
137
+ */
72
138
  async stamp(payload, provider) {
73
139
  let signature;
74
140
  let publicKey;
@@ -78,11 +144,11 @@ class WalletStamper {
78
144
  catch (error) {
79
145
  throw new Error(`Failed to sign the message: ${error}`);
80
146
  }
81
- const scheme = utils.isSolanaWallet(provider)
147
+ const scheme = utils.isSolanaProvider(provider)
82
148
  ? SIGNATURE_SCHEME_TK_API_ED25519
83
149
  : SIGNATURE_SCHEME_TK_API_SECP256K1_EIP191;
84
150
  try {
85
- if (utils.isEthereumWallet(provider)) {
151
+ if (utils.isEthereumProvider(provider)) {
86
152
  const { recoverPublicKey, hashMessage } = await import('viem');
87
153
  const { compressRawPublicKey, toDerSignature } = await import('@turnkey/crypto');
88
154
  const rawPublicKey = await recoverPublicKey({
@@ -1 +1 @@
1
- {"version":3,"file":"stamper.js","sources":["../../src/__wallet__/stamper.ts"],"sourcesContent":[null],"names":["WalletInterfaceType","SignIntent","isSolanaWallet","isEthereumWallet","uint8ArrayFromHexString","uint8ArrayToHexString","stringToBase64urlString"],"mappings":"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"}
1
+ {"version":3,"file":"stamper.js","sources":["../../src/__wallet__/stamper.ts"],"sourcesContent":[null],"names":["WalletInterfaceType","SignIntent","isSolanaProvider","isEthereumProvider","uint8ArrayFromHexString","uint8ArrayToHexString","stringToBase64urlString"],"mappings":"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"}
@@ -1,26 +1,44 @@
1
1
  import { WalletInterfaceType, SignIntent } from '../__types__/base.mjs';
2
2
  import { uint8ArrayFromHexString, uint8ArrayToHexString, stringToBase64urlString } from '@turnkey/encoding';
3
- import { isSolanaWallet, isEthereumWallet } from '../utils.mjs';
3
+ import { isSolanaProvider, isEthereumProvider } from '../utils.mjs';
4
4
 
5
5
  const SIGNATURE_SCHEME_TK_API_SECP256K1_EIP191 = "SIGNATURE_SCHEME_TK_API_SECP256K1_EIP191";
6
6
  const SIGNATURE_SCHEME_TK_API_ED25519 = "SIGNATURE_SCHEME_TK_API_ED25519";
7
7
  const STAMP_HEADER_NAME = "X-Stamp";
8
8
  class CrossPlatformWalletStamper {
9
+ /**
10
+ * Constructs a CrossPlatformWalletStamper.
11
+ *
12
+ * - Validates that at least one wallet interface is provided.
13
+ * - For each wallet interface, creates an internal `WalletStamper` bound to it.
14
+ * - Ensures the stamper instance is always initialized in a usable state.
15
+ *
16
+ * @param wallets - A partial mapping of wallet interfaces by type.
17
+ * @throws {Error} If no wallet interfaces are provided.
18
+ */
9
19
  constructor(wallets) {
10
20
  this.ctx = {};
11
- for (const [interfaceType, wallet] of Object.entries(wallets)) {
12
- const typedInterface = interfaceType;
13
- this.ctx[typedInterface] = {
14
- wallet,
15
- stamper: new WalletStamper(wallet),
16
- };
21
+ const walletEntries = Object.entries(wallets).filter(([, w]) => Boolean(w));
22
+ if (walletEntries.length === 0) {
23
+ throw new Error("Cannot create WalletStamper: no wallet interfaces provided");
17
24
  }
18
- }
19
- async init() {
20
- if (!Object.keys(this.ctx).length) {
21
- throw new Error("No interfaces initialized in WalletStamper");
25
+ for (const [interfaceType, wallet] of walletEntries) {
26
+ const typed = interfaceType;
27
+ this.ctx[typed] = { wallet, stamper: new WalletStamper(wallet) };
22
28
  }
23
29
  }
30
+ /**
31
+ * Stamps a payload using the specified wallet interface and provider.
32
+ *
33
+ * - Uses the explicitly provided interface and provider if given.
34
+ * - Falls back to the default interface and stored provider otherwise.
35
+ *
36
+ * @param payload - The string payload to sign.
37
+ * @param interfaceType - Optional wallet interface type (defaults to the active or first available).
38
+ * @param provider - Optional provider (defaults to the one set via `setProvider`).
39
+ * @returns A `TStamp` object containing the stamp header name and encoded value.
40
+ * @throws {Error} If no provider is available for the selected interface.
41
+ */
24
42
  async stamp(payload, interfaceType = this.defaultInterface(), provider) {
25
43
  const ctx = this.getCtx(interfaceType);
26
44
  const selectedProvider = provider ?? ctx.provider;
@@ -29,16 +47,36 @@ class CrossPlatformWalletStamper {
29
47
  }
30
48
  return ctx.stamper.stamp(payload, selectedProvider);
31
49
  }
50
+ /**
51
+ * Retrieves the public key for the given provider.
52
+ *
53
+ * @param interfaceType - Optional wallet interface type (defaults to the active or first available).
54
+ * @param provider - Wallet provider for which to fetch the public key.
55
+ * @returns A promise resolving to the public key in hex format.
56
+ */
32
57
  async getPublicKey(interfaceType = this.defaultInterface(), provider) {
33
58
  return this.getCtx(interfaceType).wallet.getPublicKey(provider);
34
59
  }
60
+ /**
61
+ * Sets the active provider for a given wallet interface.
62
+ *
63
+ * - The active provider is used as a fallback in `stamp` if none is passed explicitly.
64
+ *
65
+ * @param interfaceType - Wallet interface type.
66
+ * @param provider - Provider instance to associate with the interface.
67
+ */
35
68
  setProvider(interfaceType, provider) {
36
69
  this.getCtx(interfaceType).provider = provider;
37
70
  this.activeInterfaceType = interfaceType;
38
71
  }
39
- getWalletInterface(interfaceType = this.defaultInterface()) {
40
- return this.getCtx(interfaceType).wallet;
41
- }
72
+ /**
73
+ * Determines the default wallet interface to use when none is specified.
74
+ *
75
+ * - Preference order: Active provider > Ethereum > Solana > WalletConnect.
76
+ *
77
+ * @returns The default wallet interface type.
78
+ * @throws {Error} If no wallet interfaces are initialized.
79
+ */
42
80
  defaultInterface() {
43
81
  if (this.activeInterfaceType) {
44
82
  return this.activeInterfaceType;
@@ -55,6 +93,13 @@ class CrossPlatformWalletStamper {
55
93
  }
56
94
  throw new Error("No interfaces initialized");
57
95
  }
96
+ /**
97
+ * Retrieves the internal context for a given wallet interface.
98
+ *
99
+ * @param interfaceType - Wallet interface type.
100
+ * @returns The context including wallet, stamper, and optional provider.
101
+ * @throws {Error} If the interface is not initialized.
102
+ */
58
103
  getCtx(interfaceType) {
59
104
  const ctx = this.ctx[interfaceType];
60
105
  if (!ctx) {
@@ -64,9 +109,30 @@ class CrossPlatformWalletStamper {
64
109
  }
65
110
  }
66
111
  class WalletStamper {
112
+ /**
113
+ * Constructs a WalletStamper bound to a single wallet interface.
114
+ *
115
+ * @param wallet - The wallet interface used for signing.
116
+ */
67
117
  constructor(wallet) {
68
118
  this.wallet = wallet;
69
119
  }
120
+ /**
121
+ * Signs a payload and returns a standardized stamp header.
122
+ *
123
+ * - For Ethereum:
124
+ * - Signs using EIP-191.
125
+ * - Recovers and compresses the public key.
126
+ * - Converts the signature into DER format.
127
+ * - For Solana:
128
+ * - Signs using Ed25519.
129
+ * - Fetches the public key directly from the wallet.
130
+ *
131
+ * @param payload - The payload to sign.
132
+ * @param provider - The wallet provider used for signing.
133
+ * @returns A `TStamp` containing the header name and base64url-encoded JSON value.
134
+ * @throws {Error} If signing or public key recovery fails.
135
+ */
70
136
  async stamp(payload, provider) {
71
137
  let signature;
72
138
  let publicKey;
@@ -76,11 +142,11 @@ class WalletStamper {
76
142
  catch (error) {
77
143
  throw new Error(`Failed to sign the message: ${error}`);
78
144
  }
79
- const scheme = isSolanaWallet(provider)
145
+ const scheme = isSolanaProvider(provider)
80
146
  ? SIGNATURE_SCHEME_TK_API_ED25519
81
147
  : SIGNATURE_SCHEME_TK_API_SECP256K1_EIP191;
82
148
  try {
83
- if (isEthereumWallet(provider)) {
149
+ if (isEthereumProvider(provider)) {
84
150
  const { recoverPublicKey, hashMessage } = await import('viem');
85
151
  const { compressRawPublicKey, toDerSignature } = await import('@turnkey/crypto');
86
152
  const rawPublicKey = await recoverPublicKey({
@@ -1 +1 @@
1
- {"version":3,"file":"stamper.mjs","sources":["../../src/__wallet__/stamper.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stamper.mjs","sources":["../../src/__wallet__/stamper.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}