@dynamic-labs/sdk-react-core 5.9.0 → 5.9.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,12 @@
1
1
 
2
+ ### [5.9.1](https://github.com/dynamic-labs/dynamic-auth/compare/v5.9.0...v5.9.1) (2026-09-18)
3
+
4
+
5
+ ### Bug Fixes
6
+
7
+ * **sdk-react-core:** sanitize interpolated values in theme stylesheet builder ([#12416](https://github.com/dynamic-labs/dynamic-auth/issues/12416)) ([f256c08](https://github.com/dynamic-labs/dynamic-auth/commit/f256c08209b7818292a7d4d76793c592bd0ca2a0))
8
+ * **webview-controller:** route MetaMask connector storage through native secure storage ([#12304](https://github.com/dynamic-labs/dynamic-auth/issues/12304)) ([627a483](https://github.com/dynamic-labs/dynamic-auth/commit/627a4839a8071d2b2eed1ef6536cd3ecfc833000)), closes [dynamic-labs-oss/public-wallet-connectors#189](https://github.com/dynamic-labs-oss/public-wallet-connectors/issues/189)
9
+
2
10
  ## [5.9.0](https://github.com/dynamic-labs/dynamic-auth/compare/v5.8.1...v5.9.0) (2026-09-16)
3
11
 
4
12
 
package/package.cjs CHANGED
@@ -3,11 +3,11 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "5.9.0";
6
+ var version = "5.9.1";
7
7
  var dependencies = {
8
- "@dynamic-labs/sdk-api-core": "0.32.0",
9
- "@dynamic-labs-sdk/client": "1.31.2",
10
- "@dynamic-labs-wallet/browser-wallet-client": "1.0.118",
8
+ "@dynamic-labs/sdk-api-core": "0.40.0",
9
+ "@dynamic-labs-sdk/client": "1.33.3",
10
+ "@dynamic-labs-wallet/browser-wallet-client": "1.1.10",
11
11
  "@dynamic-labs-wallet/forward-mpc-client": "1.0.2",
12
12
  "@hcaptcha/react-hcaptcha": "1.4.4",
13
13
  "@marsidev/react-turnstile": "1.5.2",
package/package.js CHANGED
@@ -1,9 +1,9 @@
1
1
  'use client'
2
- var version = "5.9.0";
2
+ var version = "5.9.1";
3
3
  var dependencies = {
4
- "@dynamic-labs/sdk-api-core": "0.32.0",
5
- "@dynamic-labs-sdk/client": "1.31.2",
6
- "@dynamic-labs-wallet/browser-wallet-client": "1.0.118",
4
+ "@dynamic-labs/sdk-api-core": "0.40.0",
5
+ "@dynamic-labs-sdk/client": "1.33.3",
6
+ "@dynamic-labs-wallet/browser-wallet-client": "1.1.10",
7
7
  "@dynamic-labs-wallet/forward-mpc-client": "1.0.2",
8
8
  "@hcaptcha/react-hcaptcha": "1.4.4",
9
9
  "@marsidev/react-turnstile": "1.5.2",
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@dynamic-labs/sdk-react-core",
3
- "version": "5.9.0",
3
+ "version": "5.9.1",
4
4
  "dependencies": {
5
- "@dynamic-labs/sdk-api-core": "0.32.0",
6
- "@dynamic-labs-sdk/client": "1.31.2",
7
- "@dynamic-labs-wallet/browser-wallet-client": "1.0.118",
5
+ "@dynamic-labs/sdk-api-core": "0.40.0",
6
+ "@dynamic-labs-sdk/client": "1.33.3",
7
+ "@dynamic-labs-wallet/browser-wallet-client": "1.1.10",
8
8
  "@dynamic-labs-wallet/forward-mpc-client": "1.0.2",
9
9
  "@hcaptcha/react-hcaptcha": "1.4.4",
10
10
  "@marsidev/react-turnstile": "1.5.2",
@@ -18,17 +18,17 @@
18
18
  "react-i18next": "13.5.0",
19
19
  "react-international-phone": "4.5.0",
20
20
  "yup": "0.32.11",
21
- "@dynamic-labs/assert-package-version": "5.9.0",
22
- "@dynamic-labs/iconic": "5.9.0",
23
- "@dynamic-labs/locale": "5.9.0",
24
- "@dynamic-labs/logger": "5.9.0",
25
- "@dynamic-labs/multi-wallet": "5.9.0",
26
- "@dynamic-labs/rpc-providers": "5.9.0",
27
- "@dynamic-labs/store": "5.9.0",
28
- "@dynamic-labs/types": "5.9.0",
29
- "@dynamic-labs/utils": "5.9.0",
30
- "@dynamic-labs/wallet-book": "5.9.0",
31
- "@dynamic-labs/wallet-connector-core": "5.9.0",
21
+ "@dynamic-labs/assert-package-version": "5.9.1",
22
+ "@dynamic-labs/iconic": "5.9.1",
23
+ "@dynamic-labs/locale": "5.9.1",
24
+ "@dynamic-labs/logger": "5.9.1",
25
+ "@dynamic-labs/multi-wallet": "5.9.1",
26
+ "@dynamic-labs/rpc-providers": "5.9.1",
27
+ "@dynamic-labs/store": "5.9.1",
28
+ "@dynamic-labs/types": "5.9.1",
29
+ "@dynamic-labs/utils": "5.9.1",
30
+ "@dynamic-labs/wallet-book": "5.9.1",
31
+ "@dynamic-labs/wallet-connector-core": "5.9.1",
32
32
  "eventemitter3": "5.0.1"
33
33
  },
34
34
  "devDependencies": {
@@ -48,6 +48,14 @@ const findOrCreateStyleTag = (nonce) => {
48
48
  styleTag.dataset.source = 'dynamic-theme';
49
49
  return styleTag;
50
50
  };
51
+ // Characters outside this set could break out of a CSS declaration
52
+ // (e.g. `;`, `}`, `\` escapes, comments) when interpolated into the
53
+ // generated theme stylesheet. `/` (modern alpha syntax) and `_`
54
+ // (custom-property names) are safe: comments need `*` which is excluded
55
+ const SAFE_CSS_VALUE_PATTERN = /^[a-zA-Z0-9#(),.%_/\s+-]+$/;
56
+ const isSafeCssValue = (value) => value !== undefined &&
57
+ value !== '' &&
58
+ (typeof value === 'number' || SAFE_CSS_VALUE_PATTERN.test(value));
51
59
  const buildStylesheet = (theme) => {
52
60
  const { customColor, brandStyle } = theme;
53
61
  const footerBackgroundColor = brandStyle === 'bold' ? customColor : undefined;
@@ -61,7 +69,7 @@ const buildStylesheet = (theme) => {
61
69
  return `@layer dynamic-project-environment-theme {
62
70
  #dynamic-widget, #dynamic-modal, .dynamic-shadow-dom {
63
71
  ${cssAttributes
64
- .filter(([, value]) => value !== undefined && value !== '')
72
+ .filter(([, value]) => isSafeCssValue(value))
65
73
  .map(([key, value]) => `${key}: ${value};`)
66
74
  .join('\n ')}
67
75
  }
@@ -44,6 +44,14 @@ const findOrCreateStyleTag = (nonce) => {
44
44
  styleTag.dataset.source = 'dynamic-theme';
45
45
  return styleTag;
46
46
  };
47
+ // Characters outside this set could break out of a CSS declaration
48
+ // (e.g. `;`, `}`, `\` escapes, comments) when interpolated into the
49
+ // generated theme stylesheet. `/` (modern alpha syntax) and `_`
50
+ // (custom-property names) are safe: comments need `*` which is excluded
51
+ const SAFE_CSS_VALUE_PATTERN = /^[a-zA-Z0-9#(),.%_/\s+-]+$/;
52
+ const isSafeCssValue = (value) => value !== undefined &&
53
+ value !== '' &&
54
+ (typeof value === 'number' || SAFE_CSS_VALUE_PATTERN.test(value));
47
55
  const buildStylesheet = (theme) => {
48
56
  const { customColor, brandStyle } = theme;
49
57
  const footerBackgroundColor = brandStyle === 'bold' ? customColor : undefined;
@@ -57,7 +65,7 @@ const buildStylesheet = (theme) => {
57
65
  return `@layer dynamic-project-environment-theme {
58
66
  #dynamic-widget, #dynamic-modal, .dynamic-shadow-dom {
59
67
  ${cssAttributes
60
- .filter(([, value]) => value !== undefined && value !== '')
68
+ .filter(([, value]) => isSafeCssValue(value))
61
69
  .map(([key, value]) => `${key}: ${value};`)
62
70
  .join('\n ')}
63
71
  }
@@ -135,6 +135,9 @@ const useBusinessAccounts = () => {
135
135
  throw new Error('addBusinessAccountSigner requires a walletId when no businessAccountId is provided');
136
136
  }
137
137
  const account = yield waas.addWalletToBusinessAccount({ walletId }, dynamicClient);
138
+ if (waas.isBusinessAccountActionRequired(account)) {
139
+ throw new Error(`addBusinessAccountSigner requires approval: ${account.reason}`);
140
+ }
138
141
  resolvedBusinessAccountId = account.id;
139
142
  }
140
143
  if (!resolvedBusinessAccountId) {
@@ -68,11 +68,11 @@ export type AddBusinessAccountSignerInput = {
68
68
  targetSignerPassword?: string;
69
69
  };
70
70
  export declare const useBusinessAccounts: () => {
71
- addBusinessAccountMember: ({ businessAccountId, userId, identifier, identifierType, role, }: AddBusinessAccountMemberInput) => Promise<import("@dynamic-labs-sdk/client/waas").BusinessAccountMember>;
71
+ addBusinessAccountMember: ({ businessAccountId, userId, identifier, identifierType, role, }: AddBusinessAccountMemberInput) => Promise<import("@dynamic-labs-sdk/client/waas").BusinessAccountActionRequired | import("@dynamic-labs-sdk/client/waas").BusinessAccountMember>;
72
72
  addBusinessAccountSigner: ({ accountAddress, walletId, chainName, businessAccountId, targetSignerIdentity, signerType, password, targetSignerPassword, }: AddBusinessAccountSignerInput) => Promise<{
73
73
  shareSetId: string;
74
- }>;
75
- addWalletToBusinessAccount: (input: AddWalletToBusinessAccountInput) => Promise<import("@dynamic-labs-sdk/client/waas").BusinessAccountDetail>;
74
+ } | import("@dynamic-labs-wallet/core").BusinessAccountActionRequired>;
75
+ addWalletToBusinessAccount: (input: AddWalletToBusinessAccountInput) => Promise<import("@dynamic-labs-sdk/client/waas").BusinessAccountActionRequired | import("@dynamic-labs-sdk/client/waas").BusinessAccountDetail>;
76
76
  createBusinessAccount: (input?: CreateBusinessAccountInput) => Promise<any>;
77
77
  createWalletForBusinessAccount: ({ businessAccountId, chainName, thresholdSignatureScheme, password, }: CreateWalletForBusinessAccountInput) => Promise<{
78
78
  accountAddress: string;
@@ -84,10 +84,10 @@ export declare const useBusinessAccounts: () => {
84
84
  getBusinessAccount: (businessAccountId: string) => Promise<any>;
85
85
  listBusinessAccounts: (input?: ListBusinessAccountsInput) => Promise<any>;
86
86
  listMyWalletAccounts: () => Promise<any>;
87
- removeBusinessAccountMember: ({ businessAccountId, userId }: RemoveBusinessAccountMemberInput) => Promise<import("@dynamic-labs-sdk/client/waas").BusinessAccountMember>;
88
- removeBusinessAccountSigner: (input: RemoveBusinessAccountSignerInput) => Promise<import("@dynamic-labs-sdk/client/waas").BusinessAccountSigner>;
89
- removeBusinessAccountWallet: (input: RemoveBusinessAccountWalletInput) => Promise<import("@dynamic-labs-sdk/client/waas").BusinessAccountDetail>;
90
- transferBusinessAccountOwnership: (input: TransferBusinessAccountOwnershipInput) => Promise<import("@dynamic-labs-sdk/client/waas").BusinessAccountDetail>;
87
+ removeBusinessAccountMember: ({ businessAccountId, userId }: RemoveBusinessAccountMemberInput) => Promise<import("@dynamic-labs-sdk/client/waas").BusinessAccountActionRequired | import("@dynamic-labs-sdk/client/waas").BusinessAccountMember>;
88
+ removeBusinessAccountSigner: (input: RemoveBusinessAccountSignerInput) => Promise<import("@dynamic-labs-sdk/client/waas").BusinessAccountActionRequired | import("@dynamic-labs-sdk/client/waas").BusinessAccountSigner>;
89
+ removeBusinessAccountWallet: (input: RemoveBusinessAccountWalletInput) => Promise<import("@dynamic-labs-sdk/client/waas").BusinessAccountActionRequired | import("@dynamic-labs-sdk/client/waas").BusinessAccountDetail>;
90
+ transferBusinessAccountOwnership: (input: TransferBusinessAccountOwnershipInput) => Promise<import("@dynamic-labs-sdk/client/waas").BusinessAccountActionRequired | import("@dynamic-labs-sdk/client/waas").BusinessAccountDetail>;
91
91
  updateBusinessAccount: (input: UpdateBusinessAccountInput) => Promise<import("@dynamic-labs-sdk/client/waas").BusinessAccount>;
92
- updateBusinessAccountMemberRole: (input: UpdateBusinessAccountMemberRoleInput) => Promise<import("@dynamic-labs-sdk/client/waas").BusinessAccountMember>;
92
+ updateBusinessAccountMemberRole: (input: UpdateBusinessAccountMemberRoleInput) => Promise<import("@dynamic-labs-sdk/client/waas").BusinessAccountActionRequired | import("@dynamic-labs-sdk/client/waas").BusinessAccountMember>;
93
93
  };
@@ -1,7 +1,7 @@
1
1
  'use client'
2
2
  import { __awaiter } from '../../../../../_virtual/_tslib.js';
3
3
  import { useMemo, useCallback } from 'react';
4
- import { addBusinessAccountMember, addWalletToBusinessAccount, removeBusinessAccountMember, updateBusinessAccountMemberRole, transferBusinessAccountOwnership, removeBusinessAccountWallet, removeBusinessAccountSigner, updateBusinessAccount } from '@dynamic-labs-sdk/client/waas';
4
+ import { addBusinessAccountMember, addWalletToBusinessAccount, isBusinessAccountActionRequired, removeBusinessAccountMember, updateBusinessAccountMemberRole, transferBusinessAccountOwnership, removeBusinessAccountWallet, removeBusinessAccountSigner, updateBusinessAccount } from '@dynamic-labs-sdk/client/waas';
5
5
  import { TokenScope } from '@dynamic-labs/sdk-api-core';
6
6
  import { useDynamicClient } from '../../../client/client.js';
7
7
  import '@dynamic-labs-sdk/client/core';
@@ -131,6 +131,9 @@ const useBusinessAccounts = () => {
131
131
  throw new Error('addBusinessAccountSigner requires a walletId when no businessAccountId is provided');
132
132
  }
133
133
  const account = yield addWalletToBusinessAccount({ walletId }, dynamicClient);
134
+ if (isBusinessAccountActionRequired(account)) {
135
+ throw new Error(`addBusinessAccountSigner requires approval: ${account.reason}`);
136
+ }
134
137
  resolvedBusinessAccountId = account.id;
135
138
  }
136
139
  if (!resolvedBusinessAccountId) {