@dynamic-labs/sdk-react-core 5.6.1 → 5.7.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 (96) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/package.cjs +2 -2
  3. package/package.js +2 -2
  4. package/package.json +23 -13
  5. package/src/components.cjs +184 -0
  6. package/src/components.js +88 -0
  7. package/src/icons.cjs +298 -0
  8. package/src/icons.d.ts +1 -0
  9. package/src/icons.js +146 -0
  10. package/src/lib/components/DynamicSpinner/DynamicSpinner.cjs +15 -0
  11. package/src/lib/components/DynamicSpinner/DynamicSpinner.js +11 -0
  12. package/src/lib/components/Separator/Separator.cjs +11 -0
  13. package/src/lib/components/Separator/Separator.js +7 -0
  14. package/src/lib/components/Switch/Switch.cjs +11 -0
  15. package/src/lib/components/Switch/Switch.js +7 -0
  16. package/src/lib/context/DynamicContext/types/IDynamicContext.d.ts +2 -1
  17. package/src/lib/context/DynamicContext/useDynamicContext/useDynamicContext.cjs +2 -1
  18. package/src/lib/context/DynamicContext/useDynamicContext/useDynamicContext.d.ts +1 -1
  19. package/src/lib/context/DynamicContext/useDynamicContext/useDynamicContext.js +2 -1
  20. package/src/lib/shared/assets/add-wallet.cjs +59 -0
  21. package/src/lib/shared/assets/add-wallet.js +35 -0
  22. package/src/lib/shared/assets/alt-embedded-wallet.cjs +55 -0
  23. package/src/lib/shared/assets/alt-embedded-wallet.js +31 -0
  24. package/src/lib/shared/assets/alt-key.cjs +55 -0
  25. package/src/lib/shared/assets/alt-key.js +31 -0
  26. package/src/lib/shared/assets/android-face-id.cjs +62 -0
  27. package/src/lib/shared/assets/android-face-id.js +38 -0
  28. package/src/lib/shared/assets/android-touch-id.cjs +52 -0
  29. package/src/lib/shared/assets/android-touch-id.js +28 -0
  30. package/src/lib/shared/assets/circle-locker.cjs +54 -0
  31. package/src/lib/shared/assets/circle-locker.js +30 -0
  32. package/src/lib/shared/assets/currency.cjs +70 -0
  33. package/src/lib/shared/assets/currency.js +46 -0
  34. package/src/lib/shared/assets/default-wallet.cjs +54 -0
  35. package/src/lib/shared/assets/default-wallet.js +30 -0
  36. package/src/lib/shared/assets/domain-blocked.cjs +73 -0
  37. package/src/lib/shared/assets/domain-blocked.js +49 -0
  38. package/src/lib/shared/assets/domain.cjs +54 -0
  39. package/src/lib/shared/assets/domain.js +30 -0
  40. package/src/lib/shared/assets/dynamic-logo.cjs +52 -0
  41. package/src/lib/shared/assets/dynamic-logo.js +28 -0
  42. package/src/lib/shared/assets/dynamic-round-logo.cjs +54 -0
  43. package/src/lib/shared/assets/dynamic-round-logo.js +30 -0
  44. package/src/lib/shared/assets/gear.cjs +54 -0
  45. package/src/lib/shared/assets/gear.js +30 -0
  46. package/src/lib/shared/assets/global-wallet-icon.cjs +64 -0
  47. package/src/lib/shared/assets/global-wallet-icon.js +40 -0
  48. package/src/lib/shared/assets/multiple-account-security.cjs +107 -0
  49. package/src/lib/shared/assets/multiple-account-security.js +83 -0
  50. package/src/lib/shared/assets/passkey-account-security.cjs +93 -0
  51. package/src/lib/shared/assets/passkey-account-security.js +69 -0
  52. package/src/lib/shared/assets/passkey-intro-icon.cjs +98 -0
  53. package/src/lib/shared/assets/passkey-intro-icon.js +74 -0
  54. package/src/lib/shared/assets/passkey-intro2.cjs +93 -0
  55. package/src/lib/shared/assets/passkey-intro2.js +69 -0
  56. package/src/lib/shared/assets/passkey-success-icon.cjs +95 -0
  57. package/src/lib/shared/assets/passkey-success-icon.js +71 -0
  58. package/src/lib/shared/assets/profile.cjs +65 -0
  59. package/src/lib/shared/assets/profile.js +41 -0
  60. package/src/lib/shared/assets/prompt-account-switch.cjs +64 -0
  61. package/src/lib/shared/assets/prompt-account-switch.js +40 -0
  62. package/src/lib/shared/assets/save-password-hero.cjs +128 -0
  63. package/src/lib/shared/assets/save-password-hero.js +104 -0
  64. package/src/lib/shared/assets/settings.cjs +54 -0
  65. package/src/lib/shared/assets/settings.js +30 -0
  66. package/src/lib/shared/assets/shield.cjs +59 -0
  67. package/src/lib/shared/assets/shield.js +35 -0
  68. package/src/lib/shared/assets/sparkles.cjs +54 -0
  69. package/src/lib/shared/assets/sparkles.js +30 -0
  70. package/src/lib/shared/assets/upgrade.cjs +93 -0
  71. package/src/lib/shared/assets/upgrade.js +69 -0
  72. package/src/lib/shared/assets/user-account-2.cjs +54 -0
  73. package/src/lib/shared/assets/user-account-2.js +30 -0
  74. package/src/lib/shared/assets/wallet-claim-hero.cjs +128 -0
  75. package/src/lib/shared/assets/wallet-claim-hero.js +104 -0
  76. package/src/lib/shared/assets/wallet.cjs +52 -0
  77. package/src/lib/shared/assets/wallet.js +28 -0
  78. package/src/lib/shared/assets/wallets/PhantomLedgerIcon/PhantomLedgerIcon.cjs +26 -0
  79. package/src/lib/shared/assets/wallets/PhantomLedgerIcon/PhantomLedgerIcon.js +22 -0
  80. package/src/lib/store/state/nonce/nonce.cjs +5 -5
  81. package/src/lib/styles/index.shadow.cjs +1 -1
  82. package/src/lib/styles/index.shadow.js +1 -1
  83. package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.cjs +10 -2
  84. package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.js +11 -3
  85. package/src/lib/utils/hooks/useSendDynamicProps/useSendDynamicProps.cjs +17 -1
  86. package/src/lib/utils/hooks/useSendDynamicProps/useSendDynamicProps.d.ts +11 -0
  87. package/src/lib/utils/hooks/useSendDynamicProps/useSendDynamicProps.js +17 -2
  88. package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.cjs +1 -0
  89. package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.js +1 -0
  90. package/src/lib/utils/hooks/useWalletConnectors/utils/createLinkedWalletsFromWalletOptions/createLinkedWalletsFromWalletOptions.cjs +2 -3
  91. package/src/lib/utils/hooks/useWalletConnectors/utils/createLinkedWalletsFromWalletOptions/createLinkedWalletsFromWalletOptions.js +3 -4
  92. package/src/lib/views/ExchangeWhitelistWarning/ExchangeWhitelistWarning.cjs +1 -0
  93. package/src/lib/views/ExchangeWhitelistWarning/ExchangeWhitelistWarning.js +1 -0
  94. package/src/lib/widgets/DynamicWidget/helpers/convertExchangeKeyAndProviderEnum.cjs +1 -0
  95. package/src/lib/widgets/DynamicWidget/helpers/convertExchangeKeyAndProviderEnum.js +1 -0
  96. package/src/lib/widgets/DynamicWidget/views/MoonPayOnramp/useMoonPayOnramp.js +1 -1
