@dynamic-labs/global-wallet-client 4.37.1 → 4.38.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 (24) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/package.cjs +1 -1
  3. package/package.js +1 -1
  4. package/package.json +17 -9
  5. package/src/core.cjs +16 -0
  6. package/src/core.d.ts +1 -0
  7. package/src/core.js +5 -0
  8. package/src/lib/functions/addCustomWalletOpenerService/addCustomWalletOpenerService.cjs +51 -0
  9. package/src/lib/functions/addCustomWalletOpenerService/addCustomWalletOpenerService.d.ts +12 -0
  10. package/src/lib/functions/addCustomWalletOpenerService/addCustomWalletOpenerService.js +47 -0
  11. package/src/lib/functions/addCustomWalletOpenerService/index.d.ts +1 -0
  12. package/src/lib/functions/addPopupWalletOpenerService/constructUrl.cjs +2 -2
  13. package/src/lib/functions/addPopupWalletOpenerService/constructUrl.d.ts +2 -2
  14. package/src/lib/functions/addPopupWalletOpenerService/constructUrl.js +2 -2
  15. package/src/lib/functions/addPopupWalletOpenerService/methods/popupWalletOpener.cjs +1 -1
  16. package/src/lib/functions/addPopupWalletOpenerService/methods/popupWalletOpener.js +1 -1
  17. package/src/lib/functions/createEncryptedMessageEncoder/createEncryptedMessageEncoder.cjs +19 -0
  18. package/src/lib/functions/createEncryptedMessageEncoder/createEncryptedMessageEncoder.js +15 -0
  19. package/src/lib/functions/createPopupMessageClient/createPopupMessageClient.cjs +72 -0
  20. package/src/lib/functions/createPopupMessageClient/createPopupMessageClient.js +68 -0
  21. package/src/lib/functions/createWalletOpener/index.d.ts +1 -1
  22. package/src/lib/functions/waitForResponse/waitForResponse.cjs +3 -2
  23. package/src/lib/functions/waitForResponse/waitForResponse.d.ts +5 -1
  24. package/src/lib/functions/waitForResponse/waitForResponse.js +3 -3
package/CHANGELOG.md CHANGED
@@ -1,4 +1,34 @@
1
1
 
