@dynamic-labs/client 4.0.0-alpha.4 → 4.0.0-alpha.40

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 (56) hide show
  1. package/CHANGELOG.md +349 -0
  2. package/package.cjs +1 -1
  3. package/package.js +1 -1
  4. package/package.json +7 -14
  5. package/src/client/client.cjs +2 -0
  6. package/src/client/client.d.ts +1 -1
  7. package/src/client/client.js +2 -0
  8. package/src/client/core/core.cjs +42 -40
  9. package/src/client/core/core.d.ts +5 -4
  10. package/src/client/core/core.js +41 -39
  11. package/src/client/core/modules/initializationModule/initializationModule.cjs +19 -4
  12. package/src/client/core/modules/initializationModule/initializationModule.js +19 -4
  13. package/src/client/core/modules/manifestModule/manifestModule.cjs +4 -4
  14. package/src/client/core/modules/manifestModule/validateManifest/validateManifest.cjs +2 -2
  15. package/src/client/core/modules/manifestModule/validateManifest/validateManifest.js +2 -2
  16. package/src/index.cjs +3 -1
  17. package/src/index.d.ts +1 -1
  18. package/src/index.js +4 -0
  19. package/src/modules/authModule/authModule.cjs +8 -1
  20. package/src/modules/authModule/authModule.d.ts +8 -3
  21. package/src/modules/authModule/authModule.js +9 -2
  22. package/src/modules/authModule/emailAuthModule/emailAuthModule.cjs +7 -2
  23. package/src/modules/authModule/emailAuthModule/emailAuthModule.d.ts +3 -2
  24. package/src/modules/authModule/emailAuthModule/emailAuthModule.js +8 -3
  25. package/src/modules/authModule/smsAuthModule/smsAuthModule.cjs +7 -2
  26. package/src/modules/authModule/smsAuthModule/smsAuthModule.d.ts +3 -2
  27. package/src/modules/authModule/smsAuthModule/smsAuthModule.js +8 -3
  28. package/src/modules/networksModule/networksModule.d.ts +1 -1
  29. package/src/modules/sdkModule/sdkModule.cjs +6 -1
  30. package/src/modules/sdkModule/sdkModule.d.ts +6 -2
  31. package/src/modules/sdkModule/sdkModule.js +6 -1
  32. package/src/modules/userInterfaceModule/userInterfaceModule.cjs +7 -2
  33. package/src/modules/userInterfaceModule/userInterfaceModule.d.ts +5 -2
  34. package/src/modules/userInterfaceModule/userInterfaceModule.js +8 -3
  35. package/src/modules/walletsModule/accountAbstractionModule/accountAbstractionModule.cjs +17 -0
  36. package/src/modules/walletsModule/accountAbstractionModule/accountAbstractionModule.d.ts +14 -0
  37. package/src/modules/walletsModule/accountAbstractionModule/accountAbstractionModule.js +13 -0
  38. package/src/modules/walletsModule/accountAbstractionModule/index.d.ts +1 -0
  39. package/src/modules/walletsModule/createWalletListenerMethods/createWalletListenerMethods.cjs +31 -0
  40. package/src/modules/walletsModule/createWalletListenerMethods/createWalletListenerMethods.d.ts +8 -0
  41. package/src/modules/walletsModule/createWalletListenerMethods/createWalletListenerMethods.js +27 -0
  42. package/src/modules/walletsModule/createWalletListenerMethods/index.d.ts +1 -0
  43. package/src/modules/walletsModule/embeddedWalletsModule/embeddedWalletsModule.cjs +1 -1
  44. package/src/modules/walletsModule/embeddedWalletsModule/embeddedWalletsModule.d.ts +6 -3
  45. package/src/modules/walletsModule/embeddedWalletsModule/embeddedWalletsModule.js +2 -2
  46. package/src/modules/walletsModule/walletsModule.cjs +19 -1
  47. package/src/modules/walletsModule/walletsModule.d.ts +14 -3
  48. package/src/modules/walletsModule/walletsModule.js +20 -2
  49. package/src/types.d.ts +2 -0
  50. package/src/utils/pickListenerActions/pickListenerActions.cjs +9 -3
  51. package/src/utils/pickListenerActions/pickListenerActions.d.ts +2 -1
  52. package/src/utils/pickListenerActions/pickListenerActions.js +9 -3
  53. package/src/utils/setupFetchHandler/index.d.ts +1 -0
  54. package/src/utils/setupFetchHandler/setupFetchHandler.cjs +24 -0
  55. package/src/utils/setupFetchHandler/setupFetchHandler.d.ts +2 -0
  56. package/src/utils/setupFetchHandler/setupFetchHandler.js +20 -0