@@ -265,12 +265,20 @@ const useDynamicWaas = () => {
265
265
  return true;
266
266
  }
267
267
  catch (error) {
268
- walletConnectorCore.logger.error('Error initializing waas wallet client', {
268
+ const failureDetails = {
269
269
  chain,
270
270
  error,
271
271
  sessionId: user.sessionId,
272
272
  userId: user.id,
273
- });
273
+ };
274
+ // A pending auth scope means the token has not upgraded yet, so
275
+ // initialization is retried once it does.
276
+ if (utils.isWaasAuthScopePendingError(error)) {
277
+ walletConnectorCore.logger.debug('Waas wallet client not initialized yet', failureDetails);
278
+ }
279
+ else {
280
+ walletConnectorCore.logger.error('Error initializing waas wallet client', failureDetails);
281
+ }
274
282
  return false;
275
283
  }
276
284
  })));
@@ -2,7 +2,7 @@
2
2
  import { __awaiter } from '../../../../../_virtual/_tslib.js';
3
3
  import { useMemo, useRef, useState, useCallback } from 'react';
4
4
  import { EmbeddedWalletVersionEnum, JwtVerifiedCredentialFormatEnum, WalletProviderEnum, ChainEnum } from '@dynamic-labs/sdk-api-core';
5
- import { DynamicError } from '@dynamic-labs/utils';
5
+ import { DynamicError, isWaasAuthScopePendingError } from '@dynamic-labs/utils';
6
6
  import { logger } from '@dynamic-labs/wallet-connector-core';
