@0xsequence/dapp-client 0.0.0-20250910142613

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 (43) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/CHANGELOG.md +11 -0
  3. package/LICENSE +202 -0
  4. package/README.md +238 -0
  5. package/dist/ChainSessionManager.d.ts +203 -0
  6. package/dist/ChainSessionManager.d.ts.map +1 -0
  7. package/dist/ChainSessionManager.js +742 -0
  8. package/dist/DappClient.d.ts +409 -0
  9. package/dist/DappClient.d.ts.map +1 -0
  10. package/dist/DappClient.js +667 -0
  11. package/dist/DappTransport.d.ts +47 -0
  12. package/dist/DappTransport.d.ts.map +1 -0
  13. package/dist/DappTransport.js +443 -0
  14. package/dist/index.d.ts +11 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +7 -0
  17. package/dist/types/index.d.ts +168 -0
  18. package/dist/types/index.d.ts.map +1 -0
  19. package/dist/types/index.js +25 -0
  20. package/dist/utils/constants.d.ts +6 -0
  21. package/dist/utils/constants.d.ts.map +1 -0
  22. package/dist/utils/constants.js +5 -0
  23. package/dist/utils/errors.d.ts +28 -0
  24. package/dist/utils/errors.d.ts.map +1 -0
  25. package/dist/utils/errors.js +54 -0
  26. package/dist/utils/index.d.ts +11 -0
  27. package/dist/utils/index.d.ts.map +1 -0
  28. package/dist/utils/index.js +135 -0
  29. package/dist/utils/storage.d.ts +64 -0
  30. package/dist/utils/storage.d.ts.map +1 -0
  31. package/dist/utils/storage.js +196 -0
  32. package/eslint.config.mjs +4 -0
  33. package/package.json +38 -0
  34. package/src/ChainSessionManager.ts +978 -0
  35. package/src/DappClient.ts +801 -0
  36. package/src/DappTransport.ts +518 -0
  37. package/src/index.ts +47 -0
  38. package/src/types/index.ts +218 -0
  39. package/src/utils/constants.ts +5 -0
  40. package/src/utils/errors.ts +62 -0
  41. package/src/utils/index.ts +158 -0
  42. package/src/utils/storage.ts +272 -0
  43. package/tsconfig.json +10 -0