2
+ ## [4.38.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.37.2...v4.38.0) (2025-10-14)
3
+
4
+
5
+ ### Features
6
+
7
+ * add client.ui.updateUser.show method to update user with dynamic ui ([#9702](https://github.com/dynamic-labs/dynamic-auth/issues/9702)) ([9554e98](https://github.com/dynamic-labs/dynamic-auth/commit/9554e98eadf3f801a5ebe8b22493a87cc87b8178))
8
+ * add locale to react-native client ([#9698](https://github.com/dynamic-labs/dynamic-auth/issues/9698)) ([fe577fc](https://github.com/dynamic-labs/dynamic-auth/commit/fe577fccd3cc92e5153f66f401357035bb5baec3))
9
+ * add updateUser to react-native client ([#9701](https://github.com/dynamic-labs/dynamic-auth/issues/9701)) ([124fbf7](https://github.com/dynamic-labs/dynamic-auth/commit/124fbf7a350bfa6404e65def7b436686d38847ed))
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * notes and trigger ([#9697](https://github.com/dynamic-labs/dynamic-auth/issues/9697)) ([5d24a77](https://github.com/dynamic-labs/dynamic-auth/commit/5d24a77faa8030434bc7dd0f35986984bc2576d5))
15
+ * **zerodev-extension:** allow zerodev kernel client to send user operation ([#9706](https://github.com/dynamic-labs/dynamic-auth/issues/9706)) ([b57afc9](https://github.com/dynamic-labs/dynamic-auth/commit/b57afc9f378d6b2423ca46faec5f6b2861d3cbf6))
16
+
17
+ ### [4.37.2](https://github.com/dynamic-labs/dynamic-auth/compare/v4.37.1...v4.37.2) (2025-10-13)
18
+
19
+
20
+ ### Features
21
+
22
+ * add get all linked social accounts function ([#9676](https://github.com/dynamic-labs/dynamic-auth/issues/9676)) ([c637c3f](https://github.com/dynamic-labs/dynamic-auth/commit/c637c3f101ea9387584473e18ff728c17d000f73))
23
+ * add revoke delegation to connectors and hook ([#9628](https://github.com/dynamic-labs/dynamic-auth/issues/9628)) ([00a40e0](https://github.com/dynamic-labs/dynamic-auth/commit/00a40e0b2aa6137a97ccb3be7890326300582fcf))
24
+ * **react-native:** add methods to social module ([#9677](https://github.com/dynamic-labs/dynamic-auth/issues/9677)) ([e4ffc11](https://github.com/dynamic-labs/dynamic-auth/commit/e4ffc1139ddc49826da688857d20dfb3b0c77ad7))
25
+
26
+
27
+ ### Bug Fixes
28
+
29
+ * duplicate wallet display for wallet upgrade ([#9684](https://github.com/dynamic-labs/dynamic-auth/issues/9684)) ([cf94223](https://github.com/dynamic-labs/dynamic-auth/commit/cf94223d91f74add454901b72f4bf7d81043bffc))
30
+ * fixes postbuild oom ([#9664](https://github.com/dynamic-labs/dynamic-auth/issues/9664)) ([7e56047](https://github.com/dynamic-labs/dynamic-auth/commit/7e5604721d708e375c642223cd2f615ab9191f70))
31
+
2
32
  ### [4.37.1](https://github.com/dynamic-labs/dynamic-auth/compare/v4.37.0...v4.37.1) (2025-10-08)
3
33
 
4
34
  ## [4.37.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.36.1...v4.37.0) (2025-10-08)
package/package.cjs CHANGED
@@ -3,6 +3,6 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "4.37.1";
6
+ var version = "4.38.0";
7
7
 
8
8
  exports.version = version;
package/package.js CHANGED
@@ -1,4 +1,4 @@
1
1
  'use client'
2
- var version = "4.37.1";
2
+ var version = "4.38.0";
3
3
 
4
4
  export { version };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/global-wallet-client",
3
- "version": "4.37.1",
3
+ "version": "4.38.0",
4
4
  "description": "Core package for building Dynamic's Global Wallet",
5
5
  "author": "Dynamic Labs, Inc.",
6
6
  "license": "MIT",
@@ -25,6 +25,9 @@
25
25
  ],
26
26
  "zerodev": [
27
27
  "./src/zerodev.d.ts"
28
+ ],
29
+ "core": [
30
+ "./src/core.d.ts"
28
31
  ]
29
32
  }
30
33
  },
@@ -59,17 +62,22 @@
59
62
  "import": "./src/zerodev.js",
60
63
  "default": "./src/zerodev.cjs"
61
64
  },
65
+ "./core": {
66
+ "types": "./src/core.d.ts",
67
+ "import": "./src/core.js",
68
+ "default": "./src/core.cjs"
69
+ },
62
70
  "./package.json": "./package.json"
63
71
  },
64
72
  "homepage": "https://www.dynamic.xyz/",
65
73
  "dependencies": {
66
- "@dynamic-labs/assert-package-version": "4.37.1",
67
- "@dynamic-labs/ethereum-aa-zksync": "4.37.1",
68
- "@dynamic-labs/logger": "4.37.1",
69
- "@dynamic-labs/message-transport": "4.37.1",
70
- "@dynamic-labs/store": "4.37.1",
71
- "@dynamic-labs/types": "4.37.1",
72
- "@dynamic-labs/utils": "4.37.1",
74
+ "@dynamic-labs/assert-package-version": "4.38.0",
75
+ "@dynamic-labs/ethereum-aa-zksync": "4.38.0",
76
+ "@dynamic-labs/logger": "4.38.0",
77
+ "@dynamic-labs/message-transport": "4.38.0",
78
+ "@dynamic-labs/store": "4.38.0",
79
+ "@dynamic-labs/types": "4.38.0",
80
+ "@dynamic-labs/utils": "4.38.0",
73
81
  "eventemitter3": "5.0.1"
74
82
  },
75
83
  "peerDependencies": {
@@ -81,7 +89,7 @@
81
89
  "zksync-sso": "0.2.0",
82
90
  "@wallet-standard/wallet": "^1.1.0",
83
91
  "@zerodev/sdk": "5.4.36",
84
- "@dynamic-labs/ethereum-aa": "4.37.1"
92
+ "@dynamic-labs/ethereum-aa": "4.38.0"
85
93
  },
86
94
  "peerDependenciesMeta": {
87
95
  "viem": {
package/src/core.cjs ADDED
@@ -0,0 +1,16 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var createPopupMessageClient = require('./lib/functions/createPopupMessageClient/createPopupMessageClient.cjs');
7
+ var createEncryptedMessageEncoder = require('./lib/functions/createEncryptedMessageEncoder/createEncryptedMessageEncoder.cjs');
8
+ var DisconnectError = require('./lib/errors/DisconnectError.cjs');
9
+ var addCustomWalletOpenerService = require('./lib/functions/addCustomWalletOpenerService/addCustomWalletOpenerService.cjs');
10
+
11
+
12
+
13
+ exports.createPopupMessageClient = createPopupMessageClient.createPopupMessageClient;
14
+ exports.createEncryptedMessageEncoder = createEncryptedMessageEncoder.createEncryptedMessageEncoder;
15
+ exports.DisconnectError = DisconnectError.DisconnectError;
16
+ exports.addCustomWalletOpenerService = addCustomWalletOpenerService.addCustomWalletOpenerService;
package/src/core.d.ts CHANGED
@@ -2,3 +2,4 @@ export { createPopupMessageClient, type PopupMessageClient, } from './lib/functi
2
2
  export { createEncryptedMessageEncoder } from './lib/functions/createEncryptedMessageEncoder';
3
3
  export type { GlobalWalletPopupMessages } from './lib/types/GlobalWalletPopupMessages';
4
4
  export { DisconnectError } from './lib/errors/DisconnectError';
5
+ export { addCustomWalletOpenerService } from './lib/functions/addCustomWalletOpenerService';
package/src/core.js ADDED
@@ -0,0 +1,5 @@
1
+ 'use client'
2
+ export { createPopupMessageClient } from './lib/functions/createPopupMessageClient/createPopupMessageClient.js';
3
+ export { createEncryptedMessageEncoder } from './lib/functions/createEncryptedMessageEncoder/createEncryptedMessageEncoder.js';
4
+ export { DisconnectError } from './lib/errors/DisconnectError.js';
5
+ export { addCustomWalletOpenerService } from './lib/functions/addCustomWalletOpenerService/addCustomWalletOpenerService.js';
@@ -0,0 +1,51 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var _tslib = require('../../../../_virtual/_tslib.cjs');
7
+ require('eventemitter3');
8
+ require('@dynamic-labs/logger');
9
+ require('@dynamic-labs/store');
10
+ require('../../errors/DisconnectError.cjs');
11
+ require('@dynamic-labs/utils');
12
+ var mergeAndEncryptParams = require('../mergeAndEncryptParams/mergeAndEncryptParams.cjs');
13
+ var waitForResponse = require('../waitForResponse/waitForResponse.cjs');
14
+ var constructUrl = require('../addPopupWalletOpenerService/constructUrl.cjs');
15
+ var decodeResponse = require('../addPopupWalletOpenerService/methods/utils/decodeResponse.cjs');
16
+ var getCore = require('../../client/getCore/getCore.cjs');
17
+
18
+ const addCustomWalletOpenerService = (client, { openWalletCallback, requesterOrigin }) => {
19
+ const { registry, environmentId, popupInfo, developmentOptions } = getCore.getCore(client);
20
+ const customWalletOpenerService = {
21
+ openWallet: (_a) => _tslib.__awaiter(void 0, [_a], void 0, function* ({ args, connection, name }) {
22
+ const finalUrl = constructUrl.buildUrlWithParams({
23
+ environmentId,
24
+ name,
25
+ postfixUrlWithVersion: developmentOptions.postfixPopupUrlWithVersion,
26
+ requesterOrigin,
27
+ urlInfo: {
28
+ url: popupInfo.url,
29
+ },
30
+ });
31
+ yield mergeAndEncryptParams.mergeAndEncryptParams(finalUrl, args, connection);
32
+ const responseUrl = (yield openWalletCallback({ url: finalUrl }))
33
+ .response;
34
+ const rawResponse = new URL(responseUrl).searchParams.get('r');
35
+ if (!rawResponse) {
36
+ throw new Error('No response from openWalletCallback');
37
+ }
38
+ const { error, success } = waitForResponse.parseGlobalWalletResponse(yield decodeResponse.decodeResponse(connection, JSON.parse(decodeURIComponent(rawResponse)), client));
39
+ if (error) {
40
+ throw new Error(error.message);
41
+ }
42
+ if (!success) {
43
+ throw new Error('No success response from global wallet');
44
+ }
45
+ return success.data;
46
+ }),
47
+ };
48
+ registry.set('walletOpenerService', customWalletOpenerService);
49
+ };
50
+
51
+ exports.addCustomWalletOpenerService = addCustomWalletOpenerService;
@@ -0,0 +1,12 @@
1
+ import { GlobalWalletClient } from '../../client';
2
+ type OpenWalletCallbackParams = {
3
+ url: URL;
4
+ };
5
+ type AddCustomWalletOpenerServiceParams = {
6
+ requesterOrigin: string;
7
+ openWalletCallback: (params: OpenWalletCallbackParams) => Promise<{
8
+ response: string;
9
+ }>;
10
+ };
11
+ export declare const addCustomWalletOpenerService: (client: GlobalWalletClient, { openWalletCallback, requesterOrigin }: AddCustomWalletOpenerServiceParams) => void;
12
+ export {};
@@ -0,0 +1,47 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../../_virtual/_tslib.js';
3
+ import 'eventemitter3';
4
+ import '@dynamic-labs/logger';
5
+ import '@dynamic-labs/store';
6
+ import '../../errors/DisconnectError.js';
7
+ import '@dynamic-labs/utils';
8
+ import { mergeAndEncryptParams } from '../mergeAndEncryptParams/mergeAndEncryptParams.js';
9
+ import { parseGlobalWalletResponse } from '../waitForResponse/waitForResponse.js';
10
+ import { buildUrlWithParams } from '../addPopupWalletOpenerService/constructUrl.js';
11
+ import { decodeResponse } from '../addPopupWalletOpenerService/methods/utils/decodeResponse.js';
12
+ import { getCore } from '../../client/getCore/getCore.js';
13
+
14
+ const addCustomWalletOpenerService = (client, { openWalletCallback, requesterOrigin }) => {
15
+ const { registry, environmentId, popupInfo, developmentOptions } = getCore(client);
16
+ const customWalletOpenerService = {
17
+ openWallet: (_a) => __awaiter(void 0, [_a], void 0, function* ({ args, connection, name }) {
18
+ const finalUrl = buildUrlWithParams({
19
+ environmentId,
20
+ name,
21
+ postfixUrlWithVersion: developmentOptions.postfixPopupUrlWithVersion,
22
+ requesterOrigin,
23
+ urlInfo: {
24
+ url: popupInfo.url,
25
+ },
26
+ });
27
+ yield mergeAndEncryptParams(finalUrl, args, connection);
28
+ const responseUrl = (yield openWalletCallback({ url: finalUrl }))
29
+ .response;
30
+ const rawResponse = new URL(responseUrl).searchParams.get('r');
31
+ if (!rawResponse) {
32
+ throw new Error('No response from openWalletCallback');
33
+ }
34
+ const { error, success } = parseGlobalWalletResponse(yield decodeResponse(connection, JSON.parse(decodeURIComponent(rawResponse)), client));
35
+ if (error) {
36
+ throw new Error(error.message);
37
+ }
38
+ if (!success) {
39
+ throw new Error('No success response from global wallet');
40
+ }
41
+ return success.data;
42
+ }),
43
+ };
44
+ registry.set('walletOpenerService', customWalletOpenerService);
45
+ };
46
+
47
+ export { addCustomWalletOpenerService };
@@ -0,0 +1 @@
1
+ export { addCustomWalletOpenerService } from './addCustomWalletOpenerService';
@@ -6,14 +6,14 @@ Object.defineProperty(exports, '__esModule', { value: true });
6
6
  var addVersionPostfixToUrl = require('../addVersionPostfixToUrl/addVersionPostfixToUrl.cjs');
7
7
  var _package = require('../../../../package.cjs');
8
8
 
9
- const buildUrlWithParams = ({ urlInfo, environmentId, name, globalWindow, postfixUrlWithVersion = true, }) => {
9
+ const buildUrlWithParams = ({ urlInfo, environmentId, name, postfixUrlWithVersion = true, requesterOrigin, }) => {
10
10
  const baseUrl = postfixUrlWithVersion
11
11
  ? addVersionPostfixToUrl.addVersionPostfixToUrl(_package.version, urlInfo.url)
12
12
  : urlInfo.url;
13
13
  const finalUrl = new URL(baseUrl);
14
14
  finalUrl.hash = `/${name}`;
15
15
  finalUrl.searchParams.set('provider_env_id', environmentId);
16
- finalUrl.searchParams.set('requester_origin', globalWindow.location.origin);
16
+ finalUrl.searchParams.set('requester_origin', requesterOrigin);
17
17
  return finalUrl;
18
18
  };
19
19
 
@@ -4,7 +4,7 @@ export interface BuildUrlWithParamsOptions {
4
4
  };
5
5
  environmentId: string;
6
6
  name: string;
7
- globalWindow: Window;
8
7
  postfixUrlWithVersion?: boolean;
8
+ requesterOrigin: string;
9
9
  }
10
- export declare const buildUrlWithParams: ({ urlInfo, environmentId, name, globalWindow, postfixUrlWithVersion, }: BuildUrlWithParamsOptions) => URL;
10
+ export declare const buildUrlWithParams: ({ urlInfo, environmentId, name, postfixUrlWithVersion, requesterOrigin, }: BuildUrlWithParamsOptions) => URL;
@@ -2,14 +2,14 @@
2
2
  import { addVersionPostfixToUrl } from '../addVersionPostfixToUrl/addVersionPostfixToUrl.js';
3
3
  import { version } from '../../../../package.js';
4
4
 
5
- const buildUrlWithParams = ({ urlInfo, environmentId, name, globalWindow, postfixUrlWithVersion = true, }) => {
5
+ const buildUrlWithParams = ({ urlInfo, environmentId, name, postfixUrlWithVersion = true, requesterOrigin, }) => {
6
6
  const baseUrl = postfixUrlWithVersion
7
7
  ? addVersionPostfixToUrl(version, urlInfo.url)
8
8
  : urlInfo.url;
9
9
  const finalUrl = new URL(baseUrl);
10
10
  finalUrl.hash = `/${name}`;
11
11
  finalUrl.searchParams.set('provider_env_id', environmentId);
12
- finalUrl.searchParams.set('requester_origin', globalWindow.location.origin);
12
+ finalUrl.searchParams.set('requester_origin', requesterOrigin);
13
13
  return finalUrl;
14
14
  };
15
15
 
@@ -43,9 +43,9 @@ const createPopupWalletOpener = ({ client, popupInfo, popupHeight, popupWidth, e
43
43
  // Use the new generic URL builder
44
44
  const finalUrl = constructUrl.buildUrlWithParams({
45
45
  environmentId,
46
- globalWindow,
47
46
  name,
48
47
  postfixUrlWithVersion,
48
+ requesterOrigin: globalWindow.location.origin,
49
49
  urlInfo: popupInfo,
50
50
  });
51
51
  const resultDeferredPromise = new utils.DeferredPromise();
@@ -39,9 +39,9 @@ const createPopupWalletOpener = ({ client, popupInfo, popupHeight, popupWidth, e
39
39
  // Use the new generic URL builder
40
40
  const finalUrl = buildUrlWithParams({
41
41
  environmentId,
42
- globalWindow,
43
42
  name,
44
43
  postfixUrlWithVersion,
44
+ requesterOrigin: globalWindow.location.origin,
45
45
  urlInfo: popupInfo,
46
46
  });
47
47
  const resultDeferredPromise = new DeferredPromise();
@@ -0,0 +1,19 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var _tslib = require('../../../../_virtual/_tslib.cjs');
7
+ var utils = require('@dynamic-labs/utils');
8
+
9
+ const createEncryptedMessageEncoder = (activeConnection, additionalData) => ({
10
+ decode: (data) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
11
+ utils.assertDefined(data.encryptedMessage, 'Encrypted message is not defined');
12
+ utils.assertDefined(data.iv, 'IV is not defined');
13
+ const decryptedData = yield utils.decryptMessage(activeConnection.sharedSecret, data.encryptedMessage, data.iv, additionalData);
14
+ return JSON.parse(decryptedData);
15
+ }),
16
+ encode: (message) => utils.encryptMessage(activeConnection.sharedSecret, JSON.stringify(message), additionalData),
17
+ });
18
+
19
+ exports.createEncryptedMessageEncoder = createEncryptedMessageEncoder;
@@ -0,0 +1,15 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../../_virtual/_tslib.js';
3
+ import { encryptMessage, assertDefined, decryptMessage } from '@dynamic-labs/utils';
4
+
5
+ const createEncryptedMessageEncoder = (activeConnection, additionalData) => ({
6
+ decode: (data) => __awaiter(void 0, void 0, void 0, function* () {
7
+ assertDefined(data.encryptedMessage, 'Encrypted message is not defined');
8
+ assertDefined(data.iv, 'IV is not defined');
9
+ const decryptedData = yield decryptMessage(activeConnection.sharedSecret, data.encryptedMessage, data.iv, additionalData);
10
+ return JSON.parse(decryptedData);
11
+ }),
12
+ encode: (message) => encryptMessage(activeConnection.sharedSecret, JSON.stringify(message), additionalData),
13
+ });
14
+
15
+ export { createEncryptedMessageEncoder };
@@ -0,0 +1,72 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var _tslib = require('../../../../_virtual/_tslib.cjs');
7
+ var utils = require('@dynamic-labs/utils');
8
+
9
+ const createPopupMessageClient = (popupWindow, targetOrigin, messageEncoder) => {
10
+ const listenForMessage = (messageName, callback) => {
11
+ const handleOnWindowEvent = (event) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
12
+ if (event.origin !== targetOrigin)
13
+ return;
14
+ let parsedMessage = null;
15
+ try {
16
+ parsedMessage = JSON.parse(event.data);
17
+ if (messageEncoder) {
18
+ parsedMessage = yield messageEncoder.decode(parsedMessage);
19
+ }
20
+ parsedMessage =
21
+ parseDataFromWindowEvent(parsedMessage);
22
+ }
23
+ catch (err) {
24
+ return;
25
+ }
26
+ if (parsedMessage.name !== messageName)
27
+ return;
28
+ callback(...parsedMessage.args);
29
+ });
30
+ window.addEventListener('message', handleOnWindowEvent);
31
+ return () => {
32
+ window.removeEventListener('message', handleOnWindowEvent);
33
+ };
34
+ };
35
+ const waitForMessage = (messageName, timeout) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
36
+ const deferred = new utils.DeferredPromise();
37
+ const timeoutId = timeout
38
+ ? setTimeout(() => {
39
+ deferred.reject(new Error(`Timeout waiting for message: ${messageName}`));
40
+ }, timeout)
41
+ : undefined;
42
+ const cleanup = listenForMessage(messageName, (...args) => deferred.resolve(args));
43
+ return deferred.promise.finally(() => {
44
+ cleanup === null || cleanup === void 0 ? void 0 : cleanup();
45
+ clearTimeout(timeoutId);
46
+ });
47
+ });
48
+ const postMessage = (messageName, ...args) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
49
+ var _a;
50
+ const message = {
51
+ args,
52
+ name: messageName,
53
+ };
54
+ const messageToPost = (_a = (yield (messageEncoder === null || messageEncoder === void 0 ? void 0 : messageEncoder.encode(message)))) !== null && _a !== void 0 ? _a : message;
55
+ popupWindow.postMessage(JSON.stringify(messageToPost), targetOrigin);
56
+ });
57
+ return {
58
+ listenForMessage,
59
+ postMessage,
60
+ waitForMessage,
61
+ };
62
+ };
63
+ const parseDataFromWindowEvent = (data) => {
64
+ utils.assertDefined(data.name, 'Name is required');
65
+ utils.assertDefined(data.args, 'Args is required');
66
+ return {
67
+ args: data.args,
68
+ name: data.name,
69
+ };
70
+ };
71
+
72
+ exports.createPopupMessageClient = createPopupMessageClient;
@@ -0,0 +1,68 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../../_virtual/_tslib.js';
3
+ import { DeferredPromise, assertDefined } from '@dynamic-labs/utils';
4
+
5
+ const createPopupMessageClient = (popupWindow, targetOrigin, messageEncoder) => {
6
+ const listenForMessage = (messageName, callback) => {
7
+ const handleOnWindowEvent = (event) => __awaiter(void 0, void 0, void 0, function* () {
8
+ if (event.origin !== targetOrigin)
9
+ return;
10
+ let parsedMessage = null;
11
+ try {
12
+ parsedMessage = JSON.parse(event.data);
13
+ if (messageEncoder) {
14
+ parsedMessage = yield messageEncoder.decode(parsedMessage);
15
+ }
16
+ parsedMessage =
17
+ parseDataFromWindowEvent(parsedMessage);
18
+ }
19
+ catch (err) {
20
+ return;
21
+ }
22
+ if (parsedMessage.name !== messageName)
23
+ return;
24
+ callback(...parsedMessage.args);
25
+ });
26
+ window.addEventListener('message', handleOnWindowEvent);
27
+ return () => {
28
+ window.removeEventListener('message', handleOnWindowEvent);
29
+ };
30
+ };
31
+ const waitForMessage = (messageName, timeout) => __awaiter(void 0, void 0, void 0, function* () {
32
+ const deferred = new DeferredPromise();
33
+ const timeoutId = timeout
34
+ ? setTimeout(() => {
35
+ deferred.reject(new Error(`Timeout waiting for message: ${messageName}`));
36
+ }, timeout)
37
+ : undefined;
38
+ const cleanup = listenForMessage(messageName, (...args) => deferred.resolve(args));
39
+ return deferred.promise.finally(() => {
40
+ cleanup === null || cleanup === void 0 ? void 0 : cleanup();
41
+ clearTimeout(timeoutId);
42
+ });
43
+ });
44
+ const postMessage = (messageName, ...args) => __awaiter(void 0, void 0, void 0, function* () {
45
+ var _a;
46
+ const message = {
47
+ args,
48
+ name: messageName,
49
+ };
50
+ const messageToPost = (_a = (yield (messageEncoder === null || messageEncoder === void 0 ? void 0 : messageEncoder.encode(message)))) !== null && _a !== void 0 ? _a : message;
51
+ popupWindow.postMessage(JSON.stringify(messageToPost), targetOrigin);
52
+ });
53
+ return {
54
+ listenForMessage,
55
+ postMessage,
56
+ waitForMessage,
57
+ };
58
+ };
59
+ const parseDataFromWindowEvent = (data) => {
60
+ assertDefined(data.name, 'Name is required');
61
+ assertDefined(data.args, 'Args is required');
62
+ return {
63
+ args: data.args,
64
+ name: data.name,
65
+ };
66
+ };
67
+
68
+ export { createPopupMessageClient };
@@ -1 +1 @@
1
- export { createWalletOpener, type WalletOpener, type OpenWalletProps, } from './createWalletOpener';
1
+ export { createWalletOpener, type WalletOpener, type OpenWalletProps, type WalletOpenerService, } from './createWalletOpener';
@@ -20,7 +20,7 @@ const waitForResponse = ({ url, decode, onResponse, onError, }) => {
20
20
  return;
21
21
  }
22
22
  const decodedMessage = decode ? yield decode(parsedData) : parsedData;
23
- const { error, success } = parseData(decodedMessage);
23
+ const { error, success } = parseGlobalWalletResponse(decodedMessage);
24
24
  if (!error && !success) {
25
25
  logger.logger.debug('Error validating event data schema from popup response event', parsedData);
26
26
  return;
@@ -43,7 +43,7 @@ const waitForResponse = ({ url, decode, onResponse, onError, }) => {
43
43
  window.removeEventListener('message', handleOnWindowEvent);
44
44
  };
45
45
  };
46
- const parseData = (data) => {
46
+ const parseGlobalWalletResponse = (data) => {
47
47
  if (!data || typeof data !== 'object') {
48
48
  return {};
49
49
  }
@@ -58,4 +58,5 @@ const parseData = (data) => {
58
58
  return {};
59
59
  };
60
60
 
61
+ exports.parseGlobalWalletResponse = parseGlobalWalletResponse;
61
62
  exports.waitForResponse = waitForResponse;
@@ -1,4 +1,4 @@
1
- import { IPopupActionSuccessResponse } from '@dynamic-labs/types';
1
+ import { IPopupActionErrorResponse, IPopupActionSuccessResponse } from '@dynamic-labs/types';
2
2
  type WaitForResponseProps = {
3
3
  url: string;
4
4
  decode?: (data: any) => Promise<any>;
@@ -6,4 +6,8 @@ type WaitForResponseProps = {
6
6
  onError: (error: Error) => void;
7
7
  };
8
8
  export declare const waitForResponse: ({ url, decode, onResponse, onError, }: WaitForResponseProps) => () => void;
9
+ export declare const parseGlobalWalletResponse: (data: any) => {
10
+ success?: IPopupActionSuccessResponse;
11
+ error?: IPopupActionErrorResponse;
12
+ };
9
13
  export {};
@@ -16,7 +16,7 @@ const waitForResponse = ({ url, decode, onResponse, onError, }) => {
16
16
  return;
17
17
  }
18
18
  const decodedMessage = decode ? yield decode(parsedData) : parsedData;
19
- const { error, success } = parseData(decodedMessage);
19
+ const { error, success } = parseGlobalWalletResponse(decodedMessage);
20
20
  if (!error && !success) {
21
21
  logger.debug('Error validating event data schema from popup response event', parsedData);
22
22
  return;
@@ -39,7 +39,7 @@ const waitForResponse = ({ url, decode, onResponse, onError, }) => {
39
39
  window.removeEventListener('message', handleOnWindowEvent);
40
40
  };
41
41
  };
42
- const parseData = (data) => {
42
+ const parseGlobalWalletResponse = (data) => {
43
43
  if (!data || typeof data !== 'object') {
44
44
  return {};
45
45
  }
@@ -54,4 +54,4 @@ const parseData = (data) => {
54
54
  return {};
55
55
  };
56
56
 
57
- export { waitForResponse };
57
+ export { parseGlobalWalletResponse, waitForResponse };