@thunderid/react 1.0.8 → 1.1.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 (193) hide show
  1. package/dist/api/updateMeCredentials.d.ts +33 -0
  2. package/dist/api/updateMeCredentials.d.ts.map +1 -0
  3. package/dist/api/updateMeCredentials.js +29 -0
  4. package/dist/api/updateMeCredentials.js.map +1 -0
  5. package/dist/cjs/api/updateMeCredentials.cjs +31 -0
  6. package/dist/cjs/api/updateMeCredentials.cjs.map +1 -0
  7. package/dist/cjs/components/presentation/ChangeCredential/BaseChangeCredential.cjs +187 -0
  8. package/dist/cjs/components/presentation/ChangeCredential/BaseChangeCredential.cjs.map +1 -0
  9. package/dist/cjs/components/presentation/ChangeCredential/BaseChangeCredential.styles.cjs +108 -0
  10. package/dist/cjs/components/presentation/ChangeCredential/BaseChangeCredential.styles.cjs.map +1 -0
  11. package/dist/cjs/components/presentation/ChangeCredential/ChangeCredential.cjs +123 -0
  12. package/dist/cjs/components/presentation/ChangeCredential/ChangeCredential.cjs.map +1 -0
  13. package/dist/cjs/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.cjs +1 -1
  14. package/dist/cjs/components/presentation/UserDropdown/BaseUserDropdown.cjs +2 -2
  15. package/dist/cjs/components/presentation/UserDropdown/BaseUserDropdown.cjs.map +1 -1
  16. package/dist/cjs/components/presentation/UserDropdown/UserDropdown.cjs +8 -4
  17. package/dist/cjs/components/presentation/UserDropdown/UserDropdown.cjs.map +1 -1
  18. package/dist/cjs/components/presentation/UserProfile/BaseUserProfile.styles.cjs +2 -0
  19. package/dist/cjs/components/presentation/UserProfile/BaseUserProfile.styles.cjs.map +1 -1
  20. package/dist/cjs/components/primitives/PasswordField/PasswordField.cjs +2 -2
  21. package/dist/cjs/components/primitives/PasswordField/PasswordField.cjs.map +1 -1
  22. package/dist/cjs/contexts/Theme/ThemeProvider.cjs +26 -4
  23. package/dist/cjs/contexts/Theme/ThemeProvider.cjs.map +1 -1
  24. package/dist/cjs/contexts/ThunderID/ThunderIDContext.cjs +2 -0
  25. package/dist/cjs/contexts/ThunderID/ThunderIDContext.cjs.map +1 -1
  26. package/dist/cjs/contexts/ThunderID/ThunderIDProvider.cjs +7 -1
  27. package/dist/cjs/contexts/ThunderID/ThunderIDProvider.cjs.map +1 -1
  28. package/dist/cjs/hooks/agents/useCreateAgent.cjs +26 -0
  29. package/dist/cjs/hooks/agents/useCreateAgent.cjs.map +1 -0
  30. package/dist/cjs/hooks/agents/useDeleteAgent.cjs +26 -0
  31. package/dist/cjs/hooks/agents/useDeleteAgent.cjs.map +1 -0
  32. package/dist/cjs/hooks/agents/useGetAgent.cjs +30 -0
  33. package/dist/cjs/hooks/agents/useGetAgent.cjs.map +1 -0
  34. package/dist/cjs/hooks/agents/useGetAgents.cjs +31 -0
  35. package/dist/cjs/hooks/agents/useGetAgents.cjs.map +1 -0
  36. package/dist/cjs/hooks/agents/useUpdateAgent.cjs +27 -0
  37. package/dist/cjs/hooks/agents/useUpdateAgent.cjs.map +1 -0
  38. package/dist/cjs/hooks/applications/useCreateApplication.cjs +31 -0
  39. package/dist/cjs/hooks/applications/useCreateApplication.cjs.map +1 -0
  40. package/dist/cjs/hooks/applications/useDeleteApplication.cjs +26 -0
  41. package/dist/cjs/hooks/applications/useDeleteApplication.cjs.map +1 -0
  42. package/dist/cjs/hooks/applications/useGetApplication.cjs +35 -0
  43. package/dist/cjs/hooks/applications/useGetApplication.cjs.map +1 -0
  44. package/dist/cjs/hooks/applications/useGetApplications.cjs +36 -0
  45. package/dist/cjs/hooks/applications/useGetApplications.cjs.map +1 -0
  46. package/dist/cjs/hooks/applications/useUpdateApplication.cjs +27 -0
  47. package/dist/cjs/hooks/applications/useUpdateApplication.cjs.map +1 -0
  48. package/dist/cjs/hooks/useManagementEndpoint.cjs +25 -0
  49. package/dist/cjs/hooks/useManagementEndpoint.cjs.map +1 -0
  50. package/dist/cjs/hooks/useResourceMutation.cjs +72 -0
  51. package/dist/cjs/hooks/useResourceMutation.cjs.map +1 -0
  52. package/dist/cjs/hooks/useResourceQuery.cjs +86 -0
  53. package/dist/cjs/hooks/useResourceQuery.cjs.map +1 -0
  54. package/dist/cjs/hooks/users/useCreateUser.cjs +26 -0
  55. package/dist/cjs/hooks/users/useCreateUser.cjs.map +1 -0
  56. package/dist/cjs/hooks/users/useDeleteUser.cjs +26 -0
  57. package/dist/cjs/hooks/users/useDeleteUser.cjs.map +1 -0
  58. package/dist/cjs/hooks/users/useGetUser.cjs +30 -0
  59. package/dist/cjs/hooks/users/useGetUser.cjs.map +1 -0
  60. package/dist/cjs/hooks/users/useGetUsers.cjs +38 -0
  61. package/dist/cjs/hooks/users/useGetUsers.cjs.map +1 -0
  62. package/dist/cjs/hooks/users/useUpdateUser.cjs +27 -0
  63. package/dist/cjs/hooks/users/useUpdateUser.cjs.map +1 -0
  64. package/dist/cjs/index.cjs +144 -0
  65. package/dist/cjs/utils/createAuthenticatedFetcher.cjs +43 -0
  66. package/dist/cjs/utils/createAuthenticatedFetcher.cjs.map +1 -0
  67. package/dist/cjs/utils/createResourceInvalidator.cjs +38 -0
  68. package/dist/cjs/utils/createResourceInvalidator.cjs.map +1 -0
  69. package/dist/components/presentation/ChangeCredential/BaseChangeCredential.d.ts +100 -0
  70. package/dist/components/presentation/ChangeCredential/BaseChangeCredential.d.ts.map +1 -0
  71. package/dist/components/presentation/ChangeCredential/BaseChangeCredential.js +183 -0
  72. package/dist/components/presentation/ChangeCredential/BaseChangeCredential.js.map +1 -0
  73. package/dist/components/presentation/ChangeCredential/BaseChangeCredential.styles.d.ts +10 -0
  74. package/dist/components/presentation/ChangeCredential/BaseChangeCredential.styles.d.ts.map +1 -0
  75. package/dist/components/presentation/ChangeCredential/BaseChangeCredential.styles.js +108 -0
  76. package/dist/components/presentation/ChangeCredential/BaseChangeCredential.styles.js.map +1 -0
  77. package/dist/components/presentation/ChangeCredential/ChangeCredential.d.ts +55 -0
  78. package/dist/components/presentation/ChangeCredential/ChangeCredential.d.ts.map +1 -0
  79. package/dist/components/presentation/ChangeCredential/ChangeCredential.js +119 -0
  80. package/dist/components/presentation/ChangeCredential/ChangeCredential.js.map +1 -0
  81. package/dist/components/presentation/LanguageSwitcher/BaseLanguageSwitcher.js +1 -1
  82. package/dist/components/presentation/UserDropdown/BaseUserDropdown.d.ts +5 -0
  83. package/dist/components/presentation/UserDropdown/BaseUserDropdown.d.ts.map +1 -1
  84. package/dist/components/presentation/UserDropdown/BaseUserDropdown.js +2 -2
  85. package/dist/components/presentation/UserDropdown/BaseUserDropdown.js.map +1 -1
  86. package/dist/components/presentation/UserDropdown/UserDropdown.d.ts +12 -0
  87. package/dist/components/presentation/UserDropdown/UserDropdown.d.ts.map +1 -1
  88. package/dist/components/presentation/UserDropdown/UserDropdown.js +8 -4
  89. package/dist/components/presentation/UserDropdown/UserDropdown.js.map +1 -1
  90. package/dist/components/presentation/UserProfile/BaseUserProfile.styles.d.ts.map +1 -1
  91. package/dist/components/presentation/UserProfile/BaseUserProfile.styles.js +2 -0
  92. package/dist/components/presentation/UserProfile/BaseUserProfile.styles.js.map +1 -1
  93. package/dist/components/primitives/PasswordField/PasswordField.d.ts +6 -0
  94. package/dist/components/primitives/PasswordField/PasswordField.d.ts.map +1 -1
  95. package/dist/components/primitives/PasswordField/PasswordField.js +2 -2
  96. package/dist/components/primitives/PasswordField/PasswordField.js.map +1 -1
  97. package/dist/contexts/Theme/ThemeProvider.d.ts +1 -1
  98. package/dist/contexts/Theme/ThemeProvider.d.ts.map +1 -1
  99. package/dist/contexts/Theme/ThemeProvider.js +27 -5
  100. package/dist/contexts/Theme/ThemeProvider.js.map +1 -1
  101. package/dist/contexts/ThunderID/ThunderIDContext.d.ts +12 -1
  102. package/dist/contexts/ThunderID/ThunderIDContext.d.ts.map +1 -1
  103. package/dist/contexts/ThunderID/ThunderIDContext.js +2 -0
  104. package/dist/contexts/ThunderID/ThunderIDContext.js.map +1 -1
  105. package/dist/contexts/ThunderID/ThunderIDProvider.d.ts.map +1 -1
  106. package/dist/contexts/ThunderID/ThunderIDProvider.js +7 -1
  107. package/dist/contexts/ThunderID/ThunderIDProvider.js.map +1 -1
  108. package/dist/hooks/agents/useCreateAgent.d.ts +11 -0
  109. package/dist/hooks/agents/useCreateAgent.d.ts.map +1 -0
  110. package/dist/hooks/agents/useCreateAgent.js +24 -0
  111. package/dist/hooks/agents/useCreateAgent.js.map +1 -0
  112. package/dist/hooks/agents/useDeleteAgent.d.ts +10 -0
  113. package/dist/hooks/agents/useDeleteAgent.d.ts.map +1 -0
  114. package/dist/hooks/agents/useDeleteAgent.js +24 -0
  115. package/dist/hooks/agents/useDeleteAgent.js.map +1 -0
  116. package/dist/hooks/agents/useGetAgent.d.ts +12 -0
  117. package/dist/hooks/agents/useGetAgent.d.ts.map +1 -0
  118. package/dist/hooks/agents/useGetAgent.js +28 -0
  119. package/dist/hooks/agents/useGetAgent.js.map +1 -0
  120. package/dist/hooks/agents/useGetAgents.d.ts +19 -0
  121. package/dist/hooks/agents/useGetAgents.d.ts.map +1 -0
  122. package/dist/hooks/agents/useGetAgents.js +29 -0
  123. package/dist/hooks/agents/useGetAgents.js.map +1 -0
  124. package/dist/hooks/agents/useUpdateAgent.d.ts +18 -0
  125. package/dist/hooks/agents/useUpdateAgent.d.ts.map +1 -0
  126. package/dist/hooks/agents/useUpdateAgent.js +25 -0
  127. package/dist/hooks/agents/useUpdateAgent.js.map +1 -0
  128. package/dist/hooks/applications/useCreateApplication.d.ts +16 -0
  129. package/dist/hooks/applications/useCreateApplication.d.ts.map +1 -0
  130. package/dist/hooks/applications/useCreateApplication.js +29 -0
  131. package/dist/hooks/applications/useCreateApplication.js.map +1 -0
  132. package/dist/hooks/applications/useDeleteApplication.d.ts +10 -0
  133. package/dist/hooks/applications/useDeleteApplication.d.ts.map +1 -0
  134. package/dist/hooks/applications/useDeleteApplication.js +24 -0
  135. package/dist/hooks/applications/useDeleteApplication.js.map +1 -0
  136. package/dist/hooks/applications/useGetApplication.d.ts +17 -0
  137. package/dist/hooks/applications/useGetApplication.d.ts.map +1 -0
  138. package/dist/hooks/applications/useGetApplication.js +33 -0
  139. package/dist/hooks/applications/useGetApplication.js.map +1 -0
  140. package/dist/hooks/applications/useGetApplications.d.ts +24 -0
  141. package/dist/hooks/applications/useGetApplications.d.ts.map +1 -0
  142. package/dist/hooks/applications/useGetApplications.js +34 -0
  143. package/dist/hooks/applications/useGetApplications.js.map +1 -0
  144. package/dist/hooks/applications/useUpdateApplication.d.ts +18 -0
  145. package/dist/hooks/applications/useUpdateApplication.d.ts.map +1 -0
  146. package/dist/hooks/applications/useUpdateApplication.js +25 -0
  147. package/dist/hooks/applications/useUpdateApplication.js.map +1 -0
  148. package/dist/hooks/useManagementEndpoint.d.ts +22 -0
  149. package/dist/hooks/useManagementEndpoint.d.ts.map +1 -0
  150. package/dist/hooks/useManagementEndpoint.js +23 -0
  151. package/dist/hooks/useManagementEndpoint.js.map +1 -0
  152. package/dist/hooks/useResourceMutation.d.ts +51 -0
  153. package/dist/hooks/useResourceMutation.d.ts.map +1 -0
  154. package/dist/hooks/useResourceMutation.js +70 -0
  155. package/dist/hooks/useResourceMutation.js.map +1 -0
  156. package/dist/hooks/useResourceQuery.d.ts +45 -0
  157. package/dist/hooks/useResourceQuery.d.ts.map +1 -0
  158. package/dist/hooks/useResourceQuery.js +83 -0
  159. package/dist/hooks/useResourceQuery.js.map +1 -0
  160. package/dist/hooks/users/useCreateUser.d.ts +11 -0
  161. package/dist/hooks/users/useCreateUser.d.ts.map +1 -0
  162. package/dist/hooks/users/useCreateUser.js +24 -0
  163. package/dist/hooks/users/useCreateUser.js.map +1 -0
  164. package/dist/hooks/users/useDeleteUser.d.ts +10 -0
  165. package/dist/hooks/users/useDeleteUser.d.ts.map +1 -0
  166. package/dist/hooks/users/useDeleteUser.js +24 -0
  167. package/dist/hooks/users/useDeleteUser.js.map +1 -0
  168. package/dist/hooks/users/useGetUser.d.ts +12 -0
  169. package/dist/hooks/users/useGetUser.d.ts.map +1 -0
  170. package/dist/hooks/users/useGetUser.js +28 -0
  171. package/dist/hooks/users/useGetUser.js.map +1 -0
  172. package/dist/hooks/users/useGetUsers.d.ts +17 -0
  173. package/dist/hooks/users/useGetUsers.d.ts.map +1 -0
  174. package/dist/hooks/users/useGetUsers.js +36 -0
  175. package/dist/hooks/users/useGetUsers.js.map +1 -0
  176. package/dist/hooks/users/useUpdateUser.d.ts +18 -0
  177. package/dist/hooks/users/useUpdateUser.d.ts.map +1 -0
  178. package/dist/hooks/users/useUpdateUser.js +25 -0
  179. package/dist/hooks/users/useUpdateUser.js.map +1 -0
  180. package/dist/index.d.ts +29 -0
  181. package/dist/index.d.ts.map +1 -1
  182. package/dist/index.js +20 -2
  183. package/dist/models/config.d.ts +13 -1
  184. package/dist/models/config.d.ts.map +1 -1
  185. package/dist/utils/createAuthenticatedFetcher.d.ts +14 -0
  186. package/dist/utils/createAuthenticatedFetcher.d.ts.map +1 -0
  187. package/dist/utils/createAuthenticatedFetcher.js +41 -0
  188. package/dist/utils/createAuthenticatedFetcher.js.map +1 -0
  189. package/dist/utils/createResourceInvalidator.d.ts +29 -0
  190. package/dist/utils/createResourceInvalidator.d.ts.map +1 -0
  191. package/dist/utils/createResourceInvalidator.js +36 -0
  192. package/dist/utils/createResourceInvalidator.js.map +1 -0
  193. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResourceMutation.cjs","names":["fallbackResourceInvalidator","useThunderID","resolvedFetcher: ApiFetcher","useResolvedFetcher","callbacksRef: {\n current: {\n getInvalidatedKeys: typeof getInvalidatedKeys;\n mutationFn: typeof mutationFn;\n onError?: ResourceMutationOptions<TData, TVariables>['onError'];\n onSuccess?: ResourceMutationOptions<TData, TVariables>['onSuccess'];\n };\n }","mutateAsync: (variables: TVariables) => Promise<TData>","result: TData","mutationError: Error"],"sources":["../../../src/hooks/useResourceMutation.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {ApiFetcher} from '@thunderid/browser';\nimport {useCallback, useRef, useState} from 'react';\nimport {useResolvedFetcher} from './useResourceQuery';\nimport useThunderID from '../contexts/ThunderID/useThunderID';\nimport {ResourceQueryKey, fallbackResourceInvalidator} from '../utils/createResourceInvalidator';\n\n/**\n * Options accepted by every management mutation hook.\n */\nexport interface ResourceMutationOptions<TData, TVariables> {\n /**\n * Transport for this hook only. Takes precedence over `ThunderIDProvider`'s `http.fetcher`.\n */\n fetcher?: ApiFetcher;\n /**\n * Called when the mutation fails.\n */\n onError?: (error: Error, variables: TVariables) => void;\n /**\n * Called when the mutation succeeds, after the affected queries have been invalidated.\n */\n onSuccess?: (data: TData, variables: TVariables) => void;\n}\n\n/**\n * State returned by a management mutation hook.\n */\nexport interface ResourceMutationResult<TData, TVariables> {\n data: TData | undefined;\n error: Error | null;\n isLoading: boolean;\n /**\n * Runs the mutation. Never rejects: read `error`, or use `onError`, to handle a failure.\n */\n mutate: (variables: TVariables) => Promise<TData | undefined>;\n /**\n * Runs the mutation and rejects if it fails.\n */\n mutateAsync: (variables: TVariables) => Promise<TData>;\n /**\n * Clears `data` and `error`.\n */\n reset: () => void;\n}\n\n/**\n * Runs a management mutation and invalidates the queries whose data it changed. Depends on no data\n * fetching library.\n *\n * @param mutationFn - Performs the request with the resolved fetcher.\n * @param getInvalidatedKeys - Returns the query key prefixes to invalidate after a success.\n * @param options - Mutation options.\n * @returns The mutation state.\n */\nconst useResourceMutation = <TData, TVariables>(\n mutationFn: (variables: TVariables, fetcher: ApiFetcher) => Promise<TData>,\n getInvalidatedKeys: (variables: TVariables) => ResourceQueryKey[],\n {fetcher, onError, onSuccess}: ResourceMutationOptions<TData, TVariables> = {},\n): ResourceMutationResult<TData, TVariables> => {\n const {invalidator = fallbackResourceInvalidator} = useThunderID();\n const resolvedFetcher: ApiFetcher = useResolvedFetcher(fetcher);\n const [data, setData] = useState<TData | undefined>(undefined);\n const [error, setError] = useState<Error | null>(null);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n const callbacksRef: {\n current: {\n getInvalidatedKeys: typeof getInvalidatedKeys;\n mutationFn: typeof mutationFn;\n onError?: ResourceMutationOptions<TData, TVariables>['onError'];\n onSuccess?: ResourceMutationOptions<TData, TVariables>['onSuccess'];\n };\n } = useRef({getInvalidatedKeys, mutationFn, onError, onSuccess});\n callbacksRef.current = {getInvalidatedKeys, mutationFn, onError, onSuccess};\n\n const mutateAsync: (variables: TVariables) => Promise<TData> = useCallback(\n async (variables: TVariables): Promise<TData> => {\n setIsLoading(true);\n setError(null);\n\n try {\n const result: TData = await callbacksRef.current.mutationFn(variables, resolvedFetcher);\n\n setData(result);\n callbacksRef.current.getInvalidatedKeys(variables).forEach((key: ResourceQueryKey) => {\n invalidator.invalidate(key);\n });\n callbacksRef.current.onSuccess?.(result, variables);\n\n return result;\n } catch (err) {\n const mutationError: Error = err instanceof Error ? err : new Error(String(err));\n\n setError(mutationError);\n callbacksRef.current.onError?.(mutationError, variables);\n\n throw mutationError;\n } finally {\n setIsLoading(false);\n }\n },\n [invalidator, resolvedFetcher],\n );\n\n const mutate: (variables: TVariables) => Promise<TData | undefined> = useCallback(\n (variables: TVariables): Promise<TData | undefined> => mutateAsync(variables).catch((): undefined => undefined),\n [mutateAsync],\n );\n\n const reset: () => void = useCallback((): void => {\n setData(undefined);\n setError(null);\n }, []);\n\n return {data, error, isLoading, mutate, mutateAsync, reset};\n};\n\nexport default useResourceMutation;\n"],"mappings":";;;;;;;;;;;;;;;;;AAyDA,MAAM,uBACJ,YACA,oBACA,EAAC,SAAS,SAAS,cAAyD,EAAE,KAChC;CAC9C,MAAM,EAAC,cAAcA,kEAA+BC,8BAAc;CAClE,MAAMC,kBAA8BC,4CAAmB,QAAQ;CAC/D,MAAM,CAAC,MAAM,+BAAuC,OAAU;CAC9D,MAAM,CAAC,OAAO,gCAAmC,KAAK;CACtD,MAAM,CAAC,WAAW,oCAAkC,MAAM;CAE1D,MAAMC,iCAOK;EAAC;EAAoB;EAAY;EAAS;EAAU,CAAC;AAChE,cAAa,UAAU;EAAC;EAAoB;EAAY;EAAS;EAAU;CAE3E,MAAMC,qCACJ,OAAO,cAA0C;AAC/C,eAAa,KAAK;AAClB,WAAS,KAAK;AAEd,MAAI;GACF,MAAMC,SAAgB,MAAM,aAAa,QAAQ,WAAW,WAAW,gBAAgB;AAEvF,WAAQ,OAAO;AACf,gBAAa,QAAQ,mBAAmB,UAAU,CAAC,SAAS,QAA0B;AACpF,gBAAY,WAAW,IAAI;KAC3B;AACF,gBAAa,QAAQ,YAAY,QAAQ,UAAU;AAEnD,UAAO;WACA,KAAK;GACZ,MAAMC,gBAAuB,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,IAAI,CAAC;AAEhF,YAAS,cAAc;AACvB,gBAAa,QAAQ,UAAU,eAAe,UAAU;AAExD,SAAM;YACE;AACR,gBAAa,MAAM;;IAGvB,CAAC,aAAa,gBAAgB,CAC/B;AAYD,QAAO;EAAC;EAAM;EAAO;EAAW,gCAT7B,cAAsD,YAAY,UAAU,CAAC,YAAuB,OAAU,EAC/G,CAAC,YAAY,CACd;EAOuC;EAAa,oCALH;AAChD,WAAQ,OAAU;AAClB,YAAS,KAAK;KACb,EAAE,CAAC;EAEqD;;AAG7D,kCAAe"}