@@ -0,0 +1,409 @@
1
+ import { Relayer, Signers } from '@0xsequence/wallet-core';
2
+ import { Address, Hex } from 'ox';
3
+ import { SequenceStorage } from './utils/storage.js';
4
+ import { DappClientExplicitSessionEventListener, DappClientWalletActionEventListener, GuardConfig, LoginMethod, RandomPrivateKeyFn, SequenceSessionStorage, Session, Transaction, TransactionRequest, TransportMode } from './types/index.js';
5
+ import { TypedData } from 'ox/TypedData';
6
+ export type DappClientEventListener = (data?: any) => void;
7
+ interface DappClientEventMap {
8
+ sessionsUpdated: () => void;
9
+ walletActionResponse: DappClientWalletActionEventListener;
10
+ explicitSessionResponse: DappClientExplicitSessionEventListener;
11
+ }
12
+ /**
13
+ * The main entry point for interacting with the Wallet.
14
+ * This client manages user sessions across multiple chains, handles connection
15
+ * and disconnection, and provides methods for signing and sending transactions.
16
+ *
17
+ * @see {@link https://docs.sequence.xyz/sdk/typescript/v3/dapp-client} for more detailed documentation.
18
+ *
19
+ * @example
20
+ * // It is recommended to manage a singleton instance of this client.
21
+ * const dappClient = new DappClient('http://localhost:5173');
22
+ *
23
+ * async function main() {
24
+ * // Initialize the client on page load to restore existing sessions.
25
+ * await dappClient.initialize();
26
+ *
27
+ * // If not connected, prompt the user to connect.
28
+ * if (!dappClient.isInitialized) {
29
+ * await client.connect(137, window.location.origin);
30
+ * }
31
+ * }
32
+ */
33
+ export declare class DappClient {
34
+ isInitialized: boolean;
35
+ loginMethod: string | null;
36
+ userEmail: string | null;
37
+ guard?: GuardConfig;
38
+ readonly origin: string;
39
+ private chainSessionManagers;
40
+ private walletUrl;
41
+ private transport;
42
+ private projectAccessKey;
43
+ private nodesUrl;
44
+ private relayerUrl;
45
+ private keymachineUrl;
46
+ private sequenceStorage;
47
+ private redirectPath?;
48
+ private sequenceSessionStorage?;
49
+ private randomPrivateKeyFn?;
50
+ private redirectActionHandler?;
51
+ private canUseIndexedDb;
52
+ private isInitializing;
53
+ private walletAddress;
54
+ private eventListeners;
55
+ /**
56
+ * @param walletUrl The URL of the Wallet Webapp.
57
+ * @param origin The origin of the dapp
58
+ * @param projectAccessKey Your project access key from sequence.build. Used for services like relayer and nodes.
59
+ * @param options Configuration options for the client.
60
+ * @param options.transportMode The communication mode to use with the wallet. Defaults to 'popup'.
61
+ * @param options.redirectPath The path to redirect back to after a redirect-based flow. Constructed with origin + redirectPath.
62
+ * @param options.nodesUrl The URL template for the nodes service. Use `{network}` as a placeholder for the network name. Defaults to the Sequence nodes ('https://nodes.sequence.app/{network}').
63
+ * @param options.relayerUrl The URL template for the relayer service. Use `{network}` as a placeholder for the network name. Defaults to the Sequence relayer ('https://dev-{network}-relayer.sequence.app').
64
+ * @param options.keymachineUrl The URL of the key management service.
65
+ * @param options.sequenceStorage The storage implementation for persistent session data. Defaults to WebStorage using IndexedDB.
66
+ * @param options.sequenceSessionStorage The storage implementation for temporary data (e.g., pending requests). Defaults to sessionStorage.
67
+ * @param options.randomPrivateKeyFn A function to generate random private keys for new sessions.
68
+ * @param options.redirectActionHandler A handler to manually control navigation for redirect flows.
69
+ * @param options.canUseIndexedDb A flag to enable or disable the use of IndexedDB for caching.
70
+ */
71
+ constructor(walletUrl: string, origin: string, projectAccessKey: string, options?: {
72
+ transportMode?: TransportMode;
73
+ redirectPath?: string;
74
+ keymachineUrl?: string;
75
+ nodesUrl?: string;
76
+ relayerUrl?: string;
77
+ sequenceStorage?: SequenceStorage;
78
+ sequenceSessionStorage?: SequenceSessionStorage;
79
+ randomPrivateKeyFn?: RandomPrivateKeyFn;
80
+ redirectActionHandler?: (url: string) => void;
81
+ canUseIndexedDb?: boolean;
82
+ });
83
+ /**
84
+ * @returns The transport mode of the client. {@link TransportMode}
85
+ */
86
+ get transportMode(): TransportMode;
87
+ /**
88
+ * Registers an event listener for a specific event.
89
+ * @param event The event to listen for.
90
+ * @param listener The listener to call when the event occurs.
91
+ * @returns A function to remove the listener.
92
+ *
93
+ * @see {@link https://docs.sequence.xyz/sdk/typescript/v3/dapp-client/on} for more detailed documentation.
94
+ *
95
+ * @example
96
+ * useEffect(() => {
97
+ * const handleWalletAction = (response) => {
98
+ * console.log('Received wallet action response:', response);
99
+ * };
100
+ *
101
+ * const unsubscribe = dappClient.on("walletActionResponse", handleWalletAction);
102
+ *
103
+ * return () => unsubscribe();
104
+ * }, [dappClient]);
105
+ */
106
+ on<K extends keyof DappClientEventMap>(event: K, listener: DappClientEventMap[K]): () => void;
107
+ /**
108
+ * Retrieves the wallet address of the current session.
109
+ * @returns The wallet address of the current session, or null if not initialized. {@link Address.Address}
110
+ *
111
+ * @see {@link https://docs.sequence.xyz/sdk/typescript/v3/dapp-client/get-wallet-address} for more detailed documentation.
112
+ *
113
+ * @example
114
+ * const dappClient = new DappClient('http://localhost:5173');
115
+ * await dappClient.initialize();
116
+ *
117
+ * if (dappClient.isInitialized) {
118
+ * const walletAddress = dappClient.getWalletAddress();
119
+ * console.log('Wallet address:', walletAddress);
120
+ * }
121
+ */
122
+ getWalletAddress(): Address.Address | null;
123
+ /**
124
+ * Retrieves a list of all active sessions (signers) associated with the current wallet.
125
+ * @returns An array of all the active sessions. {@link { address: Address.Address, isImplicit: boolean }[]}
126
+ *
127
+ * @see {@link https://docs.sequence.xyz/sdk/typescript/v3/dapp-client/get-all-sessions} for more detailed documentation.
128
+ *
129
+ * @example
130
+ * const dappClient = new DappClient('http://localhost:5173');
131
+ * await dappClient.initialize();
132
+ *
133
+ * if (dappClient.isInitialized) {
134
+ * const sessions = dappClient.getAllSessions();
135
+ * console.log('Sessions:', sessions);
136
+ * }
137
+ */
138
+ getAllSessions(): Session[];
139
+ /**
140
+ * @private Loads the client's state from storage, initializing all chain managers
141
+ * for previously established sessions.
142
+ */
143
+ private _loadStateFromStorage;
144
+ /**
145
+ * Initializes the client by loading any existing session from storage and handling any pending redirect responses.
146
+ * This should be called once when your application loads.
147
+ *
148
+ * @remarks
149
+ * An `Implicit` session is a session that can interact only with specific, Dapp-defined contracts.
150
+ * An `Explicit` session is a session that can interact with any contract as long as the user has granted the necessary permissions.
151
+ *
152
+ * @throws If the initialization process fails. {@link InitializationError}
153
+ *
154
+ * @returns A promise that resolves when initialization is complete.
155
+ *
156
+ * @see {@link https://docs.sequence.xyz/sdk/typescript/v3/dapp-client/initialize} for more detailed documentation.
157
+ *
158
+ * @example
159
+ * const dappClient = new DappClient('http://localhost:5173');
160
+ * await dappClient.initialize();
161
+ */
162
+ initialize(): Promise<void>;
163
+ /**
164
+ * Handles the redirect response from the Wallet.
165
+ * This is called automatically on `initialize()` for web environments but can be called manually
166
+ * with a URL in environments like React Native.
167
+ * @param url The full redirect URL from the wallet. If not provided, it will be read from the browser's current location.
168
+ * @returns A promise that resolves when the redirect has been handled.
169
+ */
170
+ handleRedirectResponse(url?: string): Promise<void>;
171
+ /**
172
+ * Initiates a connection with the wallet and creates a new session.
173
+ * @param chainId The primary chain ID for the new session.
174
+ * @param permissions (Optional) Permissions to request for an initial explicit session. {@link Signers.Session.ExplicitParams}
175
+ * @param options (Optional) Connection options, such as a preferred login method or email for social or email logins.
176
+ * @throws If the connection process fails. {@link ConnectionError}
177
+ * @throws If a session already exists. {@link InitializationError}
178
+ *
179
+ * @returns A promise that resolves when the connection is established.
180
+ *
181
+ * @see {@link https://docs.sequence.xyz/sdk/typescript/v3/dapp-client/connect} for more detailed documentation.
182
+ *
183
+ * @example
184
+ * const dappClient = new DappClient('http://localhost:5173');
185
+ * await dappClient.connect(137, window.location.origin, undefined, {
186
+ * preferredLoginMethod: 'google',
187
+ * });
188
+ */
189
+ connect(chainId: number, permissions?: Signers.Session.ExplicitParams, options?: {
190
+ preferredLoginMethod?: LoginMethod;
191
+ email?: string;
192
+ includeImplicitSession?: boolean;
193
+ }): Promise<void>;
194
+ /**
195
+ * Adds a new explicit session for a given chain to an existing wallet.
196
+ * @remarks
197
+ * An `explicit session` is a session that can interact with any contract, subject to user-approved permissions.
198
+ * @param chainId The chain ID on which to add the explicit session.
199
+ * @param permissions The permissions to request for the new session. {@link Signers.Session.ExplicitParams}
200
+ *
201
+ * @throws If the session cannot be added. {@link AddExplicitSessionError}
202
+ * @throws If the client or relevant chain is not initialized. {@link InitializationError}
203
+ *
204
+ * @returns A promise that resolves when the session is added.
205
+ *
206
+ * @see {@link https://docs.sequence.xyz/sdk/typescript/v3/dapp-client/add-explicit-session} for more detailed documentation.
207
+ *
208
+ * @example
209
+ * ...
210
+ * import { Signers, Utils } from "@0xsequence/wallet-core";
211
+ * import { DappClient } from "@0xsequence/sessions";
212
+ * ...
213
+ *
214
+ * const dappClient = new DappClient('http://localhost:5173');
215
+ * await dappClient.initialize();
216
+ *
217
+ * const amount = 1000000;
218
+ * const USDC_ADDRESS = '0x...';
219
+ *
220
+ * if (dappClient.isInitialized) {
221
+ * // Allow Dapp (Session Signer) to transfer "amount" of USDC
222
+ * const permissions: Signers.Session.ExplicitParams = {
223
+ * chainId: Number(chainId),
224
+ * valueLimit: 0n, // Not allowed to transfer native tokens (ETH, etc)
225
+ * deadline: BigInt(Date.now() + 1000 * 60 * 5000), // 5000 minutes from now
226
+ * permissions: [Utils.ERC20PermissionBuilder.buildTransfer(USDC_ADDRESS, amount)]
227
+ * };
228
+ * await dappClient.addExplicitSession(1, permissions);
229
+ * }
230
+ */
231
+ addExplicitSession(chainId: number, permissions: Signers.Session.ExplicitParams): Promise<void>;
232
+ /**
233
+ * Modifies the permissions of an existing explicit session for a given chain and session address.
234
+ * @param chainId The chain ID on which the explicit session exists.
235
+ * @param sessionAddress The address of the explicit session to modify. {@link Address.Address}
236
+ * @param permissions The new permissions to set for the session. {@link Signers.Session.ExplicitParams}
237
+ *
238
+ * @throws If the client or relevant chain is not initialized. {@link InitializationError}
239
+ * @throws If something goes wrong while modifying the session. {@link ModifyExplicitSessionError}
240
+ *
241
+ * @returns A promise that resolves when the session permissions are updated.
242
+ *
243
+ * @see {@link https://docs.sequence.xyz/sdk/typescript/v3/dapp-client/modify-explicit-session} for more detailed documentation.
244
+ *
245
+ * @example
246
+ * const dappClient = new DappClient('http://localhost:5173');
247
+ * await dappClient.initialize();
248
+ *
249
+ * if (dappClient.isInitialized) {
250
+ * // The address of an existing explicit session (Grants the Dapp permission to transfer 100 USDC for the user)
251
+ * const sessionAddress = '0x...';
252
+ * // We create a new permission object where we can increase the granted transfer amount limit
253
+ * const permissions: Signers.Session.ExplicitParams = {
254
+ * chainId: Number(chainId),
255
+ * valueLimit: 0n,
256
+ * deadline: BigInt(Date.now() + 1000 * 60 * 5000),
257
+ * permissions: [Utils.ERC20PermissionBuilder.buildTransfer(USDC_ADDRESS, amount)]
258
+ * };
259
+ * await dappClient.modifyExplicitSession(1, sessionAddress, permissions);
260
+ * }
261
+ */
262
+ modifyExplicitSession(chainId: number, sessionAddress: Address.Address, permissions: Signers.Session.ExplicitParams): Promise<void>;
263
+ /**
264
+ * Gets the gas fee options for an array of transactions.
265
+ * @param chainId The chain ID on which to get the fee options.
266
+ * @param transactions An array of transactions to get fee options for. These transactions will not be sent.
267
+ * @throws If the fee options cannot be fetched. {@link FeeOptionError}
268
+ * @throws If the client or relevant chain is not initialized. {@link InitializationError}
269
+ *
270
+ * @returns A promise that resolves with the fee options. {@link Relayer.FeeOption[]}
271
+ *
272
+ * @see {@link https://docs.sequence.xyz/sdk/typescript/v3/dapp-client/get-fee-options} for more detailed documentation.
273
+ *
274
+ * @example
275
+ * const dappClient = new DappClient('http://localhost:5173');
276
+ * await dappClient.initialize();
277
+ *
278
+ * if (dappClient.isInitialized) {
279
+ * const transactions: Transaction[] = [
280
+ * {
281
+ * to: '0x...',
282
+ * value: 0n,
283
+ * data: '0x...'
284
+ * }
285
+ * ];
286
+ * const feeOptions = await dappClient.getFeeOptions(1, transactions);
287
+ * const feeOption = feeOptions[0];
288
+ * // use the fee option to pay the gas
289
+ * const txHash = await dappClient.sendTransaction(1, transactions, feeOption);
290
+ * }
291
+ */
292
+ getFeeOptions(chainId: number, transactions: Transaction[]): Promise<Relayer.FeeOption[]>;
293
+ /**
294
+ * Checks if the current session has permission to execute a set of transactions on a specific chain.
295
+ * @param chainId The chain ID on which to check the permissions.
296
+ * @param transactions An array of transactions to check permissions for.
297
+ * @returns A promise that resolves to true if the session has permission, otherwise false.
298
+ */
299
+ hasPermission(chainId: number, transactions: Transaction[]): Promise<boolean>;
300
+ /**
301
+ * Signs and sends a transaction using an available session signer.
302
+ * @param chainId The chain ID on which to send the transaction.
303
+ * @param transactions An array of transactions to be executed atomically in a single batch. {@link Transaction}
304
+ * @param feeOption (Optional) The selected fee option to sponsor the transaction. {@link Relayer.FeeOption}
305
+ * @throws {TransactionError} If the transaction fails to send or confirm.
306
+ * @throws {InitializationError} If the client or relevant chain is not initialized.
307
+ *
308
+ * @returns A promise that resolves with the transaction hash.
309
+ *
310
+ * @see {@link https://docs.sequence.xyz/sdk/typescript/v3/dapp-client/send-transaction} for more detailed documentation.
311
+ *
312
+ * @example
313
+ * const dappClient = new DappClient('http://localhost:5173');
314
+ * await dappClient.initialize();
315
+ *
316
+ * if (dappClient.isInitialized) {
317
+ * const transaction = {
318
+ * to: '0x...',
319
+ * value: 0n,
320
+ * data: '0x...'
321
+ * };
322
+ *
323
+ * const txHash = await dappClient.sendTransaction(1, [transaction]);
324
+ */
325
+ sendTransaction(chainId: number, transactions: Transaction[], feeOption?: Relayer.FeeOption): Promise<Hex.Hex>;
326
+ /**
327
+ * Signs a standard message (EIP-191) using an available session signer.
328
+ * @param chainId The chain ID on which to sign the message.
329
+ * @param message The message to sign.
330
+ * @throws If the message cannot be signed. {@link SigningError}
331
+ * @throws If the client is not initialized. {@link InitializationError}
332
+ *
333
+ * @returns A promise that resolves when the signing process is initiated. The signature is delivered via the `walletActionResponse` event listener.
334
+ *
335
+ * @see {@link https://docs.sequence.xyz/sdk/typescript/v3/dapp-client/sign-message} for more detailed documentation.
336
+ *
337
+ * @example
338
+ * const dappClient = new DappClient('http://localhost:5173');
339
+ * await dappClient.initialize();
340
+ *
341
+ * if (dappClient.isInitialized) {
342
+ * const message = 'Hello, world!';
343
+ * await dappClient.signMessage(1, message);
344
+ * }
345
+ */
346
+ signMessage(chainId: number, message: string): Promise<void>;
347
+ /**
348
+ * Signs a typed data object (EIP-712) using an available session signer.
349
+ * @param chainId The chain ID on which to sign the typed data.
350
+ * @param typedData The typed data object to sign.
351
+ * @throws If the typed data cannot be signed. {@link SigningError}
352
+ * @throws If the client is not initialized. {@link InitializationError}
353
+ *
354
+ * @returns A promise that resolves when the signing process is initiated. The signature is returned in the `walletActionResponse` event listener.
355
+ *
356
+ * @see {@link https://docs.sequence.xyz/sdk/typescript/v3/dapp-client/sign-typed-data} for more detailed documentation.
357
+ *
358
+ * @example
359
+ * const dappClient = new DappClient('http://localhost:5173');
360
+ * await dappClient.initialize();
361
+ *
362
+ * if (dappClient.isInitialized) {
363
+ * const typedData = {...}
364
+ * await dappClient.signTypedData(1, typedData);
365
+ * }
366
+ */
367
+ signTypedData(chainId: number, typedData: TypedData): Promise<void>;
368
+ /**
369
+ * Sends transaction data to be signed and submitted by the wallet.
370
+ * @param chainId The chain ID on which to send the transaction.
371
+ * @param transactionRequest The transaction request object.
372
+ * @throws If the transaction cannot be sent. {@link TransactionError}
373
+ * @throws If the client is not initialized. {@link InitializationError}
374
+ *
375
+ * @returns A promise that resolves when the sending process is initiated. The transaction hash is delivered via the `walletActionResponse` event listener.
376
+ */
377
+ sendWalletTransaction(chainId: number, transactionRequest: TransactionRequest): Promise<void>;
378
+ /**
379
+ * Disconnects the client, clearing all session data from browser storage.
380
+ * @remarks This action does not revoke the sessions on-chain. Sessions remain active until they expire or are manually revoked by the user in their wallet.
381
+ * @returns A promise that resolves when disconnection is complete.
382
+ *
383
+ * @see {@link https://docs.sequence.xyz/sdk/typescript/v3/dapp-client/disconnect} for more detailed documentation.
384
+ *
385
+ * @example
386
+ * const dappClient = new DappClient('http://localhost:5173');
387
+ * await dappClient.initialize();
388
+ *
389
+ * if (dappClient.isInitialized) {
390
+ * await dappClient.disconnect();
391
+ * }
392
+ */
393
+ disconnect(): Promise<void>;
394
+ /**
395
+ * @private Emits an event to all registered listeners.
396
+ * @param event The event to emit.
397
+ * @param args The data to emit with the event.
398
+ */
399
+ private emit;
400
+ private _requestWalletAction;
401
+ /**
402
+ * @private Retrieves or creates a ChainSessionManager for a given chain ID.
403
+ * @param chainId The chain ID to get the ChainSessionManager for.
404
+ * @returns The ChainSessionManager for the given chain ID. {@link ChainSessionManager}
405
+ */
406
+ private getChainSessionManager;
407
+ }
408
+ export {};
409
+ //# sourceMappingURL=DappClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DappClient.d.ts","sourceRoot":"","sources":["../src/DappClient.ts"],"names":[],"mappings":"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"}