@arcblock/did-connect-react 3.5.1 → 4.0.0-beta.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.
Files changed (170) hide show
  1. package/dist/ConnectContext.d.ts +13 -0
  2. package/dist/ConnectContext.d.ts.map +1 -0
  3. package/dist/ConnectContext.js +14 -0
  4. package/dist/ConnectContext.js.map +1 -0
  5. package/dist/ConnectProvider.d.ts +11 -0
  6. package/dist/ConnectProvider.d.ts.map +1 -0
  7. package/dist/ConnectProvider.js +23 -0
  8. package/dist/ConnectProvider.js.map +1 -0
  9. package/dist/compat/SessionProvider.d.ts +22 -0
  10. package/dist/compat/SessionProvider.d.ts.map +1 -0
  11. package/dist/compat/SessionProvider.js +17 -0
  12. package/dist/compat/SessionProvider.js.map +1 -0
  13. package/dist/compat/index.d.ts +4 -0
  14. package/dist/compat/index.d.ts.map +1 -0
  15. package/dist/compat/index.js +3 -0
  16. package/dist/compat/index.js.map +1 -0
  17. package/dist/compat/useSessionContext.d.ts +14 -0
  18. package/dist/compat/useSessionContext.d.ts.map +1 -0
  19. package/dist/compat/useSessionContext.js +20 -0
  20. package/dist/compat/useSessionContext.js.map +1 -0
  21. package/dist/components/LoginPage.d.ts +15 -0
  22. package/dist/components/LoginPage.d.ts.map +1 -0
  23. package/dist/components/LoginPage.js +33 -0
  24. package/dist/components/LoginPage.js.map +1 -0
  25. package/dist/components/UserAvatar.d.ts +19 -0
  26. package/dist/components/UserAvatar.d.ts.map +1 -0
  27. package/dist/components/UserAvatar.js +45 -0
  28. package/dist/components/UserAvatar.js.map +1 -0
  29. package/dist/hooks/index.d.ts +11 -0
  30. package/dist/hooks/index.d.ts.map +1 -0
  31. package/dist/hooks/index.js +6 -0
  32. package/dist/hooks/index.js.map +1 -0
  33. package/dist/hooks/useConnect.d.ts +15 -0
  34. package/dist/hooks/useConnect.d.ts.map +1 -0
  35. package/dist/hooks/useConnect.js +19 -0
  36. package/dist/hooks/useConnect.js.map +1 -0
  37. package/dist/hooks/useEmail.d.ts +11 -0
  38. package/dist/hooks/useEmail.d.ts.map +1 -0
  39. package/dist/hooks/useEmail.js +47 -0
  40. package/dist/hooks/useEmail.js.map +1 -0
  41. package/dist/hooks/useOAuth.d.ts +12 -0
  42. package/dist/hooks/useOAuth.d.ts.map +1 -0
  43. package/dist/hooks/useOAuth.js +75 -0
  44. package/dist/hooks/useOAuth.js.map +1 -0
  45. package/dist/hooks/usePasskey.d.ts +14 -0
  46. package/dist/hooks/usePasskey.d.ts.map +1 -0
  47. package/dist/hooks/usePasskey.js +35 -0
  48. package/dist/hooks/usePasskey.js.map +1 -0
  49. package/dist/hooks/useSession.d.ts +12 -0
  50. package/dist/hooks/useSession.d.ts.map +1 -0
  51. package/dist/hooks/useSession.js +30 -0
  52. package/dist/hooks/useSession.js.map +1 -0
  53. package/dist/index.d.ts +13 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +11 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/internals/blocklet-config.d.ts +22 -0
  58. package/dist/internals/blocklet-config.d.ts.map +1 -0
  59. package/dist/internals/blocklet-config.js +26 -0
  60. package/dist/internals/blocklet-config.js.map +1 -0
  61. package/dist/internals/local-storage-adapter.d.ts +12 -0
  62. package/dist/internals/local-storage-adapter.d.ts.map +1 -0
  63. package/dist/internals/local-storage-adapter.js +32 -0
  64. package/dist/internals/local-storage-adapter.js.map +1 -0
  65. package/dist/internals/use-sync-state.d.ts +18 -0
  66. package/dist/internals/use-sync-state.d.ts.map +1 -0
  67. package/dist/internals/use-sync-state.js +38 -0
  68. package/dist/internals/use-sync-state.js.map +1 -0
  69. package/package.json +33 -79
  70. package/LICENSE +0 -13
  71. package/README.md +0 -134
  72. package/dist/standalone/did-connect-react.css +0 -1
  73. package/dist/standalone/index.js +0 -133700
  74. package/lib/Address/index.js +0 -4
  75. package/lib/Avatar/index.js +0 -4
  76. package/lib/Button/index.js +0 -17
  77. package/lib/Connect/assets/locale.js +0 -147
  78. package/lib/Connect/assets/login-bg.png +0 -0
  79. package/lib/Connect/assets/login-slogan.js +0 -9
  80. package/lib/Connect/components/action-button.js +0 -26
  81. package/lib/Connect/components/app-tips.js +0 -132
  82. package/lib/Connect/components/auto-height.js +0 -31
  83. package/lib/Connect/components/back-button.js +0 -25
  84. package/lib/Connect/components/connect-status.js +0 -263
  85. package/lib/Connect/components/did-connect-title.js +0 -127
  86. package/lib/Connect/components/download-tips.js +0 -52
  87. package/lib/Connect/components/loading.js +0 -26
  88. package/lib/Connect/components/login-item/connect-choose-list.js +0 -257
  89. package/lib/Connect/components/login-item/connect-provider-list.js +0 -345
  90. package/lib/Connect/components/login-item/login-method-item.js +0 -147
  91. package/lib/Connect/components/login-item/mobile-login-item.js +0 -116
  92. package/lib/Connect/components/login-item/passkey-login-item.js +0 -44
  93. package/lib/Connect/components/login-item/wallet-login-options.js +0 -114
  94. package/lib/Connect/components/login-item/web-login-item.js +0 -104
  95. package/lib/Connect/components/mask-overlay.js +0 -34
  96. package/lib/Connect/components/refresh-overlay.js +0 -57
  97. package/lib/Connect/components/switch-app.js +0 -70
  98. package/lib/Connect/connect.js +0 -505
  99. package/lib/Connect/contexts/state.js +0 -156
  100. package/lib/Connect/fallback-connect.js +0 -53
  101. package/lib/Connect/fullpage.js +0 -5
  102. package/lib/Connect/hooks/auth-url.js +0 -23
  103. package/lib/Connect/hooks/method-list.js +0 -46
  104. package/lib/Connect/hooks/page-show.js +0 -17
  105. package/lib/Connect/hooks/provider-list.js +0 -69
  106. package/lib/Connect/hooks/security.js +0 -27
  107. package/lib/Connect/hooks/token.js +0 -296
  108. package/lib/Connect/hooks/use-apps.js +0 -19
  109. package/lib/Connect/hooks/use-quick-connect.js +0 -86
  110. package/lib/Connect/index.js +0 -16
  111. package/lib/Connect/landing-page.js +0 -5
  112. package/lib/Connect/plugins/email/index.js +0 -65
  113. package/lib/Connect/plugins/email/list-item.js +0 -31
  114. package/lib/Connect/plugins/email/placeholder.js +0 -284
  115. package/lib/Connect/plugins/index.js +0 -4
  116. package/lib/Connect/use-connect.js +0 -164
  117. package/lib/Connect/with-blocklet.js +0 -15
  118. package/lib/Connect/with-bridge-call.js +0 -108
  119. package/lib/Federated/context.js +0 -61
  120. package/lib/Federated/index.js +0 -7
  121. package/lib/Logo/index.js +0 -4
  122. package/lib/OAuth/bind-conflict-alert.js +0 -29
  123. package/lib/OAuth/context.js +0 -277
  124. package/lib/OAuth/guest.svg.js +0 -5
  125. package/lib/OAuth/index.js +0 -7
  126. package/lib/OAuth/passport-switcher.js +0 -5
  127. package/lib/Passkey/actions.js +0 -170
  128. package/lib/Passkey/constants.js +0 -4
  129. package/lib/Passkey/context.js +0 -281
  130. package/lib/Passkey/dialog.js +0 -280
  131. package/lib/Passkey/icon.js +0 -13
  132. package/lib/Passkey/index.js +0 -9
  133. package/lib/Service/index.js +0 -62
  134. package/lib/Session/assets/did-spaces-guide-cover.svg.js +0 -111
  135. package/lib/Session/assets/did-spaces-guide-icon.svg.js +0 -9
  136. package/lib/Session/context.js +0 -5
  137. package/lib/Session/did-spaces-guide.js +0 -136
  138. package/lib/Session/handler.js +0 -55
  139. package/lib/Session/hooks/use-federated.js +0 -64
  140. package/lib/Session/hooks/use-mobile.js +0 -8
  141. package/lib/Session/hooks/use-protected-routes.js +0 -11
  142. package/lib/Session/hooks/use-session-token.js +0 -181
  143. package/lib/Session/hooks/use-verify.js +0 -45
  144. package/lib/Session/index.js +0 -941
  145. package/lib/Session/libs/constants.js +0 -18
  146. package/lib/Session/libs/did-spaces.js +0 -10
  147. package/lib/Session/libs/federated.js +0 -42
  148. package/lib/Session/libs/index.js +0 -15
  149. package/lib/Session/libs/locales.js +0 -161
  150. package/lib/Session/libs/login-mobile.js +0 -55
  151. package/lib/Session/window-focus-aware.js +0 -17
  152. package/lib/SessionManager/index.js +0 -4
  153. package/lib/Storage/engine/cookie.js +0 -22
  154. package/lib/Storage/engine/local-storage.js +0 -37
  155. package/lib/Storage/index.js +0 -23
  156. package/lib/User/index.js +0 -6
  157. package/lib/User/use-did.js +0 -59
  158. package/lib/User/wrap-did.js +0 -13
  159. package/lib/WebWalletSWKeeper/index.js +0 -5
  160. package/lib/components/PassportSwitcher.js +0 -128
  161. package/lib/constant.js +0 -23
  162. package/lib/error.js +0 -8
  163. package/lib/hooks/use-locale.js +0 -7
  164. package/lib/index.js +0 -111
  165. package/lib/locales/en.js +0 -17
  166. package/lib/locales/index.js +0 -10
  167. package/lib/locales/zh.js +0 -17
  168. package/lib/package.json.js +0 -7
  169. package/lib/types.d.ts +0 -355
  170. package/lib/utils.js +0 -225
