@dynamic-labs/message-transport 2.0.0-alpha.29 → 2.0.0-alpha.30

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.
package/CHANGELOG.md CHANGED
@@ -1,4 +1,15 @@
1
1
 
2
+ ## [2.0.0-alpha.30](https://github.com/dynamic-labs/DynamicAuth/compare/v2.0.0-alpha.29...v2.0.0-alpha.30) (2024-04-11)
3
+
4
+
5
+ ### ⚠ BREAKING CHANGES
6
+
7
+ * add headless sms sign-in (#5274)
8
+
9
+ ### Features
10
+
11
+ * add headless sms sign-in ([#5274](https://github.com/dynamic-labs/DynamicAuth/issues/5274)) ([fffc293](https://github.com/dynamic-labs/DynamicAuth/commit/fffc293f85447a784e8c728d1586f3555ab1fbfa))
12
+
2
13
  ## [2.0.0-alpha.29](https://github.com/dynamic-labs/DynamicAuth/compare/v2.0.0-alpha.28...v2.0.0-alpha.29) (2024-04-10)
3
14
 
4
15
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/message-transport",
3
- "version": "2.0.0-alpha.29",
3
+ "version": "2.0.0-alpha.30",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/dynamic-labs/DynamicAuth.git",
@@ -26,6 +26,7 @@
26
26
  "./package.json": "./package.json"
27
27
  },
28
28
  "peerDependencies": {
29
+ "@dynamic-labs/types": "2.0.0-alpha.30",
29
30
  "eventemitter3": "5.0.1"
30
31
  }
31
32
  }
package/src/index.cjs CHANGED
@@ -8,6 +8,9 @@ var makeWaitForInitEvent = require('./messageTransport/decorators/makeWaitForIni
8
8
  var makeWaitForUnblock = require('./messageTransport/decorators/makeWaitForUnblock/makeWaitForUnblock.cjs');
9
9
  var requestChannel = require('./requestChannel/requestChannel.cjs');
10
10
  var parseMessageTransportData = require('./utils/parseMessageTransportData/parseMessageTransportData.cjs');
11
+ var createEventEmitterForMessages = require('./store/createEventEmitterForMessages/createEventEmitterForMessages.cjs');
12
+ var store = require('./store/store.cjs');
13
+ var storeSetter = require('./store/storeSetter/storeSetter.cjs');
11
14
  var SdkModuleMessages = require('./messageTypes/SdkModuleMessages.cjs');
12
15
 
13
16
 
@@ -18,4 +21,7 @@ exports.makeWaitForInitEvent = makeWaitForInitEvent.makeWaitForInitEvent;
18
21
  exports.makeWaitForUnblock = makeWaitForUnblock.makeWaitForUnblock;
19
22
  exports.createRequestChannel = requestChannel.createRequestChannel;
20
23
  exports.parseMessageTransportData = parseMessageTransportData.parseMessageTransportData;
24
+ exports.createEventEmitterForMessages = createEventEmitterForMessages.createEventEmitterForMessages;
25
+ exports.createStore = store.createStore;
26
+ exports.createStoreSetter = storeSetter.createStoreSetter;
21
27
  exports.sdkHasLoadedEventName = SdkModuleMessages.sdkHasLoadedEventName;
package/src/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  export { applyDefaultMessageOrigin, createMessageTransport, makeWaitForInitEvent, makeWaitForUnblock, type BypassBlockCallback, type MessageTransport, type MessageTransportCallback, type MessageTransportData, type MessageTransportDataOptionalOrigin, type MessageTransportWithDefaultOrigin, } from './messageTransport';
2
- export { type RequestChannel, createRequestChannel } from './requestChannel';
2
+ export { createRequestChannel, type RequestChannel } from './requestChannel';
3
3
  export { parseMessageTransportData } from './utils/parseMessageTransportData';
4
- export { type ClientManifest, type SdkModuleMessages, sdkHasLoadedEventName, } from './messageTypes';
4
+ export { createEventEmitterForMessages, createStore, createStoreSetter, type MessagesForEventEmitter, } from './store';
5
+ export type { Store, StoreKeys, StoreSetter, StoreStateEvents, StoreStateGetters, } from './store/types';
6
+ export { sdkHasLoadedEventName, type ClientManifest, type SdkModuleMessages, type SdkModuleState, type WalletsModuleState, } from './messageTypes';
package/src/index.js CHANGED
@@ -4,4 +4,7 @@ export { makeWaitForInitEvent } from './messageTransport/decorators/makeWaitForI
4
4
  export { makeWaitForUnblock } from './messageTransport/decorators/makeWaitForUnblock/makeWaitForUnblock.js';
5
5
  export { createRequestChannel } from './requestChannel/requestChannel.js';
6
6
  export { parseMessageTransportData } from './utils/parseMessageTransportData/parseMessageTransportData.js';
7
+ export { createEventEmitterForMessages } from './store/createEventEmitterForMessages/createEventEmitterForMessages.js';
8
+ export { createStore } from './store/store.js';
9
+ export { createStoreSetter } from './store/storeSetter/storeSetter.js';
7
10
  export { sdkHasLoadedEventName } from './messageTypes/SdkModuleMessages.js';
@@ -3,6 +3,6 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  /** Easy access to the event name that indicates the SDK has loaded */
6
- const sdkHasLoadedEventName = 'loaded';
6
+ const sdkHasLoadedEventName = 'sdk__loadedChanged';
7
7
 
8
8
  exports.sdkHasLoadedEventName = sdkHasLoadedEventName;
@@ -10,11 +10,13 @@ export type ClientManifest = {
10
10
  appLogoUrl?: string;
11
11
  cssOverrides?: string;
12
12
  };
13
+ export type SdkModuleState = {
14
+ /** Indicates the SDK is set up and ready for requests */
15
+ loaded: boolean;
16
+ };
13
17
  export type SdkModuleMessages = {
14
- /** Sent from webview app to indicate the SDK is set up and ready for requests */
15
- loaded: () => void;
16
18
  /** Sent from the webview app to request the SDK settings */
17
19
  manifest: () => Promise<ClientManifest>;
18
20
  };
19
21
  /** Easy access to the event name that indicates the SDK has loaded */
20
- export declare const sdkHasLoadedEventName: keyof SdkModuleMessages;
22
+ export declare const sdkHasLoadedEventName = "sdk__loadedChanged";
@@ -1,4 +1,4 @@
1
1
  /** Easy access to the event name that indicates the SDK has loaded */
2
- const sdkHasLoadedEventName = 'loaded';
2
+ const sdkHasLoadedEventName = 'sdk__loadedChanged';
3
3
 
4
4
  export { sdkHasLoadedEventName };
@@ -0,0 +1,5 @@
1
+ import { BaseWallet } from '@dynamic-labs/types';
2
+ export type WalletsModuleState = {
3
+ userWallets: BaseWallet[];
4
+ primaryWallet: BaseWallet | undefined;
5
+ };
@@ -1 +1,2 @@
1
1
  export * from './SdkModuleMessages';
2
+ export * from './WalletsModuleMessages';
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var EventEmitter = require('eventemitter3');
6
+ var requestChannel = require('../../requestChannel/requestChannel.cjs');
7
+
8
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
9
+
10
+ var EventEmitter__default = /*#__PURE__*/_interopDefaultLegacy(EventEmitter);
11
+
12
+ // There are way too many "any"s in this file. They are necessary because otherwise the generics won't work
13
+ function createEventEmitterForMessages({ messageTransport, initialEventEmitter, key, }) {
14
+ const events = initialEventEmitter !== null && initialEventEmitter !== void 0 ? initialEventEmitter : new EventEmitter__default["default"]();
15
+ const requestChannel$1 = requestChannel.createRequestChannel(messageTransport);
16
+ requestChannel$1.handle('eventEmitted', (eventKey, eventName, payload) => {
17
+ if (eventKey === key)
18
+ events.emit(eventName, ...payload);
19
+ });
20
+ return events;
21
+ }
22
+
23
+ exports.createEventEmitterForMessages = createEventEmitterForMessages;
@@ -0,0 +1,22 @@
1
+ import EventEmitter from 'eventemitter3';
2
+ import { MessageTransportWithDefaultOrigin } from '../../messageTransport';
3
+ export type MessagesForEventEmitter<T extends Record<string, (...args: any[]) => any>, U extends string> = {
4
+ eventEmitted: <E extends keyof T>(key: U, eventName: E, payload: Parameters<T[E]>) => void;
5
+ };
6
+ /**
7
+ * Use this function when you want to get an event emitter that will raise events for
8
+ * messages of type MessagesForEventEmitter
9
+ */
10
+ export declare function createEventEmitterForMessages<T extends Record<string, (...args: any[]) => any> = never, U extends string = never>(params: {
11
+ messageTransport: MessageTransportWithDefaultOrigin;
12
+ key: U;
13
+ }): EventEmitter<T>;
14
+ /**
15
+ * Use this function when you want to get an event emitter that will raise events for
16
+ * messages of type MessagesForEventEmitter
17
+ */
18
+ export declare function createEventEmitterForMessages<T extends Record<string, (...args: any[]) => any> = never, U extends string = never, E extends EventEmitter<any> = never>(params: {
19
+ messageTransport: MessageTransportWithDefaultOrigin;
20
+ initialEventEmitter: E;
21
+ key: U;
22
+ }): E extends EventEmitter<infer V> ? EventEmitter<T & V> : never;
@@ -0,0 +1,15 @@
1
+ import EventEmitter from 'eventemitter3';
2
+ import { createRequestChannel } from '../../requestChannel/requestChannel.js';
3
+
4
+ // There are way too many "any"s in this file. They are necessary because otherwise the generics won't work
5
+ function createEventEmitterForMessages({ messageTransport, initialEventEmitter, key, }) {
6
+ const events = initialEventEmitter !== null && initialEventEmitter !== void 0 ? initialEventEmitter : new EventEmitter();
7
+ const requestChannel = createRequestChannel(messageTransport);
8
+ requestChannel.handle('eventEmitted', (eventKey, eventName, payload) => {
9
+ if (eventKey === key)
10
+ events.emit(eventName, ...payload);
11
+ });
12
+ return events;
13
+ }
14
+
15
+ export { createEventEmitterForMessages };
@@ -0,0 +1 @@
1
+ export * from './createEventEmitterForMessages';
@@ -1 +1,3 @@
1
+ export * from './createEventEmitterForMessages';
1
2
  export * from './store';
3
+ export * from './storeSetter';
@@ -0,0 +1,57 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var EventEmitter = require('eventemitter3');
6
+ var requestChannel = require('../requestChannel/requestChannel.cjs');
7
+
8
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
9
+
10
+ var EventEmitter__default = /*#__PURE__*/_interopDefaultLegacy(EventEmitter);
11
+
12
+ const createStore = ({ initialState, key, messageTransport, }) => {
13
+ // We don't know what these types are yet, so any will do
14
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
+ const requestChannel$1 = requestChannel.createRequestChannel(messageTransport);
16
+ /**
17
+ * The event emitter for this store getter.
18
+ *
19
+ * Not to be confused with the events that come from the messageTransport:
20
+ * - The messageTransport is a tool for sending/receiving messages to/from a webview.
21
+ * - This event emitter allows raising events exclusively for change events of this store's variables,
22
+ * and will only be used by the modules that are reading from the store, most likely to be forwarded
23
+ * for clients to have access to.
24
+ */
25
+ const eventEmitter = new EventEmitter__default["default"]();
26
+ const state = Object.assign({}, initialState);
27
+ const getters = {};
28
+ for (const variable in state) {
29
+ // Add the state getter
30
+ Object.defineProperty(getters, variable, {
31
+ get: () => state[variable],
32
+ });
33
+ // We need to add a listener for each of this store's variables.
34
+ // That listener will listen for messageTransport "value changed" events,
35
+ // which we will use to update the store's values and raise events.
36
+ const messageName = `${key}__${variable}Changed`;
37
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
+ requestChannel$1.handle(messageName, (newValue) => {
39
+ const eventName = `${variable}Changed`;
40
+ // We emit with the same event name for simplicity, but keep in mind
41
+ // the eventEmitter events are different from the messageTransport message we are handling.
42
+ // Read above for elaboration.
43
+ //
44
+ // There are some limitation on what we can achieve with typescript in this file,
45
+ // but all this is encapsulated in this function and it works like a charm for whoever calls it.
46
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
+ eventEmitter.emit(eventName, newValue);
48
+ state[variable] = newValue;
49
+ });
50
+ }
51
+ return {
52
+ eventEmitter,
53
+ getters,
54
+ };
55
+ };
56
+
57
+ exports.createStore = createStore;
@@ -0,0 +1,49 @@
1
+ import EventEmitter from 'eventemitter3';
2
+ import { createRequestChannel } from '../requestChannel/requestChannel.js';
3
+
4
+ const createStore = ({ initialState, key, messageTransport, }) => {
5
+ // We don't know what these types are yet, so any will do
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+ const requestChannel = createRequestChannel(messageTransport);
8
+ /**
9
+ * The event emitter for this store getter.
10
+ *
11
+ * Not to be confused with the events that come from the messageTransport:
12
+ * - The messageTransport is a tool for sending/receiving messages to/from a webview.
13
+ * - This event emitter allows raising events exclusively for change events of this store's variables,
14
+ * and will only be used by the modules that are reading from the store, most likely to be forwarded
15
+ * for clients to have access to.
16
+ */
17
+ const eventEmitter = new EventEmitter();
18
+ const state = Object.assign({}, initialState);
19
+ const getters = {};
20
+ for (const variable in state) {
21
+ // Add the state getter
22
+ Object.defineProperty(getters, variable, {
23
+ get: () => state[variable],
24
+ });
25
+ // We need to add a listener for each of this store's variables.
26
+ // That listener will listen for messageTransport "value changed" events,
27
+ // which we will use to update the store's values and raise events.
28
+ const messageName = `${key}__${variable}Changed`;
29
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
+ requestChannel.handle(messageName, (newValue) => {
31
+ const eventName = `${variable}Changed`;
32
+ // We emit with the same event name for simplicity, but keep in mind
33
+ // the eventEmitter events are different from the messageTransport message we are handling.
34
+ // Read above for elaboration.
35
+ //
36
+ // There are some limitation on what we can achieve with typescript in this file,
37
+ // but all this is encapsulated in this function and it works like a charm for whoever calls it.
38
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
39
+ eventEmitter.emit(eventName, newValue);
40
+ state[variable] = newValue;
41
+ });
42
+ }
43
+ return {
44
+ eventEmitter,
45
+ getters,
46
+ };
47
+ };
48
+
49
+ export { createStore };
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var requestChannel = require('../../requestChannel/requestChannel.cjs');
6
+
7
+ const createStoreSetter = ({ key, messageTransport, }) => {
8
+ // We don't know what these types are yet, so any will do
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ const requestChannel$1 = requestChannel.createRequestChannel(messageTransport);
11
+ return {
12
+ set: (newValues) => {
13
+ const entries = Object.entries(newValues);
14
+ for (const [variable, newValue] of entries) {
15
+ const messageName = `${key}__${variable}Changed`;
16
+ requestChannel$1.emit(messageName, newValue);
17
+ }
18
+ },
19
+ };
20
+ };
21
+
22
+ exports.createStoreSetter = createStoreSetter;
@@ -0,0 +1,18 @@
1
+ import { createRequestChannel } from '../../requestChannel/requestChannel.js';
2
+
3
+ const createStoreSetter = ({ key, messageTransport, }) => {
4
+ // We don't know what these types are yet, so any will do
5
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
+ const requestChannel = createRequestChannel(messageTransport);
7
+ return {
8
+ set: (newValues) => {
9
+ const entries = Object.entries(newValues);
10
+ for (const [variable, newValue] of entries) {
11
+ const messageName = `${key}__${variable}Changed`;
12
+ requestChannel.emit(messageName, newValue);
13
+ }
14
+ },
15
+ };
16
+ };
17
+
18
+ export { createStoreSetter };
@@ -1,4 +1,5 @@
1
1
  import EventEmitter from 'eventemitter3';
2
+ export type StoreKeys = 'sdk' | 'wallets';
2
3
  /**
3
4
  * Readonly getters for the store values
4
5
  */
@@ -10,7 +11,7 @@ export type StoreStateGetters<T extends Record<string, unknown>> = {
10
11
  */
11
12
  export type Store<T extends Record<string, unknown>> = {
12
13
  getters: StoreStateGetters<T>;
13
- emitters: Pick<EventEmitter<StoreStateEvents<T>>, 'on' | 'once' | 'off'>;
14
+ eventEmitter: EventEmitter<StoreStateEvents<T>>;
14
15
  };
15
16
  /**
16
17
  * The type of a setter that allows setting values of all stores connected to the same