@@ -0,0 +1,86 @@
1
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ const require_createResourceInvalidator = require('../utils/createResourceInvalidator.cjs');
3
+ const require_useThunderID = require('../contexts/ThunderID/useThunderID.cjs');
4
+ const require_createAuthenticatedFetcher = require('../utils/createAuthenticatedFetcher.cjs');
5
+ let react = require("react");
6
+ react = require_rolldown_runtime.__toESM(react);
7
+
8
+ //#region src/hooks/useResourceQuery.ts
9
+ /**
10
+ * Resolves the fetcher a management hook should use: the hook's own, then the provider's, then the
11
+ * SDK's authenticated HTTP client.
12
+ */
13
+ const useResolvedFetcher = (fetcher) => {
14
+ const { http, instanceId } = require_useThunderID.default();
15
+ const providerFetcher = http?.fetcher;
16
+ return (0, react.useMemo)(() => fetcher ?? providerFetcher ?? require_createAuthenticatedFetcher.default(instanceId), [
17
+ fetcher,
18
+ providerFetcher,
19
+ instanceId
20
+ ]);
21
+ };
22
+ /**
23
+ * Fetches a management resource and keeps it fresh. Depends on no data fetching library: the
24
+ * request runs through the resolved fetcher, and a matching mutation triggers a refetch.
25
+ *
26
+ * @param queryKey - Identifies the data. Changing it refetches; mutations invalidate by key prefix.
27
+ * @param queryFn - Performs the request with the resolved fetcher.
28
+ * @param options - Query options.
29
+ * @returns The query state.
30
+ */
31
+ const useResourceQuery = (queryKey, queryFn, { enabled = true, fetcher } = {}) => {
32
+ const { invalidator = require_createResourceInvalidator.fallbackResourceInvalidator } = require_useThunderID.default();
33
+ const resolvedFetcher = useResolvedFetcher(fetcher);
34
+ const [data, setData] = (0, react.useState)(void 0);
35
+ const [error, setError] = (0, react.useState)(null);
36
+ const [isLoading, setIsLoading] = (0, react.useState)(enabled);
37
+ const serializedKey = JSON.stringify(queryKey);
38
+ const queryFnRef = (0, react.useRef)(queryFn);
39
+ queryFnRef.current = queryFn;
40
+ const latestRequestRef = (0, react.useRef)(0);
41
+ const refetch = (0, react.useCallback)(async () => {
42
+ latestRequestRef.current += 1;
43
+ const requestId = latestRequestRef.current;
44
+ setIsLoading(true);
45
+ try {
46
+ const result = await queryFnRef.current(resolvedFetcher);
47
+ if (requestId === latestRequestRef.current) {
48
+ setData(result);
49
+ setError(null);
50
+ }
51
+ return result;
52
+ } catch (err) {
53
+ if (requestId === latestRequestRef.current) setError(err instanceof Error ? err : new Error(String(err)));
54
+ return;
55
+ } finally {
56
+ if (requestId === latestRequestRef.current) setIsLoading(false);
57
+ }
58
+ }, [resolvedFetcher]);
59
+ (0, react.useEffect)(() => {
60
+ if (!enabled) {
61
+ setIsLoading(false);
62
+ return;
63
+ }
64
+ refetch();
65
+ return invalidator.subscribe(JSON.parse(serializedKey), () => {
66
+ refetch();
67
+ });
68
+ }, [
69
+ enabled,
70
+ invalidator,
71
+ refetch,
72
+ serializedKey
73
+ ]);
74
+ return {
75
+ data,
76
+ error,
77
+ isLoading,
78
+ refetch
79
+ };
80
+ };
81
+ var useResourceQuery_default = useResourceQuery;
82
+
83
+ //#endregion
84
+ exports.default = useResourceQuery_default;
85
+ exports.useResolvedFetcher = useResolvedFetcher;
86
+ //# sourceMappingURL=useResourceQuery.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResourceQuery.cjs","names":["useThunderID","providerFetcher: ApiFetcher | undefined","createAuthenticatedFetcher","fallbackResourceInvalidator","resolvedFetcher: ApiFetcher","serializedKey: string","queryFnRef: {current: (fetcher: ApiFetcher) => Promise<T>}","latestRequestRef: {current: number}","refetch: () => Promise<T | undefined>","requestId: number","result: T"],"sources":["../../../src/hooks/useResourceQuery.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {ApiFetcher} from '@thunderid/browser';\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport useThunderID from '../contexts/ThunderID/useThunderID';\nimport createAuthenticatedFetcher from '../utils/createAuthenticatedFetcher';\nimport {ResourceQueryKey, fallbackResourceInvalidator} from '../utils/createResourceInvalidator';\n\n/**\n * Options accepted by every management query hook.\n */\nexport interface ResourceQueryOptions {\n /**\n * Set to `false` to skip fetching, for example until an identifier is known.\n * @default true\n */\n enabled?: boolean;\n /**\n * Transport for this hook only. Takes precedence over `ThunderIDProvider`'s `http.fetcher`.\n */\n fetcher?: ApiFetcher;\n}\n\n/**\n * State returned by a management query hook.\n */\nexport interface ResourceQueryResult<T> {\n data: T | undefined;\n error: Error | null;\n isLoading: boolean;\n /**\n * Fetches the resource again. Resolves with the new data, or `undefined` if the request failed.\n */\n refetch: () => Promise<T | undefined>;\n}\n\n/**\n * Resolves the fetcher a management hook should use: the hook's own, then the provider's, then the\n * SDK's authenticated HTTP client.\n */\nexport const useResolvedFetcher = (fetcher?: ApiFetcher): ApiFetcher => {\n const {http, instanceId} = useThunderID();\n const providerFetcher: ApiFetcher | undefined = http?.fetcher;\n\n return useMemo(\n () => fetcher ?? providerFetcher ?? createAuthenticatedFetcher(instanceId),\n [fetcher, providerFetcher, instanceId],\n );\n};\n\n/**\n * Fetches a management resource and keeps it fresh. Depends on no data fetching library: the\n * request runs through the resolved fetcher, and a matching mutation triggers a refetch.\n *\n * @param queryKey - Identifies the data. Changing it refetches; mutations invalidate by key prefix.\n * @param queryFn - Performs the request with the resolved fetcher.\n * @param options - Query options.\n * @returns The query state.\n */\nconst useResourceQuery = <T>(\n queryKey: ResourceQueryKey,\n queryFn: (fetcher: ApiFetcher) => Promise<T>,\n {enabled = true, fetcher}: ResourceQueryOptions = {},\n): ResourceQueryResult<T> => {\n const {invalidator = fallbackResourceInvalidator} = useThunderID();\n const resolvedFetcher: ApiFetcher = useResolvedFetcher(fetcher);\n const [data, setData] = useState<T | undefined>(undefined);\n const [error, setError] = useState<Error | null>(null);\n const [isLoading, setIsLoading] = useState<boolean>(enabled);\n\n const serializedKey: string = JSON.stringify(queryKey);\n const queryFnRef: {current: (fetcher: ApiFetcher) => Promise<T>} = useRef(queryFn);\n queryFnRef.current = queryFn;\n // Only the latest request may write state, so a slow earlier response cannot overwrite a newer one.\n const latestRequestRef: {current: number} = useRef(0);\n\n const refetch: () => Promise<T | undefined> = useCallback(async (): Promise<T | undefined> => {\n latestRequestRef.current += 1;\n const requestId: number = latestRequestRef.current;\n\n setIsLoading(true);\n\n try {\n const result: T = await queryFnRef.current(resolvedFetcher);\n\n if (requestId === latestRequestRef.current) {\n setData(result);\n setError(null);\n }\n\n return result;\n } catch (err) {\n if (requestId === latestRequestRef.current) {\n setError(err instanceof Error ? err : new Error(String(err)));\n }\n\n return undefined;\n } finally {\n if (requestId === latestRequestRef.current) {\n setIsLoading(false);\n }\n }\n }, [resolvedFetcher]);\n\n useEffect(() => {\n if (!enabled) {\n setIsLoading(false);\n\n return undefined;\n }\n\n void refetch();\n\n return invalidator.subscribe(JSON.parse(serializedKey) as ResourceQueryKey, () => {\n void refetch();\n });\n }, [enabled, invalidator, refetch, serializedKey]);\n\n return {data, error, isLoading, refetch};\n};\n\nexport default useResourceQuery;\n"],"mappings":";;;;;;;;;;;;AAyCA,MAAa,sBAAsB,YAAqC;CACtE,MAAM,EAAC,MAAM,eAAcA,8BAAc;CACzC,MAAMC,kBAA0C,MAAM;AAEtD,iCACQ,WAAW,mBAAmBC,2CAA2B,WAAW,EAC1E;EAAC;EAAS;EAAiB;EAAW,CACvC;;;;;;;;;;;AAYH,MAAM,oBACJ,UACA,SACA,EAAC,UAAU,MAAM,YAAiC,EAAE,KACzB;CAC3B,MAAM,EAAC,cAAcC,kEAA+BH,8BAAc;CAClE,MAAMI,kBAA8B,mBAAmB,QAAQ;CAC/D,MAAM,CAAC,MAAM,+BAAmC,OAAU;CAC1D,MAAM,CAAC,OAAO,gCAAmC,KAAK;CACtD,MAAM,CAAC,WAAW,oCAAkC,QAAQ;CAE5D,MAAMC,gBAAwB,KAAK,UAAU,SAAS;CACtD,MAAMC,+BAAoE,QAAQ;AAClF,YAAW,UAAU;CAErB,MAAMC,qCAA6C,EAAE;CAErD,MAAMC,iCAAoD,YAAoC;AAC5F,mBAAiB,WAAW;EAC5B,MAAMC,YAAoB,iBAAiB;AAE3C,eAAa,KAAK;AAElB,MAAI;GACF,MAAMC,SAAY,MAAM,WAAW,QAAQ,gBAAgB;AAE3D,OAAI,cAAc,iBAAiB,SAAS;AAC1C,YAAQ,OAAO;AACf,aAAS,KAAK;;AAGhB,UAAO;WACA,KAAK;AACZ,OAAI,cAAc,iBAAiB,QACjC,UAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,IAAI,CAAC,CAAC;AAG/D;YACQ;AACR,OAAI,cAAc,iBAAiB,QACjC,cAAa,MAAM;;IAGtB,CAAC,gBAAgB,CAAC;AAErB,4BAAgB;AACd,MAAI,CAAC,SAAS;AACZ,gBAAa,MAAM;AAEnB;;AAGF,EAAK,SAAS;AAEd,SAAO,YAAY,UAAU,KAAK,MAAM,cAAc,QAA4B;AAChF,GAAK,SAAS;IACd;IACD;EAAC;EAAS;EAAa;EAAS;EAAc,CAAC;AAElD,QAAO;EAAC;EAAM;EAAO;EAAW;EAAQ;;AAG1C,+BAAe"}
@@ -0,0 +1,26 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_useManagementEndpoint = require('../useManagementEndpoint.cjs');
3
+ const require_useResourceMutation = require('../useResourceMutation.cjs');
4
+ let __thunderid_browser = require("@thunderid/browser");
5
+ __thunderid_browser = require_rolldown_runtime.__toESM(__thunderid_browser);
6
+
7
+ //#region src/hooks/users/useCreateUser.ts
8
+ /**
9
+ * Creates a user, then refetches any mounted user lists.
10
+ *
11
+ * @param options - Mutation options, including `onSuccess`, `onError`, and a per-hook `fetcher`.
12
+ * @returns The mutation state. Call `mutate(payload)` to create.
13
+ */
14
+ const useCreateUser = (options) => {
15
+ const endpoint = require_useManagementEndpoint.default("users");
16
+ return require_useResourceMutation.default((payload, fetcher) => (0, __thunderid_browser.createUser)({
17
+ ...endpoint,
18
+ fetcher,
19
+ payload
20
+ }), () => [[__thunderid_browser.UserQueryKeys.USERS]], options);
21
+ };
22
+ var useCreateUser_default = useCreateUser;
23
+
24
+ //#endregion
25
+ exports.default = useCreateUser_default;
26
+ //# sourceMappingURL=useCreateUser.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCreateUser.cjs","names":["endpoint: ManagementEndpoint","useManagementEndpoint","useResourceMutation","UserQueryKeys"],"sources":["../../../../src/hooks/users/useCreateUser.ts"],"sourcesContent":["// Copyright 2025-2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {CreateManagedUserRequest, ManagedUser, UserQueryKeys, createUser} from '@thunderid/browser';\nimport useManagementEndpoint, {ManagementEndpoint} from '../useManagementEndpoint';\nimport useResourceMutation, {ResourceMutationOptions, ResourceMutationResult} from '../useResourceMutation';\n\n/**\n * Creates a user, then refetches any mounted user lists.\n *\n * @param options - Mutation options, including `onSuccess`, `onError`, and a per-hook `fetcher`.\n * @returns The mutation state. Call `mutate(payload)` to create.\n */\nconst useCreateUser = (\n options?: ResourceMutationOptions<ManagedUser, CreateManagedUserRequest>,\n): ResourceMutationResult<ManagedUser, CreateManagedUserRequest> => {\n const endpoint: ManagementEndpoint = useManagementEndpoint('users');\n\n return useResourceMutation(\n (payload: CreateManagedUserRequest, fetcher) => createUser({...endpoint, fetcher, payload}),\n () => [[UserQueryKeys.USERS]],\n options,\n );\n};\n\nexport default useCreateUser;\n"],"mappings":";;;;;;;;;;;;;AAaA,MAAM,iBACJ,YACkE;CAClE,MAAMA,WAA+BC,sCAAsB,QAAQ;AAEnE,QAAOC,qCACJ,SAAmC,gDAAuB;EAAC,GAAG;EAAU;EAAS;EAAQ,CAAC,QACrF,CAAC,CAACC,kCAAc,MAAM,CAAC,EAC7B,QACD;;AAGH,4BAAe"}
@@ -0,0 +1,26 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_useManagementEndpoint = require('../useManagementEndpoint.cjs');
3
+ const require_useResourceMutation = require('../useResourceMutation.cjs');
4
+ let __thunderid_browser = require("@thunderid/browser");
5
+ __thunderid_browser = require_rolldown_runtime.__toESM(__thunderid_browser);
6
+
7
+ //#region src/hooks/users/useDeleteUser.ts
8
+ /**
9
+ * Deletes a user, then refetches any mounted user lists.
10
+ *
11
+ * @param options - Mutation options, including `onSuccess`, `onError`, and a per-hook `fetcher`.
12
+ * @returns The mutation state. Call `mutate(userId)` to delete.
13
+ */
14
+ const useDeleteUser = (options) => {
15
+ const endpoint = require_useManagementEndpoint.default("users");
16
+ return require_useResourceMutation.default((userId, fetcher) => (0, __thunderid_browser.deleteUser)({
17
+ ...endpoint,
18
+ fetcher,
19
+ userId
20
+ }), () => [[__thunderid_browser.UserQueryKeys.USERS]], options);
21
+ };
22
+ var useDeleteUser_default = useDeleteUser;
23
+
24
+ //#endregion
25
+ exports.default = useDeleteUser_default;
26
+ //# sourceMappingURL=useDeleteUser.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDeleteUser.cjs","names":["endpoint: ManagementEndpoint","useManagementEndpoint","useResourceMutation","UserQueryKeys"],"sources":["../../../../src/hooks/users/useDeleteUser.ts"],"sourcesContent":["// Copyright 2025-2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {UserQueryKeys, deleteUser} from '@thunderid/browser';\nimport useManagementEndpoint, {ManagementEndpoint} from '../useManagementEndpoint';\nimport useResourceMutation, {ResourceMutationOptions, ResourceMutationResult} from '../useResourceMutation';\n\n/**\n * Deletes a user, then refetches any mounted user lists.\n *\n * @param options - Mutation options, including `onSuccess`, `onError`, and a per-hook `fetcher`.\n * @returns The mutation state. Call `mutate(userId)` to delete.\n */\nconst useDeleteUser = (options?: ResourceMutationOptions<void, string>): ResourceMutationResult<void, string> => {\n const endpoint: ManagementEndpoint = useManagementEndpoint('users');\n\n return useResourceMutation(\n (userId: string, fetcher) => deleteUser({...endpoint, fetcher, userId}),\n () => [[UserQueryKeys.USERS]],\n options,\n );\n};\n\nexport default useDeleteUser;\n"],"mappings":";;;;;;;;;;;;;AAaA,MAAM,iBAAiB,YAA0F;CAC/G,MAAMA,WAA+BC,sCAAsB,QAAQ;AAEnE,QAAOC,qCACJ,QAAgB,gDAAuB;EAAC,GAAG;EAAU;EAAS;EAAO,CAAC,QACjE,CAAC,CAACC,kCAAc,MAAM,CAAC,EAC7B,QACD;;AAGH,4BAAe"}
@@ -0,0 +1,30 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_useManagementEndpoint = require('../useManagementEndpoint.cjs');
3
+ const require_useResourceQuery = require('../useResourceQuery.cjs');
4
+ let __thunderid_browser = require("@thunderid/browser");
5
+ __thunderid_browser = require_rolldown_runtime.__toESM(__thunderid_browser);
6
+
7
+ //#region src/hooks/users/useGetUser.ts
8
+ /**
9
+ * Fetches a single user. Does nothing until `userId` is set.
10
+ *
11
+ * @param userId - Identifier of the user.
12
+ * @param options - Query options, including a per-hook `fetcher`.
13
+ * @returns The query state.
14
+ */
15
+ const useGetUser = (userId, options) => {
16
+ const endpoint = require_useManagementEndpoint.default("users");
17
+ return require_useResourceQuery.default([__thunderid_browser.UserQueryKeys.USER, userId], (fetcher) => (0, __thunderid_browser.getUser)({
18
+ ...endpoint,
19
+ fetcher,
20
+ userId
21
+ }), {
22
+ ...options,
23
+ enabled: Boolean(userId) && options?.enabled !== false
24
+ });
25
+ };
26
+ var useGetUser_default = useGetUser;
27
+
28
+ //#endregion
29
+ exports.default = useGetUser_default;
30
+ //# sourceMappingURL=useGetUser.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGetUser.cjs","names":["endpoint: ManagementEndpoint","useManagementEndpoint","useResourceQuery","UserQueryKeys"],"sources":["../../../../src/hooks/users/useGetUser.ts"],"sourcesContent":["// Copyright 2025-2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {ManagedUser, UserQueryKeys, getUser} from '@thunderid/browser';\nimport useManagementEndpoint, {ManagementEndpoint} from '../useManagementEndpoint';\nimport useResourceQuery, {ResourceQueryOptions, ResourceQueryResult} from '../useResourceQuery';\n\n/**\n * Fetches a single user. Does nothing until `userId` is set.\n *\n * @param userId - Identifier of the user.\n * @param options - Query options, including a per-hook `fetcher`.\n * @returns The query state.\n */\nconst useGetUser = (userId: string | undefined, options?: ResourceQueryOptions): ResourceQueryResult<ManagedUser> => {\n const endpoint: ManagementEndpoint = useManagementEndpoint('users');\n\n return useResourceQuery([UserQueryKeys.USER, userId], (fetcher) => getUser({...endpoint, fetcher, userId: userId!}), {\n ...options,\n enabled: Boolean(userId) && options?.enabled !== false,\n });\n};\n\nexport default useGetUser;\n"],"mappings":";;;;;;;;;;;;;;AAcA,MAAM,cAAc,QAA4B,YAAqE;CACnH,MAAMA,WAA+BC,sCAAsB,QAAQ;AAEnE,QAAOC,iCAAiB,CAACC,kCAAc,MAAM,OAAO,GAAG,6CAAoB;EAAC,GAAG;EAAU;EAAiB;EAAQ,CAAC,EAAE;EACnH,GAAG;EACH,SAAS,QAAQ,OAAO,IAAI,SAAS,YAAY;EAClD,CAAC;;AAGJ,yBAAe"}
@@ -0,0 +1,38 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_useManagementEndpoint = require('../useManagementEndpoint.cjs');
3
+ const require_useResourceQuery = require('../useResourceQuery.cjs');
4
+ let __thunderid_browser = require("@thunderid/browser");
5
+ __thunderid_browser = require_rolldown_runtime.__toESM(__thunderid_browser);
6
+
7
+ //#region src/hooks/users/useGetUsers.ts
8
+ /**
9
+ * Fetches a page of users.
10
+ *
11
+ * @param params - Pagination and filter parameters.
12
+ * @param options - Query options, including a per-hook `fetcher`.
13
+ * @returns The query state.
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * const {data, isLoading} = useGetUsers({limit: 20, filter: 'username sw "a"'});
18
+ * ```
19
+ */
20
+ const useGetUsers = ({ filter, limit, offset } = {}, options) => {
21
+ const endpoint = require_useManagementEndpoint.default("users");
22
+ return require_useResourceQuery.default([__thunderid_browser.UserQueryKeys.USERS, {
23
+ filter,
24
+ limit,
25
+ offset
26
+ }], (fetcher) => (0, __thunderid_browser.getUsers)({
27
+ ...endpoint,
28
+ fetcher,
29
+ filter,
30
+ limit,
31
+ offset
32
+ }), options);
33
+ };
34
+ var useGetUsers_default = useGetUsers;
35
+
36
+ //#endregion
37
+ exports.default = useGetUsers_default;
38
+ //# sourceMappingURL=useGetUsers.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGetUsers.cjs","names":["endpoint: ManagementEndpoint","useManagementEndpoint","useResourceQuery","UserQueryKeys"],"sources":["../../../../src/hooks/users/useGetUsers.ts"],"sourcesContent":["// Copyright 2025-2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {ApiFilteringParams, ManagedUserListResponse, UserQueryKeys, getUsers} from '@thunderid/browser';\nimport useManagementEndpoint, {ManagementEndpoint} from '../useManagementEndpoint';\nimport useResourceQuery, {ResourceQueryOptions, ResourceQueryResult} from '../useResourceQuery';\n\n/**\n * Fetches a page of users.\n *\n * @param params - Pagination and filter parameters.\n * @param options - Query options, including a per-hook `fetcher`.\n * @returns The query state.\n *\n * @example\n * ```tsx\n * const {data, isLoading} = useGetUsers({limit: 20, filter: 'username sw \"a\"'});\n * ```\n */\nconst useGetUsers = (\n {filter, limit, offset}: ApiFilteringParams = {},\n options?: ResourceQueryOptions,\n): ResourceQueryResult<ManagedUserListResponse> => {\n const endpoint: ManagementEndpoint = useManagementEndpoint('users');\n\n return useResourceQuery(\n [UserQueryKeys.USERS, {filter, limit, offset}],\n (fetcher) => getUsers({...endpoint, fetcher, filter, limit, offset}),\n options,\n );\n};\n\nexport default useGetUsers;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAmBA,MAAM,eACJ,EAAC,QAAQ,OAAO,WAA8B,EAAE,EAChD,YACiD;CACjD,MAAMA,WAA+BC,sCAAsB,QAAQ;AAEnE,QAAOC,iCACL,CAACC,kCAAc,OAAO;EAAC;EAAQ;EAAO;EAAO,CAAC,GAC7C,8CAAqB;EAAC,GAAG;EAAU;EAAS;EAAQ;EAAO;EAAO,CAAC,EACpE,QACD;;AAGH,0BAAe"}
@@ -0,0 +1,27 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_useManagementEndpoint = require('../useManagementEndpoint.cjs');
3
+ const require_useResourceMutation = require('../useResourceMutation.cjs');
4
+ let __thunderid_browser = require("@thunderid/browser");
5
+ __thunderid_browser = require_rolldown_runtime.__toESM(__thunderid_browser);
6
+
7
+ //#region src/hooks/users/useUpdateUser.ts
8
+ /**
9
+ * Updates a user, then refetches it and any mounted user lists.
10
+ *
11
+ * @param options - Mutation options, including `onSuccess`, `onError`, and a per-hook `fetcher`.
12
+ * @returns The mutation state. Call `mutate({userId, data})` to update.
13
+ */
14
+ const useUpdateUser = (options) => {
15
+ const endpoint = require_useManagementEndpoint.default("users");
16
+ return require_useResourceMutation.default(({ userId, data }, fetcher) => (0, __thunderid_browser.updateUser)({
17
+ ...endpoint,
18
+ fetcher,
19
+ payload: data,
20
+ userId
21
+ }), ({ userId }) => [[__thunderid_browser.UserQueryKeys.USER, userId], [__thunderid_browser.UserQueryKeys.USERS]], options);
22
+ };
23
+ var useUpdateUser_default = useUpdateUser;
24
+
25
+ //#endregion
26
+ exports.default = useUpdateUser_default;
27
+ //# sourceMappingURL=useUpdateUser.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUpdateUser.cjs","names":["endpoint: ManagementEndpoint","useManagementEndpoint","useResourceMutation","UserQueryKeys"],"sources":["../../../../src/hooks/users/useUpdateUser.ts"],"sourcesContent":["// Copyright 2025-2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {ManagedUser, UpdateManagedUserRequest, UserQueryKeys, updateUser} from '@thunderid/browser';\nimport useManagementEndpoint, {ManagementEndpoint} from '../useManagementEndpoint';\nimport useResourceMutation, {ResourceMutationOptions, ResourceMutationResult} from '../useResourceMutation';\n\n/**\n * Variables accepted by {@link useUpdateUser}'s `mutate`.\n */\nexport interface UpdateUserVariables {\n data: UpdateManagedUserRequest;\n userId: string;\n}\n\n/**\n * Updates a user, then refetches it and any mounted user lists.\n *\n * @param options - Mutation options, including `onSuccess`, `onError`, and a per-hook `fetcher`.\n * @returns The mutation state. Call `mutate({userId, data})` to update.\n */\nconst useUpdateUser = (\n options?: ResourceMutationOptions<ManagedUser, UpdateUserVariables>,\n): ResourceMutationResult<ManagedUser, UpdateUserVariables> => {\n const endpoint: ManagementEndpoint = useManagementEndpoint('users');\n\n return useResourceMutation(\n ({userId, data}: UpdateUserVariables, fetcher) => updateUser({...endpoint, fetcher, payload: data, userId}),\n ({userId}: UpdateUserVariables) => [[UserQueryKeys.USER, userId], [UserQueryKeys.USERS]],\n options,\n );\n};\n\nexport default useUpdateUser;\n"],"mappings":";;;;;;;;;;;;;AAqBA,MAAM,iBACJ,YAC6D;CAC7D,MAAMA,WAA+BC,sCAAsB,QAAQ;AAEnE,QAAOC,qCACJ,EAAC,QAAQ,QAA4B,gDAAuB;EAAC,GAAG;EAAU;EAAS,SAAS;EAAM;EAAO,CAAC,GAC1G,EAAC,aAAiC,CAAC,CAACC,kCAAc,MAAM,OAAO,EAAE,CAACA,kCAAc,MAAM,CAAC,EACxF,QACD;;AAGH,4BAAe"}
@@ -21,6 +21,21 @@ const require_useTheme = require('./contexts/Theme/useTheme.cjs');
21
21
  const require_useTranslation = require('./hooks/useTranslation.cjs');
