@arcblock/did-connect-react 3.5.2 → 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 (171) 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 -136774
  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/node_modules/@blocklet/js-sdk/dist/index.js +0 -512
  169. package/lib/packages/did-connect/package.json.js +0 -7
  170. package/lib/types.d.ts +0 -355
  171. package/lib/utils.js +0 -225
@@ -0,0 +1,13 @@
1
+ import type { ConnectConfig, HttpAdapter, RealtimeAdapter, StorageAdapter } from '@arcblock/did-connect-core';
2
+ export interface ConnectContextValue {
3
+ config: ConnectConfig;
4
+ http: HttpAdapter;
5
+ storage: StorageAdapter;
6
+ realtime?: RealtimeAdapter;
7
+ }
8
+ export declare const ConnectContext: import("react").Context<ConnectContextValue | null>;
9
+ /**
10
+ * Access the ConnectProvider context. Throws if used outside a provider.
11
+ */
12
+ export declare function useConnectContext(): ConnectContextValue;
13
+ //# sourceMappingURL=ConnectContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectContext.d.ts","sourceRoot":"","sources":["../src/ConnectContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG9G,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED,eAAO,MAAM,cAAc,qDAAkD,CAAC;AAE9E;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,mBAAmB,CASvD"}
@@ -0,0 +1,14 @@
1
+ import { createContext, useContext } from 'react';
2
+ export const ConnectContext = createContext(null);
3
+ /**
4
+ * Access the ConnectProvider context. Throws if used outside a provider.
5
+ */
6
+ export function useConnectContext() {
7
+ const ctx = useContext(ConnectContext);
8
+ if (!ctx) {
9
+ throw new Error('useConnectContext must be used within a <ConnectProvider>. ' +
10
+ 'Wrap your app with <ConnectProvider config={...}>.');
11
+ }
12
+ return ctx;
13
+ }
14
+ //# sourceMappingURL=ConnectContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectContext.js","sourceRoot":"","sources":["../src/ConnectContext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AASlD,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAA6B,IAAI,CAAC,CAAC;AAE9E;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,6DAA6D;YAC7D,oDAAoD,CACrD,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ConnectConfig, HttpAdapter, RealtimeAdapter, StorageAdapter } from '@arcblock/did-connect-core';
2
+ import type React from 'react';
3
+ export interface ConnectProviderProps {
4
+ config?: ConnectConfig;
5
+ http?: HttpAdapter;
6
+ storage?: StorageAdapter;
7
+ realtime?: RealtimeAdapter;
8
+ children: React.ReactNode;
9
+ }
10
+ export declare function ConnectProvider({ config: configProp, http, storage, realtime, children, }: ConnectProviderProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=ConnectProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectProvider.d.ts","sourceRoot":"","sources":["../src/ConnectProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE9G,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EAAE,UAAU,EAClB,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,QAAQ,GACT,EAAE,oBAAoB,2CAuBtB"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { FetchHttpAdapter } from '@arcblock/did-connect-core';
3
+ import { useMemo } from 'react';
4
+ import { ConnectContext } from './ConnectContext.js';
5
+ import { buildConfigFromBlocklet } from './internals/blocklet-config.js';
6
+ import { LocalStorageAdapter } from './internals/local-storage-adapter.js';
7
+ export function ConnectProvider({ config: configProp, http, storage, realtime, children, }) {
8
+ const value = useMemo(() => {
9
+ const config = configProp ?? buildConfigFromBlocklet();
10
+ if (!config) {
11
+ throw new Error('ConnectProvider: no config provided and window.blocklet not found. ' +
12
+ 'Pass a config prop or ensure window.blocklet is set.');
13
+ }
14
+ return {
15
+ config,
16
+ http: http ?? new FetchHttpAdapter(),
17
+ storage: storage ?? new LocalStorageAdapter(),
18
+ realtime,
19
+ };
20
+ }, [configProp, http, storage, realtime]);
21
+ return (_jsx(ConnectContext.Provider, { value: value, children: children }));
22
+ }
23
+ //# sourceMappingURL=ConnectProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectProvider.js","sourceRoot":"","sources":["../src/ConnectProvider.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAU3E,MAAM,UAAU,eAAe,CAAC,EAC9B,MAAM,EAAE,UAAU,EAClB,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,QAAQ,GACa;IACrB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE;QACzB,MAAM,MAAM,GAAG,UAAU,IAAI,uBAAuB,EAAE,CAAC;QACvD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,qEAAqE;gBACrE,sDAAsD,CACvD,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM;YACN,IAAI,EAAE,IAAI,IAAI,IAAI,gBAAgB,EAAE;YACpC,OAAO,EAAE,OAAO,IAAI,IAAI,mBAAmB,EAAE;YAC7C,QAAQ;SACT,CAAC;IACJ,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE1C,OAAO,CACL,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAClC,QAAQ,GACe,CAC3B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { HttpAdapter, RealtimeAdapter, StorageAdapter } from '@arcblock/did-connect-core';
2
+ import type React from 'react';
3
+ export interface SessionProviderProps {
4
+ serviceHost?: string;
5
+ prefix?: string;
6
+ action?: string;
7
+ timeout?: number;
8
+ http?: HttpAdapter;
9
+ storage?: StorageAdapter;
10
+ realtime?: RealtimeAdapter;
11
+ children: React.ReactNode;
12
+ appendAuthServicePrefix?: boolean;
13
+ apiOptions?: any;
14
+ protectedRoutes?: string[];
15
+ lazyRefreshToken?: boolean;
16
+ autoDisconnect?: boolean;
17
+ }
18
+ /**
19
+ * 3.x-compatible SessionProvider that maps legacy props to ConnectProvider.
20
+ */
21
+ export declare function SessionProvider({ serviceHost, prefix, action, timeout, http, storage, realtime, children, }: SessionProviderProps): import("react/jsx-runtime").JSX.Element;
22
+ //# sourceMappingURL=SessionProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionProvider.d.ts","sourceRoot":"","sources":["../../src/compat/SessionProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9G,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC9B,WAAW,EACX,MAAM,EACN,MAAM,EACN,OAAO,EACP,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,QAAQ,GACT,EAAE,oBAAoB,2CAetB"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ConnectProvider } from '../ConnectProvider.js';
3
+ /**
4
+ * 3.x-compatible SessionProvider that maps legacy props to ConnectProvider.
5
+ */
6
+ export function SessionProvider({ serviceHost, prefix, action, timeout, http, storage, realtime, children, }) {
7
+ const config = {
8
+ appPid: serviceHost ?? '',
9
+ appName: '',
10
+ apiPrefix: prefix ? `${prefix}/api/did` : '/api/did',
11
+ servicePrefix: prefix ?? '/.well-known/service',
12
+ action,
13
+ tokenTimeout: timeout,
14
+ };
15
+ return (_jsx(ConnectProvider, { config: config, http: http, storage: storage, realtime: realtime, children: children }));
16
+ }
17
+ //# sourceMappingURL=SessionProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionProvider.js","sourceRoot":"","sources":["../../src/compat/SessionProvider.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAmBxD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,WAAW,EACX,MAAM,EACN,MAAM,EACN,OAAO,EACP,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,QAAQ,GACa;IACrB,MAAM,MAAM,GAAkB;QAC5B,MAAM,EAAE,WAAW,IAAI,EAAE;QACzB,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,UAAU;QACpD,aAAa,EAAE,MAAM,IAAI,sBAAsB;QAC/C,MAAM;QACN,YAAY,EAAE,OAAO;KACtB,CAAC;IAEF,OAAO,CACL,KAAC,eAAe,IAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,YAC9E,QAAQ,GACO,CACnB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export type { SessionProviderProps } from './SessionProvider.js';
2
+ export { SessionProvider } from './SessionProvider.js';
3
+ export { useSessionContext } from './useSessionContext.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compat/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { SessionProvider } from './SessionProvider.js';
2
+ export { useSessionContext } from './useSessionContext.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/compat/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * 3.x-compatible hook returning a structure similar to the old useSessionContext.
3
+ */
4
+ export declare function useSessionContext(): {
5
+ session: import("@arcblock/did-connect-core").UserInfo | null;
6
+ loading: boolean;
7
+ initialized: boolean;
8
+ error: string | null;
9
+ connectApi: {
10
+ open: (params?: import("@arcblock/did-connect-core").CreateTokenParams) => Promise<import("@arcblock/did-connect-core").TokenState>;
11
+ };
12
+ logout: () => Promise<void>;
13
+ };
14
+ //# sourceMappingURL=useSessionContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSessionContext.d.ts","sourceRoot":"","sources":["../../src/compat/useSessionContext.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,iBAAiB;;;;;;;;;EAchC"}
@@ -0,0 +1,20 @@
1
+ import { useConnect } from '../hooks/useConnect.js';
2
+ import { useSession } from '../hooks/useSession.js';
3
+ /**
4
+ * 3.x-compatible hook returning a structure similar to the old useSessionContext.
5
+ */
6
+ export function useSessionContext() {
7
+ const session = useSession();
8
+ const connect = useConnect();
9
+ return {
10
+ session: session.user,
11
+ loading: session.loading,
12
+ initialized: session.initialized,
13
+ error: session.error,
14
+ connectApi: {
15
+ open: connect.create,
16
+ },
17
+ logout: session.logout,
18
+ };
19
+ }
20
+ //# sourceMappingURL=useSessionContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSessionContext.js","sourceRoot":"","sources":["../../src/compat/useSessionContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,IAAI;QACrB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,UAAU,EAAE;YACV,IAAI,EAAE,OAAO,CAAC,MAAM;SACrB;QACD,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { OAuthProvider } from '@arcblock/did-connect-core';
2
+ export interface LoginPageProps {
3
+ methods?: Array<'passkey' | 'did-connect' | 'oauth' | 'email'>;
4
+ oauthProviders?: OAuthProvider[];
5
+ locale?: string;
6
+ onSuccess?: () => void;
7
+ onError?: (error: Error) => void;
8
+ appName?: string;
9
+ appLogo?: string;
10
+ privacyUrl?: string;
11
+ termsUrl?: string;
12
+ theme?: 'light' | 'dark' | 'auto';
13
+ }
14
+ export declare function LoginPage({ methods, oauthProviders, locale, onSuccess, onError, appName, appLogo, privacyUrl, termsUrl, theme, }: LoginPageProps): import("react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=LoginPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginPage.d.ts","sourceRoot":"","sources":["../../src/components/LoginPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAIhE,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;IAC/D,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;CACnC;AAED,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,cAAc,EACd,MAAM,EACN,SAAS,EACT,OAAO,EACP,OAAO,EACP,OAAO,EACP,UAAU,EACV,QAAQ,EACR,KAAK,GACN,EAAE,cAAc,2CAwChB"}
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useRef } from 'react';
3
+ import { useConnectContext } from '../ConnectContext.js';
4
+ export function LoginPage({ methods, oauthProviders, locale, onSuccess, onError, appName, appLogo, privacyUrl, termsUrl, theme, }) {
5
+ const { config, http } = useConnectContext();
6
+ const containerRef = useRef(null);
7
+ const pageRef = useRef(null);
8
+ useEffect(() => {
9
+ let cancelled = false;
10
+ (async () => {
11
+ try {
12
+ const { LoginPage: CoreLoginPage } = await import('@arcblock/did-connect-core/ui');
13
+ if (cancelled || !containerRef.current)
14
+ return;
15
+ const page = new CoreLoginPage(containerRef.current, config, http, { methods, oauthProviders, locale, onSuccess, onError, appName, appLogo, privacyUrl, termsUrl, theme });
16
+ page.mount();
17
+ pageRef.current = page;
18
+ }
19
+ catch (err) {
20
+ onError?.(err instanceof Error ? err : new Error(String(err)));
21
+ }
22
+ })();
23
+ return () => {
24
+ cancelled = true;
25
+ if (pageRef.current) {
26
+ pageRef.current.destroy();
27
+ pageRef.current = null;
28
+ }
29
+ };
30
+ }, []);
31
+ return _jsx("div", { ref: containerRef });
32
+ }
33
+ //# sourceMappingURL=LoginPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginPage.js","sourceRoot":"","sources":["../../src/components/LoginPage.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAezD,MAAM,UAAU,SAAS,CAAC,EACxB,OAAO,EACP,cAAc,EACd,MAAM,EACN,SAAS,EACT,OAAO,EACP,OAAO,EACP,OAAO,EACP,UAAU,EACV,QAAQ,EACR,KAAK,GACU;IACf,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAC7C,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,CAAM,IAAI,CAAC,CAAC;IAElC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,CAAC,KAAK,IAAI,EAAE;YACV,IAAI,CAAC;gBACH,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAC/C,+BAA+B,CAChC,CAAC;gBAEF,IAAI,SAAS,IAAI,CAAC,YAAY,CAAC,OAAO;oBAAE,OAAO;gBAE/C,MAAM,IAAI,GAAG,IAAI,aAAa,CAC5B,YAAY,CAAC,OAAO,EACpB,MAAM,EACN,IAAI,EACJ,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CACvG,CAAC;gBAEF,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YACzB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,EAAE,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;YACjB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC1B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YACzB,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,cAAK,GAAG,EAAE,YAAY,GAAI,CAAC;AACpC,CAAC"}
@@ -0,0 +1,19 @@
1
+ export interface UserAvatarProps {
2
+ /** Avatar image URL. Falls back to initials if empty or on error. */
3
+ src?: string | null;
4
+ /** User's full name — used for initials fallback. */
5
+ name?: string | null;
6
+ /** User's DID — used for default avatar endpoint fallback. */
7
+ did?: string | null;
8
+ /** Size in pixels (default: 40). */
9
+ size?: number;
10
+ /** Additional className for the container. */
11
+ className?: string;
12
+ }
13
+ /**
14
+ * UserAvatar — displays user avatar with automatic fallback to initials.
15
+ *
16
+ * Priority: src prop → /.well-known/service/avatar/:did → initials from name → "?"
17
+ */
18
+ export declare function UserAvatar({ src, name, did, size, className }: UserAvatarProps): import("react/jsx-runtime").JSX.Element;
19
+ //# sourceMappingURL=UserAvatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserAvatar.d.ts","sourceRoot":"","sources":["../../src/components/UserAvatar.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,8DAA8D;IAC9D,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAS,EAAE,SAAS,EAAE,EAAE,eAAe,2CAyCnF"}
@@ -0,0 +1,45 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback, useState } from 'react';
3
+ /**
4
+ * UserAvatar — displays user avatar with automatic fallback to initials.
5
+ *
6
+ * Priority: src prop → /.well-known/service/avatar/:did → initials from name → "?"
7
+ */
8
+ export function UserAvatar({ src, name, did, size = 40, className }) {
9
+ const [imgFailed, setImgFailed] = useState(false);
10
+ const handleError = useCallback(() => {
11
+ setImgFailed(true);
12
+ }, []);
13
+ const avatarUrl = src || (did ? `/.well-known/service/avatar/${did}` : null);
14
+ const showImg = avatarUrl && !imgFailed;
15
+ const initialsText = getInitials(name);
16
+ const containerStyle = {
17
+ width: size,
18
+ height: size,
19
+ borderRadius: '50%',
20
+ overflow: 'hidden',
21
+ display: 'inline-flex',
22
+ alignItems: 'center',
23
+ justifyContent: 'center',
24
+ flexShrink: 0,
25
+ fontSize: size * 0.4,
26
+ fontWeight: 600,
27
+ backgroundColor: showImg ? 'transparent' : '#3b82f6',
28
+ color: 'white',
29
+ };
30
+ const imgStyle = {
31
+ width: '100%',
32
+ height: '100%',
33
+ objectFit: 'cover',
34
+ };
35
+ return (_jsx("div", { style: containerStyle, className: className, children: showImg ? (_jsx("img", { src: avatarUrl, alt: name || 'avatar', style: imgStyle, onError: handleError })) : (_jsx("span", { children: initialsText })) }));
36
+ }
37
+ function getInitials(name) {
38
+ if (!name)
39
+ return '?';
40
+ const parts = name.trim().split(/\s+/);
41
+ if (parts.length >= 2)
42
+ return (parts[0][0] + parts[1][0]).toUpperCase();
43
+ return name.slice(0, 2).toUpperCase();
44
+ }
45
+ //# sourceMappingURL=UserAvatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserAvatar.js","sourceRoot":"","sources":["../../src/components/UserAvatar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAe9C;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,EAAmB;IAClF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,YAAY,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC,SAAS,CAAC;IACxC,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAEvC,MAAM,cAAc,GAAwB;QAC1C,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,KAAK;QACnB,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,aAAa;QACtB,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,UAAU,EAAE,CAAC;QACb,QAAQ,EAAE,IAAI,GAAG,GAAG;QACpB,UAAU,EAAE,GAAG;QACf,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QACpD,KAAK,EAAE,OAAO;KACf,CAAC;IAEF,MAAM,QAAQ,GAAwB;QACpC,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,OAAO;KACnB,CAAC;IAEF,OAAO,CACL,cAAK,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,YAC7C,OAAO,CAAC,CAAC,CAAC,CACT,cAAK,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,IAAI,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,GAAI,CACtF,CAAC,CAAC,CAAC,CACF,yBAAO,YAAY,GAAQ,CAC5B,GACG,CACP,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,IAAoB;IACvC,IAAI,CAAC,IAAI;QAAE,OAAO,GAAG,CAAC;IACtB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5E,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AACxC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type { UseConnectOptions, UseConnectReturn } from './useConnect.js';
2
+ export { useConnect } from './useConnect.js';
3
+ export type { UseEmailReturn } from './useEmail.js';
4
+ export { useEmail } from './useEmail.js';
5
+ export type { UseOAuthReturn } from './useOAuth.js';
6
+ export { useOAuth } from './useOAuth.js';
7
+ export type { UsePasskeyReturn } from './usePasskey.js';
8
+ export { usePasskey } from './usePasskey.js';
9
+ export type { UseSessionReturn } from './useSession.js';
10
+ export { useSession } from './useSession.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { useConnect } from './useConnect.js';
2
+ export { useEmail } from './useEmail.js';
3
+ export { useOAuth } from './useOAuth.js';
4
+ export { usePasskey } from './usePasskey.js';
5
+ export { useSession } from './useSession.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { CreateTokenParams, TokenState } from '@arcblock/did-connect-core';
2
+ export interface UseConnectOptions {
3
+ action?: string;
4
+ tokenDelivery?: 'cookie' | 'response';
5
+ }
6
+ export interface UseConnectReturn {
7
+ state: Readonly<TokenState>;
8
+ create: (params?: CreateTokenParams) => Promise<TokenState>;
9
+ cancel: () => Promise<void>;
10
+ reset: () => void;
11
+ startPolling: () => void;
12
+ stopPolling: () => void;
13
+ }
14
+ export declare function useConnect(options?: UseConnectOptions): UseConnectReturn;
15
+ //# sourceMappingURL=useConnect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConnect.d.ts","sourceRoot":"","sources":["../../src/hooks/useConnect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAMhF,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5B,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAID,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,CAuBxE"}
@@ -0,0 +1,19 @@
1
+ import { TokenSession } from '@arcblock/did-connect-core';
2
+ import { useCallback } from 'react';
3
+ import { useConnectContext } from '../ConnectContext.js';
4
+ import { useSyncState } from '../internals/use-sync-state.js';
5
+ const TOKEN_EVENTS = ['statusChange', 'error', 'succeed', 'timeout'];
6
+ export function useConnect(options) {
7
+ const { config, http, storage, realtime } = useConnectContext();
8
+ const mergedConfig = options
9
+ ? { ...config, action: options.action ?? config.action, tokenDelivery: options.tokenDelivery ?? config.tokenDelivery }
10
+ : config;
11
+ const [state, session, sync] = useSyncState(() => new TokenSession(mergedConfig, http, { realtime, storage }), TOKEN_EVENTS);
12
+ const create = useCallback((params) => session.create(params), [session]);
13
+ const cancel = useCallback(() => session.cancel(), [session]);
14
+ const reset = useCallback(() => { session.reset(); sync(); }, [session, sync]);
15
+ const startPolling = useCallback(() => session.startPolling(), [session]);
16
+ const stopPolling = useCallback(() => session.stopPolling(), [session]);
17
+ return { state, create, cancel, reset, startPolling, stopPolling };
18
+ }
19
+ //# sourceMappingURL=useConnect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConnect.js","sourceRoot":"","sources":["../../src/hooks/useConnect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAgB9D,MAAM,YAAY,GAAG,CAAC,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAErE,MAAM,UAAU,UAAU,CAAC,OAA2B;IACpD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAEhE,MAAM,YAAY,GAAG,OAAO;QAC1B,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,EAAE;QACtH,CAAC,CAAC,MAAM,CAAC;IAEX,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,YAAY,CACzC,GAAG,EAAE,CAAC,IAAI,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EACjE,YAAY,CACb,CAAC;IAEF,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,MAA0B,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EACtD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/E,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1E,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAExE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;AACrE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { AuthResult } from '@arcblock/did-connect-core';
2
+ export interface UseEmailReturn {
3
+ loading: boolean;
4
+ error: string | null;
5
+ codeSent: boolean;
6
+ codeId: string | null;
7
+ sendCode: (email: string, locale?: string) => Promise<void>;
8
+ login: (code: string) => Promise<AuthResult>;
9
+ }
10
+ export declare function useEmail(): UseEmailReturn;
11
+ //# sourceMappingURL=useEmail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEmail.d.ts","sourceRoot":"","sources":["../../src/hooks/useEmail.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAK7D,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CAC9C;AAED,wBAAgB,QAAQ,IAAI,cAAc,CAgDzC"}
@@ -0,0 +1,47 @@
1
+ import { EmailFlow } from '@arcblock/did-connect-core';
2
+ import { useCallback, useRef, useState } from 'react';
3
+ import { useConnectContext } from '../ConnectContext.js';
4
+ export function useEmail() {
5
+ const { config, http } = useConnectContext();
6
+ const flowRef = useRef(null);
7
+ if (!flowRef.current) {
8
+ flowRef.current = new EmailFlow(config, http);
9
+ }
10
+ const flow = flowRef.current;
11
+ const [loading, setLoading] = useState(false);
12
+ const [error, setError] = useState(null);
13
+ const [codeSent, setCodeSent] = useState(false);
14
+ const [codeId, setCodeId] = useState(null);
15
+ const sendCode = useCallback(async (email, locale) => {
16
+ setLoading(true);
17
+ setError(null);
18
+ try {
19
+ const result = await flow.sendCode(email, locale);
20
+ setCodeId(result.id);
21
+ setCodeSent(true);
22
+ }
23
+ catch (err) {
24
+ setError(err?.message ?? 'Failed to send code');
25
+ throw err;
26
+ }
27
+ finally {
28
+ setLoading(false);
29
+ }
30
+ }, [flow]);
31
+ const login = useCallback(async (code) => {
32
+ setLoading(true);
33
+ setError(null);
34
+ try {
35
+ return await flow.login({ code });
36
+ }
37
+ catch (err) {
38
+ setError(err?.message ?? 'Login failed');
39
+ throw err;
40
+ }
41
+ finally {
42
+ setLoading(false);
43
+ }
44
+ }, [flow]);
45
+ return { loading, error, codeSent, codeId, sendCode, login };
46
+ }
47
+ //# sourceMappingURL=useEmail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEmail.js","sourceRoot":"","sources":["../../src/hooks/useEmail.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAWzD,MAAM,UAAU,QAAQ;IACtB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,OAAO,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAE7B,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;IACxD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAE1D,MAAM,QAAQ,GAAG,WAAW,CAC1B,KAAK,EAAE,KAAa,EAAE,MAAe,EAAE,EAAE;QACvC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAClD,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrB,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,QAAQ,CAAC,GAAG,EAAE,OAAO,IAAI,qBAAqB,CAAC,CAAC;YAChD,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EACD,CAAC,IAAI,CAAC,CACP,CAAC;IAEF,MAAM,KAAK,GAAG,WAAW,CACvB,KAAK,EAAE,IAAY,EAAE,EAAE;QACrB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,QAAQ,CAAC,GAAG,EAAE,OAAO,IAAI,cAAc,CAAC,CAAC;YACzC,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EACD,CAAC,IAAI,CAAC,CACP,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { AuthResult, OAuthProvider } from '@arcblock/did-connect-core';
2
+ export interface UseOAuthReturn {
3
+ providers: OAuthProvider[];
4
+ loading: boolean;
5
+ error: string | null;
6
+ login: (provider: string) => Promise<AuthResult>;
7
+ bind: (provider: string) => Promise<AuthResult>;
8
+ unbind: (provider: string, accountDid: string) => Promise<AuthResult>;
9
+ loadProviders: () => Promise<void>;
10
+ }
11
+ export declare function useOAuth(): UseOAuthReturn;
12
+ //# sourceMappingURL=useOAuth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOAuth.d.ts","sourceRoot":"","sources":["../../src/hooks/useOAuth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAK5E,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACtE,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED,wBAAgB,QAAQ,IAAI,cAAc,CA0FzC"}
@@ -0,0 +1,75 @@
1
+ import { OAuthFlow, openPopup, waitForPopupMessage } from '@arcblock/did-connect-core';
2
+ import { useCallback, useRef, useState } from 'react';
3
+ import { useConnectContext } from '../ConnectContext.js';
4
+ export function useOAuth() {
5
+ const { config, http } = useConnectContext();
6
+ const flowRef = useRef(null);
7
+ if (!flowRef.current) {
8
+ flowRef.current = new OAuthFlow(config, http);
9
+ }
10
+ const flow = flowRef.current;
11
+ const [providers, setProviders] = useState([]);
12
+ const [loading, setLoading] = useState(false);
13
+ const [error, setError] = useState(null);
14
+ const loadProviders = useCallback(async () => {
15
+ setLoading(true);
16
+ setError(null);
17
+ try {
18
+ const result = await flow.getProviders();
19
+ setProviders(result);
20
+ }
21
+ catch (err) {
22
+ setError(err?.message ?? 'Failed to load providers');
23
+ }
24
+ finally {
25
+ setLoading(false);
26
+ }
27
+ }, [flow]);
28
+ const doPopupFlow = useCallback(async (provider, exchange) => {
29
+ setLoading(true);
30
+ setError(null);
31
+ try {
32
+ const servicePrefix = config.servicePrefix ?? '/.well-known/service';
33
+ const url = `${servicePrefix}/api/oauth/${provider}/login`;
34
+ const popup = openPopup(url);
35
+ if (!popup) {
36
+ throw new Error('Popup blocked by browser');
37
+ }
38
+ const data = await waitForPopupMessage(popup, {
39
+ origin: window.location.origin,
40
+ });
41
+ const code = data?.code;
42
+ if (!code) {
43
+ throw new Error('No authorization code received from popup');
44
+ }
45
+ const result = await exchange(provider, code);
46
+ return result;
47
+ }
48
+ catch (err) {
49
+ const msg = err?.message ?? 'OAuth flow failed';
50
+ setError(msg);
51
+ throw err;
52
+ }
53
+ finally {
54
+ setLoading(false);
55
+ }
56
+ }, [config.servicePrefix]);
57
+ const login = useCallback((provider) => doPopupFlow(provider, (p, code) => flow.exchangeCode(p, code)), [doPopupFlow, flow]);
58
+ const bind = useCallback((provider) => doPopupFlow(provider, (p, code) => flow.bind(p, code)), [doPopupFlow, flow]);
59
+ const unbind = useCallback(async (provider, accountDid) => {
60
+ setLoading(true);
61
+ setError(null);
62
+ try {
63
+ return await flow.unbind(provider, accountDid);
64
+ }
65
+ catch (err) {
66
+ setError(err?.message ?? 'Unbind failed');
67
+ throw err;
68
+ }
69
+ finally {
70
+ setLoading(false);
71
+ }
72
+ }, [flow]);
73
+ return { providers, loading, error, login, bind, unbind, loadProviders };
74
+ }
75
+ //# sourceMappingURL=useOAuth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOAuth.js","sourceRoot":"","sources":["../../src/hooks/useOAuth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface UsePasskeyReturn {
2
+ loading: boolean;
3
+ error: string | null;
4
+ authenticate: () => Promise<{
5
+ success: boolean;
6
+ error?: string;
7
+ }>;
8
+ register: (name?: string) => Promise<{
9
+ success: boolean;
10
+ error?: string;
11
+ }>;
12
+ }
13
+ export declare function usePasskey(): UsePasskeyReturn;
14
+ //# sourceMappingURL=usePasskey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePasskey.d.ts","sourceRoot":"","sources":["../../src/hooks/usePasskey.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5E;AAED,wBAAgB,UAAU,IAAI,gBAAgB,CA8C7C"}