@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 +11 -0
- package/package.json +2 -1
- package/src/index.cjs +6 -0
- package/src/index.d.ts +4 -2
- package/src/index.js +3 -0
- package/src/messageTypes/SdkModuleMessages.cjs +1 -1
- package/src/messageTypes/SdkModuleMessages.d.ts +5 -3
- package/src/messageTypes/SdkModuleMessages.js +1 -1
- package/src/messageTypes/WalletsModuleMessages.d.ts +5 -0
- package/src/messageTypes/index.d.ts +1 -0
- package/src/store/createEventEmitterForMessages/createEventEmitterForMessages.cjs +23 -0
- package/src/store/createEventEmitterForMessages/createEventEmitterForMessages.d.ts +22 -0
- package/src/store/createEventEmitterForMessages/createEventEmitterForMessages.js +15 -0
- package/src/store/createEventEmitterForMessages/index.d.ts +1 -0
- package/src/store/index.d.ts +2 -0
- package/src/store/store.cjs +57 -0
- package/src/store/store.js +49 -0
- package/src/store/storeSetter/storeSetter.cjs +22 -0
- package/src/store/storeSetter/storeSetter.js +18 -0
- package/src/store/types.d.ts +2 -1
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.
|
|
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
|
|
2
|
+
export { createRequestChannel, type RequestChannel } from './requestChannel';
|
|
3
3
|
export { parseMessageTransportData } from './utils/parseMessageTransportData';
|
|
4
|
-
export {
|
|
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 = '
|
|
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
|
|
22
|
+
export declare const sdkHasLoadedEventName = "sdk__loadedChanged";
|
|
@@ -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';
|
package/src/store/index.d.ts
CHANGED
|
@@ -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 };
|
package/src/store/types.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|