22
22
  const require_flowTransformer = require('./utils/flowTransformer.cjs');
23
23
  const require_useForm = require('./hooks/useForm.cjs');
24
+ const require_useGetApplications = require('./hooks/applications/useGetApplications.cjs');
25
+ const require_useGetApplication = require('./hooks/applications/useGetApplication.cjs');
26
+ const require_useCreateApplication = require('./hooks/applications/useCreateApplication.cjs');
27
+ const require_useUpdateApplication = require('./hooks/applications/useUpdateApplication.cjs');
28
+ const require_useDeleteApplication = require('./hooks/applications/useDeleteApplication.cjs');
29
+ const require_useGetUsers = require('./hooks/users/useGetUsers.cjs');
30
+ const require_useGetUser = require('./hooks/users/useGetUser.cjs');
31
+ const require_useCreateUser = require('./hooks/users/useCreateUser.cjs');
32
+ const require_useUpdateUser = require('./hooks/users/useUpdateUser.cjs');
33
+ const require_useDeleteUser = require('./hooks/users/useDeleteUser.cjs');
34
+ const require_useGetAgents = require('./hooks/agents/useGetAgents.cjs');
35
+ const require_useGetAgent = require('./hooks/agents/useGetAgent.cjs');
36
+ const require_useCreateAgent = require('./hooks/agents/useCreateAgent.cjs');
37
+ const require_useUpdateAgent = require('./hooks/agents/useUpdateAgent.cjs');
38
+ const require_useDeleteAgent = require('./hooks/agents/useDeleteAgent.cjs');
24
39
  const require_Spinner = require('./components/primitives/Spinner/Spinner.cjs');
