jazz-tools 0.18.5 → 0.18.6

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 (59) hide show
  1. package/.turbo/turbo-build.log +53 -53
  2. package/CHANGELOG.md +16 -0
  3. package/dist/better-auth/auth/client.d.ts.map +1 -1
  4. package/dist/better-auth/auth/client.js +7 -1
  5. package/dist/better-auth/auth/client.js.map +1 -1
  6. package/dist/better-auth/auth/react.d.ts +0 -2145
  7. package/dist/better-auth/auth/react.d.ts.map +1 -1
  8. package/dist/better-auth/auth/react.js +2 -14
  9. package/dist/better-auth/auth/react.js.map +1 -1
  10. package/dist/better-auth/auth/server.d.ts.map +1 -1
  11. package/dist/better-auth/auth/server.js +73 -22
  12. package/dist/better-auth/auth/server.js.map +1 -1
  13. package/dist/better-auth/auth/tests/react.test.d.ts +2 -0
  14. package/dist/better-auth/auth/tests/react.test.d.ts.map +1 -0
  15. package/dist/{chunk-3LE7N6TH.js → chunk-45VKEOXG.js} +123 -81
  16. package/dist/chunk-45VKEOXG.js.map +1 -0
  17. package/dist/index.js +1 -1
  18. package/dist/inspector/{custom-element-WCY6D3QJ.js → custom-element-IBHKHN27.js} +19 -69
  19. package/dist/inspector/custom-element-IBHKHN27.js.map +1 -0
  20. package/dist/inspector/index.d.ts +5 -1
  21. package/dist/inspector/index.d.ts.map +1 -1
  22. package/dist/inspector/index.js +18 -17
  23. package/dist/inspector/index.js.map +1 -1
  24. package/dist/inspector/register-custom-element.js +1 -1
  25. package/dist/inspector/viewer/new-app.d.ts +0 -3
  26. package/dist/inspector/viewer/new-app.d.ts.map +1 -1
  27. package/dist/react-core/index.js +3 -1
  28. package/dist/react-core/index.js.map +1 -1
  29. package/dist/testing.js +2 -2
  30. package/dist/testing.js.map +1 -1
  31. package/dist/tools/coValues/inbox.d.ts +5 -5
  32. package/dist/tools/coValues/inbox.d.ts.map +1 -1
  33. package/dist/worker/index.d.ts +8 -2
  34. package/dist/worker/index.d.ts.map +1 -1
  35. package/dist/worker/index.js +7 -3
  36. package/dist/worker/index.js.map +1 -1
  37. package/package.json +4 -4
  38. package/src/better-auth/auth/client.ts +8 -2
  39. package/src/better-auth/auth/react.tsx +2 -51
  40. package/src/better-auth/auth/server.ts +94 -24
  41. package/src/better-auth/auth/tests/client.test.ts +92 -4
  42. package/src/better-auth/auth/tests/react.test.tsx +43 -0
  43. package/src/better-auth/auth/tests/server.test.ts +276 -98
  44. package/src/inspector/custom-element.tsx +1 -1
  45. package/src/inspector/index.tsx +44 -0
  46. package/src/inspector/viewer/new-app.tsx +0 -18
  47. package/src/tools/coValues/inbox.ts +190 -108
  48. package/src/tools/testing.ts +1 -1
  49. package/src/tools/tests/coFeed.test.ts +33 -22
  50. package/src/tools/tests/coList.test.ts +6 -4
  51. package/src/tools/tests/coMap.test.ts +13 -5
  52. package/src/tools/tests/exportImport.test.ts +3 -1
  53. package/src/tools/tests/groupsAndAccounts.test.ts +56 -44
  54. package/src/tools/tests/inbox.test.ts +293 -31
  55. package/src/worker/index.ts +15 -5
  56. package/tsup.config.ts +1 -1
  57. package/dist/chunk-3LE7N6TH.js.map +0 -1
  58. package/dist/inspector/custom-element-WCY6D3QJ.js.map +0 -1
  59. package/src/inspector/index.ts +0 -23