@@ -0,0 +1,13 @@
1
+ 'use client'
2
+ import { createRequestChannel } from '@dynamic-labs/message-transport';
3
+
4
+ const createAccountAbstractionModule = (core) => {
5
+ const accountAbstractionRequestChannel = createRequestChannel(core.messageTransport);
6
+ return {
7
+ getEOAWallet: (args) => accountAbstractionRequestChannel.request('getEOAWallet', args),
8
+ getSmartWallet: (args) => accountAbstractionRequestChannel.request('getSmartWallet', args),
9
+ isSmartWallet: (args) => accountAbstractionRequestChannel.request('isSmartWallet', args),
10
+ };
11
+ };
12
+
13
+ export { createAccountAbstractionModule };
@@ -0,0 +1 @@
1
+ export { createAccountAbstractionModule, type AccountAbstractionModule, } from './accountAbstractionModule';
@@ -0,0 +1,31 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ const createWalletListenerMethods = (requestChannel) => {
7
+ const getWalletListenerKey = (walletId, event) => `${walletId}__${event}`;
8
+ const walletListeners = {};
9
+ const onWalletEvent = (wallet, event, callback) => {
10
+ const listenerKey = getWalletListenerKey(wallet.id, event);
11
+ if (!walletListeners[listenerKey])
12
+ walletListeners[listenerKey] = new Set();
13
+ walletListeners[listenerKey].add(callback);
14
+ };
15
+ const offWalletEvent = (wallet, event, callback) => {
16
+ const listenerKey = getWalletListenerKey(wallet.id, event);
17
+ if (!walletListeners[listenerKey])
18
+ return;
19
+ walletListeners[listenerKey].delete(callback);
20
+ if (walletListeners[listenerKey].size === 0)
21
+ delete walletListeners[listenerKey];
22
+ };
23
+ requestChannel.handle('onWalletEvent', ({ event, eventParams, walletId }) => {
24
+ var _a;
25
+ const listenerKey = getWalletListenerKey(walletId, event);
26
+ (_a = walletListeners[listenerKey]) === null || _a === void 0 ? void 0 : _a.forEach((callback) => callback(...eventParams));
27
+ });
28
+ return { offWalletEvent, onWalletEvent };
29
+ };
30
+
31
+ exports.createWalletListenerMethods = createWalletListenerMethods;
@@ -0,0 +1,8 @@
1
+ import { RequestChannel, WalletEvents, WalletsModuleMessages } from '@dynamic-labs/message-transport';
2
+ import { BaseWallet } from '@dynamic-labs/types';
3
+ export type WalletEventListener = <E extends keyof WalletEvents>(wallet: BaseWallet, event: E, callback: WalletEvents[E]) => void;
4
+ export type CreateWalletListenerMethodsReturn = {
5
+ onWalletEvent: WalletEventListener;
6
+ offWalletEvent: WalletEventListener;
7
+ };
8
+ export declare const createWalletListenerMethods: (requestChannel: RequestChannel<WalletsModuleMessages>) => CreateWalletListenerMethodsReturn;
@@ -0,0 +1,27 @@
1
+ 'use client'
2
+ const createWalletListenerMethods = (requestChannel) => {
3
+ const getWalletListenerKey = (walletId, event) => `${walletId}__${event}`;
4
+ const walletListeners = {};
5
+ const onWalletEvent = (wallet, event, callback) => {
6
+ const listenerKey = getWalletListenerKey(wallet.id, event);
7
+ if (!walletListeners[listenerKey])
8
+ walletListeners[listenerKey] = new Set();
9
+ walletListeners[listenerKey].add(callback);
10
+ };
11
+ const offWalletEvent = (wallet, event, callback) => {
12
+ const listenerKey = getWalletListenerKey(wallet.id, event);
13
+ if (!walletListeners[listenerKey])
14
+ return;
15
+ walletListeners[listenerKey].delete(callback);
16
+ if (walletListeners[listenerKey].size === 0)
17
+ delete walletListeners[listenerKey];
18
+ };
19
+ requestChannel.handle('onWalletEvent', ({ event, eventParams, walletId }) => {
20
+ var _a;
21
+ const listenerKey = getWalletListenerKey(walletId, event);
22
+ (_a = walletListeners[listenerKey]) === null || _a === void 0 ? void 0 : _a.forEach((callback) => callback(...eventParams));
23
+ });
24
+ return { offWalletEvent, onWalletEvent };
25
+ };
26
+
27
+ export { createWalletListenerMethods };
@@ -0,0 +1 @@
1
+ export * from './createWalletListenerMethods';
@@ -15,8 +15,8 @@ const createEmbeddedWalletsModule = (core) => {
15
15
  messageTransport: core.messageTransport,
16
16
  });
