@0xkey-io/core 0.1.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 (183) hide show
  1. package/LICENSE +201 -0
  2. package/README.MD +7 -0
  3. package/dist/0xkey-helpers.d.ts +68 -0
  4. package/dist/0xkey-helpers.d.ts.map +1 -0
  5. package/dist/0xkey-helpers.js +466 -0
  6. package/dist/0xkey-helpers.js.map +1 -0
  7. package/dist/0xkey-helpers.mjs +399 -0
  8. package/dist/0xkey-helpers.mjs.map +1 -0
  9. package/dist/__clients__/core.d.ts +1201 -0
  10. package/dist/__clients__/core.d.ts.map +1 -0
  11. package/dist/__clients__/core.js +3489 -0
  12. package/dist/__clients__/core.js.map +1 -0
  13. package/dist/__clients__/core.mjs +3487 -0
  14. package/dist/__clients__/core.mjs.map +1 -0
  15. package/dist/__generated__/sdk-client-base.d.ts +281 -0
  16. package/dist/__generated__/sdk-client-base.d.ts.map +1 -0
  17. package/dist/__generated__/sdk-client-base.js +3906 -0
  18. package/dist/__generated__/sdk-client-base.js.map +1 -0
  19. package/dist/__generated__/sdk-client-base.mjs +3904 -0
  20. package/dist/__generated__/sdk-client-base.mjs.map +1 -0
  21. package/dist/__generated__/version.d.ts +2 -0
  22. package/dist/__generated__/version.d.ts.map +1 -0
  23. package/dist/__generated__/version.js +6 -0
  24. package/dist/__generated__/version.js.map +1 -0
  25. package/dist/__generated__/version.mjs +4 -0
  26. package/dist/__generated__/version.mjs.map +1 -0
  27. package/dist/__inputs__/public_api.types.d.ts +6014 -0
  28. package/dist/__inputs__/public_api.types.d.ts.map +1 -0
  29. package/dist/__polyfills__/jest.setup.webcrypto.d.ts +2 -0
  30. package/dist/__polyfills__/jest.setup.webcrypto.d.ts.map +1 -0
  31. package/dist/__polyfills__/window.d.ts +15 -0
  32. package/dist/__polyfills__/window.d.ts.map +1 -0
  33. package/dist/__polyfills__/window.js +30 -0
  34. package/dist/__polyfills__/window.js.map +1 -0
  35. package/dist/__polyfills__/window.mjs +28 -0
  36. package/dist/__polyfills__/window.mjs.map +1 -0
  37. package/dist/__stampers__/api/base.d.ts +27 -0
  38. package/dist/__stampers__/api/base.d.ts.map +1 -0
  39. package/dist/__stampers__/api/base.js +102 -0
  40. package/dist/__stampers__/api/base.js.map +1 -0
  41. package/dist/__stampers__/api/base.mjs +100 -0
  42. package/dist/__stampers__/api/base.mjs.map +1 -0
  43. package/dist/__stampers__/api/mobile/stamper.d.ts +15 -0
  44. package/dist/__stampers__/api/mobile/stamper.d.ts.map +1 -0
  45. package/dist/__stampers__/api/mobile/stamper.js +119 -0
  46. package/dist/__stampers__/api/mobile/stamper.js.map +1 -0
  47. package/dist/__stampers__/api/mobile/stamper.mjs +117 -0
  48. package/dist/__stampers__/api/mobile/stamper.mjs.map +1 -0
  49. package/dist/__stampers__/api/web/stamper.d.ts +14 -0
  50. package/dist/__stampers__/api/web/stamper.d.ts.map +1 -0
  51. package/dist/__stampers__/api/web/stamper.js +201 -0
  52. package/dist/__stampers__/api/web/stamper.js.map +1 -0
  53. package/dist/__stampers__/api/web/stamper.mjs +199 -0
  54. package/dist/__stampers__/api/web/stamper.mjs.map +1 -0
  55. package/dist/__stampers__/passkey/base.d.ts +16 -0
  56. package/dist/__stampers__/passkey/base.d.ts.map +1 -0
  57. package/dist/__stampers__/passkey/base.js +138 -0
  58. package/dist/__stampers__/passkey/base.js.map +1 -0
  59. package/dist/__stampers__/passkey/base.mjs +134 -0
  60. package/dist/__stampers__/passkey/base.mjs.map +1 -0
  61. package/dist/__storage__/base.d.ts +3 -0
  62. package/dist/__storage__/base.d.ts.map +1 -0
  63. package/dist/__storage__/base.js +27 -0
  64. package/dist/__storage__/base.js.map +1 -0
  65. package/dist/__storage__/base.mjs +25 -0
  66. package/dist/__storage__/base.mjs.map +1 -0
  67. package/dist/__storage__/mobile/storage.d.ts +18 -0
  68. package/dist/__storage__/mobile/storage.d.ts.map +1 -0
  69. package/dist/__storage__/mobile/storage.js +76 -0
  70. package/dist/__storage__/mobile/storage.js.map +1 -0
  71. package/dist/__storage__/mobile/storage.mjs +74 -0
  72. package/dist/__storage__/mobile/storage.mjs.map +1 -0
  73. package/dist/__storage__/web/storage.d.ts +19 -0
  74. package/dist/__storage__/web/storage.d.ts.map +1 -0
  75. package/dist/__storage__/web/storage.js +79 -0
  76. package/dist/__storage__/web/storage.js.map +1 -0
  77. package/dist/__storage__/web/storage.mjs +77 -0
  78. package/dist/__storage__/web/storage.mjs.map +1 -0
  79. package/dist/__typedoc-entry__/index.d.ts +3 -0
  80. package/dist/__typedoc-entry__/index.d.ts.map +1 -0
  81. package/dist/__types__/auth.d.ts +120 -0
  82. package/dist/__types__/auth.d.ts.map +1 -0
  83. package/dist/__types__/auth.js +7 -0
  84. package/dist/__types__/auth.js.map +1 -0
  85. package/dist/__types__/auth.mjs +5 -0
  86. package/dist/__types__/auth.mjs.map +1 -0
  87. package/dist/__types__/config.d.ts +145 -0
  88. package/dist/__types__/config.d.ts.map +1 -0
  89. package/dist/__types__/enums.d.ts +59 -0
  90. package/dist/__types__/enums.d.ts.map +1 -0
  91. package/dist/__types__/enums.js +72 -0
  92. package/dist/__types__/enums.js.map +1 -0
  93. package/dist/__types__/enums.mjs +70 -0
  94. package/dist/__types__/enums.mjs.map +1 -0
  95. package/dist/__types__/error.d.ts +13 -0
  96. package/dist/__types__/error.d.ts.map +1 -0
  97. package/dist/__types__/error.js +18 -0
  98. package/dist/__types__/error.js.map +1 -0
  99. package/dist/__types__/error.mjs +16 -0
  100. package/dist/__types__/error.mjs.map +1 -0
  101. package/dist/__types__/export.d.ts +10 -0
  102. package/dist/__types__/export.d.ts.map +1 -0
  103. package/dist/__types__/external-wallets.d.ts +203 -0
  104. package/dist/__types__/external-wallets.d.ts.map +1 -0
  105. package/dist/__types__/http.d.ts +17 -0
  106. package/dist/__types__/http.d.ts.map +1 -0
  107. package/dist/__types__/http.js +11 -0
  108. package/dist/__types__/http.js.map +1 -0
  109. package/dist/__types__/http.mjs +9 -0
  110. package/dist/__types__/http.mjs.map +1 -0
  111. package/dist/__types__/index.d.ts +10 -0
  112. package/dist/__types__/index.d.ts.map +1 -0
  113. package/dist/__types__/method-types/import-export-params.d.ts +38 -0
  114. package/dist/__types__/method-types/import-export-params.d.ts.map +1 -0
  115. package/dist/__types__/method-types/shared.d.ts +378 -0
  116. package/dist/__types__/method-types/shared.d.ts.map +1 -0
  117. package/dist/__wallet__/base.d.ts +14 -0
  118. package/dist/__wallet__/base.d.ts.map +1 -0
  119. package/dist/__wallet__/base.js +35 -0
  120. package/dist/__wallet__/base.js.map +1 -0
  121. package/dist/__wallet__/base.mjs +33 -0
  122. package/dist/__wallet__/base.mjs.map +1 -0
  123. package/dist/__wallet__/connector.d.ts +60 -0
  124. package/dist/__wallet__/connector.d.ts.map +1 -0
  125. package/dist/__wallet__/connector.js +93 -0
  126. package/dist/__wallet__/connector.js.map +1 -0
  127. package/dist/__wallet__/connector.mjs +91 -0
  128. package/dist/__wallet__/connector.mjs.map +1 -0
  129. package/dist/__wallet__/mobile/manager.d.ts +51 -0
  130. package/dist/__wallet__/mobile/manager.d.ts.map +1 -0
  131. package/dist/__wallet__/mobile/manager.js +115 -0
  132. package/dist/__wallet__/mobile/manager.js.map +1 -0
  133. package/dist/__wallet__/mobile/manager.mjs +113 -0
  134. package/dist/__wallet__/mobile/manager.mjs.map +1 -0
  135. package/dist/__wallet__/stamper.d.ts +90 -0
  136. package/dist/__wallet__/stamper.d.ts.map +1 -0
  137. package/dist/__wallet__/stamper.js +183 -0
  138. package/dist/__wallet__/stamper.js.map +1 -0
  139. package/dist/__wallet__/stamper.mjs +180 -0
  140. package/dist/__wallet__/stamper.mjs.map +1 -0
  141. package/dist/__wallet__/wallet-connect/base.d.ts +182 -0
  142. package/dist/__wallet__/wallet-connect/base.d.ts.map +1 -0
  143. package/dist/__wallet__/wallet-connect/base.js +606 -0
  144. package/dist/__wallet__/wallet-connect/base.js.map +1 -0
  145. package/dist/__wallet__/wallet-connect/base.mjs +604 -0
  146. package/dist/__wallet__/wallet-connect/base.mjs.map +1 -0
  147. package/dist/__wallet__/wallet-connect/client.d.ts +132 -0
  148. package/dist/__wallet__/wallet-connect/client.d.ts.map +1 -0
  149. package/dist/__wallet__/wallet-connect/client.js +262 -0
  150. package/dist/__wallet__/wallet-connect/client.js.map +1 -0
  151. package/dist/__wallet__/wallet-connect/client.mjs +260 -0
  152. package/dist/__wallet__/wallet-connect/client.mjs.map +1 -0
  153. package/dist/__wallet__/web/manager.d.ts +70 -0
  154. package/dist/__wallet__/web/manager.d.ts.map +1 -0
  155. package/dist/__wallet__/web/manager.js +177 -0
  156. package/dist/__wallet__/web/manager.js.map +1 -0
  157. package/dist/__wallet__/web/manager.mjs +175 -0
  158. package/dist/__wallet__/web/manager.mjs.map +1 -0
  159. package/dist/__wallet__/web/native/ethereum.d.ts +101 -0
  160. package/dist/__wallet__/web/native/ethereum.d.ts.map +1 -0
  161. package/dist/__wallet__/web/native/ethereum.js +339 -0
  162. package/dist/__wallet__/web/native/ethereum.js.map +1 -0
  163. package/dist/__wallet__/web/native/ethereum.mjs +336 -0
  164. package/dist/__wallet__/web/native/ethereum.mjs.map +1 -0
  165. package/dist/__wallet__/web/native/solana.d.ts +72 -0
  166. package/dist/__wallet__/web/native/solana.d.ts.map +1 -0
  167. package/dist/__wallet__/web/native/solana.js +215 -0
  168. package/dist/__wallet__/web/native/solana.js.map +1 -0
  169. package/dist/__wallet__/web/native/solana.mjs +212 -0
  170. package/dist/__wallet__/web/native/solana.mjs.map +1 -0
  171. package/dist/index.d.ts +19 -0
  172. package/dist/index.d.ts.map +1 -0
  173. package/dist/index.js +83 -0
  174. package/dist/index.js.map +1 -0
  175. package/dist/index.mjs +10 -0
  176. package/dist/index.mjs.map +1 -0
  177. package/dist/utils.d.ts +160 -0
  178. package/dist/utils.d.ts.map +1 -0
  179. package/dist/utils.js +1047 -0
  180. package/dist/utils.js.map +1 -0
  181. package/dist/utils.mjs +1007 -0
  182. package/dist/utils.mjs.map +1 -0
  183. package/package.json +80 -0