@@ -1,5 +1,5 @@
1
1
 
2
- > jazz-tools@0.18.5 build /home/runner/_work/jazz/jazz/packages/jazz-tools
2
+ > jazz-tools@0.18.6 build /home/runner/_work/jazz/jazz/packages/jazz-tools
3
3
  > tsup && pnpm types && pnpm build:svelte
4
4
 
5
5
  CLI Building entry: {"index":"src/index.ts","testing":"src/testing.ts"}
@@ -10,7 +10,7 @@
10
10
  CLI Using tsconfig: tsconfig.json
11
11
  CLI Building entry: {"index":"src/expo/index.ts","testing":"src/expo/testing.ts","crypto":"src/expo/crypto.ts"}
12
12
  CLI Using tsconfig: tsconfig.json
13
- CLI Building entry: {"index":"src/inspector/index.ts"}
13
+ CLI Building entry: {"index":"src/inspector/index.tsx"}
14
14
  CLI Using tsconfig: tsconfig.json
15
15
  CLI Building entry: {"register-custom-element":"src/inspector/register-custom-element.ts"}
16
16
  CLI Using tsconfig: tsconfig.json
@@ -107,93 +107,93 @@
107
107
  ESM Build start
108
108
  CLI Cleaning output folder
109
109
  ESM Build start
110
- ESM dist/tiptap/index.js 564.00 B
111
- ESM dist/tiptap/index.js.map 1.21 KB
112
- ESM ⚡️ Build success in 14ms
113
110
  ESM dist/react/ssr.js 688.00 B
114
111
  ESM dist/react/ssr.js.map 1.12 KB
112
+ ESM ⚡️ Build success in 19ms
113
+ ESM dist/tiptap/index.js 564.00 B
114
+ ESM dist/tiptap/index.js.map 1.21 KB
115
+ ESM ⚡️ Build success in 15ms
116
+ ESM dist/worker/index.js 2.42 KB
117
+ ESM dist/worker/index.js.map 5.08 KB
118
+ ESM ⚡️ Build success in 15ms
119
+ ESM dist/expo/index.js 4.68 KB
120
+ ESM dist/expo/crypto.js 153.00 B
121
+ ESM dist/expo/testing.js 112.00 B
122
+ ESM dist/expo/index.js.map 10.23 KB
123
+ ESM dist/expo/crypto.js.map 189.00 B
124
+ ESM dist/expo/testing.js.map 168.00 B
125
+ ESM ⚡️ Build success in 24ms
126
+ ESM dist/better-auth/auth/client.js 4.44 KB
127
+ ESM dist/better-auth/auth/server.js 8.18 KB
128
+ ESM dist/better-auth/auth/react.js 799.00 B
129
+ ESM dist/better-auth/auth/client.js.map 8.24 KB
130
+ ESM dist/better-auth/auth/react.js.map 2.04 KB
131
+ ESM dist/better-auth/auth/server.js.map 15.03 KB
115
132
  ESM ⚡️ Build success in 17ms
116
- ESM dist/worker/index.js 2.33 KB
117
- ESM dist/worker/index.js.map 4.79 KB
118
- ESM ⚡️ Build success in 14ms
119
- ESM dist/better-auth/auth/client.js 4.36 KB
120
- ESM dist/better-auth/auth/react.js 1.19 KB
121
- ESM dist/better-auth/auth/server.js 6.10 KB
122
- ESM dist/better-auth/auth/client.js.map 8.12 KB
123
- ESM dist/better-auth/auth/react.js.map 3.37 KB
124
- ESM dist/better-auth/auth/server.js.map 11.54 KB
125
- ESM ⚡️ Build success in 20ms
126
133
  ESM dist/media/index.js 236.00 B
127
134
  ESM dist/media/index.browser.js 2.79 KB