@@ -0,0 +1,35 @@
1
+ import { useCallback, useState } from 'react';
2
+ import { useConnectContext } from '../ConnectContext.js';
3
+ export function usePasskey() {
4
+ const { config } = useConnectContext();
5
+ const [loading, setLoading] = useState(false);
6
+ const [error, setError] = useState(null);
7
+ const runAuth = useCallback(async (options) => {
8
+ setLoading(true);
9
+ setError(null);
10
+ try {
11
+ const { runPasskeyAuth } = await import('@arcblock/did-connect-core/ui');
12
+ const prefix = `${config.servicePrefix ?? '/.well-known/service'}/api/passkey`;
13
+ const result = await runPasskeyAuth({
14
+ prefix,
15
+ authOnly: options.authOnly,
16
+ registerOnly: options.registerOnly,
17
+ name: options.name,
18
+ onStatus: () => { },
19
+ });
20
+ return result;
21
+ }
22
+ catch (err) {
23
+ const msg = err?.message ?? 'Passkey operation failed';
24
+ setError(msg);
25
+ throw err;
26
+ }
27
+ finally {
28
+ setLoading(false);
29
+ }
30
+ }, [config.servicePrefix]);
31
+ const authenticate = useCallback(() => runAuth({ authOnly: true }), [runAuth]);
32
+ const register = useCallback((name) => runAuth({ registerOnly: true, name }), [runAuth]);
33
+ return { loading, error, authenticate, register };
34
+ }
35
+ //# sourceMappingURL=usePasskey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePasskey.js","sourceRoot":"","sources":["../../src/hooks/usePasskey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AASzD,MAAM,UAAU,UAAU;IACxB,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAC;IACvC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,MAAM,OAAO,GAAG,WAAW,CACzB,KAAK,EAAE,OAIN,EAAiD,EAAE;QAClD,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,CAAC;YACH,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;YACzE,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,IAAI,sBAAsB,cAAc,CAAC;YAC/E,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;gBAClC,MAAM;gBACN,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;aACnB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,GAAG,EAAE,OAAO,IAAI,0BAA0B,CAAC;YACvD,QAAQ,CAAC,GAAG,CAAC,CAAC;YACd,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EACD,CAAC,MAAM,CAAC,aAAa,CAAC,CACvB,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAC9B,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EACjC,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,IAAa,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EACxD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AACpD,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { UserInfo } from '@arcblock/did-connect-core';
2
+ export interface UseSessionReturn {
3
+ user: UserInfo | null;
4
+ loading: boolean;
5
+ error: string | null;
6
+ initialized: boolean;
7
+ isAuthenticated: boolean;
8
+ logout: () => Promise<void>;
9
+ refresh: () => Promise<void>;
10
+ }
11
+ export declare function useSession(): UseSessionReturn;
12
+ //# sourceMappingURL=useSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSession.d.ts","sourceRoot":"","sources":["../../src/hooks/useSession.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAMzE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAID,wBAAgB,UAAU,IAAI,gBAAgB,CA+B7C"}
@@ -0,0 +1,30 @@
1
+ import { SessionManager } from '@arcblock/did-connect-core';
2
+ import { useCallback, useEffect, useRef } from 'react';
3
+ import { useConnectContext } from '../ConnectContext.js';
4
+ import { useSyncState } from '../internals/use-sync-state.js';
5
+ const SESSION_EVENTS = ['userChange', 'logout', 'error', 'tokenRefreshed'];
6
+ export function useSession() {
7
+ const { config, http, storage } = useConnectContext();
8
+ const [state, manager] = useSyncState(() => new SessionManager(config, http, storage), SESSION_EVENTS);
9
+ const restoreRef = useRef(false);
10
+ useEffect(() => {
11
+ if (!restoreRef.current) {
12
+ restoreRef.current = true;
13
+ manager.restore().then(() => {
14
+ manager.startAutoCheck();
15
+ });
16
+ }
17
+ }, [manager]);
18
+ const logout = useCallback(() => manager.logout(), [manager]);
19
+ const refresh = useCallback(() => manager.getSession().then(() => { }), [manager]);
20
+ return {
21
+ user: state.user,
22
+ loading: state.loading,
23
+ error: state.error,
24
+ initialized: state.initialized,
25
+ isAuthenticated: state.user !== null,
26
+ logout,
27
+ refresh,
28
+ };
29
+ }
30
+ //# sourceMappingURL=useSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSession.js","sourceRoot":"","sources":["../../src/hooks/useSession.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAY9D,MAAM,cAAc,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;AAE3E,MAAM,UAAU,UAAU;IACxB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAEtD,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,YAAY,CACnC,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,EAC/C,cAAc,CACf,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEjC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;YAC1B,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC1B,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAElF,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,eAAe,EAAE,KAAK,CAAC,IAAI,KAAK,IAAI;QACpC,MAAM;QACN,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ export type { AppInfo, AuthMethod, AuthResult, ConnectConfig, CreateTokenParams, OAuthProvider, PasskeyResult, Role, SessionState, TokenState, TokenStatus, UserInfo, } from '@arcblock/did-connect-core';
2
+ export { VERSION } from '@arcblock/did-connect-core';
3
+ export type { ConnectContextValue } from './ConnectContext.js';
4
+ export { useConnectContext } from './ConnectContext.js';
5
+ export type { ConnectProviderProps } from './ConnectProvider.js';
6
+ export { ConnectProvider } from './ConnectProvider.js';
7
+ export type { LoginPageProps } from './components/LoginPage.js';
8
+ export { LoginPage } from './components/LoginPage.js';
9
+ export type { UserAvatarProps } from './components/UserAvatar.js';
10
+ export { UserAvatar } from './components/UserAvatar.js';
11
+ export type { UseConnectOptions, UseConnectReturn, UseEmailReturn, UseOAuthReturn, UsePasskeyReturn, UseSessionReturn, } from './hooks/index.js';
12
+ export { useConnect, useEmail, useOAuth, usePasskey, useSession } from './hooks/index.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,OAAO,EACP,UAAU,EACV,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,QAAQ,GACT,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ // @arcblock/did-connect-react — barrel export
2
+ export { VERSION } from '@arcblock/did-connect-core';
3
+ export { useConnectContext } from './ConnectContext.js';
4
+ // Provider
5
+ export { ConnectProvider } from './ConnectProvider.js';
6
+ // Components
7
+ export { LoginPage } from './components/LoginPage.js';
8
+ export { UserAvatar } from './components/UserAvatar.js';
9
+ // Hooks
10
+ export { useConnect, useEmail, useOAuth, usePasskey, useSession } from './hooks/index.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAkB9C,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,WAAW;AACX,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,aAAa;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AASxD,QAAQ;AACR,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { ConnectConfig } from '@arcblock/did-connect-core';
2
+ declare global {
3
+ interface Window {
4
+ blocklet?: {
5
+ appPid?: string;
6
+ appId?: string;
7
+ appName?: string;
8
+ appUrl?: string;
9
+ prefix?: string;
10
+ servicePrefix?: string;
11
+ [key: string]: unknown;
12
+ };
13
+ }
14
+ }
15
+ /**
16
+ * Build a ConnectConfig from `window.blocklet` (injected by blocklet-server).
17
+ *
18
+ * Returns null if `window` or `window.blocklet` is not available (SSR safe).
19
+ * Only reads known properties — does not leak arbitrary fields.
20
+ */
21
+ export declare function buildConfigFromBlocklet(): ConnectConfig | null;
22
+ //# sourceMappingURL=blocklet-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocklet-config.d.ts","sourceRoot":"","sources":["../../src/internals/blocklet-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,QAAQ,CAAC,EAAE;YACT,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;SACxB,CAAC;KACH;CACF;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI,aAAa,GAAG,IAAI,CAoB9D"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Build a ConnectConfig from `window.blocklet` (injected by blocklet-server).
3
+ *
4
+ * Returns null if `window` or `window.blocklet` is not available (SSR safe).
5
+ * Only reads known properties — does not leak arbitrary fields.
6
+ */
7
+ export function buildConfigFromBlocklet() {
8
+ if (typeof window === 'undefined' || !window.blocklet) {
9
+ return null;
10
+ }
11
+ const b = window.blocklet;
12
+ const appPid = b.appPid || b.appId || '';
13
+ const prefix = typeof b.prefix === 'string' ? b.prefix : '';
14
+ // servicePrefix: explicit field (cloudflare) > prefix (blocklet-server) > default
15
+ const svcPrefix = typeof b.servicePrefix === 'string'
16
+ ? b.servicePrefix
17
+ : prefix || '/.well-known/service';
18
+ return {
19
+ appPid,
20
+ appName: typeof b.appName === 'string' ? b.appName : '',
21
+ appUrl: typeof b.appUrl === 'string' ? b.appUrl : undefined,
22
+ apiPrefix: `${svcPrefix}/api/did`,
23
+ servicePrefix: svcPrefix,
24
+ };
25
+ }
26
+ //# sourceMappingURL=blocklet-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocklet-config.js","sourceRoot":"","sources":["../../src/internals/blocklet-config.ts"],"names":[],"mappings":"AAgBA;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB;IACrC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,kFAAkF;IAClF,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,aAAa,KAAK,QAAQ;QACnD,CAAC,CAAC,CAAC,CAAC,aAAa;QACjB,CAAC,CAAC,MAAM,IAAI,sBAAsB,CAAC;IAErC,OAAO;QACL,MAAM;QACN,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACvD,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QAC3D,SAAS,EAAE,GAAG,SAAS,UAAU;QACjC,aAAa,EAAE,SAAS;KACzB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { StorageAdapter } from '@arcblock/did-connect-core';
2
+ /**
3
+ * StorageAdapter backed by localStorage.
4
+ *
5
+ * SSR-safe: all operations silently return defaults on error.
6
+ */
7
+ export declare class LocalStorageAdapter implements StorageAdapter {
8
+ get(key: string): string | null;
9
+ set(key: string, value: string): void;
10
+ remove(key: string): void;
11
+ }
12
+ //# sourceMappingURL=local-storage-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-storage-adapter.d.ts","sourceRoot":"","sources":["../../src/internals/local-storage-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IACxD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAQrC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAO1B"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * StorageAdapter backed by localStorage.
3
+ *
4
+ * SSR-safe: all operations silently return defaults on error.
5
+ */
6
+ export class LocalStorageAdapter {
7
+ get(key) {
8
+ try {
9
+ return localStorage.getItem(key);
10
+ }
11
+ catch {
12
+ return null;
13
+ }
14
+ }
15
+ set(key, value) {
16
+ try {
17
+ localStorage.setItem(key, value);
18
+ }
19
+ catch {
20
+ // QuotaExceededError or SSR — silently ignore
21
+ }
22
+ }
23
+ remove(key) {
24
+ try {
25
+ localStorage.removeItem(key);
26
+ }
27
+ catch {
28
+ // SSR — silently ignore
29
+ }
30
+ }
31
+ }
32
+ //# sourceMappingURL=local-storage-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-storage-adapter.js","sourceRoot":"","sources":["../../src/internals/local-storage-adapter.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,mBAAmB;IAC9B,GAAG,CAAC,GAAW;QACb,IAAI,CAAC;YACH,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAa;QAC5B,IAAI,CAAC;YACH,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;IACH,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC;YACH,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ interface Syncable<S> {
2
+ state: Readonly<S>;
3
+ on(event: string, handler: (...args: any[]) => void): any;
4
+ off(event: string, handler: (...args: any[]) => void): any;
5
+ destroy(): void;
6
+ }
7
+ /**
8
+ * Bridge a core class with on/off/destroy/state to React state.
9
+ *
10
+ * - `factory()` runs only once (on mount)
11
+ * - Events trigger `setState({ ...instance.state })` (shallow copy)
12
+ * - Unmount calls `off` for each event + `destroy()`
13
+ * - Returns [state, instance, sync] — call `sync()` to manually
14
+ * re-read instance.state (e.g. after `reset()` which fires no event).
15
+ */
16
+ export declare function useSyncState<T extends Syncable<S>, S>(factory: () => T, events: string[]): [Readonly<S>, T, () => void];
17
+ export {};
18
+ //# sourceMappingURL=use-sync-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-sync-state.d.ts","sourceRoot":"","sources":["../../src/internals/use-sync-state.ts"],"names":[],"mappings":"AAEA,UAAU,QAAQ,CAAC,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,GAAG,CAAC;IAC1D,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,GAAG,CAAC;IAC3D,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EACnD,OAAO,EAAE,MAAM,CAAC,EAChB,MAAM,EAAE,MAAM,EAAE,GACf,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,CAkC9B"}
@@ -0,0 +1,38 @@
1
+ import { useCallback, useEffect, useRef, useState } from 'react';
2
+ /**
3
+ * Bridge a core class with on/off/destroy/state to React state.
4
+ *
5
+ * - `factory()` runs only once (on mount)
6
+ * - Events trigger `setState({ ...instance.state })` (shallow copy)
7
+ * - Unmount calls `off` for each event + `destroy()`
8
+ * - Returns [state, instance, sync] — call `sync()` to manually
9
+ * re-read instance.state (e.g. after `reset()` which fires no event).
10
+ */
11
+ export function useSyncState(factory, events) {
12
+ const instanceRef = useRef(null);
13
+ if (instanceRef.current === null) {
14
+ instanceRef.current = factory();
15
+ }
16
+ const instance = instanceRef.current;
17
+ const [state, setState] = useState(() => ({ ...instance.state }));
18
+ const sync = useCallback(() => {
19
+ setState({ ...instanceRef.current.state });
20
+ }, []);
21
+ useEffect(() => {
22
+ const inst = instanceRef.current;
23
+ const handler = () => {
24
+ setState({ ...inst.state });
25
+ };
26
+ for (const event of events) {
27
+ inst.on(event, handler);
28
+ }
29
+ return () => {
30
+ for (const event of events) {
31
+ inst.off(event, handler);
32
+ }
33
+ inst.destroy();
34
+ };
35
+ }, []);
36
+ return [state, instance, sync];
37
+ }
38
+ //# sourceMappingURL=use-sync-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-sync-state.js","sourceRoot":"","sources":["../../src/internals/use-sync-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AASjE;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAgB,EAChB,MAAgB;IAEhB,MAAM,WAAW,GAAG,MAAM,CAAW,IAAI,CAAC,CAAC;IAE3C,IAAI,WAAW,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACjC,WAAW,CAAC,OAAO,GAAG,OAAO,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC;IACrC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAc,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAE/E,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,QAAQ,CAAC,EAAE,GAAG,WAAW,CAAC,OAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9C,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,IAAI,GAAG,WAAW,CAAC,OAAQ,CAAC;QAElC,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,GAAG,EAAE;YACV,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC3B,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC"}
package/package.json CHANGED
@@ -1,94 +1,48 @@
1
1
  {
2
2
  "name": "@arcblock/did-connect-react",
3
- "version": "3.5.1",
4
- "description": "Client side library to work with DID Connect by ArcBlock.",
5
- "keywords": [
6
- "react",
7
- "arcblock",
8
- "component"
9
- ],
10
- "author": "wangshijun<wangshijun2010@gmail.com>",
11
- "homepage": "https://www.arcblock.io/docs/did-connect-react",
12
- "license": "Apache-2.0",
13
- "main": "lib/index.js",
14
- "module": "lib/index.js",
15
- "repository": {
16
- "type": "git",
17
- "url": "git+https://github.com/ArcBlock/ux.git"
18
- },
19
- "scripts": {
20
- "lint": "eslint src tests --ext js --ext jsx",
21
- "lint:fix": "npm run lint -- --fix",
22
- "build": "vite build",
23
- "build:standalone": "vite build --config vite.config.did-connect.mjs",
24
- "autoexports": "node tools/auto-exports.js",
25
- "watch": "vite build --watch",
26
- "precommit": "CI=1 npm run lint",
27
- "prepush": "CI=1 npm run lint",
28
- "prepublish": "npm run build && npm run build:standalone",
29
- "test": "node tools/jest.js",
30
- "coverage": "npm run test -- --coverage"
31
- },
32
- "bugs": {
33
- "url": "https://github.com/ArcBlock/ux/issues"
3
+ "version": "4.0.0-beta.1",
4
+ "description": "React hooks and components for DID Connect built on @arcblock/did-connect-core",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./compat": {
14
+ "types": "./dist/compat/index.d.ts",
15
+ "import": "./dist/compat/index.js"
16
+ }
34
17
  },