7
7
  import { dynamicEvents } from '../../../events/dynamicEvents.js';
8
8
  import '@dynamic-labs-sdk/client/core';
@@ -261,12 +261,20 @@ const useDynamicWaas = () => {
261
261
  return true;
262
262
  }
263
263
  catch (error) {
264
- logger.error('Error initializing waas wallet client', {
264
+ const failureDetails = {
265
265
  chain,
266
266
  error,
267
267
  sessionId: user.sessionId,
268
268
  userId: user.id,
269
- });
269
+ };
270
+ // A pending auth scope means the token has not upgraded yet, so
271
+ // initialization is retried once it does.
272
+ if (isWaasAuthScopePendingError(error)) {
273
+ logger.debug('Waas wallet client not initialized yet', failureDetails);
274
+ }
275
+ else {
276
+ logger.error('Error initializing waas wallet client', failureDetails);
277
+ }
270
278
  return false;
271
279
  }
272
280
  })));
@@ -45,13 +45,28 @@ const useSendDynamicProps = ({ settings: settings$1, environmentId, }) => {
45
45
  };
46
46
  const serializedEventsCallbacks = serializeEventsCallbacks(settings$1.events);
47
47
  const serializedWalletConnectors = serializeWalletConnectors.serializeWalletConnectors(settings$1.walletConnectors);
48
- const serializedDynamicContextProps = Object.assign(Object.assign({}, updatedDynamicProps), { settings: Object.assign(Object.assign({}, updatedDynamicProps.settings), { events: serializedEventsCallbacks, walletConnectors: serializedWalletConnectors }) });
48
+ const serializedDynamicContextProps = Object.assign(Object.assign({}, updatedDynamicProps), { settings: Object.assign(Object.assign({}, updatedDynamicProps.settings), { cssOverrides: summarizeCssOverrides(settings$1.cssOverrides), events: serializedEventsCallbacks, walletConnectors: serializedWalletConnectors }) });
49
49
  settings.sendDynamicProps(environmentId, {
50
50
  dynamicContextProps: serializedDynamicContextProps,
51
51
  frameworkSettings: getFrameworkSettings(),
52
52
  });
53
53
  });
54
54
  };
55
+ /**
56
+ * Describes the configured CSS overrides without carrying the stylesheet
57
+ * itself. The raw CSS is several kilobytes of style-rule text, which reads as
58
+ * an injection payload to web application firewalls scoring this request body,
59
+ * and the shape of the overrides is all the settings telemetry needs.
60
+ */
61
+ const summarizeCssOverrides = (cssOverrides) => {
62
+ if (!cssOverrides) {
63
+ return undefined;
64
+ }
65
+ if (typeof cssOverrides !== 'string') {
66
+ return { kind: 'element' };
67
+ }
68
+ return { characters: cssOverrides.length, kind: 'string' };
69
+ };
55
70
  const serializeEventsCallbacks = (events) => {
56
71
  try {
57
72
  if (!events)
@@ -85,4 +100,5 @@ const getFrameworkSettings = () => {
85
100
  };
86
101
 
87
102
  exports.serializeEventsCallbacks = serializeEventsCallbacks;
103
+ exports.summarizeCssOverrides = summarizeCssOverrides;
88
104
  exports.useSendDynamicProps = useSendDynamicProps;
@@ -5,5 +5,16 @@ type UseSendDynamicHookProps = {
5
5
  environmentId: string;
6
6
  };
7
7
  export declare const useSendDynamicProps: ({ settings, environmentId, }: UseSendDynamicHookProps) => void;
8
+ type CssOverridesSummary = {
9
+ characters?: number;
10
+ kind: 'element' | 'string';
11
+ };
12
+ /**
13
+ * Describes the configured CSS overrides without carrying the stylesheet
14
+ * itself. The raw CSS is several kilobytes of style-rule text, which reads as
15
+ * an injection payload to web application firewalls scoring this request body,
16
+ * and the shape of the overrides is all the settings telemetry needs.
17
+ */
18
+ export declare const summarizeCssOverrides: (cssOverrides: DynamicContextProps['settings']['cssOverrides']) => CssOverridesSummary | undefined;
8
19
  export declare const serializeEventsCallbacks: (events: DynamicEventsCallbacks | undefined) => string[] | undefined;
9
20
  export {};
@@ -41,13 +41,28 @@ const useSendDynamicProps = ({ settings, environmentId, }) => {
41
41
  };
42
42
  const serializedEventsCallbacks = serializeEventsCallbacks(settings.events);
43
43
  const serializedWalletConnectors = serializeWalletConnectors(settings.walletConnectors);
44
- const serializedDynamicContextProps = Object.assign(Object.assign({}, updatedDynamicProps), { settings: Object.assign(Object.assign({}, updatedDynamicProps.settings), { events: serializedEventsCallbacks, walletConnectors: serializedWalletConnectors }) });
44
+ const serializedDynamicContextProps = Object.assign(Object.assign({}, updatedDynamicProps), { settings: Object.assign(Object.assign({}, updatedDynamicProps.settings), { cssOverrides: summarizeCssOverrides(settings.cssOverrides), events: serializedEventsCallbacks, walletConnectors: serializedWalletConnectors }) });
45
45
  sendDynamicProps(environmentId, {
46
46
  dynamicContextProps: serializedDynamicContextProps,
47
47
  frameworkSettings: getFrameworkSettings(),
48
48
  });
49
49
  });