128
- ESM dist/media/index.native.js 2.90 KB
129
135
  ESM dist/media/index.server.js 2.95 KB
130
136
  ESM dist/media/chunk-W3S526L3.js 6.47 KB
137
+ ESM dist/media/index.native.js 2.90 KB
131
138
  ESM dist/media/index.js.map 71.00 B
132
139
  ESM dist/media/index.browser.js.map 6.15 KB
133
- ESM dist/media/index.native.js.map 6.09 KB
134
140
  ESM dist/media/index.server.js.map 6.37 KB
135
141
  ESM dist/media/chunk-W3S526L3.js.map 16.57 KB
136
- ESM ⚡️ Build success in 32ms
142
+ ESM dist/media/index.native.js.map 6.09 KB
143
+ ESM ⚡️ Build success in 36ms
144
+ ESM dist/browser/index.js 13.64 KB
145
+ ESM dist/browser/index.js.map 29.14 KB
146
+ ESM ⚡️ Build success in 37ms
137
147
  ESM dist/react-native/index.js 2.53 KB
138
148
  ESM dist/react-native/testing.js 120.00 B
139
149
  ESM dist/react-native/crypto.js 161.00 B
140
150
  ESM dist/react-native/index.js.map 5.68 KB
141
151
  ESM dist/react-native/testing.js.map 176.00 B
142
152
  ESM dist/react-native/crypto.js.map 197.00 B
143
- ESM ⚡️ Build success in 30ms
144
- ESM dist/browser/index.js 13.64 KB
145
- ESM dist/browser/index.js.map 29.14 KB
146
- ESM ⚡️ Build success in 39ms
147
- ESM dist/expo/index.js 4.68 KB
148
- ESM dist/expo/testing.js 112.00 B
149
- ESM dist/expo/crypto.js 153.00 B
150
- ESM dist/expo/index.js.map 10.23 KB
151
- ESM dist/expo/testing.js.map 168.00 B
152
- ESM dist/expo/crypto.js.map 189.00 B
153
- ESM ⚡️ Build success in 45ms
153
+ ESM ⚡️ Build success in 34ms
154
154
  ESM dist/react-native-core/index.js 17.90 KB
155
- ESM dist/react-native-core/crypto.js 2.10 KB
156
155
  ESM dist/react-native-core/testing.js 119.00 B
156
+ ESM dist/react-native-core/crypto.js 2.10 KB
157
157
  ESM dist/react-native-core/index.js.map 36.66 KB
158
158
  ESM dist/react-native-core/testing.js.map 175.00 B
159
159
  ESM dist/react-native-core/crypto.js.map 4.25 KB
160
- ESM ⚡️ Build success in 48ms
160
+ ESM ⚡️ Build success in 38ms
161
+ ESM dist/prosemirror/index.js 77.63 KB
162
+ ESM dist/prosemirror/index.js.map 306.98 KB
163
+ ESM ⚡️ Build success in 40ms
161
164
  ESM dist/react/testing.js 122.00 B
162
165
  ESM dist/react/index.js 24.66 KB
163
166
  ESM dist/react/testing.js.map 165.00 B
164
167
  ESM dist/react/index.js.map 53.43 KB
165
- ESM ⚡️ Build success in 51ms
166
- ESM dist/prosemirror/index.js 77.63 KB
167
- ESM dist/prosemirror/index.js.map 306.98 KB
168
- ESM ⚡️ Build success in 59ms
169
- ESM dist/inspector/index.js 61.52 KB
170
- ESM dist/inspector/index.js.map 109.98 KB
171
- ESM ⚡️ Build success in 76ms
172
- ESM dist/react-core/index.js 143.63 KB
168
+ ESM ⚡️ Build success in 40ms
169
+ ESM dist/inspector/index.js 61.57 KB
170
+ ESM dist/inspector/index.js.map 110.11 KB
171
+ ESM ⚡️ Build success in 60ms
172
+ ESM dist/index.js 26.13 KB
173
+ ESM dist/chunk-45VKEOXG.js 167.19 KB
174
+ ESM dist/testing.js 7.17 KB
175
+ ESM dist/testing.js.map 14.10 KB
176
+ ESM dist/index.js.map 52.92 KB
177
+ ESM dist/chunk-45VKEOXG.js.map 397.84 KB
178
+ ESM ⚡️ Build success in 82ms
173
179
  ESM dist/react-core/testing.js 1.17 KB