25
40
  const require_Button = require('./components/primitives/Button/Button.cjs');
26
41
  const require_BaseSignInButton = require('./components/actions/SignInButton/BaseSignInButton.cjs');
@@ -84,6 +99,9 @@ const require_MultiInput = require('./components/primitives/MultiInput/MultiInpu
84
99
  const require_BaseUserProfile = require('./components/presentation/UserProfile/BaseUserProfile.cjs');
85
100
  const require_updateMeProfile = require('./api/updateMeProfile.cjs');
86
101
  const require_UserProfile = require('./components/presentation/UserProfile/UserProfile.cjs');
102
+ const require_BaseChangeCredential = require('./components/presentation/ChangeCredential/BaseChangeCredential.cjs');
103
+ const require_updateMeCredentials = require('./api/updateMeCredentials.cjs');
104
+ const require_ChangeCredential = require('./components/presentation/ChangeCredential/ChangeCredential.cjs');
87
105
  const require_BaseUserAvatar = require('./components/presentation/UserAvatar/BaseUserAvatar.cjs');
88
106
  const require_UserAvatar = require('./components/presentation/UserAvatar/UserAvatar.cjs');
89
107
  const require_BaseUserDropdown = require('./components/presentation/UserDropdown/BaseUserDropdown.cjs');
@@ -120,8 +138,21 @@ Object.defineProperty(exports, 'AVATAR_URI_SCHEME', {
120
138
  }
121
139
  });
