@arcblock/did-connect-react 3.4.14 → 3.5.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 (208) hide show
  1. package/dist/standalone/did-connect-react.css +1 -0
  2. package/dist/standalone/index.js +133700 -0
  3. package/lib/Connect/components/login-item/connect-choose-list.js +111 -111
  4. package/lib/Connect/components/login-item/connect-provider-list.js +180 -180
  5. package/lib/Connect/components/login-item/mobile-login-item.js +56 -56
  6. package/lib/Connect/components/login-item/passkey-login-item.js +27 -29
  7. package/lib/Connect/components/login-item/web-login-item.js +31 -29
  8. package/lib/Connect/connect.js +202 -197
  9. package/lib/Connect/contexts/state.js +19 -17
  10. package/lib/Connect/hooks/provider-list.js +33 -33
  11. package/lib/Connect/plugins/email/list-item.js +14 -14
  12. package/lib/Connect/plugins/email/placeholder.js +77 -76
  13. package/lib/package.json.js +1 -1
  14. package/package.json +14 -9
  15. package/.aigne/doc-smith/config.yaml +0 -85
  16. package/.aigne/doc-smith/history.yaml +0 -6
  17. package/.aigne/doc-smith/output/structure-plan.json +0 -204
  18. package/.aigne/doc-smith/translation-cache.yaml +0 -11
  19. package/.aigne/doc-smith/upload-cache.yaml +0 -213
  20. package/docs/_sidebar.md +0 -18
  21. package/docs/advanced-authentication-methods.ja.md +0 -261
  22. package/docs/advanced-authentication-methods.md +0 -261
  23. package/docs/advanced-authentication-methods.zh-TW.md +0 -261
  24. package/docs/advanced-authentication-methods.zh.md +0 -261
  25. package/docs/advanced-utilities.ja.md +0 -132
  26. package/docs/advanced-utilities.md +0 -132
  27. package/docs/advanced-utilities.zh-TW.md +0 -132
  28. package/docs/advanced-utilities.zh.md +0 -132
  29. package/docs/advanced.ja.md +0 -95
  30. package/docs/advanced.md +0 -95
  31. package/docs/advanced.zh-TW.md +0 -95
  32. package/docs/advanced.zh.md +0 -95
  33. package/docs/api-reference.ja.md +0 -178
  34. package/docs/api-reference.md +0 -178
  35. package/docs/api-reference.zh-TW.md +0 -178
  36. package/docs/api-reference.zh.md +0 -178
  37. package/docs/assets/diagram/core-components-session-provider-01.ja.jpg +0 -0
  38. package/docs/assets/diagram/core-components-session-provider-01.jpg +0 -0
  39. package/docs/assets/diagram/core-components-session-provider-01.zh-TW.jpg +0 -0
  40. package/docs/assets/diagram/core-components-session-provider-01.zh.jpg +0 -0
  41. package/docs/assets/diagram/did-connect-diagram-0.ja.jpg +0 -0
  42. package/docs/assets/diagram/did-connect-diagram-0.jpg +0 -0
  43. package/docs/assets/diagram/did-connect-diagram-0.zh-TW.jpg +0 -0
  44. package/docs/assets/diagram/did-connect-diagram-0.zh.jpg +0 -0
  45. package/docs/assets/diagram/overview-01.ja.jpg +0 -0
  46. package/docs/assets/diagram/overview-01.jpg +0 -0
  47. package/docs/assets/diagram/overview-01.zh-TW.jpg +0 -0
  48. package/docs/assets/diagram/overview-01.zh.jpg +0 -0
  49. package/docs/assets/diagram/use-connect-diagram-0.ja.jpg +0 -0
  50. package/docs/assets/diagram/use-connect-diagram-0.jpg +0 -0
  51. package/docs/assets/diagram/use-connect-diagram-0.zh-TW.jpg +0 -0
  52. package/docs/assets/diagram/use-connect-diagram-0.zh.jpg +0 -0
  53. package/docs/core-components-did-connect.ja.md +0 -166
  54. package/docs/core-components-did-connect.md +0 -166
  55. package/docs/core-components-did-connect.zh-TW.md +0 -166
  56. package/docs/core-components-did-connect.zh.md +0 -166
  57. package/docs/core-components-session-provider.ja.md +0 -197
  58. package/docs/core-components-session-provider.md +0 -197
  59. package/docs/core-components-session-provider.zh-TW.md +0 -197
  60. package/docs/core-components-session-provider.zh.md +0 -197
  61. package/docs/core-components.ja.md +0 -16
  62. package/docs/core-components.md +0 -16
  63. package/docs/core-components.zh-TW.md +0 -16
  64. package/docs/core-components.zh.md +0 -16
  65. package/docs/getting-started.ja.md +0 -138
  66. package/docs/getting-started.md +0 -138
  67. package/docs/getting-started.zh-TW.md +0 -138
  68. package/docs/getting-started.zh.md +0 -138
  69. package/docs/hooks-use-connect.ja.md +0 -178
  70. package/docs/hooks-use-connect.md +0 -178
  71. package/docs/hooks-use-connect.zh-TW.md +0 -178
  72. package/docs/hooks-use-connect.zh.md +0 -178
  73. package/docs/hooks-use-did.ja.md +0 -107
  74. package/docs/hooks-use-did.md +0 -107
  75. package/docs/hooks-use-did.zh-TW.md +0 -107
  76. package/docs/hooks-use-did.zh.md +0 -107
  77. package/docs/hooks-use-oauth-passkey.ja.md +0 -188
  78. package/docs/hooks-use-oauth-passkey.md +0 -188
  79. package/docs/hooks-use-oauth-passkey.zh-TW.md +0 -188
  80. package/docs/hooks-use-oauth-passkey.zh.md +0 -188
  81. package/docs/hooks.ja.md +0 -23
  82. package/docs/hooks.md +0 -23
  83. package/docs/hooks.zh-TW.md +0 -23
  84. package/docs/hooks.zh.md +0 -23
  85. package/docs/overview.ja.md +0 -119
  86. package/docs/overview.md +0 -119
  87. package/docs/overview.zh-TW.md +0 -119
  88. package/docs/overview.zh.md +0 -119
  89. package/docs/ui-components-address.ja.md +0 -121
  90. package/docs/ui-components-address.md +0 -121
  91. package/docs/ui-components-address.zh-TW.md +0 -121
  92. package/docs/ui-components-address.zh.md +0 -121
  93. package/docs/ui-components-avatar.ja.md +0 -65
  94. package/docs/ui-components-avatar.md +0 -65
  95. package/docs/ui-components-avatar.zh-TW.md +0 -65
  96. package/docs/ui-components-avatar.zh.md +0 -65
  97. package/docs/ui-components-button.ja.md +0 -99
  98. package/docs/ui-components-button.md +0 -99
  99. package/docs/ui-components-button.zh-TW.md +0 -99
  100. package/docs/ui-components-button.zh.md +0 -99
  101. package/docs/ui-components-logo.ja.md +0 -52
  102. package/docs/ui-components-logo.md +0 -52
  103. package/docs/ui-components-logo.zh-TW.md +0 -52
  104. package/docs/ui-components-logo.zh.md +0 -52
  105. package/docs/ui-components.ja.md +0 -57
  106. package/docs/ui-components.md +0 -57
  107. package/docs/ui-components.zh-TW.md +0 -57
  108. package/docs/ui-components.zh.md +0 -57
  109. package/glossary.md +0 -1
  110. package/src/Address/index.jsx +0 -2
  111. package/src/Avatar/index.jsx +0 -2
  112. package/src/Button/Button.stories.jsx +0 -7
  113. package/src/Button/index.jsx +0 -21
  114. package/src/Connect/Connect.stories.jsx +0 -34
  115. package/src/Connect/assets/locale.js +0 -149
  116. package/src/Connect/assets/login-bg.png +0 -0
  117. package/src/Connect/assets/login-slogan.js +0 -7
  118. package/src/Connect/components/action-button.jsx +0 -22
  119. package/src/Connect/components/app-tips.jsx +0 -156
  120. package/src/Connect/components/auto-height.jsx +0 -38
  121. package/src/Connect/components/back-button.jsx +0 -24
  122. package/src/Connect/components/connect-status.jsx +0 -259
  123. package/src/Connect/components/did-connect-title.jsx +0 -107
  124. package/src/Connect/components/download-tips.jsx +0 -55
  125. package/src/Connect/components/loading.jsx +0 -25
  126. package/src/Connect/components/login-item/connect-choose-list.jsx +0 -317
  127. package/src/Connect/components/login-item/connect-provider-list.jsx +0 -462
  128. package/src/Connect/components/login-item/login-method-item.jsx +0 -139
  129. package/src/Connect/components/login-item/mobile-login-item.jsx +0 -181
  130. package/src/Connect/components/login-item/passkey-login-item.jsx +0 -54
  131. package/src/Connect/components/login-item/wallet-login-options.jsx +0 -129
  132. package/src/Connect/components/login-item/web-login-item.jsx +0 -157
  133. package/src/Connect/components/mask-overlay.jsx +0 -32
  134. package/src/Connect/components/refresh-overlay.jsx +0 -52
  135. package/src/Connect/components/switch-app.jsx +0 -69
  136. package/src/Connect/connect.jsx +0 -617
  137. package/src/Connect/contexts/state.jsx +0 -234
  138. package/src/Connect/fallback-connect.jsx +0 -47
  139. package/src/Connect/fullpage.jsx +0 -3
  140. package/src/Connect/hooks/auth-url.js +0 -31
  141. package/src/Connect/hooks/method-list.js +0 -121
  142. package/src/Connect/hooks/page-show.js +0 -24
  143. package/src/Connect/hooks/provider-list.js +0 -165
  144. package/src/Connect/hooks/security.js +0 -40
  145. package/src/Connect/hooks/token.js +0 -627
  146. package/src/Connect/hooks/use-apps.js +0 -69
  147. package/src/Connect/hooks/use-quick-connect.js +0 -119
  148. package/src/Connect/index.jsx +0 -21
  149. package/src/Connect/landing-page.jsx +0 -3
  150. package/src/Connect/plugins/email/index.jsx +0 -85
  151. package/src/Connect/plugins/email/list-item.jsx +0 -34
  152. package/src/Connect/plugins/email/placeholder.jsx +0 -365
  153. package/src/Connect/plugins/index.js +0 -2
  154. package/src/Connect/use-connect.jsx +0 -321
  155. package/src/Connect/with-blocklet.jsx +0 -26
  156. package/src/Connect/with-bridge-call.jsx +0 -138
  157. package/src/Federated/context.jsx +0 -93
  158. package/src/Federated/index.jsx +0 -1
  159. package/src/Logo/index.jsx +0 -2
  160. package/src/OAuth/bind-conflict-alert.jsx +0 -37
  161. package/src/OAuth/context.jsx +0 -407
  162. package/src/OAuth/guest.svg +0 -20
  163. package/src/OAuth/index.jsx +0 -1
  164. package/src/OAuth/passport-switcher.jsx +0 -2
  165. package/src/Passkey/actions.jsx +0 -217
  166. package/src/Passkey/constants.js +0 -2
  167. package/src/Passkey/context.jsx +0 -395
  168. package/src/Passkey/dialog.jsx +0 -401
  169. package/src/Passkey/icon.jsx +0 -10
  170. package/src/Passkey/index.jsx +0 -2
  171. package/src/Service/index.jsx +0 -96
  172. package/src/Session/assets/did-spaces-guide-cover.svg +0 -1
  173. package/src/Session/assets/did-spaces-guide-icon.svg +0 -7
  174. package/src/Session/context.jsx +0 -7
  175. package/src/Session/did-spaces-guide.jsx +0 -173
  176. package/src/Session/handler.jsx +0 -98
  177. package/src/Session/hooks/use-federated.js +0 -91
  178. package/src/Session/hooks/use-mobile.jsx +0 -6
  179. package/src/Session/hooks/use-protected-routes.js +0 -16
  180. package/src/Session/hooks/use-session-token.js +0 -400
  181. package/src/Session/hooks/use-verify.jsx +0 -76
  182. package/src/Session/index.jsx +0 -1789
  183. package/src/Session/libs/constants.js +0 -17
  184. package/src/Session/libs/did-spaces.js +0 -38
  185. package/src/Session/libs/federated.js +0 -82
  186. package/src/Session/libs/index.js +0 -5
  187. package/src/Session/libs/locales.js +0 -160
  188. package/src/Session/libs/login-mobile.js +0 -80
  189. package/src/Session/window-focus-aware.jsx +0 -28
  190. package/src/SessionManager/index.jsx +0 -2
  191. package/src/Storage/engine/cookie.js +0 -25
  192. package/src/Storage/engine/local-storage.js +0 -57
  193. package/src/Storage/index.js +0 -25
  194. package/src/User/index.js +0 -4
  195. package/src/User/use-did.js +0 -80
  196. package/src/User/wrap-did.jsx +0 -18
  197. package/src/WebWalletSWKeeper/index.jsx +0 -3
  198. package/src/components/PassportSwitcher.jsx +0 -160
  199. package/src/constant.js +0 -27
  200. package/src/error.js +0 -6
  201. package/src/hooks/use-locale.jsx +0 -6
  202. package/src/index.js +0 -32
  203. package/src/locales/en.jsx +0 -15
  204. package/src/locales/index.jsx +0 -13
  205. package/src/locales/zh.jsx +0 -15
  206. package/src/types.d.ts +0 -355
  207. package/src/utils.js +0 -413
  208. package/vite.config.mjs +0 -29