174
180
  ESM dist/react-core/chunk-7DYMJ74I.js 279.00 B
181
+ ESM dist/react-core/index.js 143.64 KB
175
182
  ESM dist/react-core/testing.js.map 1.82 KB
176
183
  ESM dist/react-core/chunk-7DYMJ74I.js.map 533.00 B
177
- ESM dist/react-core/index.js.map 390.21 KB
178
- ESM ⚡️ Build success in 91ms
179
- ESM dist/index.js 26.13 KB
180
- ESM dist/chunk-3LE7N6TH.js 166.47 KB
181
- ESM dist/testing.js 7.17 KB
182
- ESM dist/index.js.map 52.92 KB
183
- ESM dist/testing.js.map 14.10 KB
184
- ESM dist/chunk-3LE7N6TH.js.map 395.92 KB
185
- ESM ⚡️ Build success in 96ms
184
+ ESM dist/react-core/index.js.map 391.48 KB
185
+ ESM ⚡️ Build success in 79ms
186
186
  ESM dist/inspector/register-custom-element.js 218.00 B
187
187
  ESM dist/inspector/register-custom-element.js.map 314.00 B
188
- ESM dist/inspector/custom-element-WCY6D3QJ.js 1.53 MB
189
- ESM dist/inspector/custom-element-WCY6D3QJ.js.map 2.35 MB
190
- ESM ⚡️ Build success in 125ms
188
+ ESM dist/inspector/custom-element-IBHKHN27.js 1.53 MB
189
+ ESM dist/inspector/custom-element-IBHKHN27.js.map 2.35 MB
190
+ ESM ⚡️ Build success in 117ms
191
191
 
192
- > jazz-tools@0.18.5 types /home/runner/_work/jazz/jazz/packages/jazz-tools
192
+ > jazz-tools@0.18.6 types /home/runner/_work/jazz/jazz/packages/jazz-tools
193
193
  > tsc --outDir dist
194
194
 
195
195
 
196
- > jazz-tools@0.18.5 build:svelte /home/runner/_work/jazz/jazz/packages/jazz-tools
196
+ > jazz-tools@0.18.6 build:svelte /home/runner/_work/jazz/jazz/packages/jazz-tools
197
197
  > rm -rf dist/svelte && svelte-package -i src/svelte -o dist/svelte --tsconfig tsconfig.svelte.json
198
198
 
199
199
  src/svelte -> dist/svelte
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # jazz-tools
2
2
 
3
+ ## 0.18.6
4
+
5
+ ### Patch Changes
6
+
7
+ - 975d1c3: Fixed the startWorker type to return a shallowly-loaded worker account.
8
+ - ccbb795: Add skipInboxLoad option to startWorker
9
+ - 0dae338: Add concurrency limit on the Inbox subscribe, and simplify the failed messages management
10
+ - 934679c: feat: Better Auth EmailOTP plugin is now supported
11
+ - 28defd0: Fix peer role to be client when connecting the test accounts to the test sync server
12
+ - e0f17ed: Fix the react dependency error when loading the inspector as custom element
13
+ - 88ef339: fix: removed unwanted browser dependency in order to make better-auth provider works on react-native
14
+ - Updated dependencies [9e792c7]
15
+ - cojson@0.18.6
16
+ - cojson-storage-indexeddb@0.18.6
17
+ - cojson-transport-ws@0.18.6
18
+
3
19
  ## 0.18.5
