@dynamic-labs/waas 4.73.2 → 4.74.1

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,24 @@
1
1
 
2
+ ### [4.74.1](https://github.com/dynamic-labs/dynamic-auth/compare/v4.74.0...v4.74.1) (2026-04-02)
3
+
4
+ This was a version bump only, there were no code changes.
5
+
6
+ ## [4.74.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.73.2...v4.74.0) (2026-04-02)
7
+
8
+
9
+ ### Features
10
+
11
+ * **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))
12
+ * **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))
13
+
14
+
15
+ ### Bug Fixes
16
+
17
+ * **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))
18
+ * 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))
19
+ * **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))
20
+ * **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))
21
+
2
22
  ### [4.73.2](https://github.com/dynamic-labs/dynamic-auth/compare/v4.73.1...v4.73.2) (2026-03-31)
3
23
 
4
24
 
package/package.cjs CHANGED
@@ -3,6 +3,6 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "4.73.2";
6
+ var version = "4.74.1";
7
7
 
8
8
  exports.version = version;
package/package.js CHANGED
@@ -1,4 +1,4 @@
1
1
  'use client'
2
- var version = "4.73.2";
2
+ var version = "4.74.1";
3
3
 
4
4
  export { version };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/waas",
3
- "version": "4.73.2",
3
+ "version": "4.74.1",
4
4
  "type": "module",
5
5
  "author": "Dynamic Labs, Inc.",
6
6
  "license": "MIT",
@@ -17,16 +17,16 @@
17
17
  },
18
18
  "dependencies": {
19
19
  "@dynamic-labs-sdk/client": "0.19.0",
20
- "@dynamic-labs/assert-package-version": "4.73.2",
20
+ "@dynamic-labs/assert-package-version": "4.74.1",
21
21
  "@dynamic-labs/sdk-api-core": "0.0.909",
22
22
  "@dynamic-labs-wallet/browser-wallet-client": "0.0.314",
23
- "@dynamic-labs/ethereum-core": "4.73.2",
24
- "@dynamic-labs/logger": "4.73.2",
25
- "@dynamic-labs/solana-core": "4.73.2",
26
- "@dynamic-labs/sui-core": "4.73.2",
27
- "@dynamic-labs/utils": "4.73.2",
28
- "@dynamic-labs/wallet-book": "4.73.2",
29
- "@dynamic-labs/wallet-connector-core": "4.73.2"
23
+ "@dynamic-labs/ethereum-core": "4.74.1",
24
+ "@dynamic-labs/logger": "4.74.1",
25
+ "@dynamic-labs/solana-core": "4.74.1",
26
+ "@dynamic-labs/sui-core": "4.74.1",
27
+ "@dynamic-labs/utils": "4.74.1",
28
+ "@dynamic-labs/wallet-book": "4.74.1",
29
+ "@dynamic-labs/wallet-connector-core": "4.74.1"
30
30
  },
31
31
  "peerDependencies": {}
32
32
  }