35
18
  "dependencies": {
36
- "@arcblock/bridge": "3.5.1",
37
- "@arcblock/did": "^1.29.4",
38
- "@arcblock/icons": "3.5.1",
39
- "@arcblock/react-hooks": "3.5.1",
40
- "@arcblock/ws": "^1.29.4",
41
- "@blocklet/constant": "^1.17.7",
42
- "@fontsource/lexend": "^5.2.9",
43
- "@iconify-icons/logos": "^1.2.36",
44
- "@iconify-icons/material-symbols": "^1.2.58",
45
- "@iconify/react": "^5.2.1",
46
- "@ocap/util": "^1.29.4",
47
- "@simplewebauthn/browser": "^13.1.0",
48
- "ahooks": "^3.8.5",
49
- "axios": "^1.10.0",
50
- "base64-url": "^2.3.3",
51
- "buffer": "^6.0.3",
52
- "color-convert": "^3.1.0",
53
- "eventemitter3": "^5.0.1",
54
- "flat": "^5.0.2",
55
- "js-cookie": "^2.2.1",
56
- "jwt-decode": "^3.1.2",
57
- "lodash": "^4.17.21",
58
- "mdi-material-ui": "^7.9.4",
59
- "p-queue": "^6.6.2",
60
- "p-retry": "^6.2.1",
61
- "p-wait-for": "^5.0.2",
62
- "path-to-regexp": "^1.9.0",
63
- "semver": "^7.7.2",
64
- "tweetnacl": "^1.0.3",
65
- "tweetnacl-sealedbox-js": "^1.2.0",
66
- "ufo": "^1.6.1"
19
+ "@arcblock/did-connect-core": "^4.0.0-beta.1"
67
20
  },