4
20
 
5
21
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/better-auth/auth/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EAEjB,OAAO,EACP,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB;;wBAmBC,UAAU,CAAC,OAAO,UAAU,CAAC;;;sCAIvB,eAAe,CAAC,OAAO,CAAC;4CAGlB,iBAAiB;;;;;;;;;;;CA6H1D,CAAC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/better-auth/auth/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EAEjB,OAAO,EACP,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAS9C;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB;;wBAmBC,UAAU,CAAC,OAAO,UAAU,CAAC;;;sCAIvB,eAAe,CAAC,OAAO,CAAC;4CAGlB,iBAAiB;;;;;;;;;;;CA4H1D,CAAC"}
@@ -1,4 +1,10 @@
1
1
  // src/better-auth/auth/client.ts
2
+ var SIGNUP_URLS = [
3
+ "/sign-up",
4
+ "/sign-in/social",
5
+ "/sign-in/oauth2",
6
+ "/email-otp/send-verification-otp"
7
+ ];
2
8
  var jazzPluginClient = () => {
3
9
  let jazzContext;
4
10
  let authSecretStorage;
@@ -51,7 +57,7 @@ var jazzPluginClient = () => {
51
57
  name: "jazz-plugin",
52
58
  hooks: {
53
59
  async onRequest(context) {
54
- if (context.url.toString().includes("/sign-up") || context.url.toString().includes("/sign-in/social")) {
60
+ if (SIGNUP_URLS.some((url) => context.url.toString().includes(url))) {
55
61
  const credentials = await authSecretStorage.get();
56
62
  if (!credentials) {
57
63
  throw new Error("Jazz credentials not found");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/better-auth/auth/client.ts"],"sourcesContent":["import type { BetterAuthClientPlugin } from \"better-auth\";\nimport type {\n AuthSecretStorage,\n AuthSetPayload,\n Account,\n JazzContextType,\n} from \"jazz-tools\";\nimport type { jazzPlugin } from \"./server.js\";\n\n/**\n * @example\n * ```ts\n * const auth = betterAuth({\n * plugins: [jazzPluginClient()],\n * });\n * ```\n */\nexport const jazzPluginClient = () => {\n let jazzContext: JazzContextType<Account>;\n let authSecretStorage: AuthSecretStorage;\n let signOutUnsubscription: () => void;\n\n const authenticateOnJazz = async (jazzAuth: AuthSetPayload) => {\n const parsedJazzAuth = {\n ...jazzAuth,\n secretSeed: jazzAuth.secretSeed\n ? Uint8Array.from(jazzAuth.secretSeed)\n : undefined,\n };\n\n await jazzContext.authenticate(parsedJazzAuth);\n await authSecretStorage.set(parsedJazzAuth);\n };\n\n return {\n id: \"jazz-plugin\",\n $InferServerPlugin: {} as ReturnType<typeof jazzPlugin>,\n getActions: ($fetch, $store) => {\n return {\n jazz: {\n setJazzContext: (context: JazzContextType<Account>) => {\n jazzContext = context;\n },\n setAuthSecretStorage: (storage: AuthSecretStorage) => {\n authSecretStorage = storage;\n if (signOutUnsubscription) signOutUnsubscription();\n\n // This is a workaround to logout from Better Auth when user logs out directly from Jazz\n signOutUnsubscription = authSecretStorage.onUpdate(\n (isAuthenticated) => {\n if (isAuthenticated === false) {\n const session = $store.atoms.session?.get();\n if (!session) return;\n\n // if the user logs out from Better Auth, the get session is immediately called\n // so we must wait the next fetched session to understand if we need to call sign-out\n if (session.isPending || session.isRefetching) {\n // listen once for next session's data\n const unsub = $store.atoms.session?.listen((session) => {\n unsub?.();\n // if the session is null, user has been already logged out from Better Auth\n if (session.data !== null) {\n $fetch(\"/sign-out\", { method: \"POST\" });\n }\n });\n }\n // if the session is not pending, it means user logged out from Jazz only\n // so we call the sign-out api\n else {\n $fetch(\"/sign-out\", { method: \"POST\" });\n }\n }\n },\n );\n },\n },\n };\n },\n fetchPlugins: [\n {\n id: \"jazz-plugin\",\n name: \"jazz-plugin\",\n hooks: {\n async onRequest(context) {\n if (\n context.url.toString().includes(\"/sign-up\") ||\n context.url.toString().includes(\"/sign-in/social\")\n ) {\n const credentials = await authSecretStorage.get();\n\n if (!credentials) {\n throw new Error(\"Jazz credentials not found\");\n }\n\n context.headers.set(\n \"x-jazz-auth\",\n JSON.stringify({\n accountID: credentials.accountID,\n secretSeed: credentials.secretSeed,\n accountSecret: credentials.accountSecret,\n }),\n );\n }\n },\n async onSuccess(context) {\n if (context.request.url.toString().includes(\"/sign-up\")) {\n await authenticateOnJazz(context.data.jazzAuth);\n return;\n }\n\n if (context.request.url.toString().includes(\"/sign-in/email\")) {\n await authenticateOnJazz(context.data.jazzAuth);\n return;\n }\n\n if (context.request.url.toString().includes(\"/get-session\")) {\n if (context.data === null) {\n if (authSecretStorage.isAuthenticated === true) {\n console.warn(\n \"Jazz is authenticated, but the session is null\",\n );\n }\n return;\n }\n\n if (!context.data?.user) {\n return;\n }\n\n if (authSecretStorage.isAuthenticated === false) {\n console.info(\n \"Jazz is not authenticated, using Better Auth stored credentials\",\n );\n await authenticateOnJazz(context.data.jazzAuth);\n return;\n }\n\n const sessionAccountID = context.data.user.accountID;\n\n const credentials = await authSecretStorage.get();\n\n if (!credentials) {\n throw new Error(\"Jazz credentials not found\");\n }\n\n if (credentials.accountID !== sessionAccountID) {\n console.info(\n \"Jazz credentials mismatch, using Better Auth stored credentials\",\n );\n await authenticateOnJazz(context.data.jazzAuth);\n }\n return;\n }\n\n if (context.request.url.toString().includes(\"/sign-out\")) {\n await jazzContext.logOut();\n return;\n }\n\n if (context.request.url.toString().includes(\"/delete-user\")) {\n await jazzContext.logOut();\n return;\n }\n },\n },\n },\n ],\n } satisfies BetterAuthClientPlugin;\n};\n"],"mappings":"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","names":["session"]}
1
+ {"version":3,"sources":["../../../src/better-auth/auth/client.ts"],"sourcesContent":["import type { BetterAuthClientPlugin } from \"better-auth\";\nimport type {\n AuthSecretStorage,\n AuthSetPayload,\n Account,\n JazzContextType,\n} from \"jazz-tools\";\nimport type { jazzPlugin } from \"./server.js\";\n\nconst SIGNUP_URLS = [\n \"/sign-up\",\n \"/sign-in/social\",\n \"/sign-in/oauth2\",\n \"/email-otp/send-verification-otp\",\n];\n\n/**\n * @example\n * ```ts\n * const auth = betterAuth({\n * plugins: [jazzPluginClient()],\n * });\n * ```\n */\nexport const jazzPluginClient = () => {\n let jazzContext: JazzContextType<Account>;\n let authSecretStorage: AuthSecretStorage;\n let signOutUnsubscription: () => void;\n\n const authenticateOnJazz = async (jazzAuth: AuthSetPayload) => {\n const parsedJazzAuth = {\n ...jazzAuth,\n secretSeed: jazzAuth.secretSeed\n ? Uint8Array.from(jazzAuth.secretSeed)\n : undefined,\n };\n\n await jazzContext.authenticate(parsedJazzAuth);\n await authSecretStorage.set(parsedJazzAuth);\n };\n\n return {\n id: \"jazz-plugin\",\n $InferServerPlugin: {} as ReturnType<typeof jazzPlugin>,\n getActions: ($fetch, $store) => {\n return {\n jazz: {\n setJazzContext: (context: JazzContextType<Account>) => {\n jazzContext = context;\n },\n setAuthSecretStorage: (storage: AuthSecretStorage) => {\n authSecretStorage = storage;\n if (signOutUnsubscription) signOutUnsubscription();\n\n // This is a workaround to logout from Better Auth when user logs out directly from Jazz\n signOutUnsubscription = authSecretStorage.onUpdate(\n (isAuthenticated) => {\n if (isAuthenticated === false) {\n const session = $store.atoms.session?.get();\n if (!session) return;\n\n // if the user logs out from Better Auth, the get session is immediately called\n // so we must wait the next fetched session to understand if we need to call sign-out\n if (session.isPending || session.isRefetching) {\n // listen once for next session's data\n const unsub = $store.atoms.session?.listen((session) => {\n unsub?.();\n // if the session is null, user has been already logged out from Better Auth\n if (session.data !== null) {\n $fetch(\"/sign-out\", { method: \"POST\" });\n }\n });\n }\n // if the session is not pending, it means user logged out from Jazz only\n // so we call the sign-out api\n else {\n $fetch(\"/sign-out\", { method: \"POST\" });\n }\n }\n },\n );\n },\n },\n };\n },\n fetchPlugins: [\n {\n id: \"jazz-plugin\",\n name: \"jazz-plugin\",\n hooks: {\n async onRequest(context) {\n if (\n SIGNUP_URLS.some((url) => context.url.toString().includes(url))\n ) {\n const credentials = await authSecretStorage.get();\n\n if (!credentials) {\n throw new Error(\"Jazz credentials not found\");\n }\n\n context.headers.set(\n \"x-jazz-auth\",\n JSON.stringify({\n accountID: credentials.accountID,\n secretSeed: credentials.secretSeed,\n accountSecret: credentials.accountSecret,\n }),\n );\n }\n },\n async onSuccess(context) {\n if (context.request.url.toString().includes(\"/sign-up\")) {\n await authenticateOnJazz(context.data.jazzAuth);\n return;\n }\n\n if (context.request.url.toString().includes(\"/sign-in/email\")) {\n await authenticateOnJazz(context.data.jazzAuth);\n return;\n }\n\n if (context.request.url.toString().includes(\"/get-session\")) {\n if (context.data === null) {\n if (authSecretStorage.isAuthenticated === true) {\n console.warn(\n \"Jazz is authenticated, but the session is null\",\n );\n }\n return;\n }\n\n if (!context.data?.user) {\n return;\n }\n\n if (authSecretStorage.isAuthenticated === false) {\n console.info(\n \"Jazz is not authenticated, using Better Auth stored credentials\",\n );\n await authenticateOnJazz(context.data.jazzAuth);\n return;\n }\n\n const sessionAccountID = context.data.user.accountID;\n\n const credentials = await authSecretStorage.get();\n\n if (!credentials) {\n throw new Error(\"Jazz credentials not found\");\n }\n\n if (credentials.accountID !== sessionAccountID) {\n console.info(\n \"Jazz credentials mismatch, using Better Auth stored credentials\",\n );\n await authenticateOnJazz(context.data.jazzAuth);\n }\n return;\n }\n\n if (context.request.url.toString().includes(\"/sign-out\")) {\n await jazzContext.logOut();\n return;\n }\n\n if (context.request.url.toString().includes(\"/delete-user\")) {\n await jazzContext.logOut();\n return;\n }\n },\n },\n },\n ],\n } satisfies BetterAuthClientPlugin;\n};\n"],"mappings":"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","names":["session"]}