122
140
  exports.AcceptInvite = require_AcceptInvite.default;
141
+ Object.defineProperty(exports, 'AgentQueryKeys', {
142
+ enumerable: true,
143
+ get: function () {
144
+ return __thunderid_browser.AgentQueryKeys;
145
+ }
146
+ });
123
147
  exports.Alert = require_Alert.default;
148
+ Object.defineProperty(exports, 'ApplicationQueryKeys', {
149
+ enumerable: true,
150
+ get: function () {
151
+ return __thunderid_browser.ApplicationQueryKeys;
152
+ }
153
+ });
124
154
  exports.BaseAcceptInvite = require_BaseAcceptInvite.default;
155
+ exports.BaseChangeCredential = require_BaseChangeCredential.default;
125
156
  exports.BaseInviteUser = require_BaseInviteUser.default;
126
157
  exports.BaseLanguageSwitcher = require_BaseLanguageSwitcher.default;
127
158
  exports.BaseRecovery = require_BaseRecovery.default;
@@ -138,6 +169,7 @@ exports.BuildingAlt = require_BuildingAlt.default;
138
169
  exports.Button = require_Button.default;
139
170
  exports.Callback = require_Callback.Callback;
140
171
  exports.Card = require_Card.default;
172
+ exports.ChangeCredential = require_ChangeCredential.default;
141
173
  exports.Checkbox = require_Checkbox.default;