68
21
  "peerDependencies": {
69
- "@arcblock/ux": "^3.1.0",
70
- "@blocklet/js-sdk": "^1.17.4",
71
- "@blocklet/theme": "^3.1.0",
72
- "@emotion/react": "^11.14.0",
73
- "@emotion/styled": "^11.14.0",
74
- "@mui/material": "^7.2.0",
75
- "react": "^19.0.0",
76
- "react-dom": "^19.0.0"
22
+ "react": "^19.0.0"
77
23
  },
78
- "sideEffects": [
79
- "**/*.css",
80
- "**/*.scss"
81
- ],
82
24
  "files": [
83
- "lib",
84
25
  "dist"
85
26
  ],
86
27
  "publishConfig": {
87
28
  "access": "public"
88
29
  },
30
+ "license": "Apache-2.0",
89
31
  "devDependencies": {
90
- "eslint-plugin-react-hooks": "^4.6.2",
91
- "jest": "^29.7.0"
32
+ "@testing-library/jest-dom": "^6.9.1",
33
+ "@testing-library/react": "^16.3.2",
34
+ "@types/react": "^19.1.0",
35
+ "@types/react-dom": "^19.1.0",
36
+ "jsdom": "^29.0.1",
37
+ "react": "^19.1.0",
38
+ "react-dom": "^19.1.0",
39
+ "vitest": "^4.1.1"
92
40
  },