@@ -47,7 +47,6 @@ const withDynamicWaas = (BaseClass) => {
47
47
  /**
48
48
  * Checks if the wallet needs a password for signing operations.
49
49
  * Returns the password if needed, or undefined if the wallet is already unlocked.
50
- * Automatically retrieves the signed session ID internally.
51
50
  */
52
51
  getPasswordIfNeeded(_a) {
53
52
  return _tslib.__awaiter(this, arguments, void 0, function* ({ accountAddress, }) {
@@ -72,6 +71,26 @@ const withDynamicWaas = (BaseClass) => {
72
71
  return password;
73
72
  });
74
73
  }
74
+ /**
75
+ * Always prompts for the wallet password regardless of wallet state.
76
+ *
77
+ * Unlike `getPasswordIfNeeded` (which skips the prompt when the wallet is
78
+ * already unlocked in memory), this method always asks for the password.
79
+ * Use it for operations that encrypt/decrypt data stored externally
80
+ * (e.g. cloud backup/restore), where the password is required to
81
+ * encrypt/decrypt the shares on disk — not just to unlock the wallet.
82
+ */
83
+ getPassword(_a) {
84
+ return _tslib.__awaiter(this, arguments, void 0, function* ({ accountAddress, }) {
85
+ if (!this.getWalletPassword) {
86
+ return undefined;
87
+ }
88
+ return this.getWalletPassword({
89
+ accountAddress,
90
+ chainName: this.chainName,
91
+ });
92
+ });
93
+ }
75
94
  setEnvironmentId(environmentId) {
76
95
  this.environmentId = environmentId;
77
96
  }
@@ -156,16 +175,11 @@ const withDynamicWaas = (BaseClass) => {
156
175
  chainName: this.chainName,
157
176
  environmentId: this.environmentId,
158
177
  sdkVersion: _package.version,
159
- },
160
- /**
161
- * The secure storage should be used when the SDK is running in the webview
162
- * for a native mobile app.
163
- */
164
- utils.PlatformService.isWaasSecureStorageSupported
165
- ? {
166
- secureStorage: createWaasClientSecureStorage.createWaasClientSecureStorage(),
167
- }
168
- : undefined);
178
+ }, Object.assign(Object.assign({}, (utils.PlatformService.isWaasSecureStorageSupported
179
+ ? { secureStorage: createWaasClientSecureStorage.createWaasClientSecureStorage() }
180
+ : {})), (this.getSignedSessionId
181
+ ? { getSignedSessionId: this.getSignedSessionId }
182
+ : {})));
169
183
  this.instrumentAsync({
170
184
  context: traceContext,
171
185
  fn: () => _tslib.__awaiter(this, void 0, void 0, function* () { return client.initialize(); }),
@@ -287,7 +301,7 @@ const withDynamicWaas = (BaseClass) => {
287
301
  if (!accountAddress) {
288
302
  throw new utils.DynamicError('Account address is required');
289
303
  }
290
- const resolvedPassword = password !== null && password !== void 0 ? password : (yield this.getPasswordIfNeeded({ accountAddress }));
304
+ const resolvedPassword = password !== null && password !== void 0 ? password : (yield this.getPassword({ accountAddress }));
291
305
  const walletClient = yield this.getWaasWalletClient();
292
306
  const signedSessionId = yield ((_b = this.getSignedSessionId) === null || _b === void 0 ? void 0 : _b.call(this));
293
307
  if (!signedSessionId) {
@@ -307,7 +321,7 @@ const withDynamicWaas = (BaseClass) => {
307
321
  if (!accountAddress) {
308
322
  throw new utils.DynamicError('Account address is required');
309
323
  }
310
- const resolvedPassword = password !== null && password !== void 0 ? password : (yield this.getPasswordIfNeeded({ accountAddress }));
324
+ const resolvedPassword = password !== null && password !== void 0 ? password : (yield this.getPassword({ accountAddress }));
311
325
  const walletClient = yield this.getWaasWalletClient();
312
326
  const signedSessionId = yield ((_b = this.getSignedSessionId) === null || _b === void 0 ? void 0 : _b.call(this));
313
327
  if (!signedSessionId) {
@@ -327,7 +341,7 @@ const withDynamicWaas = (BaseClass) => {
327
341
  if (!accountAddress) {
328
342
  throw new utils.DynamicError('Account address is required');
329
343
  }
330
- const resolvedPassword = password !== null && password !== void 0 ? password : (yield this.getPasswordIfNeeded({ accountAddress }));
344
+ const resolvedPassword = password !== null && password !== void 0 ? password : (yield this.getPassword({ accountAddress }));
331
345
  const walletClient = yield this.getWaasWalletClient();
332
346
  const signedSessionId = yield ((_b = this.getSignedSessionId) === null || _b === void 0 ? void 0 : _b.call(this));
333
347
  if (!signedSessionId) {
@@ -45,11 +45,22 @@ export declare const withDynamicWaas: <T extends abstract new (...args: any[]) =
45
45
  /**
46
46
  * Checks if the wallet needs a password for signing operations.
47
47
  * Returns the password if needed, or undefined if the wallet is already unlocked.
48
- * Automatically retrieves the signed session ID internally.
49
48
  */
50
49
  getPasswordIfNeeded({ accountAddress, }: {
51
50
  accountAddress: string;
52
51
  }): Promise<string | undefined>;
52
+ /**
53
+ * Always prompts for the wallet password regardless of wallet state.
54
+ *
55
+ * Unlike `getPasswordIfNeeded` (which skips the prompt when the wallet is
56
+ * already unlocked in memory), this method always asks for the password.
57
+ * Use it for operations that encrypt/decrypt data stored externally
58
+ * (e.g. cloud backup/restore), where the password is required to
59
+ * encrypt/decrypt the shares on disk — not just to unlock the wallet.
60
+ */
61
+ getPassword({ accountAddress, }: {
62
+ accountAddress: string;
63
+ }): Promise<string | undefined>;
53
64
  setEnvironmentId(environmentId: string): void;
54
65
  setBaseApiUrl(baseApiUrl: string): void;
55
66
  setBaseClientKeysharesRelayApiUrl(baseClientKeysharesRelayApiUrl?: string): void;
@@ -43,7 +43,6 @@ const withDynamicWaas = (BaseClass) => {
43
43
  /**
44
44
  * Checks if the wallet needs a password for signing operations.
45
45
  * Returns the password if needed, or undefined if the wallet is already unlocked.
46
- * Automatically retrieves the signed session ID internally.
47
46
  */
48
47
  getPasswordIfNeeded(_a) {
49
48
  return __awaiter(this, arguments, void 0, function* ({ accountAddress, }) {
@@ -68,6 +67,26 @@ const withDynamicWaas = (BaseClass) => {
68
67
  return password;
69
68
  });
70
69
  }
70
+ /**
71
+ * Always prompts for the wallet password regardless of wallet state.
72
+ *
73
+ * Unlike `getPasswordIfNeeded` (which skips the prompt when the wallet is
74
+ * already unlocked in memory), this method always asks for the password.
75
+ * Use it for operations that encrypt/decrypt data stored externally
76
+ * (e.g. cloud backup/restore), where the password is required to
77
+ * encrypt/decrypt the shares on disk — not just to unlock the wallet.
78
+ */
79
+ getPassword(_a) {
80
+ return __awaiter(this, arguments, void 0, function* ({ accountAddress, }) {
81
+ if (!this.getWalletPassword) {
82
+ return undefined;
83
+ }
84
+ return this.getWalletPassword({
85
+ accountAddress,
86
+ chainName: this.chainName,
87
+ });
88
+ });
89
+ }
71
90
  setEnvironmentId(environmentId) {
72
91
  this.environmentId = environmentId;
73
92
  }
@@ -152,16 +171,11 @@ const withDynamicWaas = (BaseClass) => {
152
171
  chainName: this.chainName,
153
172
  environmentId: this.environmentId,
154
173
  sdkVersion: version,
155
- },
156
- /**
157
- * The secure storage should be used when the SDK is running in the webview
158
- * for a native mobile app.
159
- */
160
- PlatformService.isWaasSecureStorageSupported
161
- ? {
162
- secureStorage: createWaasClientSecureStorage(),
163
- }
164
- : undefined);
174
+ }, Object.assign(Object.assign({}, (PlatformService.isWaasSecureStorageSupported
175
+ ? { secureStorage: createWaasClientSecureStorage() }
176
+ : {})), (this.getSignedSessionId
177
+ ? { getSignedSessionId: this.getSignedSessionId }
178
+ : {})));
165
179
  this.instrumentAsync({
166
180
  context: traceContext,
167
181
  fn: () => __awaiter(this, void 0, void 0, function* () { return client.initialize(); }),
@@ -283,7 +297,7 @@ const withDynamicWaas = (BaseClass) => {
283
297
  if (!accountAddress) {
284
298
  throw new DynamicError('Account address is required');
285
299
  }
286
- const resolvedPassword = password !== null && password !== void 0 ? password : (yield this.getPasswordIfNeeded({ accountAddress }));
300
+ const resolvedPassword = password !== null && password !== void 0 ? password : (yield this.getPassword({ accountAddress }));
287
301
  const walletClient = yield this.getWaasWalletClient();
288
302
  const signedSessionId = yield ((_b = this.getSignedSessionId) === null || _b === void 0 ? void 0 : _b.call(this));
289
303
  if (!signedSessionId) {
@@ -303,7 +317,7 @@ const withDynamicWaas = (BaseClass) => {
303
317
  if (!accountAddress) {
304
318
  throw new DynamicError('Account address is required');
305
319
  }
306
- const resolvedPassword = password !== null && password !== void 0 ? password : (yield this.getPasswordIfNeeded({ accountAddress }));
320
+ const resolvedPassword = password !== null && password !== void 0 ? password : (yield this.getPassword({ accountAddress }));
307
321
  const walletClient = yield this.getWaasWalletClient();
308
322
  const signedSessionId = yield ((_b = this.getSignedSessionId) === null || _b === void 0 ? void 0 : _b.call(this));
309
323
  if (!signedSessionId) {
@@ -323,7 +337,7 @@ const withDynamicWaas = (BaseClass) => {
323
337
  if (!accountAddress) {
324
338
  throw new DynamicError('Account address is required');
325
339
  }
326
- const resolvedPassword = password !== null && password !== void 0 ? password : (yield this.getPasswordIfNeeded({ accountAddress }));
340
+ const resolvedPassword = password !== null && password !== void 0 ? password : (yield this.getPassword({ accountAddress }));
327
341
  const walletClient = yield this.getWaasWalletClient();
328
342
  const signedSessionId = yield ((_b = this.getSignedSessionId) === null || _b === void 0 ? void 0 : _b.call(this));
329
343
  if (!signedSessionId) {