17
17
  const messageEvents = messageTransport.createEventEmitterForMessages({
18
+ eventNames: messageTransport.embeddedWalletsEventNames,
18
19
  initialEventEmitter: store.eventEmitter,
19
- key: 'embeddedWallets',
20
20
  messageTransport: core.messageTransport,
21
21
  });
22
22
  const requestChannel = messageTransport.createRequestChannel(core.messageTransport);
@@ -1,6 +1,9 @@
1
- import { EmbeddedWalletsModuleMessages, EmbeddedWalletsModuleState, StoreEventListeners } from '@dynamic-labs/message-transport';
1
+ import { EmbeddedWalletsModuleMessages, EmbeddedWalletsModuleState, StoreEventListeners, PickedEventListeners } from '@dynamic-labs/message-transport';
2
2
  import { Core } from '../../../client/core';
3
- type PublicEmbeddedWalletsModuleMessages = Pick<EmbeddedWalletsModuleMessages, 'createWallet' | 'getWallet'>;
4
- export type EmbeddedWalletsModule = EmbeddedWalletsModuleState & StoreEventListeners<EmbeddedWalletsModuleState> & PublicEmbeddedWalletsModuleMessages;
3
+ type PublicEmbeddedWalletsModuleMessages = Pick<EmbeddedWalletsModuleMessages, 'embeddedWalletCreated'>;
4
+ export type EmbeddedWalletsModule = EmbeddedWalletsModuleState & StoreEventListeners<EmbeddedWalletsModuleState> & PickedEventListeners<PublicEmbeddedWalletsModuleMessages> & {
5
+ createWallet: EmbeddedWalletsModuleMessages['createWallet'];
6
+ getWallet: EmbeddedWalletsModuleMessages['getWallet'];
7
+ };
5
8
  export declare const createEmbeddedWalletsModule: (core: Core) => EmbeddedWalletsModule;
6
9
  export {};
@@ -1,5 +1,5 @@
1
1
  'use client'
2
- import { createStore, createEventEmitterForMessages, createRequestChannel } from '@dynamic-labs/message-transport';
2
+ import { createStore, createEventEmitterForMessages, embeddedWalletsEventNames, createRequestChannel } from '@dynamic-labs/message-transport';
3
3
  import { pickListenerActions } from '../../../utils/pickListenerActions/pickListenerActions.js';
4
4
 
5
5
  const createEmbeddedWalletsModule = (core) => {
@@ -11,8 +11,8 @@ const createEmbeddedWalletsModule = (core) => {
11
11
  messageTransport: core.messageTransport,
12
12
  });