93
- "gitHead": "78fdd8a869a60672e8b66d4eefc172c8a716acd8"
94
- }
41
+ "scripts": {
42
+ "build": "tsc",
43
+ "lint": "biome check src/",
44
+ "test": "vitest run",
45
+ "test:coverage": "vitest run --coverage",
46
+ "typecheck": "tsc --noEmit"
47
+ }
48
+ }
package/LICENSE DELETED
@@ -1,13 +0,0 @@
1
- Copyright 2018-2022 ArcBlock
2
-
3
- Licensed under the Apache License, Version 2.0 (the "License");
4
- you may not use this file except in compliance with the License.
5
- You may obtain a copy of the License at
6
-
7
- http://www.apache.org/licenses/LICENSE-2.0
8
-
9
- Unless required by applicable law or agreed to in writing, software
10
- distributed under the License is distributed on an "AS IS" BASIS,
11
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- See the License for the specific language governing permissions and
13
- limitations under the License.
package/README.md DELETED
@@ -1,134 +0,0 @@
1
- ![@arcblock/did-connect-react](https://www.arcblock.io/.netlify/functions/badge/?text=did-connect)
2
-
3
- > Client side library to work with DID Connect by ArcBlock.
4
-
5
- ## Usage
6
-
7
- ```shell
8
- yarn add @arcblock/did-connect-react
9
- ```
10
-
11
- Then:
12
-
13
- ```javascript
14
- import axios from 'axios';
15
-
16
- // import each module individually
17
- import DidAddress from '@arcblock/did-connect-react/lib/Address';
18
- import DidConnect from '@arcblock/did-connect-react/lib/Connect';
19
- import DidAvatar from '@arcblock/did-connect-react/lib/Avatar';
20
- import DidButton from '@arcblock/did-connect-react/lib/Button';
21
- import DIDLogo from '@arcblock/did-connect-react/lib/Logo';
22
- import { SessionProvider, SessionConsumer } from '@arcblock/did-connect-react/lib/Session';
23
- import SessionManager from '@arcblock/did-connect-react/lib/SessionManager';
24
-
25
- // or use ES6 named imports
26
- import {
27
- Address as DidAddress,
28
- Connect as DidConnect,
29
- Avatar as DidAvatar,
30
- Button as DidButton,
31
- Logo as DIDLogo,
32
- Session,
33
- SessionManager,
34
- } from '@arcblock/did-connect-react/lib';
35
- ```
36
-
37
- ### DidConnect
38
-
39
- ```jsx
40
- <DidConnect
41
- popup
42
- open={open}
43
- action="login"
44
- checkFn={axios.get}
45
- onClose={() => handleOnClose()}
46
- onSuccess={() => (window.location.href = '/profile')}
47
- messages={{
48
- title: 'login',
49
- scan: 'Scan QR code with DID Wallet',
50
- confirm: 'Confirm login on your DID Wallet',
51
- success: 'You have successfully signed in!',
52
- }}
53
- />
54
- ```
55
-
56
- **Note**: DidConnect component has a built-in instance of WebWalletSWKeeper that embeds a wallet iframe in the DOM to keep the service worker of the web wallet alive. When the DidConnect component is destroyed, WebWalletSWKeeper will also be destroyed, so avoid using it like the following:
57
-
58
- ```jsx
59
- {open && (
60
- <DidConnect
61
- popup
62
- action="login"
63
- ...
64
- />
65
- )}
66
- ```
67
-
68
- ### display DidConnect in popup
69
-
70
- ```jsx
71
- const [open, setOpen] = React.useState(false);
72
- const handleOnClose = () => {
73
- // ...
74
- setOpen(false);
75
- };
76
-
77
- ...
78
-
79
- <button type="button" onClick={() => setOpen(true)}>
80
- Open DidConnect
81
- </button>
82
-
83
- <DidConnect
84
- popup
85
- open={open}
86
- action="login"
87
- checkFn={axios.get}
88
- onClose={() => handleOnClose()}
89
- onSuccess={() => (window.location.href = '/profile')}
90
- messages={{
91
- title: 'login',
92
- scan: 'Scan QR code with DID Wallet',
93
- confirm: 'Confirm login on your DID Wallet',
94
- success: 'You have successfully signed in!',
95
- }}
96
- webWalletUrl={webWalletUrl}
97
- />
98
- ```
99
-
100
- ### DidAvatar
101
-
102
- ```jsx
103
- <DidAvatar did={userDid} size={256} />
104
- ```
105
-
106
- ### DidButton
107
-
108
- ```jsx
109
- <ConnectButton size="large" />
110
- <ConnectButton size="medium" />
111
- <ConnectButton size="small" />
112
- <ConnectButton>Custom Text</ConnectButton>
113
- ```
114
-
115
- ### DIDLogo
116
-
117
- ```jsx
118
- <DIDLogo size={32} />
119
- ```
120
-
121
- ### DidAddress
122
-
123
- ```jsx
124
- <DidAddress did={userDid} size={32} />
125
- ```
126
-
127
- ### SessionManager
128
-
129
- ```jsx
130
- <SessionProvider serviceHost={get(window, 'blocklet.prefix', '/')} webWalletUrl={webWalletUrl}>
131
- <SessionConsumer>{(value) => <SessionManager session={value.session} />}</SessionConsumer>
132
- ...
133
- </SessionProvider>
134
- ```