50
50
  };
51
+ /**
52
+ * Describes the configured CSS overrides without carrying the stylesheet
53
+ * itself. The raw CSS is several kilobytes of style-rule text, which reads as
54
+ * an injection payload to web application firewalls scoring this request body,
55
+ * and the shape of the overrides is all the settings telemetry needs.
56
+ */
57
+ const summarizeCssOverrides = (cssOverrides) => {
58
+ if (!cssOverrides) {
59
+ return undefined;
60
+ }
61
+ if (typeof cssOverrides !== 'string') {
62
+ return { kind: 'element' };
63
+ }
64
+ return { characters: cssOverrides.length, kind: 'string' };
65
+ };
51
66
  const serializeEventsCallbacks = (events) => {
52
67
  try {
53
68
  if (!events)
@@ -80,4 +95,4 @@ const getFrameworkSettings = () => {
80
95
  });
81
96
  };
82
97
 
83
- export { serializeEventsCallbacks, useSendDynamicProps };
98
+ export { serializeEventsCallbacks, summarizeCssOverrides, useSendDynamicProps };
@@ -56,6 +56,7 @@ const socialProviders = [
56
56
  'epicgames',
57
57
  'facebook',
58
58
  'farcaster',
59
+ 'gemini',
59
60
  'github',
60
61
  'google',
61
62
  'kraken',
@@ -52,6 +52,7 @@ const socialProviders = [
52
52
  'epicgames',
53
53
  'facebook',
54
54
  'farcaster',
55
+ 'gemini',
55
56
  'github',
56
57
  'google',
57
58
  'kraken',
@@ -67,15 +67,14 @@ const createLinkedWalletsFromWalletOptions = ({ user, walletConnectorOptions, pr
67
67
  // common pre-MFA case, but as defense in depth swallow the WaaS
68
68
  // "scope still pending" error specifically (recognizable via its
69
69
  // stable code) so a late token regression doesn't spam the console.
70
- // Anything else is surfaced as before.
70
+ // Anything else is surfaced as an error.
71
71
  void smartWallet.initializeSmartWallet({
72
72
  account,
73
73
  primaryWalletId,
74
74
  verifiedCredentials: user.verifiedCredentials,
75
75
  walletConnectorOptions,
76
76
  }).catch((error) => {
77
- if (error instanceof Error &&
78
- error.code === utils.WAAS_AUTH_SCOPE_PENDING_CODE) {
77
+ if (utils.isWaasAuthScopePendingError(error)) {
79
78
  logger.logger.debug('[createLinkedWalletsFromWalletOptions] Swallowed WaaS scope-pending error during smart-wallet init');
80
79
  return;
81
80
  }
@@ -1,6 +1,6 @@
1
1
  'use client'
2
2
  import { HardwareWalletEnum, WalletProviderEnum } from '@dynamic-labs/sdk-api-core';
3
- import { WAAS_AUTH_SCOPE_PENDING_CODE } from '@dynamic-labs/utils';
3
+ import { isWaasAuthScopePendingError } from '@dynamic-labs/utils';
4
4
  import { isHardwareWalletConnector } from '@dynamic-labs/wallet-connector-core';
5
5
  import '@dynamic-labs/iconic';
6
6
  import 'react';
@@ -63,15 +63,14 @@ const createLinkedWalletsFromWalletOptions = ({ user, walletConnectorOptions, pr
63
63
  // common pre-MFA case, but as defense in depth swallow the WaaS
64
64
  // "scope still pending" error specifically (recognizable via its
65
65
  // stable code) so a late token regression doesn't spam the console.
66
- // Anything else is surfaced as before.
66
+ // Anything else is surfaced as an error.
67
67
  void initializeSmartWallet({
68
68
  account,
69
69
  primaryWalletId,
70
70
  verifiedCredentials: user.verifiedCredentials,
71
71
  walletConnectorOptions,
72
72
  }).catch((error) => {
73
- if (error instanceof Error &&
74
- error.code === WAAS_AUTH_SCOPE_PENDING_CODE) {
73
+ if (isWaasAuthScopePendingError(error)) {
75
74
  logger.debug('[createLinkedWalletsFromWalletOptions] Swallowed WaaS scope-pending error during smart-wallet init');
76
75
  return;
77
76
  }
@@ -131,6 +131,7 @@ const docsLink = (exchange) => {
131
131
  }
132
132
  return undefined;
133
133
  };
134
+ // TODO: add gemini exchange support (app url, docs link, whitelist copy)
134
135
  const exchangeAppUrlMap = {
135
136
  [sdkApiCore.ExchangeKeyEnum.Kraken]: 'https://www.kraken.com/',
136
137
  [sdkApiCore.ExchangeKeyEnum.Coinbase]: 'https://www.coinbase.com/',
@@ -127,6 +127,7 @@ const docsLink = (exchange) => {
127
127
  }
128
128
  return undefined;
129
129
  };
130
+ // TODO: add gemini exchange support (app url, docs link, whitelist copy)
130
131
  const exchangeAppUrlMap = {
131
132
  [ExchangeKeyEnum.Kraken]: 'https://www.kraken.com/',
132
133
  [ExchangeKeyEnum.Coinbase]: 'https://www.coinbase.com/',
@@ -8,6 +8,7 @@ var sdkApiCore = require('@dynamic-labs/sdk-api-core');
8
8
  const EXCHANGE_TO_PROVIDER_OVERRIDES = {
9
9
  [sdkApiCore.ExchangeKeyEnum.Coinbase]: sdkApiCore.ProviderEnum.Coinbasesocial,
10
10
  [sdkApiCore.ExchangeKeyEnum.Kraken]: sdkApiCore.ProviderEnum.Kraken,
11
+ [sdkApiCore.ExchangeKeyEnum.Gemini]: sdkApiCore.ProviderEnum.Gemini,
11
12
  };
12
13
  const PROVIDER_TO_EXCHANGE_OVERRIDES = Object.fromEntries(Object.entries(EXCHANGE_TO_PROVIDER_OVERRIDES).map(([exchange, provider]) => [
13
14
  provider,
@@ -4,6 +4,7 @@ import { ExchangeKeyEnum, ProviderEnum } from '@dynamic-labs/sdk-api-core';
4
4
  const EXCHANGE_TO_PROVIDER_OVERRIDES = {
5
5
  [ExchangeKeyEnum.Coinbase]: ProviderEnum.Coinbasesocial,
6
6
  [ExchangeKeyEnum.Kraken]: ProviderEnum.Kraken,
7
+ [ExchangeKeyEnum.Gemini]: ProviderEnum.Gemini,
7
8
  };
8
9
  const PROVIDER_TO_EXCHANGE_OVERRIDES = Object.fromEntries(Object.entries(EXCHANGE_TO_PROVIDER_OVERRIDES).map(([exchange, provider]) => [
9
10
  provider,
@@ -5,7 +5,7 @@ import { useTranslation } from 'react-i18next';
5
5
  import { ProviderEnum } from '@dynamic-labs/sdk-api-core';
6
6
  import '../../../../context/DynamicContext/useDynamicContext/useDynamicContext.js';
7
7
  import { useInternalDynamicContext } from '../../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext/useInternalDynamicContext.js';
8
- import { getOnrampProviders, getMoonPayCurrencies } from '../../../../data/api/onramp/onramp.js';
8
+ import { getMoonPayCurrencies, getOnrampProviders } from '../../../../data/api/onramp/onramp.js';
9
9
  import { useEnvironmentId } from '../../../../store/state/dynamicContextProps/dynamicContextProps.js';
10
10
  import { useMutation } from '../../../../utils/hooks/useMutation/useMutation.js';
11
11
  import { usePromise } from '../../../../utils/hooks/usePromise/usePromise.js';