142
174
  exports.CircleAlert = require_CircleAlert.default;
143
175
  exports.CircleCheck = require_CircleCheck.default;
@@ -271,6 +303,12 @@ exports.UserDropdown = require_UserDropdown.default;
271
303
  exports.UserIcon = require_User.default;
272
304
  exports.UserProfile = require_UserProfile.default;
273
305
  exports.UserProvider = require_UserProvider.default;
306
+ Object.defineProperty(exports, 'UserQueryKeys', {
307
+ enumerable: true,
308
+ get: function () {
309
+ return __thunderid_browser.UserQueryKeys;
310
+ }
311
+ });
274
312
  Object.defineProperty(exports, 'buildAvatarSpec', {
275
313
  enumerable: true,
276
314
  get: function () {
@@ -283,7 +321,43 @@ Object.defineProperty(exports, 'countryCodeToFlagEmoji', {
283
321
  return __thunderid_browser.countryCodeToFlagEmoji;
284
322
  }
285
323
  });
324
+ Object.defineProperty(exports, 'createAgent', {
325
+ enumerable: true,
326
+ get: function () {
327
+ return __thunderid_browser.createAgent;
328
+ }
329
+ });
330
+ Object.defineProperty(exports, 'createApplication', {
331
+ enumerable: true,
332
+ get: function () {
333
+ return __thunderid_browser.createApplication;
334
+ }
335
+ });
286
336
  exports.createField = require_FieldFactory.createField;
337
+ Object.defineProperty(exports, 'createUser', {
338
+ enumerable: true,
339
+ get: function () {
340
+ return __thunderid_browser.createUser;
341
+ }
342
+ });
343
+ Object.defineProperty(exports, 'deleteAgent', {
344
+ enumerable: true,
345
+ get: function () {
346
+ return __thunderid_browser.deleteAgent;
347
+ }
348
+ });
349
+ Object.defineProperty(exports, 'deleteApplication', {
350
+ enumerable: true,
351
+ get: function () {
352
+ return __thunderid_browser.deleteApplication;
353
+ }
354
+ });
355
+ Object.defineProperty(exports, 'deleteUser', {
356
+ enumerable: true,
357
+ get: function () {
358
+ return __thunderid_browser.deleteUser;
359
+ }
360
+ });
287
361
  Object.defineProperty(exports, 'deriveAvatarContent', {
288
362
  enumerable: true,
289
363
  get: function () {
@@ -315,8 +389,44 @@ Object.defineProperty(exports, 'getActiveTheme', {
315
389
  return __thunderid_browser.getActiveTheme;
316
390
  }
317
391
  });
392
+ Object.defineProperty(exports, 'getAgent', {
393
+ enumerable: true,
394
+ get: function () {
395
+ return __thunderid_browser.getAgent;
396
+ }
397
+ });
398
+ Object.defineProperty(exports, 'getAgents', {
399
+ enumerable: true,
400
+ get: function () {
401
+ return __thunderid_browser.getAgents;
402
+ }
403
+ });
404
+ Object.defineProperty(exports, 'getApplication', {
405
+ enumerable: true,
406
+ get: function () {
407
+ return __thunderid_browser.getApplication;
408
+ }
409
+ });
410
+ Object.defineProperty(exports, 'getApplications', {
411
+ enumerable: true,
412
+ get: function () {
413
+ return __thunderid_browser.getApplications;
414
+ }
415
+ });
318
416
  exports.getConsentOptionalKey = require_ConsentCheckboxList.getConsentOptionalKey;
319
417
  exports.getMeProfile = require_getUsersMe.default;
418
+ Object.defineProperty(exports, 'getUser', {
419
+ enumerable: true,
420
+ get: function () {
421
+ return __thunderid_browser.getUser;
422
+ }
423
+ });
424
+ Object.defineProperty(exports, 'getUsers', {
425
+ enumerable: true,
426
+ get: function () {
427
+ return __thunderid_browser.getUsers;
428
+ }
429
+ });
320
430
  exports.getUsersMeMeta = require_getUsersMeMeta.default;
321
431
  Object.defineProperty(exports, 'http', {
322
432
  enumerable: true,
@@ -391,14 +501,48 @@ Object.defineProperty(exports, 'resolveMeta', {
391
501
  return __thunderid_browser.resolveMeta;
392
502
  }
393
503
  });
504
+ Object.defineProperty(exports, 'updateAgent', {
505
+ enumerable: true,
506
+ get: function () {
507
+ return __thunderid_browser.updateAgent;
508
+ }
509
+ });
510
+ Object.defineProperty(exports, 'updateApplication', {
511
+ enumerable: true,
512
+ get: function () {
513
+ return __thunderid_browser.updateApplication;
514
+ }
515
+ });
516
+ exports.updateMeCredentials = require_updateMeCredentials.default;
394
517
  exports.updateMeProfile = require_updateMeProfile.default;
518
+ Object.defineProperty(exports, 'updateUser', {
519
+ enumerable: true,
520
+ get: function () {
521
+ return __thunderid_browser.updateUser;
522
+ }
523
+ });
395
524
  exports.useBrowserUrl = require_useBrowserUrl.default;
525
+ exports.useCreateAgent = require_useCreateAgent.default;
526
+ exports.useCreateApplication = require_useCreateApplication.default;
527
+ exports.useCreateUser = require_useCreateUser.default;
528
+ exports.useDeleteAgent = require_useDeleteAgent.default;
529
+ exports.useDeleteApplication = require_useDeleteApplication.default;
530
+ exports.useDeleteUser = require_useDeleteUser.default;
396
531
  exports.useFlow = require_useFlow.default;
397
532
  exports.useForm = require_useForm.default;
533
+ exports.useGetAgent = require_useGetAgent.default;
534
+ exports.useGetAgents = require_useGetAgents.default;
535
+ exports.useGetApplication = require_useGetApplication.default;
536
+ exports.useGetApplications = require_useGetApplications.default;
537
+ exports.useGetUser = require_useGetUser.default;
538
+ exports.useGetUsers = require_useGetUsers.default;
398
539
  exports.useI18n = require_useI18n.default;
399
540
  exports.useOAuthCallback = require_useOAuthCallback.useOAuthCallback;
400
541
  exports.useTheme = require_useTheme.default;
401
542
  exports.useThunderID = require_useThunderID.default;
402
543
  exports.useTranslation = require_useTranslation.default;
544
+ exports.useUpdateAgent = require_useUpdateAgent.default;
545
+ exports.useUpdateApplication = require_useUpdateApplication.default;
546
+ exports.useUpdateUser = require_useUpdateUser.default;
403
547
  exports.useUser = require_useUser.default;
404
548
  exports.validateFieldValue = require_FieldFactory.validateFieldValue;
@@ -0,0 +1,43 @@
1
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ let __thunderid_browser = require("@thunderid/browser");
3
+ __thunderid_browser = require_rolldown_runtime.__toESM(__thunderid_browser);
4
+
5
+ //#region src/utils/createAuthenticatedFetcher.ts
6
+ const toResponse = (data, status, statusText) => ({
7
+ json: () => Promise.resolve(data),
8
+ ok: status >= 200 && status < 300,
9
+ status,
10
+ statusText: statusText ?? "",
11
+ text: () => Promise.resolve(typeof data === "string" ? data : JSON.stringify(data))
12
+ });
13
+ /**
14
+ * Creates a fetch-compatible function backed by the SDK's HTTP client for the given instance, so
15
+ * requests carry the signed-in user's access token.
16
+ *
17
+ * The HTTP client throws on a non-2xx status. This fetcher turns that back into a non-OK response
18
+ * so callers can read the real status (for example, to tell a 403 from a 404).
19
+ *
20
+ * @param instanceId - The ThunderID instance whose HTTP client should be used.
21
+ * @returns A fetcher that can be passed to any core API function.
22
+ */
23
+ const createAuthenticatedFetcher = (instanceId = 0) => async (url, config) => {
24
+ const httpClient = __thunderid_browser.FetchHttpClient.getInstance(instanceId);
25
+ try {
26
+ const response = await httpClient.request({
27
+ data: typeof config.body === "string" ? JSON.parse(config.body) : void 0,
28
+ headers: config.headers,
29
+ method: config.method ?? "GET",
30
+ url
31
+ });
32
+ return toResponse(response.data, response.status, response.statusText);
33
+ } catch (error) {
34
+ const { response } = error;
35
+ if (!response) throw error;
36
+ return toResponse(response.data, response.status, response.statusText);
37
+ }
38
+ };
39
+ var createAuthenticatedFetcher_default = createAuthenticatedFetcher;
40
+
41
+ //#endregion
42
+ exports.default = createAuthenticatedFetcher_default;
43
+ //# sourceMappingURL=createAuthenticatedFetcher.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createAuthenticatedFetcher.cjs","names":["httpClient: FetchHttpClient","FetchHttpClient","response: HttpResponse<unknown>"],"sources":["../../../src/utils/createAuthenticatedFetcher.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {ApiFetcher, FetchHttpClient, HttpError, HttpRequestConfig, HttpResponse} from '@thunderid/browser';\n\nconst toResponse = (data: unknown, status: number, statusText: string | undefined): Response =>\n ({\n json: () => Promise.resolve(data),\n ok: status >= 200 && status < 300,\n status,\n statusText: statusText ?? '',\n text: () => Promise.resolve(typeof data === 'string' ? data : JSON.stringify(data)),\n }) as Response;\n\n/**\n * Creates a fetch-compatible function backed by the SDK's HTTP client for the given instance, so\n * requests carry the signed-in user's access token.\n *\n * The HTTP client throws on a non-2xx status. This fetcher turns that back into a non-OK response\n * so callers can read the real status (for example, to tell a 403 from a 404).\n *\n * @param instanceId - The ThunderID instance whose HTTP client should be used.\n * @returns A fetcher that can be passed to any core API function.\n */\nconst createAuthenticatedFetcher =\n (instanceId = 0): ApiFetcher =>\n async (url: string, config: RequestInit): Promise<Response> => {\n const httpClient: FetchHttpClient = FetchHttpClient.getInstance(instanceId);\n\n try {\n const response: HttpResponse<unknown> = await httpClient.request({\n data: typeof config.body === 'string' ? (JSON.parse(config.body) as unknown) : undefined,\n headers: config.headers as Record<string, string>,\n method: config.method ?? 'GET',\n url,\n } as HttpRequestConfig);\n\n return toResponse(response.data, response.status, response.statusText);\n } catch (error) {\n const {response} = error as HttpError;\n\n if (!response) {\n throw error;\n }\n\n return toResponse(response.data, response.status, response.statusText);\n }\n };\n\nexport default createAuthenticatedFetcher;\n"],"mappings":";;;;;AAKA,MAAM,cAAc,MAAe,QAAgB,gBAChD;CACC,YAAY,QAAQ,QAAQ,KAAK;CACjC,IAAI,UAAU,OAAO,SAAS;CAC9B;CACA,YAAY,cAAc;CAC1B,YAAY,QAAQ,QAAQ,OAAO,SAAS,WAAW,OAAO,KAAK,UAAU,KAAK,CAAC;CACpF;;;;;;;;;;;AAYH,MAAM,8BACH,aAAa,MACd,OAAO,KAAa,WAA2C;CAC7D,MAAMA,aAA8BC,oCAAgB,YAAY,WAAW;AAE3E,KAAI;EACF,MAAMC,WAAkC,MAAM,WAAW,QAAQ;GAC/D,MAAM,OAAO,OAAO,SAAS,WAAY,KAAK,MAAM,OAAO,KAAK,GAAe;GAC/E,SAAS,OAAO;GAChB,QAAQ,OAAO,UAAU;GACzB;GACD,CAAsB;AAEvB,SAAO,WAAW,SAAS,MAAM,SAAS,QAAQ,SAAS,WAAW;UAC/D,OAAO;EACd,MAAM,EAAC,aAAY;AAEnB,MAAI,CAAC,SACH,OAAM;AAGR,SAAO,WAAW,SAAS,MAAM,SAAS,QAAQ,SAAS,WAAW;;;AAI5E,yCAAe"}
@@ -0,0 +1,38 @@
1
+
2
+ //#region src/utils/createResourceInvalidator.ts
3
+ const matches = (queryKey, partialKey) => partialKey.every((part, index) => JSON.stringify(part) === JSON.stringify(queryKey[index]));
4
+ /**
5
+ * Creates an in-memory invalidator. Invalidation matches on key prefix, so invalidating
6
+ * `['applications']` reaches every applications list query regardless of its pagination.
7
+ */
8
+ const createResourceInvalidator = () => {
9
+ const subscriptions = /* @__PURE__ */ new Set();
10
+ return {
11
+ invalidate: (partialKey) => {
12
+ subscriptions.forEach(({ listener, queryKey }) => {
13
+ if (matches(queryKey, partialKey)) listener();
14
+ });
15
+ },
16
+ subscribe: (queryKey, listener) => {
17
+ const subscription = {
18
+ listener,
19
+ queryKey
20
+ };
21
+ subscriptions.add(subscription);
22
+ return () => {
23
+ subscriptions.delete(subscription);
24
+ };
25
+ }
26
+ };
27
+ };
28
+ /**
29
+ * Used when the context does not supply an invalidator, for example when an integration renders
30
+ * its own `ThunderIDContext` value instead of using `ThunderIDProvider`.
31
+ */
32
+ const fallbackResourceInvalidator = createResourceInvalidator();
33
+ var createResourceInvalidator_default = createResourceInvalidator;
34
+
35
+ //#endregion
36
+ exports.default = createResourceInvalidator_default;
37
+ exports.fallbackResourceInvalidator = fallbackResourceInvalidator;
38
+ //# sourceMappingURL=createResourceInvalidator.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createResourceInvalidator.cjs","names":["subscription: {listener: () => void; queryKey: ResourceQueryKey}","fallbackResourceInvalidator: ResourceInvalidator"],"sources":["../../../src/utils/createResourceInvalidator.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * A key identifying a resource query, e.g. `['applications', {limit: 10}]` or `['application', id]`.\n */\nexport type ResourceQueryKey = readonly unknown[];\n\n/**\n * Lets mutations tell mounted queries that their data is stale.\n */\nexport interface ResourceInvalidator {\n /**\n * Notifies every subscribed query whose key starts with `partialKey`.\n */\n invalidate: (partialKey: ResourceQueryKey) => void;\n /**\n * Registers a listener for invalidations matching `queryKey`. Returns an unsubscribe function.\n */\n subscribe: (queryKey: ResourceQueryKey, listener: () => void) => () => void;\n}\n\nconst matches = (queryKey: ResourceQueryKey, partialKey: ResourceQueryKey): boolean =>\n partialKey.every((part: unknown, index: number) => JSON.stringify(part) === JSON.stringify(queryKey[index]));\n\n/**\n * Creates an in-memory invalidator. Invalidation matches on key prefix, so invalidating\n * `['applications']` reaches every applications list query regardless of its pagination.\n */\nconst createResourceInvalidator = (): ResourceInvalidator => {\n const subscriptions = new Set<{listener: () => void; queryKey: ResourceQueryKey}>();\n\n return {\n invalidate: (partialKey: ResourceQueryKey): void => {\n subscriptions.forEach(({listener, queryKey}: {listener: () => void; queryKey: ResourceQueryKey}) => {\n if (matches(queryKey, partialKey)) {\n listener();\n }\n });\n },\n subscribe: (queryKey: ResourceQueryKey, listener: () => void): (() => void) => {\n const subscription: {listener: () => void; queryKey: ResourceQueryKey} = {listener, queryKey};\n subscriptions.add(subscription);\n\n return (): void => {\n subscriptions.delete(subscription);\n };\n },\n };\n};\n\n/**\n * Used when the context does not supply an invalidator, for example when an integration renders\n * its own `ThunderIDContext` value instead of using `ThunderIDProvider`.\n */\nexport const fallbackResourceInvalidator: ResourceInvalidator = createResourceInvalidator();\n\nexport default createResourceInvalidator;\n"],"mappings":";;AAsBA,MAAM,WAAW,UAA4B,eAC3C,WAAW,OAAO,MAAe,UAAkB,KAAK,UAAU,KAAK,KAAK,KAAK,UAAU,SAAS,OAAO,CAAC;;;;;AAM9G,MAAM,kCAAuD;CAC3D,MAAM,gCAAgB,IAAI,KAAyD;AAEnF,QAAO;EACL,aAAa,eAAuC;AAClD,iBAAc,SAAS,EAAC,UAAU,eAAkE;AAClG,QAAI,QAAQ,UAAU,WAAW,CAC/B,WAAU;KAEZ;;EAEJ,YAAY,UAA4B,aAAuC;GAC7E,MAAMA,eAAmE;IAAC;IAAU;IAAS;AAC7F,iBAAc,IAAI,aAAa;AAE/B,gBAAmB;AACjB,kBAAc,OAAO,aAAa;;;EAGvC;;;;;;AAOH,MAAaC,8BAAmD,2BAA2B;AAE3F,wCAAe"}