@dynamic-labs/client 4.72.0 → 4.76.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.
package/CHANGELOG.md CHANGED
@@ -1,4 +1,73 @@
1
1
 
2
+ ## [4.76.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.75.0...v4.76.0) (2026-04-06)
3
+
4
+
5
+ ### Features
6
+
7
+ * handle credential_not_enabled_for_sign_in error across all sign-in methods ([#10819](https://github.com/dynamic-labs/dynamic-auth/issues/10819)) ([f694b85](https://github.com/dynamic-labs/dynamic-auth/commit/f694b857eab9d377626078d290473ca369652331))
8
+
9
+
10
+ ### Bug Fixes
11
+
12
+ * modal transition race condition (opacity stuck at 0) ([#10857](https://github.com/dynamic-labs/dynamic-auth/issues/10857)) ([6e9ec68](https://github.com/dynamic-labs/dynamic-auth/commit/6e9ec68040776cc5be333ad20ad0096374947b74))
13
+ * **react-native:** ensure session is correctly mapped ([#10860](https://github.com/dynamic-labs/dynamic-auth/issues/10860)) ([117b013](https://github.com/dynamic-labs/dynamic-auth/commit/117b013faf9a0d4bc6b8429a36d8e88dba546889))
14
+
15
+ ## [4.75.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.74.1...v4.75.0) (2026-04-03)
16
+
17
+
18
+ ### Features
19
+
20
+ * **midnight:** add midnight base package scaffolding ([#10850](https://github.com/dynamic-labs/dynamic-auth/issues/10850)) ([5844849](https://github.com/dynamic-labs/dynamic-auth/commit/584484916cf49d7ec46ec5cf862e2e6b8308d90f))
21
+ * **tempo:** add FeeTokenSelector component for fee token selection ([#10842](https://github.com/dynamic-labs/dynamic-auth/issues/10842)) ([18bc637](https://github.com/dynamic-labs/dynamic-auth/commit/18bc6374bea6eeff6656edaa725b0620bc8b36dd))
22
+
23
+ ### [4.74.1](https://github.com/dynamic-labs/dynamic-auth/compare/v4.74.0...v4.74.1) (2026-04-02)
24
+
25
+ This was a version bump only, there were no code changes.
26
+
27
+ ## [4.74.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.73.2...v4.74.0) (2026-04-02)
28
+
29
+
30
+ ### Features
31
+
32
+ * **client:** expose waitForReady() on SdkModule ([#10771](https://github.com/dynamic-labs/dynamic-auth/issues/10771)) ([8d94615](https://github.com/dynamic-labs/dynamic-auth/commit/8d946158ab284fe338c78cfba38504b1bca91cd7))
33
+ * **waas:** wire up signed session ID reverse channel ([#10577](https://github.com/dynamic-labs/dynamic-auth/issues/10577)) ([e07815f](https://github.com/dynamic-labs/dynamic-auth/commit/e07815ff370634c8a5a674cbf27bc79782a27f1a))
34
+
35
+
36
+ ### Bug Fixes
37
+
38
+ * **react-native:** keep WebView ref valid during URL reloads ([#10769](https://github.com/dynamic-labs/dynamic-auth/issues/10769)) ([691bef2](https://github.com/dynamic-labs/dynamic-auth/commit/691bef277c5190b7cd88d12f95e2b6fbfa827b64))
39
+ * require device registration before sdk is in logged in state ([#10831](https://github.com/dynamic-labs/dynamic-auth/issues/10831)) ([7ebae17](https://github.com/dynamic-labs/dynamic-auth/commit/7ebae17f01b9db59b88dd997d511ff84bd6b2d1a))
40
+ * **waas:** always prompt for password on cloud backup/export operations [DYNT-269] ([#10829](https://github.com/dynamic-labs/dynamic-auth/issues/10829)) ([5d2898b](https://github.com/dynamic-labs/dynamic-auth/commit/5d2898b9e6e06bbf13813b912b366f522fb66b70))
41
+ * **webview:** preserve secure storage key map during recovery clear ([#10770](https://github.com/dynamic-labs/dynamic-auth/issues/10770)) ([888bfe9](https://github.com/dynamic-labs/dynamic-auth/commit/888bfe9f27dd3b4751dddf2027a3e4d219130860))
42
+
43
+ ### [4.73.2](https://github.com/dynamic-labs/dynamic-auth/compare/v4.73.1...v4.73.2) (2026-03-31)
44
+
45
+
46
+ ### Bug Fixes
47
+
48
+ * use initial URL for device registration redirect detection ([#10821](https://github.com/dynamic-labs/dynamic-auth/issues/10821)) ([dbec178](https://github.com/dynamic-labs/dynamic-auth/commit/dbec178e0bad9a7e99c529b79cb0fbe0fd347904))
49
+
50
+ ### [4.73.1](https://github.com/dynamic-labs/dynamic-auth/compare/v4.73.0...v4.73.1) (2026-03-30)
51
+
52
+
53
+ ### Features
54
+
55
+ * **tempo:** add isTempoWallet type guard and TempoWallet class ([#10814](https://github.com/dynamic-labs/dynamic-auth/issues/10814)) ([1f2ec94](https://github.com/dynamic-labs/dynamic-auth/commit/1f2ec949bcfd25b2c460e07214041d06b172f12d))
56
+
57
+ ## [4.73.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.72.0...v4.73.0) (2026-03-30)
58
+
59
+
60
+ ### Features
61
+
62
+ * allow passing credentialId at call time for step-up auth methods ([#10795](https://github.com/dynamic-labs/dynamic-auth/issues/10795)) ([9746667](https://github.com/dynamic-labs/dynamic-auth/commit/974666758ad8b01584cf30efbf2cb64dbde63986))
63
+ * **waas:** preserve WaaS key shares on session expiry using LogoutReason ([#10714](https://github.com/dynamic-labs/dynamic-auth/issues/10714)) ([26f40f7](https://github.com/dynamic-labs/dynamic-auth/commit/26f40f722302b8cf4cc035886d4408393a785283))
64
+
65
+
66
+ ### Bug Fixes
67
+
68
+ * override handlebars to >=4.7.9 (CVE-2026-33937) ([#10805](https://github.com/dynamic-labs/dynamic-auth/issues/10805)) ([7aa40b8](https://github.com/dynamic-labs/dynamic-auth/commit/7aa40b8472487694b438ae3a64b14524c9c726e4))
69
+ * use currentColor in settings icons for dark mode support ([#10811](https://github.com/dynamic-labs/dynamic-auth/issues/10811)) ([8653e97](https://github.com/dynamic-labs/dynamic-auth/commit/8653e97759f0ea5126258c1ced36ae26af3a405c)), closes [#383C48](https://github.com/dynamic-labs/dynamic-auth/issues/383C48) [#ABACB2](https://github.com/dynamic-labs/dynamic-auth/issues/ABACB2)
70
+
2
71
  ## [4.72.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.71.0...v4.72.0) (2026-03-26)
3
72
 
4
73
 
package/package.cjs CHANGED
@@ -3,6 +3,6 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "4.72.0";
6
+ var version = "4.76.0";
7
7
 
8
8
  exports.version = version;
package/package.js CHANGED
@@ -1,4 +1,4 @@
1
1
  'use client'
2
- var version = "4.72.0";
2
+ var version = "4.76.0";
3
3
 
4
4
  export { version };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/client",
3
- "version": "4.72.0",
3
+ "version": "4.76.0",
4
4
  "description": "Core package for utilizing Dynamic's sdk",
5
5
  "author": "Dynamic Labs, Inc.",
6
6
  "license": "MIT",
@@ -19,14 +19,14 @@
19
19
  "homepage": "https://www.dynamic.xyz/",
20
20
  "dependencies": {
21
21
  "@vue/reactivity": "^3.4.21",
22
- "@dynamic-labs/sdk-api-core": "0.0.909",
23
- "@dynamic-labs/assert-package-version": "4.72.0",
24
- "@dynamic-labs/locale": "4.72.0",
25
- "@dynamic-labs/logger": "4.72.0",
26
- "@dynamic-labs/message-transport": "4.72.0",
27
- "@dynamic-labs/types": "4.72.0",
28
- "@dynamic-labs/wallet-connector-core": "4.72.0",
29
- "@dynamic-labs/webview-messages": "4.72.0",
22
+ "@dynamic-labs/sdk-api-core": "0.0.923",
23
+ "@dynamic-labs/assert-package-version": "4.76.0",
24
+ "@dynamic-labs/locale": "4.76.0",
25
+ "@dynamic-labs/logger": "4.76.0",
26
+ "@dynamic-labs/message-transport": "4.76.0",
27
+ "@dynamic-labs/types": "4.76.0",
28
+ "@dynamic-labs/wallet-connector-core": "4.76.0",
29
+ "@dynamic-labs/webview-messages": "4.76.0",
30
30
  "eventemitter3": "5.0.1"
31
31
  },
32
32
  "peerDependencies": {}
@@ -6,6 +6,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
6
6
  var reactivity = require('@vue/reactivity');
7
7
  var messageTransport = require('@dynamic-labs/message-transport');
8
8
  var webviewMessages = require('@dynamic-labs/webview-messages');
9
+ var randomString = require('../../utils/randomString/randomString.cjs');
9
10
  var initializationModule = require('./modules/initializationModule/initializationModule.cjs');
10
11
  var manifestModule = require('./modules/manifestModule/manifestModule.cjs');
11
12
 
@@ -42,6 +43,10 @@ const createCore = (props) => {
42
43
  * The environment ID of the client
43
44
  */
44
45
  environmentId: props.environmentId,
46
+ /**
47
+ * SDK session ID
48
+ */
49
+ hostSdkSessionId: randomString.randomString({ length: 8 }),
45
50
  /**
46
51
  * SDK initialization module handles the initialization error
47
52
  */
@@ -25,6 +25,10 @@ export declare const createCore: (props: ClientProps) => {
25
25
  * The environment ID of the client
26
26
  */
27
27
  environmentId: string;
28
+ /**
29
+ * SDK session ID
30
+ */
31
+ hostSdkSessionId: string;
28
32
  /**
29
33
  * SDK initialization module handles the initialization error
30
34
  */
@@ -2,6 +2,7 @@
2
2
  import { reactive } from '@vue/reactivity';
3
3
  import { applyRecoveryManager, applyDefaultMessageOrigin, makeWaitForInitEvent, applyTransportStamps, createMessageTransport } from '@dynamic-labs/message-transport';
4
4
  import { sdkHasLoadedEventName } from '@dynamic-labs/webview-messages';
5
+ import { randomString } from '../../utils/randomString/randomString.js';
5
6
  import { createInitializationModule } from './modules/initializationModule/initializationModule.js';
6
7
  import { createManifestModule } from './modules/manifestModule/manifestModule.js';
7
8
 
@@ -38,6 +39,10 @@ const createCore = (props) => {
38
39
  * The environment ID of the client
39
40
  */
40
41
  environmentId: props.environmentId,
42
+ /**
43
+ * SDK session ID
44
+ */
45
+ hostSdkSessionId: randomString({ length: 8 }),
41
46
  /**
42
47
  * SDK initialization module handles the initialization error
43
48
  */
@@ -21,9 +21,22 @@ const createSdkModule = (core) => {
21
21
  reactivity.effect(() => core.initialization.error, {
22
22
  scheduler: () => eventEmitter.emit('error', core.initialization.error),
23
23
  });
24
- return addProperty.addProperty(baseModule, 'error', {
25
- get: () => core.initialization.error,
24
+ const waitForReady = () => new Promise((resolve) => {
25
+ if (store.getters.loaded) {
26
+ resolve();
27
+ return;
28
+ }
29
+ const listener = (loaded) => {
30
+ if (loaded) {
31
+ baseModule.off('loadedChanged', listener);
32
+ resolve();
33
+ }
34
+ };
35
+ baseModule.on('loadedChanged', listener);
26
36
  });
37
+ return Object.assign(addProperty.addProperty(baseModule, 'error', {
38
+ get: () => core.initialization.error,
39
+ }), { waitForReady });
27
40
  };
28
41
 
29
42
  exports.createSdkModule = createSdkModule;
@@ -6,6 +6,7 @@ type ErrorEvent = {
6
6
  };
7
7
  export type SdkModule = SdkModuleState & StoreEventListeners<SdkModuleState> & PickedEventListeners<ErrorEvent> & {
8
8
  readonly error: Error | null;
9
+ waitForReady: () => Promise<void>;
9
10
  };
10
11
  export declare const createSdkModule: (core: Core) => SdkModule;
11
12
  export {};
@@ -17,9 +17,22 @@ const createSdkModule = (core) => {
17
17
  effect(() => core.initialization.error, {
18
18
  scheduler: () => eventEmitter.emit('error', core.initialization.error),
19
19
  });
20
- return addProperty(baseModule, 'error', {
21
- get: () => core.initialization.error,
20
+ const waitForReady = () => new Promise((resolve) => {
21
+ if (store.getters.loaded) {
22
+ resolve();
23
+ return;
24
+ }
25
+ const listener = (loaded) => {
26
+ if (loaded) {
27
+ baseModule.off('loadedChanged', listener);
28
+ resolve();
29
+ }
30
+ };
31
+ baseModule.on('loadedChanged', listener);
22
32
  });
33
+ return Object.assign(addProperty(baseModule, 'error', {
34
+ get: () => core.initialization.error,
35
+ }), { waitForReady });
23
36
  };
24
37
 
25
38
  export { createSdkModule };
@@ -0,0 +1 @@
1
+ export { randomString } from './randomString';
@@ -0,0 +1,18 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ const DEFAULT_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
7
+ /** @not-instrumented */
8
+ const randomString = ({ chars = DEFAULT_CHARS, length, }) => {
9
+ const bytes = new Uint8Array(length);
10
+ crypto.getRandomValues(bytes);
11
+ let result = '';
12
+ for (let i = 0; i < length; i++) {
13
+ result += chars[bytes[i] % chars.length];
14
+ }
15
+ return result;
16
+ };
17
+
18
+ exports.randomString = randomString;
@@ -0,0 +1,7 @@
1
+ type RandomStringParams = {
2
+ chars?: string;
3
+ length: number;
4
+ };
5
+ /** @not-instrumented */
6
+ export declare const randomString: ({ chars, length, }: RandomStringParams) => string;
7
+ export {};
@@ -0,0 +1,14 @@
1
+ 'use client'
2
+ const DEFAULT_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
3
+ /** @not-instrumented */
4
+ const randomString = ({ chars = DEFAULT_CHARS, length, }) => {
5
+ const bytes = new Uint8Array(length);
6
+ crypto.getRandomValues(bytes);
7
+ let result = '';
8
+ for (let i = 0; i < length; i++) {
9
+ result += chars[bytes[i] % chars.length];
10
+ }
11
+ return result;
12
+ };
13
+
14
+ export { randomString };