@@ -1,107 +0,0 @@
1
- # useDid
2
-
3
- `useDid` hook 是一個方便的實用程式,可輕鬆地從 `session.user` 物件中提取和使用特定的 DID 相關資訊。它簡化了使用者物件的解析過程,無需手動處理即可獲取永久 DID、錢包資訊和已連接帳戶等常用資料。
4
-
5
- 此 hook 應在 `SessionProvider` 的子元件中使用,以確保它能存取 session 上下文。
6
-
7
- ## 如何使用
8
-
9
- 若要使用此 hook,請將其與 `useSession` 一起匯入。呼叫 `useSession` 以取得目前的 session 狀態,然後將 `session` 物件傳遞給 `useDid`。
10
-
11
- ```javascript Basic Usage icon=logos:react
12
- import { useSession } from '@arcblock/did-connect-react';
13
- import { useDid } from '@arcblock/did-connect-react/lib/User';
14
-
15
- function UserProfile() {
16
- const { session } = useSession();
17
- const {
18
- did,
19
- walletDid,
20
- connectedDids,
21
- sourceProvider,
22
- connectedAccounts,
23
- } = useDid({ session });
24
-
25
- if (!session.user) {
26
- return <p>請登入以查看您的 DID 資訊。</p>;
27
- }
28
-
29
- return (
30
- <div>
31
- <h2>使用者 DID 資訊</h2>
32
- <p><strong>永久 DID:</strong> {did}</p>
33
- <p><strong>錢包 DID:</strong> {walletDid || 'N/A'}</p>
34
- <p><strong>登入方式:</strong> {sourceProvider}</p>
35
- <h3>已連接的帳戶 ({connectedAccounts.length})</h3>
36
- <ul>
37
- {connectedAccounts.map((account) => (
38
- <li key={account.did}>
39
- {account.provider}: {account.did}
40
- </li>
41
- ))}
42
- </ul>
43
- </div>
44
- );
45
- }
46
- ```
47
-
48
- ## 參數
49
-
50
- `useDid` hook 接受一個物件作為其參數。
51
-
52
- <x-field data-name="options" data-type="object" data-required="true">
53
- <x-field data-name="session" data-type="object" data-required="true" data-desc="從 `useSession` hook 取得的 session 物件。只有當 `session.user` 存在時,此 hook 才會計算資料。">
54
- <x-field data-name="user" data-type="object" data-required="false" data-desc="成功登入後由 session 上下文提供的使用者物件。"></x-field>
55
- </x-field>
56
- </x-field>
57
-
58
- ## 傳回值
59
-
60
- 此 hook 會傳回一個狀態物件,其中包含各種衍生的 DID 資訊。每當 `session.user` 物件變更時,此物件都會更新。
61
-
62
- <x-field-group>
63
- <x-field data-name="did" data-type="string" data-desc="使用者的永久 DID。這是 `permanentDid` 的別名。"></x-field>
64
- <x-field data-name="wallet" data-type="object" data-desc="提供者為 'wallet' 的已連接帳戶物件。如果沒有連接錢包,則傳回 `undefined`。">
65
- <x-field data-name="did" data-type="string" data-desc="錢包帳戶的 DID。"></x-field>
66
- <x-field data-name="provider" data-type="string" data-desc="提供者名稱,此處為 'wallet'。"></x-field>
67
- </x-field>
68
- <x-field data-name="walletDid" data-type="string" data-desc="使用者已連接錢包的 DID。如果沒有連接錢包,則傳回 `undefined`。"></x-field>
69
- <x-field data-name="permanentDid" data-type="string" data-desc="使用者的永久 DID,即來自 `user.did` 的主要識別碼。"></x-field>
70
- <x-field data-name="connectedDids" data-type="string[]" data-desc="一個包含使用者所有已連接帳戶 DID 的陣列。"></x-field>
71
- <x-field data-name="connectedAccounts" data-type="object[]" data-desc="完整的已連接帳戶物件陣列。">
72
- <x-field data-name="did" data-type="string" data-desc="已連接帳戶的 DID。"></x-field>
73
- <x-field data-name="provider" data-type="string" data-desc="帳戶的提供者(例如 'wallet'、'github')。"></x-field>
74
- </x-field>
75
- <x-field data-name="sourceProvider" data-type="string" data-desc="使用者最初用於登入的提供者(例如 'wallet'、'github')。預設為 'wallet'。"></x-field>
76
- <x-field data-name="sourceProviders" data-type="string[]" data-desc="一個包含使用者所有已連接帳戶提供者名稱的陣列。"></x-field>
77
- </x-field-group>
78
-
79
- ## 獨立的輔助函數
80
-
81
- `useDid` hook 建立在一組匯出的輔助函數之上。如果您不需要 hook 的響應式狀態管理,而只想從使用者物件中提取特定資訊,可以直接匯入並使用這些函數。
82
-
83
- | Function | Description |
84
- | ------------------------ | ------------------------------------------------------------ |
85
- | `getPermanentDid(user)` | 從使用者物件中提取永久 DID。 |
86
- | `getWalletDid(user)` | 提取已連接錢包的 DID。 |
87
- | `getConnectedAccounts(user)` | 擷取已連接帳戶的陣列。 |
88
- | `getConnectedDids(user)` | 擷取一個包含所有已連接帳戶 DID 的陣列。 |
89
- | `getSourceProvider(user)` | 取得用於初始登入的提供者。 |
90
- | `getSourceProviders(user)` | 取得一個包含所有已連接提供者名稱的陣列。 |
91
- | `getWallet(user)` | 尋找並傳回完整的錢包帳戶物件。 |
92
-
93
- ### 範例:使用輔助函數
94
-
95
- ```javascript Direct Function Usage icon=logos:javascript
96
- import { getWalletDid } from '@arcblock/did-connect-react/lib/User/use-did';
97
- import { useSession } from '@arcblock/did-connect-react';
98
-
99
- // 這種方法在事件處理常式或其他非 React 函數中可能很有用
100
- function handleUserAction() {
101
- const { session } = useSession();
102
- if (session.user) {
103
- const walletDid = getWalletDid(session.user);
104
- console.log('使用者錢包 DID:', walletDid);
105
- }
106
- }
107
- ```
@@ -1,107 +0,0 @@
1
- # useDid
2
-
3
- `useDid` Hook 是一个便捷的实用程序,可以轻松地从 `session.user` 对象中提取和使用特定的 DID 相关信息。它简化了用户对象的解析过程,无需手动处理即可获取永久 DID、钱包信息和已连接账户等常用数据。
4
-
5
- 此 Hook 应在 `SessionProvider` 的子组件中使用,以确保其能够访问会话上下文。
6
-
7
- ## 如何使用
8
-
9
- 要使用此 Hook,请将其与 `useSession` 一起导入。调用 `useSession` 获取当前会话状态,然后将 `session` 对象传递给 `useDid`。
10
-
11
- ```javascript Basic Usage icon=logos:react
12
- import { useSession } from '@arcblock/did-connect-react';
13
- import { useDid } from '@arcblock/did-connect-react/lib/User';
14
-
15
- function UserProfile() {
16
- const { session } = useSession();
17
- const {
18
- did,
19
- walletDid,
20
- connectedDids,
21
- sourceProvider,
22
- connectedAccounts,
23
- } = useDid({ session });
24
-
25
- if (!session.user) {
26
- return <p>请登录以查看您的 DID 信息。</p>;
27
- }
28
-
29
- return (
30
- <div>
31
- <h2>用户 DID 信息</h2>
32
- <p><strong>永久 DID:</strong> {did}</p>
33
- <p><strong>钱包 DID:</strong> {walletDid || 'N/A'}</p>
34
- <p><strong>登录方法:</strong> {sourceProvider}</p>
35
- <h3>已连接账户 ({connectedAccounts.length})</h3>
36
- <ul>
37
- {connectedAccounts.map((account) => (
38
- <li key={account.did}>
39
- {account.provider}: {account.did}
40
- </li>
41
- ))}
42
- </ul>
43
- </div>
44
- );
45
- }
46
- ```
47
-
48
- ## 参数
49
-
50
- `useDid` Hook 接受一个对象作为其唯一参数。
51
-
52
- <x-field data-name="options" data-type="object" data-required="true">
53
- <x-field data-name="session" data-type="object" data-required="true" data-desc="从 `useSession` Hook 获取的会话对象。只有当 `session.user` 存在时,该 Hook 才会计算数据。">
54
- <x-field data-name="user" data-type="object" data-required="false" data-desc="成功登录后由会话上下文提供的用户对象。"></x-field>
55
- </x-field>
56
- </x-field>
57
-
58
- ## 返回值
59
-
60
- 该 Hook 返回一个状态对象,其中包含各种派生的 DID 信息。每当 `session.user` 对象发生变化时,此对象都会更新。
61
-
62
- <x-field-group>
63
- <x-field data-name="did" data-type="string" data-desc="用户的永久 DID。这是 `permanentDid` 的别名。"></x-field>
64
- <x-field data-name="wallet" data-type="object" data-desc="提供者为 'wallet' 的已连接账户对象。如果没有连接钱包,则返回 `undefined`。">
65
- <x-field data-name="did" data-type="string" data-desc="钱包账户的 DID。"></x-field>
66
- <x-field data-name="provider" data-type="string" data-desc="提供者名称,即 'wallet'。"></x-field>
67
- </x-field>
68
- <x-field data-name="walletDid" data-type="string" data-desc="用户已连接钱包的 DID。如果没有连接钱包,则返回 `undefined`。"></x-field>
69
- <x-field data-name="permanentDid" data-type="string" data-desc="用户的永久 DID,即来自 `user.did` 的主标识符。"></x-field>
70
- <x-field data-name="connectedDids" data-type="string[]" data-desc="一个包含用户所有已连接账户 DID 的数组。"></x-field>
71
- <x-field data-name="connectedAccounts" data-type="object[]" data-desc="包含所有已连接账户对象的完整数组。">
72
- <x-field data-name="did" data-type="string" data-desc="已连接账户的 DID。"></x-field>
73
- <x-field data-name="provider" data-type="string" data-desc="账户的提供者(例如 'wallet'、'github')。"></x-field>
74
- </x-field>
75
- <x-field data-name="sourceProvider" data-type="string" data-desc="用户最初用于登录的提供者(例如 'wallet'、'github')。默认为 'wallet'。"></x-field>
76
- <x-field data-name="sourceProviders" data-type="string[]" data-desc="一个包含用户所有已连接账户提供者名称的数组。"></x-field>
77
- </x-field-group>
78
-
79
- ## 独立的辅助函数
80
-
81
- `useDid` Hook 构建在一组导出的辅助函数之上。如果您不需要 Hook 的响应式状态管理,而只想从用户对象中提取特定信息,则可以直接导入并使用这些函数。
82
-
83
- | Function | Description |
84
- | ------------------------ | ------------------------------------------------------------ |
85
- | `getPermanentDid(user)` | 从用户对象中提取永久 DID。 |
86
- | `getWalletDid(user)` | 提取已连接钱包的 DID。 |
87
- | `getConnectedAccounts(user)` | 检索已连接账户的数组。 |
88
- | `getConnectedDids(user)` | 从所有已连接账户中检索一个 DID 数组。 |
89
- | `getSourceProvider(user)` | 获取用于初始登录的提供者。 |
90
- | `getSourceProviders(user)` | 获取所有已连接提供者名称的数组。 |
91
- | `getWallet(user)` | 查找并返回完整的钱包账户对象。 |
92
-
93
- ### 示例:使用辅助函数
94
-
95
- ```javascript Direct Function Usage icon=logos:javascript
96
- import { getWalletDid } from '@arcblock/did-connect-react/lib/User/use-did';
97
- import { useSession } from '@arcblock/did-connect-react';
98
-
99
- // 这种方法在事件处理程序或其他非 React 函数中可能很有用
100
- function handleUserAction() {
101
- const { session } = useSession();
102
- if (session.user) {
103
- const walletDid = getWalletDid(session.user);
104
- console.log('User Wallet DID:', walletDid);
105
- }
106
- }
107
- ```
@@ -1,188 +0,0 @@
1
- # useOAuth & usePasskey
2
-
3
- `DidConnect` コンポーネントと `useConnect` フックは、すべての認証方法に対応する包括的なビルド済み UI を提供しますが、カスタムの認証フローを構築する必要がある場合もあります。`useOAuth` フックと `usePasskey` フックは、ソーシャルログイン (OAuth) とパスワードレス認証 (Passkey) の基盤となるロジックへの直接アクセスを提供します。
4
-
5
- これらのフックは、オーダーメイドのユーザーエクスペリエンスを作成するための強力なツールです。これらは、それぞれのコンテキストプロバイダーである `OAuthProvider` と `PasskeyProvider` に依存しており、これらは通常、メインの `SessionProvider` 内に含まれています。セッション管理の詳細については、[SessionProvider ドキュメント](./core-components-session-provider.md) を参照してください。
6
-
7
- ## useOAuth
8
-
9
- `useOAuth` フックは、サードパーティのソーシャルログインフローを処理するための関数と状態を提供します。
10
-
11
- ### インポート
12
-
13
- ```javascript icon=logos:javascript
14
- import { useOAuth } from '@arcblock/did-connect-react/lib/OAuth';
15
- ```
16
-
17
- ### 戻り値
18
-
19
- このフックは、以下のプロパティとメソッドを含むオブジェクトを返します。
20
-
21
- <x-field-group>
22
- <x-field data-name="loginOAuth" data-type="function" data-required="true">
23
- <x-field-desc markdown>指定された OAuth プロバイダーでログインフローを開始します。ユーザー認証のためのポップアップを開き、ログイン結果で解決されるプロミスを返します。</x-field-desc>
24
- </x-field>
25
- <x-field data-name="bindOAuth" data-type="function" data-required="true">
26
- <x-field-desc markdown>現在ログインしているユーザーのセッションに新しい OAuth アカウントをバインドします。</x-field-desc>
27
- </x-field>
28
- <x-field data-name="unbindOAuth" data-type="function" data-required="true">
29
- <x-field-desc markdown>現在のユーザーのセッションから OAuth アカウントのバインドを解除します。</x-field-desc>
30
- </x-field>
31
- <x-field data-name="getOAuthConfigList" data-type="function" data-required="true">
32
- <x-field-desc markdown>Blocklet 設定から有効で設定済みの OAuth プロバイダーのリストを取得します。プロバイダー設定オブジェクトの配列に解決されるプロミスを返します。</x-field-desc>
33
- </x-field>
34
- <x-field data-name="switchOAuthPassport" data-type="function" data-required="true">
35
- <x-field-desc markdown>同じIDの異なる接続済みアカウント (パスポート) 間で切り替えるフローを開始します。</x-field-desc>
36
- </x-field>
37
- <x-field data-name="bindAuthLoading" data-type="boolean" data-required="true">
38
- <x-field-desc markdown>`bindOAuth` 操作が進行中に `true` となるブール値フラグ。</x-field-desc>
39
- </x-field>
40
- <x-field data-name="unbindAuthLoading" data-type="boolean" data-required="true">
41
- <x-field-desc markdown>`unbindOAuth` 操作が進行中に `true` となるブール値フラグ。</x-field-desc>
42
- </x-field>
43
- <x-field data-name="oauthState" data-type="object" data-required="true">
44
- <x-field-desc markdown>認証プロセスのリアルタイムステータスを含むオブジェクト。</x-field-desc>
45
- <x-field data-name="loading" data-type="boolean" data-desc="OAuth 操作が進行中の場合は True。"></x-field>
46
- <x-field data-name="error" data-type="string" data-desc="操作が失敗した場合のエラーメッセージを含みます。"></x-field>
47
- <x-field data-name="status" data-type="string" data-desc="フローの現在のステータス (例: 'scanned', 'succeed', 'error')。"></x-field>
48
- </x-field>
49
- </x-field-group>
50
-
51
- ### 使用例
52
-
53
- 以下は、カスタムソーシャルログインコンポーネントを構築する方法の例です。
54
-
55
- ```jsx CustomSocialLogin.jsx icon=logos:react
56
- import React, { useEffect, useState } from 'react';
57
- import { useOAuth } from '@arcblock/did-connect-react/lib/OAuth';
58
- import { useSession } from '@arcblock/did-connect-react/lib/Session';
59
-
60
- export default function CustomSocialLogin() {
61
- const { loginOAuth, getOAuthConfigList } = useOAuth();
62
- const { session } = useSession();
63
- const [providers, setProviders] = useState([]);
64
- const [loading, setLoading] = useState(false);
65
- const [error, setError] = useState('');
66
-
67
- useEffect(() => {
68
- // コンポーネントがマウントされたときに、利用可能な OAuth プロバイダーのリストを取得します
69
- getOAuthConfigList().then(setProviders).catch(console.error);
70
- }, [getOAuthConfigList]);
71
-
72
- const handleLogin = async (provider) => {
73
- setLoading(true);
74
- setError('');
75
- try {
76
- const result = await loginOAuth({ provider: provider.provider });
77
- // ログインが成功すると、セッションは SessionProvider によって自動的に更新されます。
78
- console.log('Login successful:', result);
79
- // ここでセッションを更新したり、ユーザーをリダイレクトしたりすることができます。
80
- } catch (err) {
81
- setError(err.message);
82
- console.error('Login failed:', err);
83
- } finally {
84
- setLoading(false);
85
- }
86
- };
87
-
88
- if (session.user) {
89
- return <div>You are already logged in as {session.user.name}.</div>;
90
- }
91
-
92
- if (providers.length === 0) {
93
- return <div>No social login methods configured.</div>;
94
- }
95
-
96
- return (
97
- <div>
98
- <h3>Login with Social Media</h3>
99
- {providers.map((p) => (
100
- <button key={p.provider} onClick={() => handleLogin(p)} disabled={loading}>
101
- {loading ? 'Logging in...' : `Login with ${p.provider}`}
102
- </button>
103
- ))}
104
- {error && <p style={{ color: 'red' }}>{error}</p>}
105
- </div>
106
- );
107
- }
108
- ```
109
-
110
- ## usePasskey
111
-
112
- `usePasskey` フックは、WebAuthn (Passkeys) を使用したパスワードレス認証を処理するための関数と状態を提供します。
113
-
114
- ### インポート
115
-
116
- ```javascript icon=logos:javascript
117
- import { usePasskey } from '@arcblock/did-connect-react/lib/Passkey';
118
- ```
119
-
120
- ### 戻り値
121
-
122
- このフックは、以下のプロパティとメソッドを含むオブジェクトを返します。
123
-
124
- <x-field-group>
125
- <x-field data-name="loginPasskey" data-type="function" data-required="true">
126
- <x-field-desc markdown>既存の Passkey を使用してログインフローを開始します。ブラウザのネイティブ WebAuthn 認証プロンプトをトリガーします。</x-field-desc>
127
- </x-field>
128
- <x-field data-name="connectPasskey" data-type="function" data-required="true">
129
- <x-field-desc markdown>新しい Passkey を作成し、現在のユーザーのセッションにバインドするフローを開始します。</x-field-desc>
130
- </x-field>
131
- <x-field data-name="disconnectPasskey" data-type="function" data-required="true">
132
- <x-field-desc markdown>検証が成功した後、現在のユーザーのセッションから Passkey のバインドを解除します。</x-field-desc>
133
- </x-field>
134
- <x-field data-name="switchPassport" data-type="function" data-required="true">
135
- <x-field-desc markdown>異なる接続済みアカウント (パスポート) 間で切り替えるフローを開始します。</x-field-desc>
136
- </x-field>
137
- <x-field data-name="connecting" data-type="boolean" data-required="true">
138
- <x-field-desc markdown>`connectPasskey` 操作が進行中に `true` となるブール値フラグ。</x-field-desc>
139
- </x-field>
140
- <x-field data-name="disconnecting" data-type="boolean" data-required="true">
141
- <x-field-desc markdown>`disconnectPasskey` 操作が進行中に `true` となるブール値フラグ。</x-field-desc>
142
- </x-field>
143
- <x-field data-name="passkeyState" data-type="object" data-required="true">
144
- <x-field-desc markdown>Passkey 操作のリアルタイムステータスを含むオブジェクト。</x-field-desc>
145
- <x-field data-name="loading" data-type="boolean" data-desc="Passkey 操作が進行中の場合は True。"></x-field>
146
- <x-field data-name="creating" data-type="boolean" data-desc="Passkey 作成フェーズ中は True。"></x-field>
147
- <x-field data-name="verifying" data-type="boolean" data-desc="Passkey 検証フェーズ中は True。"></x-field>
148
- <x-field data-name="error" data-type="string" data-desc="操作が失敗した場合のエラーメッセージを含みます。"></x-field>
149
- <x-field data-name="status" data-type="string" data-desc="フローの現在のステータス (例: 'scanned', 'succeed', 'error')。"></x-field>
150
- </x-field>
151
- </x-field-group>
152
-
153
- ### 使用例
154
-
155
- 以下は、「Passkeyでログイン」ボタンを作成する方法の例です。
156
-
157
- ```jsx PasskeyLoginButton.jsx icon=logos:react
158
- import React, { useState } from 'react';
159
- import { usePasskey } from '@arcblock/did-connect-react/lib/Passkey';
160
-
161
- export default function PasskeyLoginButton() {
162
- const { loginPasskey, passkeyState } = usePasskey();
163
- const [error, setError] = useState('');
164
-
165
- const handleLogin = async () => {
166
- setError('');
167
- try {
168
- const result = await loginPasskey();
169
- console.log('Passkey login successful:', result);
170
- // セッションは SessionProvider によって自動的に更新されます。
171
- } catch (err) {
172
- setError(err.message);
173
- console.error('Passkey login failed:', err);
174
- }
175
- };
176
-
177
- return (
178
- <div>
179
- <button onClick={handleLogin} disabled={passkeyState.loading}>
180
- {passkeyState.loading ? 'Verifying...' : 'Login with Passkey'}
181
- </button>
182
- {error && <p style={{ color: 'red' }}>{error}</p>}
183
- </div>
184
- );
185
- }
186
- ```
187
-
188
- これらのフックは、DID Connect の強力な認証機能を、完全にカスタムな UI でアプリケーションの任意の部分に統合する柔軟性を提供します。ビルド済みの `DidConnect` モーダルをプログラムで制御する方法については、[useConnect フックのドキュメント](./hooks-use-connect.md) に進んでください。
@@ -1,188 +0,0 @@
1
- # useOAuth & usePasskey
2
-
3
- While the `DidConnect` component and `useConnect` hook provide a comprehensive, pre-built UI for all authentication methods, you may need to build a custom authentication flow. The `useOAuth` and `usePasskey` hooks offer direct access to the underlying logic for social logins (OAuth) and passwordless authentication (Passkey).
4
-
5
- These hooks are powerful tools for creating bespoke user experiences. They depend on their respective context providers, `OAuthProvider` and `PasskeyProvider`, which are typically included within the main `SessionProvider`. For more information on session management, see the [SessionProvider documentation](./core-components-session-provider.md).
6
-
7
- ## useOAuth
8
-
9
- The `useOAuth` hook provides functions and state for handling third-party social login flows.
10
-
11
- ### Import
12
-
13
- ```javascript icon=logos:javascript
14
- import { useOAuth } from '@arcblock/did-connect-react/lib/OAuth';
15
- ```
16
-
17
- ### Return Value
18
-
19
- The hook returns an object containing the following properties and methods:
20
-
21
- <x-field-group>
22
- <x-field data-name="loginOAuth" data-type="function" data-required="true">
23
- <x-field-desc markdown>Initiates a login flow with a specified OAuth provider. It opens a popup for user authorization and returns a promise that resolves with the login result.</x-field-desc>
24
- </x-field>
25
- <x-field data-name="bindOAuth" data-type="function" data-required="true">
26
- <x-field-desc markdown>Binds a new OAuth account to the currently logged-in user's session.</x-field-desc>
27
- </x-field>
28
- <x-field data-name="unbindOAuth" data-type="function" data-required="true">
29
- <x-field-desc markdown>Unbinds an OAuth account from the current user's session.</x-field-desc>
30
- </x-field>
31
- <x-field data-name="getOAuthConfigList" data-type="function" data-required="true">
32
- <x-field-desc markdown>Fetches the list of enabled and configured OAuth providers from the blocklet settings. Returns a promise that resolves to an array of provider configuration objects.</x-field-desc>
33
- </x-field>
34
- <x-field data-name="switchOAuthPassport" data-type="function" data-required="true">
35
- <x-field-desc markdown>Initiates a flow to switch between different connected accounts (passports) of the same identity.</x-field-desc>
36
- </x-field>
37
- <x-field data-name="bindAuthLoading" data-type="boolean" data-required="true">
38
- <x-field-desc markdown>A boolean flag that is `true` while the `bindOAuth` operation is in progress.</x-field-desc>
39
- </x-field>
40
- <x-field data-name="unbindAuthLoading" data-type="boolean" data-required="true">
41
- <x-field-desc markdown>A boolean flag that is `true` while the `unbindOAuth` operation is in progress.</x-field-desc>
42
- </x-field>
43
- <x-field data-name="oauthState" data-type="object" data-required="true">
44
- <x-field-desc markdown>An object containing the real-time status of the authentication process.</x-field-desc>
45
- <x-field data-name="loading" data-type="boolean" data-desc="True if an OAuth operation is in progress."></x-field>
46
- <x-field data-name="error" data-type="string" data-desc="Contains an error message if the operation failed."></x-field>
47
- <x-field data-name="status" data-type="string" data-desc="The current status of the flow (e.g., 'scanned', 'succeed', 'error')."></x-field>
48
- </x-field>
49
- </x-field-group>
50
-
51
- ### Usage Example
52
-
53
- Here's an example of how to build a custom social login component.
54
-
55
- ```jsx CustomSocialLogin.jsx icon=logos:react
56
- import React, { useEffect, useState } from 'react';
57
- import { useOAuth } from '@arcblock/did-connect-react/lib/OAuth';
58
- import { useSession } from '@arcblock/did-connect-react/lib/Session';
59
-
60
- export default function CustomSocialLogin() {
61
- const { loginOAuth, getOAuthConfigList } = useOAuth();
62
- const { session } = useSession();
63
- const [providers, setProviders] = useState([]);
64
- const [loading, setLoading] = useState(false);
65
- const [error, setError] = useState('');
66
-
67
- useEffect(() => {
68
- // Fetch the list of available OAuth providers when the component mounts
69
- getOAuthConfigList().then(setProviders).catch(console.error);
70
- }, [getOAuthConfigList]);
71
-
72
- const handleLogin = async (provider) => {
73
- setLoading(true);
74
- setError('');
75
- try {
76
- const result = await loginOAuth({ provider: provider.provider });
77
- // After successful login, the session will be updated automatically by the SessionProvider.
78
- console.log('Login successful:', result);
79
- // You might want to refresh the session or redirect the user here.
80
- } catch (err) {
81
- setError(err.message);
82
- console.error('Login failed:', err);
83
- } finally {
84
- setLoading(false);
85
- }
86
- };
87
-
88
- if (session.user) {
89
- return <div>You are already logged in as {session.user.name}.</div>;
90
- }
91
-
92
- if (providers.length === 0) {
93
- return <div>No social login methods configured.</div>;
94
- }
95
-
96
- return (
97
- <div>
98
- <h3>Login with Social Media</h3>
99
- {providers.map((p) => (
100
- <button key={p.provider} onClick={() => handleLogin(p)} disabled={loading}>
101
- {loading ? 'Logging in...' : `Login with ${p.provider}`}
102
- </button>
103
- ))}
104
- {error && <p style={{ color: 'red' }}>{error}</p>}
105
- </div>
106
- );
107
- }
108
- ```
109
-
110
- ## usePasskey
111
-
112
- The `usePasskey` hook provides functions and state for handling passwordless authentication using WebAuthn (Passkeys).
113
-
114
- ### Import
115
-
116
- ```javascript icon=logos:javascript
117
- import { usePasskey } from '@arcblock/did-connect-react/lib/Passkey';
118
- ```
119
-
120
- ### Return Value
121
-
122
- The hook returns an object containing the following properties and methods:
123
-
124
- <x-field-group>
125
- <x-field data-name="loginPasskey" data-type="function" data-required="true">
126
- <x-field-desc markdown>Initiates a login flow using an existing Passkey. It triggers the browser's native WebAuthn authentication prompt.</x-field-desc>
127
- </x-field>
128
- <x-field data-name="connectPasskey" data-type="function" data-required="true">
129
- <x-field-desc markdown>Initiates a flow to create and bind a new Passkey to the current user's session.</x-field-desc>
130
- </x-field>
131
- <x-field data-name="disconnectPasskey" data-type="function" data-required="true">
132
- <x-field-desc markdown>Unbinds a Passkey from the current user's session after successful verification.</x-field-desc>
133
- </x-field>
134
- <x-field data-name="switchPassport" data-type="function" data-required="true">
135
- <x-field-desc markdown>Initiates a flow to switch between different connected accounts (passports).</x-field-desc>
136
- </x-field>
137
- <x-field data-name="connecting" data-type="boolean" data-required="true">
138
- <x-field-desc markdown>A boolean flag that is `true` while the `connectPasskey` operation is in progress.</x-field-desc>
139
- </x-field>
140
- <x-field data-name="disconnecting" data-type="boolean" data-required="true">
141
- <x-field-desc markdown>A boolean flag that is `true` while the `disconnectPasskey` operation is in progress.</x-field-desc>
142
- </x-field>
143
- <x-field data-name="passkeyState" data-type="object" data-required="true">
144
- <x-field-desc markdown>An object containing the real-time status of the Passkey operation.</x-field-desc>
145
- <x-field data-name="loading" data-type="boolean" data-desc="True if a Passkey operation is in progress."></x-field>
146
- <x-field data-name="creating" data-type="boolean" data-desc="True during the Passkey creation phase."></x-field>
147
- <x-field data-name="verifying" data-type="boolean" data-desc="True during the Passkey verification phase."></x-field>
148
- <x-field data-name="error" data-type="string" data-desc="Contains an error message if the operation failed."></x-field>
149
- <x-field data-name="status" data-type="string" data-desc="The current status of the flow (e.g., 'scanned', 'succeed', 'error')."></x-field>
150
- </x-field>
151
- </x-field-group>
152
-
153
- ### Usage Example
154
-
155
- Here's an example of how to create a "Login with Passkey" button.
156
-
157
- ```jsx PasskeyLoginButton.jsx icon=logos:react
158
- import React, { useState } from 'react';
159
- import { usePasskey } from '@arcblock/did-connect-react/lib/Passkey';
160
-
161
- export default function PasskeyLoginButton() {
162
- const { loginPasskey, passkeyState } = usePasskey();
163
- const [error, setError] = useState('');
164
-
165
- const handleLogin = async () => {
166
- setError('');
167
- try {
168
- const result = await loginPasskey();
169
- console.log('Passkey login successful:', result);
170
- // The session will be updated automatically by the SessionProvider.
171
- } catch (err) {
172
- setError(err.message);
173
- console.error('Passkey login failed:', err);
174
- }
175
- };
176
-
177
- return (
178
- <div>
179
- <button onClick={handleLogin} disabled={passkeyState.loading}>
180
- {passkeyState.loading ? 'Verifying...' : 'Login with Passkey'}
181
- </button>
182
- {error && <p style={{ color: 'red' }}>{error}</p>}
183
- </div>
184
- );
185
- }
186
- ```
187
-
188
- These hooks provide the flexibility to integrate DID Connect's powerful authentication features into any part of your application with a completely custom UI. To learn about programmatically controlling the pre-built `DidConnect` modal, proceed to the [useConnect hook documentation](./hooks-use-connect.md).