@@ -0,0 +1,132 @@
1
+ import type { CoreTypes, ProposalTypes, SessionTypes } from "@walletconnect/types";
2
+ /**
3
+ * WalletConnectClient is a low-level wrapper around the WalletConnect SignClient.
4
+ *
5
+ * - Used internally by `WalletConnectWallet` to manage connections and sessions.
6
+ * - Handles pairing, approval, session tracking, RPC requests, and disconnects.
7
+ * - Exposes a minimal API for lifecycle control; higher-level logic lives in `WalletConnectWallet`.
8
+ */
9
+ export declare class WalletConnectClient {
10
+ private client;
11
+ private pendingApproval;
12
+ private sessionUpdateHandlers;
13
+ private sessionEventHandlers;
14
+ private sessionDeleteHandlers;
15
+ private pairingExpireHandlers;
16
+ /**
17
+ * Registers a callback for WalletConnect `session_update`.
18
+ *
19
+ * - Triggered when the wallet updates the session namespaces
20
+ * (e.g., accounts/chains/permissions). Use this to refresh providers.
21
+ * - Returns an unsubscribe function to remove the listener.
22
+ *
23
+ * @param fn - Callback invoked when a `session_update` occurs.
24
+ * @returns A function that unsubscribes this listener.
25
+ */
26
+ onSessionUpdate(fn: () => void): () => void;
27
+ /**
28
+ * Registers a callback for WalletConnect `session_event`.
29
+ *
30
+ * - Emits ephemeral wallet events such as `chainChanged` or `accountsChanged`.
31
+ * - The raw event payload is forwarded so callers can inspect `{ event, chainId, topic }`.
32
+ * - Returns an unsubscribe function to remove the listener.
33
+ *
34
+ * @param fn - Callback receiving the raw session event args.
35
+ * @returns A function that unsubscribes this listener.
36
+ */
37
+ onSessionEvent(fn: (args: any) => void): () => void;
38
+ /**
39
+ * Registers a callback for WalletConnect `session_delete`.
40
+ *
41
+ * - Fired from the underlying SignClient when a session is terminated.
42
+ * - Useful for clearing UI state or internal session data after a disconnect.
43
+ *
44
+ * @param fn - Callback to invoke when the session is deleted.
45
+ */
46
+ onSessionDelete(fn: () => void): void;
47
+ /**
48
+ * Registers a callback for WalletConnect `pairing_expire`.
49
+ *
50
+ * - Fired from the underlying SignClient when a session proposal expires.
51
+ * - Useful for re-initiating the pairing process, and refreshing the pairing URI.
52
+ *
53
+ * @param fn - Callback to invoke when the pairing expires.
54
+ */
55
+ onPairingExpire(fn: () => void): void;
56
+ /**
57
+ * Initializes the WalletConnect SignClient with your project credentials.
58
+ *
59
+ * - Must be called before `pair()`, `approve()`, or `request()`.
60
+ * - Configures app metadata and an optional custom relay server.
61
+ *
62
+ * @param opts.projectId - WalletConnect project ID.
63
+ * @param opts.appMetadata - Metadata about your app (name, URL, icons).
64
+ * @param opts.relayUrl - (Optional) custom relay server URL.
65
+ * @returns A promise that resolves once the client is initialized.
66
+ */
67
+ init(opts: {
68
+ projectId: string;
69
+ appMetadata: CoreTypes.Metadata;
70
+ relayUrl?: string;
71
+ }): Promise<void>;
72
+ /**
73
+ * Initiates a pairing request and returns a URI to be scanned or deep-linked.
74
+ *
75
+ * - Requires `init()` to have been called.
76
+ * - Must be followed by `approve()` after the wallet approves.
77
+ * - Throws if a pairing is already in progress.
78
+ *
79
+ * @param namespaces - Optional namespaces requesting capabilities.
80
+ * @returns A WalletConnect URI for the wallet to connect with.
81
+ * @throws {Error} If a pairing is already in progress or no URI is returned.
82
+ */
83
+ pair(namespaces: ProposalTypes.OptionalNamespaces): Promise<string>;
84
+ /**
85
+ * Completes the pairing approval process after the wallet approves the request.
86
+ *
87
+ * - Requires `init()` and a pending pairing started via `pair()`.
88
+ *
89
+ * @returns A promise that resolves to the established session.
90
+ * @throws {Error} If called before `pair()` or if approval fails.
91
+ */
92
+ approve(): Promise<SessionTypes.Struct>;
93
+ /**
94
+ * Retrieves the most recent active WalletConnect session.
95
+ *
96
+ * @returns The most recent session, or `null` if none are active.
97
+ */
98
+ getSession(): SessionTypes.Struct | null;
99
+ /**
100
+ * Sends a JSON-RPC request over the active WalletConnect session.
101
+ *
102
+ * - Requires `init()` and an active session.
103
+ *
104
+ * @param chainId - Target chain ID (e.g. `eip155:1`).
105
+ * @param method - RPC method name.
106
+ * @param params - Parameters for the RPC method.
107
+ * @returns A promise that resolves with the RPC response.
108
+ * @throws {Error} If no active session exists.
109
+ */
110
+ request(chainId: string, method: string, params: any[] | Record<string, any>): Promise<any>;
111
+ /**
112
+ * Disconnects the active session, if one exists.
113
+ *
114
+ * - Sends a disconnect signal to the wallet.
115
+ * - Does nothing if no session is currently active.
116
+ *
117
+ * @returns A promise that resolves once disconnection is complete.
118
+ */
119
+ disconnect(): Promise<void>;
120
+ /**
121
+ * Cancels all in-progress WalletConnect pairings, if any.
122
+ *
123
+ * - Iterates through the core pairing registry and disconnects every active pairing
124
+ * - Always clears the pending approval callback so subsequent `pair()` calls
125
+ * can be made
126
+ * - Safe to call even if no pairings exist. it simply resets internal state
127
+ *
128
+ * @returns A promise that resolves once cancellation is complete.
129
+ */
130
+ cancelPairing(): Promise<void>;
131
+ }
132
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/__wallet__/wallet-connect/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EACb,YAAY,EACb,MAAM,sBAAsB,CAAC;AAE9B;;;;;;GAMG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAc;IAG5B,OAAO,CAAC,eAAe,CAAqD;IAW5E,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,CAAC,oBAAoB,CAAkC;IAC9D,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,CAAC,qBAAqB,CAAyB;IAEtD;;;;;;;;;OASG;IACI,eAAe,CAAC,EAAE,EAAE,MAAM,IAAI;IASrC;;;;;;;;;OASG;IACI,cAAc,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI;IAS7C;;;;;;;OAOG;IACI,eAAe,CAAC,EAAE,EAAE,MAAM,IAAI;IAIrC;;;;;;;OAOG;IACI,eAAe,CAAC,EAAE,EAAE,MAAM,IAAI;IAIrC;;;;;;;;;;OAUG;IACG,IAAI,CAAC,IAAI,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBjB;;;;;;;;;;OAUG;IACG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBzE;;;;;;;OAOG;IACG,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC;IA6B7C;;;;OAIG;IACH,UAAU,IAAI,YAAY,CAAC,MAAM,GAAG,IAAI;IAUxC;;;;;;;;;;OAUG;IACG,OAAO,CACX,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAClC,OAAO,CAAC,GAAG,CAAC;IAaf;;;;;;;OAOG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjC;;;;;;;;;OASG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CA6BrC"}
@@ -0,0 +1,262 @@
1
+ 'use strict';
2
+
3
+ var SignClient = require('@walletconnect/sign-client');
4
+
5
+ /**
6
+ * WalletConnectClient is a low-level wrapper around the WalletConnect SignClient.
7
+ *
8
+ * - Used internally by `WalletConnectWallet` to manage connections and sessions.
9
+ * - Handles pairing, approval, session tracking, RPC requests, and disconnects.
10
+ * - Exposes a minimal API for lifecycle control; higher-level logic lives in `WalletConnectWallet`.
11
+ */
12
+ class WalletConnectClient {
13
+ constructor() {
14
+ // tracks the pending approval callback returned from `connect()`
15
+ this.pendingApproval = null;
16
+ // these are subscribers we forward from the underlying WalletConnect SignClient:
17
+ //
18
+ // - sessionUpdateHandlers: fired on 'session_update' when session namespaces
19
+ // (accounts/chains/permissions) change
20
+ //
21
+ // - sessionEventHandlers: fired on 'session_event' for ephemeral wallet events
22
+ // like { event: { name: 'chainChanged' | 'accountsChanged', data }, chainId, topic }
23
+ //
24
+ // - sessionDeleteHandlers: fired on 'session_delete' when the session is terminated
25
+ this.sessionUpdateHandlers = [];
26
+ this.sessionEventHandlers = [];
27
+ this.sessionDeleteHandlers = [];
28
+ this.pairingExpireHandlers = [];
29
+ }
30
+ /**
31
+ * Registers a callback for WalletConnect `session_update`.
32
+ *
33
+ * - Triggered when the wallet updates the session namespaces
34
+ * (e.g., accounts/chains/permissions). Use this to refresh providers.
35
+ * - Returns an unsubscribe function to remove the listener.
36
+ *
37
+ * @param fn - Callback invoked when a `session_update` occurs.
38
+ * @returns A function that unsubscribes this listener.
39
+ */
40
+ onSessionUpdate(fn) {
41
+ this.sessionUpdateHandlers.push(fn);
42
+ return () => {
43
+ this.sessionUpdateHandlers = this.sessionUpdateHandlers.filter((h) => h !== fn);
44
+ };
45
+ }
46
+ /**
47
+ * Registers a callback for WalletConnect `session_event`.
48
+ *
49
+ * - Emits ephemeral wallet events such as `chainChanged` or `accountsChanged`.
50
+ * - The raw event payload is forwarded so callers can inspect `{ event, chainId, topic }`.
51
+ * - Returns an unsubscribe function to remove the listener.
52
+ *
53
+ * @param fn - Callback receiving the raw session event args.
54
+ * @returns A function that unsubscribes this listener.
55
+ */
56
+ onSessionEvent(fn) {
57
+ this.sessionEventHandlers.push(fn);
58
+ return () => {
59
+ this.sessionEventHandlers = this.sessionEventHandlers.filter((h) => h !== fn);
60
+ };
61
+ }
62
+ /**
63
+ * Registers a callback for WalletConnect `session_delete`.
64
+ *
65
+ * - Fired from the underlying SignClient when a session is terminated.
66
+ * - Useful for clearing UI state or internal session data after a disconnect.
67
+ *
68
+ * @param fn - Callback to invoke when the session is deleted.
69
+ */
70
+ onSessionDelete(fn) {
71
+ this.sessionDeleteHandlers.push(fn);
72
+ }
73
+ /**
74
+ * Registers a callback for WalletConnect `pairing_expire`.
75
+ *
76
+ * - Fired from the underlying SignClient when a session proposal expires.
77
+ * - Useful for re-initiating the pairing process, and refreshing the pairing URI.
78
+ *
79
+ * @param fn - Callback to invoke when the pairing expires.
80
+ */
81
+ onPairingExpire(fn) {
82
+ this.pairingExpireHandlers.push(fn);
83
+ }
84
+ /**
85
+ * Initializes the WalletConnect SignClient with your project credentials.
86
+ *
87
+ * - Must be called before `pair()`, `approve()`, or `request()`.
88
+ * - Configures app metadata and an optional custom relay server.
89
+ *
90
+ * @param opts.projectId - WalletConnect project ID.
91
+ * @param opts.appMetadata - Metadata about your app (name, URL, icons).
92
+ * @param opts.relayUrl - (Optional) custom relay server URL.
93
+ * @returns A promise that resolves once the client is initialized.
94
+ */
95
+ async init(opts) {
96
+ this.client = await SignClient.init({
97
+ projectId: opts.projectId,
98
+ metadata: opts.appMetadata,
99
+ ...(opts.relayUrl ? { relayUrl: opts.relayUrl } : {}),
100
+ });
101
+ // fan out WalletConnect SignClient events to our subscribers
102
+ this.client.on("session_delete", () => {
103
+ this.sessionDeleteHandlers.forEach((h) => h());
104
+ });
105
+ this.client.on("session_update", () => {
106
+ this.sessionUpdateHandlers.forEach((h) => h());
107
+ });
108
+ this.client.on("session_event", (args) => {
109
+ this.sessionEventHandlers.forEach((h) => h(args));
110
+ });
111
+ this.client.core.pairing.events.on("pairing_expire", () => {
112
+ this.pairingExpireHandlers.forEach((h) => h());
113
+ });
114
+ }
115
+ /**
116
+ * Initiates a pairing request and returns a URI to be scanned or deep-linked.
117
+ *
118
+ * - Requires `init()` to have been called.
119
+ * - Must be followed by `approve()` after the wallet approves.
120
+ * - Throws if a pairing is already in progress.
121
+ *
122
+ * @param namespaces - Optional namespaces requesting capabilities.
123
+ * @returns A WalletConnect URI for the wallet to connect with.
124
+ * @throws {Error} If a pairing is already in progress or no URI is returned.
125
+ */
126
+ async pair(namespaces) {
127
+ if (this.pendingApproval) {
128
+ throw new Error("WalletConnect: Pairing already in progress");
129
+ }
130
+ const { uri, approval } = await this.client.connect({
131
+ optionalNamespaces: namespaces,
132
+ });
133
+ if (!uri) {
134
+ throw new Error("WalletConnect: no URI returned");
135
+ }
136
+ this.pendingApproval = approval;
137
+ return uri;
138
+ }
139
+ /**
140
+ * Completes the pairing approval process after the wallet approves the request.
141
+ *
142
+ * - Requires `init()` and a pending pairing started via `pair()`.
143
+ *
144
+ * @returns A promise that resolves to the established session.
145
+ * @throws {Error} If called before `pair()` or if approval fails.
146
+ */
147
+ async approve() {
148
+ if (!this.pendingApproval) {
149
+ throw new Error("WalletConnect: call pair() before approve()");
150
+ }
151
+ try {
152
+ const session = await this.pendingApproval();
153
+ return session;
154
+ }
155
+ catch (error) {
156
+ // we sanitize common errors to be more user-friendly
157
+ if (error.message?.includes("Proposal expired")) {
158
+ throw new Error("WalletConnect: The connection request has expired. Please scan the QR code again.");
159
+ }
160
+ if (error.message?.includes("User rejected")) {
161
+ throw new Error("WalletConnect: The connection request was rejected by the user.");
162
+ }
163
+ throw new Error(`WalletConnect: Approval failed: ${error.message}`);
164
+ }
165
+ finally {
166
+ // we clear the pending state regardless of outcome
167
+ this.pendingApproval = null;
168
+ }
169
+ }
170
+ /**
171
+ * Retrieves the most recent active WalletConnect session.
172
+ *
173
+ * @returns The most recent session, or `null` if none are active.
174
+ */
175
+ getSession() {
176
+ // we return null if the client hasn't been initialized yet
177
+ if (!this.client?.session) {
178
+ return null;
179
+ }
180
+ const sessions = this.client.session.getAll();
181
+ return sessions.length ? sessions[sessions.length - 1] : null;
182
+ }
183
+ /**
184
+ * Sends a JSON-RPC request over the active WalletConnect session.
185
+ *
186
+ * - Requires `init()` and an active session.
187
+ *
188
+ * @param chainId - Target chain ID (e.g. `eip155:1`).
189
+ * @param method - RPC method name.
190
+ * @param params - Parameters for the RPC method.
191
+ * @returns A promise that resolves with the RPC response.
192
+ * @throws {Error} If no active session exists.
193
+ */
194
+ async request(chainId, method, params) {
195
+ const session = this.getSession();
196
+ if (!session) {
197
+ throw new Error("WalletConnect: no active session");
198
+ }
199
+ return this.client.request({
200
+ topic: session.topic,
201
+ chainId,
202
+ request: { method, params },
203
+ });
204
+ }
205
+ /**
206
+ * Disconnects the active session, if one exists.
207
+ *
208
+ * - Sends a disconnect signal to the wallet.
209
+ * - Does nothing if no session is currently active.
210
+ *
211
+ * @returns A promise that resolves once disconnection is complete.
212
+ */
213
+ async disconnect() {
214
+ const session = this.getSession();
215
+ if (!session)
216
+ return;
217
+ await this.client.disconnect({
218
+ topic: session.topic,
219
+ reason: { code: 6000, message: "User disconnected" },
220
+ });
221
+ }
222
+ /**
223
+ * Cancels all in-progress WalletConnect pairings, if any.
224
+ *
225
+ * - Iterates through the core pairing registry and disconnects every active pairing
226
+ * - Always clears the pending approval callback so subsequent `pair()` calls
227
+ * can be made
228
+ * - Safe to call even if no pairings exist. it simply resets internal state
229
+ *
230
+ * @returns A promise that resolves once cancellation is complete.
231
+ */
232
+ async cancelPairing() {
233
+ try {
234
+ const pairings = this.client.core.pairing.getPairings();
235
+ // disconnect all active pairings
236
+ // technically there should only be one active pairing at a tim
237
+ const disconnectPromises = pairings.map(async (pairing) => {
238
+ try {
239
+ await this.client.core.pairing.disconnect({
240
+ topic: pairing.topic,
241
+ });
242
+ }
243
+ catch (err) {
244
+ if (err.message?.includes("Expired") ||
245
+ err.message?.includes("Not found") ||
246
+ err.message?.includes("No matching key")) {
247
+ // already expired/disconnected, so we ignore
248
+ return;
249
+ }
250
+ console.warn("failed to disconnect pairing:", err);
251
+ }
252
+ });
253
+ await Promise.allSettled(disconnectPromises);
254
+ }
255
+ finally {
256
+ this.pendingApproval = null;
257
+ }
258
+ }
259
+ }
260
+
261
+ exports.WalletConnectClient = WalletConnectClient;
262
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sources":["../../../src/__wallet__/wallet-connect/client.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,260 @@
1
+ import SignClient from '@walletconnect/sign-client';
2
+
3
+ /**
4
+ * WalletConnectClient is a low-level wrapper around the WalletConnect SignClient.
5
+ *
6
+ * - Used internally by `WalletConnectWallet` to manage connections and sessions.
7
+ * - Handles pairing, approval, session tracking, RPC requests, and disconnects.
8
+ * - Exposes a minimal API for lifecycle control; higher-level logic lives in `WalletConnectWallet`.
9
+ */
10
+ class WalletConnectClient {
11
+ constructor() {
12
+ // tracks the pending approval callback returned from `connect()`
13
+ this.pendingApproval = null;
14
+ // these are subscribers we forward from the underlying WalletConnect SignClient:
15
+ //
16
+ // - sessionUpdateHandlers: fired on 'session_update' when session namespaces
17
+ // (accounts/chains/permissions) change
18
+ //
19
+ // - sessionEventHandlers: fired on 'session_event' for ephemeral wallet events
20
+ // like { event: { name: 'chainChanged' | 'accountsChanged', data }, chainId, topic }
21
+ //
22
+ // - sessionDeleteHandlers: fired on 'session_delete' when the session is terminated
23
+ this.sessionUpdateHandlers = [];
24
+ this.sessionEventHandlers = [];
25
+ this.sessionDeleteHandlers = [];
26
+ this.pairingExpireHandlers = [];
27
+ }
28
+ /**
29
+ * Registers a callback for WalletConnect `session_update`.
30
+ *
31
+ * - Triggered when the wallet updates the session namespaces
32
+ * (e.g., accounts/chains/permissions). Use this to refresh providers.
33
+ * - Returns an unsubscribe function to remove the listener.
34
+ *
35
+ * @param fn - Callback invoked when a `session_update` occurs.
36
+ * @returns A function that unsubscribes this listener.
37
+ */
38
+ onSessionUpdate(fn) {
39
+ this.sessionUpdateHandlers.push(fn);
40
+ return () => {
41
+ this.sessionUpdateHandlers = this.sessionUpdateHandlers.filter((h) => h !== fn);
42
+ };
43
+ }
44
+ /**
45
+ * Registers a callback for WalletConnect `session_event`.
46
+ *
47
+ * - Emits ephemeral wallet events such as `chainChanged` or `accountsChanged`.
48
+ * - The raw event payload is forwarded so callers can inspect `{ event, chainId, topic }`.
49
+ * - Returns an unsubscribe function to remove the listener.
50
+ *
51
+ * @param fn - Callback receiving the raw session event args.
52
+ * @returns A function that unsubscribes this listener.
53
+ */
54
+ onSessionEvent(fn) {
55
+ this.sessionEventHandlers.push(fn);
56
+ return () => {
57
+ this.sessionEventHandlers = this.sessionEventHandlers.filter((h) => h !== fn);
58
+ };
59
+ }
60
+ /**
61
+ * Registers a callback for WalletConnect `session_delete`.
62
+ *
63
+ * - Fired from the underlying SignClient when a session is terminated.
64
+ * - Useful for clearing UI state or internal session data after a disconnect.
65
+ *
66
+ * @param fn - Callback to invoke when the session is deleted.
67
+ */
68
+ onSessionDelete(fn) {
69
+ this.sessionDeleteHandlers.push(fn);
70
+ }
71
+ /**
72
+ * Registers a callback for WalletConnect `pairing_expire`.
73
+ *
74
+ * - Fired from the underlying SignClient when a session proposal expires.
75
+ * - Useful for re-initiating the pairing process, and refreshing the pairing URI.
76
+ *
77
+ * @param fn - Callback to invoke when the pairing expires.
78
+ */
79
+ onPairingExpire(fn) {
80
+ this.pairingExpireHandlers.push(fn);
81
+ }
82
+ /**
83
+ * Initializes the WalletConnect SignClient with your project credentials.
84
+ *
85
+ * - Must be called before `pair()`, `approve()`, or `request()`.
86
+ * - Configures app metadata and an optional custom relay server.
87
+ *
88
+ * @param opts.projectId - WalletConnect project ID.
89
+ * @param opts.appMetadata - Metadata about your app (name, URL, icons).
90
+ * @param opts.relayUrl - (Optional) custom relay server URL.
91
+ * @returns A promise that resolves once the client is initialized.
92
+ */
93
+ async init(opts) {
94
+ this.client = await SignClient.init({
95
+ projectId: opts.projectId,
96
+ metadata: opts.appMetadata,
97
+ ...(opts.relayUrl ? { relayUrl: opts.relayUrl } : {}),
98
+ });
99
+ // fan out WalletConnect SignClient events to our subscribers
100
+ this.client.on("session_delete", () => {
101
+ this.sessionDeleteHandlers.forEach((h) => h());
102
+ });
103
+ this.client.on("session_update", () => {
104
+ this.sessionUpdateHandlers.forEach((h) => h());
105
+ });
106
+ this.client.on("session_event", (args) => {
107
+ this.sessionEventHandlers.forEach((h) => h(args));
108
+ });
109
+ this.client.core.pairing.events.on("pairing_expire", () => {
110
+ this.pairingExpireHandlers.forEach((h) => h());
111
+ });
112
+ }
113
+ /**
114
+ * Initiates a pairing request and returns a URI to be scanned or deep-linked.
115
+ *
116
+ * - Requires `init()` to have been called.
117
+ * - Must be followed by `approve()` after the wallet approves.
118
+ * - Throws if a pairing is already in progress.
119
+ *
120
+ * @param namespaces - Optional namespaces requesting capabilities.
121
+ * @returns A WalletConnect URI for the wallet to connect with.
122
+ * @throws {Error} If a pairing is already in progress or no URI is returned.
123
+ */
124
+ async pair(namespaces) {
125
+ if (this.pendingApproval) {
126
+ throw new Error("WalletConnect: Pairing already in progress");
127
+ }
128
+ const { uri, approval } = await this.client.connect({
129
+ optionalNamespaces: namespaces,
130
+ });
131
+ if (!uri) {
132
+ throw new Error("WalletConnect: no URI returned");
133
+ }
134
+ this.pendingApproval = approval;
135
+ return uri;
136
+ }
137
+ /**
138
+ * Completes the pairing approval process after the wallet approves the request.
139
+ *
140
+ * - Requires `init()` and a pending pairing started via `pair()`.
141
+ *
142
+ * @returns A promise that resolves to the established session.
143
+ * @throws {Error} If called before `pair()` or if approval fails.
144
+ */
145
+ async approve() {
146
+ if (!this.pendingApproval) {
147
+ throw new Error("WalletConnect: call pair() before approve()");
148
+ }
149
+ try {
150
+ const session = await this.pendingApproval();
151
+ return session;
152
+ }
153
+ catch (error) {
154
+ // we sanitize common errors to be more user-friendly
155
+ if (error.message?.includes("Proposal expired")) {
156
+ throw new Error("WalletConnect: The connection request has expired. Please scan the QR code again.");
157
+ }
158
+ if (error.message?.includes("User rejected")) {
159
+ throw new Error("WalletConnect: The connection request was rejected by the user.");
160
+ }
161
+ throw new Error(`WalletConnect: Approval failed: ${error.message}`);
162
+ }
163
+ finally {
164
+ // we clear the pending state regardless of outcome
165
+ this.pendingApproval = null;
166
+ }
167
+ }
168
+ /**
169
+ * Retrieves the most recent active WalletConnect session.
170
+ *
171
+ * @returns The most recent session, or `null` if none are active.
172
+ */
173
+ getSession() {
174
+ // we return null if the client hasn't been initialized yet
175
+ if (!this.client?.session) {
176
+ return null;
177
+ }
178
+ const sessions = this.client.session.getAll();
179
+ return sessions.length ? sessions[sessions.length - 1] : null;
180
+ }
181
+ /**
182
+ * Sends a JSON-RPC request over the active WalletConnect session.
183
+ *
184
+ * - Requires `init()` and an active session.
185
+ *
186
+ * @param chainId - Target chain ID (e.g. `eip155:1`).
187
+ * @param method - RPC method name.
188
+ * @param params - Parameters for the RPC method.
189
+ * @returns A promise that resolves with the RPC response.
190
+ * @throws {Error} If no active session exists.
191
+ */
192
+ async request(chainId, method, params) {
193
+ const session = this.getSession();
194
+ if (!session) {
195
+ throw new Error("WalletConnect: no active session");
196
+ }
197
+ return this.client.request({
198
+ topic: session.topic,
199
+ chainId,
200
+ request: { method, params },
201
+ });
202
+ }
203
+ /**
204
+ * Disconnects the active session, if one exists.
205
+ *
206
+ * - Sends a disconnect signal to the wallet.
207
+ * - Does nothing if no session is currently active.
208
+ *
209
+ * @returns A promise that resolves once disconnection is complete.
210
+ */
211
+ async disconnect() {
212
+ const session = this.getSession();
213
+ if (!session)
214
+ return;
215
+ await this.client.disconnect({
216
+ topic: session.topic,
217
+ reason: { code: 6000, message: "User disconnected" },
218
+ });
219
+ }
220
+ /**
221
+ * Cancels all in-progress WalletConnect pairings, if any.
222
+ *
223
+ * - Iterates through the core pairing registry and disconnects every active pairing
224
+ * - Always clears the pending approval callback so subsequent `pair()` calls
225
+ * can be made
226
+ * - Safe to call even if no pairings exist. it simply resets internal state
227
+ *
228
+ * @returns A promise that resolves once cancellation is complete.
229
+ */
230
+ async cancelPairing() {
231
+ try {
232
+ const pairings = this.client.core.pairing.getPairings();
233
+ // disconnect all active pairings
234
+ // technically there should only be one active pairing at a tim
235
+ const disconnectPromises = pairings.map(async (pairing) => {
236
+ try {
237
+ await this.client.core.pairing.disconnect({
238
+ topic: pairing.topic,
239
+ });
240
+ }
241
+ catch (err) {
242
+ if (err.message?.includes("Expired") ||
243
+ err.message?.includes("Not found") ||
244
+ err.message?.includes("No matching key")) {
245
+ // already expired/disconnected, so we ignore
246
+ return;
247
+ }
248
+ console.warn("failed to disconnect pairing:", err);
249
+ }
250
+ });
251
+ await Promise.allSettled(disconnectPromises);
252
+ }
253
+ finally {
254
+ this.pendingApproval = null;
255
+ }
256
+ }
257
+ }
258
+
259
+ export { WalletConnectClient };
260
+ //# sourceMappingURL=client.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.mjs","sources":["../../../src/__wallet__/wallet-connect/client.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}