13
13
  const messageEvents = createEventEmitterForMessages({
14
+ eventNames: embeddedWalletsEventNames,
14
15
  initialEventEmitter: store.eventEmitter,
15
- key: 'embeddedWallets',
16
16
  messageTransport: core.messageTransport,
17
17
  });
18
18
  const requestChannel = createRequestChannel(core.messageTransport);
@@ -5,8 +5,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
6
  var messageTransport = require('@dynamic-labs/message-transport');
7
7
  var pickListenerActions = require('../../utils/pickListenerActions/pickListenerActions.cjs');
8
+ var accountAbstractionModule = require('./accountAbstractionModule/accountAbstractionModule.cjs');
9
+ var createWalletListenerMethods = require('./createWalletListenerMethods/createWalletListenerMethods.cjs');
8
10
  var embeddedWalletsModule = require('./embeddedWalletsModule/embeddedWalletsModule.cjs');
9
11
 
12
+ const defaultConnectedWalletHandler = () => Promise.resolve(true);
10
13
  const createWalletsModule = (core) => {
11
14
  const requestChannel = messageTransport.createRequestChannel(core.messageTransport);
12
15
  const store = messageTransport.createStore({
@@ -14,15 +17,30 @@ const createWalletsModule = (core) => {
14
17
  key: 'wallets',
15
18
  messageTransport: core.messageTransport,
16
19
  });
20
+ const messageEvents = messageTransport.createEventEmitterForMessages({
21
+ eventNames: messageTransport.userWalletsEventNames,
22
+ initialEventEmitter: store.eventEmitter,
23
+ messageTransport: core.messageTransport,
24
+ });
17
25
  const signMessage = (params) => requestChannel.request('signMessage', params);
18
26
  const getBalance = (params) => requestChannel.request('getBalance', params);
19
27
  const switchNetwork = (params) => requestChannel.request('switchNetwork', params);
20
28
  const getNetwork = (params) => requestChannel.request('getNetwork', params);
21
29
  const setPrimary = (params) => requestChannel.request('setPrimary', params);
22
- return Object.assign(store.getters, pickListenerActions.pickListenerActions(store.eventEmitter), {
30
+ const { offWalletEvent, onWalletEvent } = createWalletListenerMethods.createWalletListenerMethods(requestChannel);
31
+ const handlers = {
32
+ walletConnected: defaultConnectedWalletHandler,
33
+ };
34
+ requestChannel.handle('handleConnectedWallet', (wallet) => handlers.walletConnected(wallet));
35
+ return Object.assign(store.getters, pickListenerActions.pickListenerActions(messageEvents), {
36
+ accountAbstraction: accountAbstractionModule.createAccountAbstractionModule(core),
37
+ clearHandler: () => (handlers.walletConnected = defaultConnectedWalletHandler),
23
38
  embedded: embeddedWalletsModule.createEmbeddedWalletsModule(core),
24
39
  getBalance,
25
40
  getNetwork,
41
+ offWalletEvent,
42
+ onWalletEvent,
43
+ setHandler: (_, handler) => (handlers.walletConnected = handler),
26
44
  setPrimary,
27
45
  signMessage,
28
46
  switchNetwork,
@@ -1,12 +1,23 @@
1
- import { StoreEventListeners, WalletsModuleMessages, WalletsModuleState } from '@dynamic-labs/message-transport';
1
+ import { PickedEventListeners, StoreEventListeners, WalletsModuleMessages, WalletsModuleState, userWalletsEventNames } from '@dynamic-labs/message-transport';
2
+ import { BaseWallet } from '@dynamic-labs/types';
2
3
  import { Core } from '../../client/core';
4
+ import { type AccountAbstractionModule } from './accountAbstractionModule';
5
+ import { WalletEventListener } from './createWalletListenerMethods';
3
6
  import { EmbeddedWalletsModule } from './embeddedWalletsModule';
4
- export type WalletsModule = WalletsModuleState & {
7
+ export type PublicWalletModuleMessages = Pick<WalletsModuleMessages, typeof userWalletsEventNames[number]>;
8
+ export type WalletsModule = WalletsModuleState & PickedEventListeners<PublicWalletModuleMessages> & StoreEventListeners<WalletsModuleState> & {
5
9
  embedded: EmbeddedWalletsModule;
10
+ accountAbstraction: AccountAbstractionModule;
6
11
  signMessage: WalletsModuleMessages['signMessage'];
7
12
  switchNetwork: WalletsModuleMessages['switchNetwork'];
8
13
  getBalance: WalletsModuleMessages['getBalance'];
9
14
  getNetwork: WalletsModuleMessages['getNetwork'];
10
15
  setPrimary: WalletsModuleMessages['setPrimary'];
11
- } & StoreEventListeners<WalletsModuleState>;
16
+ onWalletEvent: WalletEventListener;
17
+ offWalletEvent: WalletEventListener;
18
+ setHandler: (name: 'walletConnected', handler: ConnectedWalletsHandler) => void;
19
+ clearHandler: (name: 'walletConnected') => void;
20
+ };
21
+ type ConnectedWalletsHandler = (wallet: Partial<BaseWallet>) => Promise<boolean>;
12
22
  export declare const createWalletsModule: (core: Core) => WalletsModule;
23
+ export {};
@@ -1,8 +1,11 @@
1
1
  'use client'
2
- import { createRequestChannel, createStore } from '@dynamic-labs/message-transport';
2
+ import { createRequestChannel, createStore, createEventEmitterForMessages, userWalletsEventNames } from '@dynamic-labs/message-transport';
3
3
  import { pickListenerActions } from '../../utils/pickListenerActions/pickListenerActions.js';
4
+ import { createAccountAbstractionModule } from './accountAbstractionModule/accountAbstractionModule.js';
5
+ import { createWalletListenerMethods } from './createWalletListenerMethods/createWalletListenerMethods.js';
4
6
  import { createEmbeddedWalletsModule } from './embeddedWalletsModule/embeddedWalletsModule.js';
5
7
 
8
+ const defaultConnectedWalletHandler = () => Promise.resolve(true);
6
9
  const createWalletsModule = (core) => {
7
10
  const requestChannel = createRequestChannel(core.messageTransport);
8
11
  const store = createStore({
@@ -10,15 +13,30 @@ const createWalletsModule = (core) => {
10
13
  key: 'wallets',
11
14
  messageTransport: core.messageTransport,
12
15
  });
16
+ const messageEvents = createEventEmitterForMessages({
17
+ eventNames: userWalletsEventNames,
18
+ initialEventEmitter: store.eventEmitter,
19
+ messageTransport: core.messageTransport,
20
+ });
13
21
  const signMessage = (params) => requestChannel.request('signMessage', params);
14
22
  const getBalance = (params) => requestChannel.request('getBalance', params);
15
23
  const switchNetwork = (params) => requestChannel.request('switchNetwork', params);
16
24
  const getNetwork = (params) => requestChannel.request('getNetwork', params);
17
25
  const setPrimary = (params) => requestChannel.request('setPrimary', params);
18
- return Object.assign(store.getters, pickListenerActions(store.eventEmitter), {
26
+ const { offWalletEvent, onWalletEvent } = createWalletListenerMethods(requestChannel);
27
+ const handlers = {
28
+ walletConnected: defaultConnectedWalletHandler,
29
+ };
30
+ requestChannel.handle('handleConnectedWallet', (wallet) => handlers.walletConnected(wallet));
31
+ return Object.assign(store.getters, pickListenerActions(messageEvents), {
32
+ accountAbstraction: createAccountAbstractionModule(core),
33
+ clearHandler: () => (handlers.walletConnected = defaultConnectedWalletHandler),
19
34
  embedded: createEmbeddedWalletsModule(core),
20
35
  getBalance,
21
36
  getNetwork,
37
+ offWalletEvent,
38
+ onWalletEvent,
39
+ setHandler: (_, handler) => (handlers.walletConnected = handler),
22
40
  setPrimary,
23
41
  signMessage,
24
42
  switchNetwork,
package/src/types.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import type { BaseWallet } from '@dynamic-labs/types';
2
+ export type Wallet = BaseWallet;
@@ -9,9 +9,15 @@ Object.defineProperty(exports, '__esModule', { value: true });
9
9
  */
10
10
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
11
  const pickListenerActions = (emitter) => ({
12
- off: emitter.off.bind(emitter),
13
- on: emitter.on.bind(emitter),
14
- once: emitter.once.bind(emitter),
12
+ off: (eventName, listener) => {
13
+ emitter.off(eventName, listener);
14
+ },
15
+ on: (eventName, listener) => {
16
+ emitter.on(eventName, listener);
17
+ },
18
+ once: (eventName, listener) => {
19
+ emitter.once(eventName, listener);
20
+ },
15
21
  });
16
22
 
17
23
  exports.pickListenerActions = pickListenerActions;
@@ -1,6 +1,7 @@
1
1
  import EventEmitter from 'eventemitter3';
2
+ import { PickedEventListeners } from '@dynamic-labs/message-transport';
2
3
  /**
3
4
  * This only serves to limit the methods of an event emitter to
4
5
  * only the ones necessary for event listening
5
6
  */
6
- export declare const pickListenerActions: <T extends EventEmitter<any, any>>(emitter: T) => Pick<T, 'on' | 'off' | 'once'>;
7
+ export declare const pickListenerActions: <T extends Record<string, any>>(emitter: EventEmitter<T>) => PickedEventListeners<T>;
@@ -5,9 +5,15 @@
5
5
  */
6
6
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
7
  const pickListenerActions = (emitter) => ({
8
- off: emitter.off.bind(emitter),
9
- on: emitter.on.bind(emitter),
10
- once: emitter.once.bind(emitter),
8
+ off: (eventName, listener) => {
9
+ emitter.off(eventName, listener);
10
+ },
11
+ on: (eventName, listener) => {
12
+ emitter.on(eventName, listener);
13
+ },
14
+ once: (eventName, listener) => {
15
+ emitter.once(eventName, listener);
16
+ },
11
17
  });
12
18
 
13
19
  export { pickListenerActions };
@@ -0,0 +1 @@
1
+ export { setupFetchHandler } from './setupFetchHandler';
@@ -0,0 +1,24 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var _tslib = require('../../../_virtual/_tslib.cjs');
7
+ var messageTransport = require('@dynamic-labs/message-transport');
8
+
9
+ const setupFetchHandler = (core) => {
10
+ const fetchRequestChannel = messageTransport.createRequestChannel(core.messageTransport);
11
+ fetchRequestChannel.handle('fetch', (input, init) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
12
+ const response = yield fetch(input, init);
13
+ const responseBody = yield response.text();
14
+ return {
15
+ body: responseBody,
16
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
+ headers: Object.fromEntries(response.headers.entries()),
18
+ status: response.status,
19
+ statusText: response.statusText,
20
+ };
21
+ }));
22
+ };
23
+
24
+ exports.setupFetchHandler = setupFetchHandler;
@@ -0,0 +1,2 @@
1
+ import type { Core } from '../../client/core';
2
+ export declare const setupFetchHandler: (core: Core) => void;
@@ -0,0 +1,20 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../_virtual/_tslib.js';
3
+ import { createRequestChannel } from '@dynamic-labs/message-transport';
4
+
5
+ const setupFetchHandler = (core) => {
6
+ const fetchRequestChannel = createRequestChannel(core.messageTransport);
7
+ fetchRequestChannel.handle('fetch', (input, init) => __awaiter(void 0, void 0, void 0, function* () {
8
+ const response = yield fetch(input, init);
9
+ const responseBody = yield response.text();
10
+ return {
11
+ body: responseBody,
12
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
+ headers: Object.fromEntries(response.headers.entries()),
14
+ status: response.status,
15
+ statusText: response.statusText,
16
+ };
17
+ }));
18
+ };
19
+
20
+ export { setupFetchHandler };