jazz-tools 0.18.5 → 0.18.7

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 (111) hide show
  1. package/.turbo/turbo-build.log +57 -57
  2. package/CHANGELOG.md +33 -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 +77 -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-CFAY3FMQ.js} +192 -101
  16. package/dist/chunk-CFAY3FMQ.js.map +1 -0
  17. package/dist/index.js +1 -1
  18. package/dist/inspector/{custom-element-WCY6D3QJ.js → custom-element-G6SPZEBR.js} +308 -97
  19. package/dist/inspector/custom-element-G6SPZEBR.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 +318 -56
  23. package/dist/inspector/index.js.map +1 -1
  24. package/dist/inspector/register-custom-element.js +1 -1
  25. package/dist/inspector/ui/button.d.ts +1 -1
  26. package/dist/inspector/ui/button.d.ts.map +1 -1
  27. package/dist/inspector/ui/heading.d.ts +2 -1
  28. package/dist/inspector/ui/heading.d.ts.map +1 -1
  29. package/dist/inspector/ui/input.d.ts.map +1 -1
  30. package/dist/inspector/ui/modal.d.ts +16 -0
  31. package/dist/inspector/ui/modal.d.ts.map +1 -0
  32. package/dist/inspector/viewer/delete-local-data.d.ts +2 -0
  33. package/dist/inspector/viewer/delete-local-data.d.ts.map +1 -0
  34. package/dist/inspector/viewer/{inpsector-button.d.ts → inspector-button.d.ts} +1 -1
  35. package/dist/inspector/viewer/{inpsector-button.d.ts.map → inspector-button.d.ts.map} +1 -1
  36. package/dist/inspector/viewer/new-app.d.ts +1 -4
  37. package/dist/inspector/viewer/new-app.d.ts.map +1 -1
  38. package/dist/react/hooks.d.ts +1 -1
  39. package/dist/react/hooks.d.ts.map +1 -1
  40. package/dist/react/index.d.ts +1 -1
  41. package/dist/react/index.d.ts.map +1 -1
  42. package/dist/react/index.js +3 -1
  43. package/dist/react/index.js.map +1 -1
  44. package/dist/react-core/hooks.d.ts +133 -0
  45. package/dist/react-core/hooks.d.ts.map +1 -1
  46. package/dist/react-core/index.js +83 -17
  47. package/dist/react-core/index.js.map +1 -1
  48. package/dist/react-core/tests/useCoStateWithSelector.test.d.ts +2 -0
  49. package/dist/react-core/tests/useCoStateWithSelector.test.d.ts.map +1 -0
  50. package/dist/react-native-core/hooks.d.ts +1 -1
  51. package/dist/react-native-core/hooks.d.ts.map +1 -1
  52. package/dist/react-native-core/index.js +3 -1
  53. package/dist/react-native-core/index.js.map +1 -1
  54. package/dist/testing.js +2 -2
  55. package/dist/testing.js.map +1 -1
  56. package/dist/tools/coValues/CoValueBase.d.ts +14 -0
  57. package/dist/tools/coValues/CoValueBase.d.ts.map +1 -1
  58. package/dist/tools/coValues/coMap.d.ts +0 -12
  59. package/dist/tools/coValues/coMap.d.ts.map +1 -1
  60. package/dist/tools/coValues/inbox.d.ts +5 -5
  61. package/dist/tools/coValues/inbox.d.ts.map +1 -1
  62. package/dist/tools/implementation/createContext.d.ts +2 -1
  63. package/dist/tools/implementation/createContext.d.ts.map +1 -1
  64. package/dist/tools/tests/utils.d.ts.map +1 -1
  65. package/dist/worker/index.d.ts +12 -2
  66. package/dist/worker/index.d.ts.map +1 -1
  67. package/dist/worker/index.js +10 -4
  68. package/dist/worker/index.js.map +1 -1
  69. package/package.json +6 -4
  70. package/src/better-auth/auth/client.ts +8 -2
  71. package/src/better-auth/auth/react.tsx +2 -51
  72. package/src/better-auth/auth/server.ts +98 -24
  73. package/src/better-auth/auth/tests/client.test.ts +92 -4
  74. package/src/better-auth/auth/tests/react.test.tsx +43 -0
  75. package/src/better-auth/auth/tests/server.test.ts +276 -98
  76. package/src/inspector/custom-element.tsx +1 -1
  77. package/src/inspector/index.tsx +44 -0
  78. package/src/inspector/ui/button.tsx +15 -1
  79. package/src/inspector/ui/heading.tsx +7 -2
  80. package/src/inspector/ui/input.tsx +6 -2
  81. package/src/inspector/ui/modal.tsx +158 -0
  82. package/src/inspector/viewer/delete-local-data.tsx +101 -0
  83. package/src/inspector/viewer/new-app.tsx +3 -19
  84. package/src/react/hooks.tsx +1 -0
  85. package/src/react/index.ts +1 -0
  86. package/src/react-core/hooks.ts +162 -0
  87. package/src/react-core/tests/useCoStateWithSelector.test.ts +149 -0
  88. package/src/react-native-core/hooks.tsx +1 -0
  89. package/src/tools/coValues/CoValueBase.ts +32 -0
  90. package/src/tools/coValues/coList.ts +35 -0
  91. package/src/tools/coValues/coMap.ts +0 -18
  92. package/src/tools/coValues/inbox.ts +190 -108
  93. package/src/tools/implementation/createContext.ts +9 -2
  94. package/src/tools/testing.ts +1 -1
  95. package/src/tools/tests/coFeed.test.ts +33 -22
  96. package/src/tools/tests/coList.test.ts +47 -4
  97. package/src/tools/tests/coMap.test.ts +13 -5
  98. package/src/tools/tests/coPlainText.test.ts +24 -0
  99. package/src/tools/tests/createContext.test.ts +24 -0
  100. package/src/tools/tests/deepLoading.test.ts +2 -0
  101. package/src/tools/tests/exportImport.test.ts +3 -1
  102. package/src/tools/tests/groupsAndAccounts.test.ts +56 -44
  103. package/src/tools/tests/inbox.test.ts +293 -31
  104. package/src/tools/tests/patterns/requestToJoin.test.ts +14 -6
  105. package/src/tools/tests/utils.ts +1 -0
  106. package/src/worker/index.ts +21 -5
  107. package/tsup.config.ts +1 -1
  108. package/dist/chunk-3LE7N6TH.js.map +0 -1
  109. package/dist/inspector/custom-element-WCY6D3QJ.js.map +0 -1
  110. package/src/inspector/index.ts +0 -23
  111. /package/src/inspector/viewer/{inpsector-button.tsx → inspector-button.tsx} +0 -0
@@ -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.7 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,22 +107,25 @@
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
115
- 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
112
+ ESM ⚡️ Build success in 21ms
113
+ ESM dist/worker/index.js 2.47 KB
114
+ ESM dist/worker/index.js.map 5.26 KB
115
+ ESM ⚡️ Build success in 18ms
116
+ ESM dist/tiptap/index.js 564.00 B
117
+ ESM dist/tiptap/index.js.map 1.21 KB
125
118
  ESM ⚡️ Build success in 20ms
119
+ ESM dist/better-auth/auth/client.js 4.44 KB
120
+ ESM dist/better-auth/auth/react.js 799.00 B
121
+ ESM dist/better-auth/auth/server.js 8.35 KB
122
+ ESM dist/better-auth/auth/client.js.map 8.24 KB
123
+ ESM dist/better-auth/auth/react.js.map 2.04 KB
124
+ ESM dist/better-auth/auth/server.js.map 15.28 KB
125
+ ESM ⚡️ Build success in 23ms
126
+ ESM dist/browser/index.js 13.64 KB
127
+ ESM dist/browser/index.js.map 29.14 KB
128
+ ESM ⚡️ Build success in 37ms
126
129
  ESM dist/media/index.js 236.00 B
127
130
  ESM dist/media/index.browser.js 2.79 KB
128
131
  ESM dist/media/index.native.js 2.90 KB
@@ -133,67 +136,64 @@
133
136
  ESM dist/media/index.native.js.map 6.09 KB
134
137
  ESM dist/media/index.server.js.map 6.37 KB
135
138
  ESM dist/media/chunk-W3S526L3.js.map 16.57 KB
136
- ESM ⚡️ Build success in 32ms
137
- ESM dist/react-native/index.js 2.53 KB
138
- ESM dist/react-native/testing.js 120.00 B
139
- ESM dist/react-native/crypto.js 161.00 B
140
- ESM dist/react-native/index.js.map 5.68 KB
141
- ESM dist/react-native/testing.js.map 176.00 B
142
- 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
139
+ ESM ⚡️ Build success in 37ms
147
140
  ESM dist/expo/index.js 4.68 KB
148
141
  ESM dist/expo/testing.js 112.00 B
149
142
  ESM dist/expo/crypto.js 153.00 B
150
143
  ESM dist/expo/index.js.map 10.23 KB
151
144
  ESM dist/expo/testing.js.map 168.00 B
152
145
  ESM dist/expo/crypto.js.map 189.00 B
153
- ESM ⚡️ Build success in 45ms
154
- ESM dist/react-native-core/index.js 17.90 KB
155
- ESM dist/react-native-core/crypto.js 2.10 KB
156
- ESM dist/react-native-core/testing.js 119.00 B
157
- ESM dist/react-native-core/index.js.map 36.66 KB
158
- ESM dist/react-native-core/testing.js.map 175.00 B
159
- ESM dist/react-native-core/crypto.js.map 4.25 KB
160
- ESM ⚡️ Build success in 48ms
146
+ ESM ⚡️ Build success in 37ms
147
+ ESM dist/react-native/index.js 2.53 KB
148
+ ESM dist/react-native/testing.js 120.00 B
149
+ ESM dist/react-native/crypto.js 161.00 B
150
+ ESM dist/react-native/testing.js.map 176.00 B
151
+ ESM dist/react-native/index.js.map 5.68 KB
152
+ ESM dist/react-native/crypto.js.map 197.00 B
153
+ ESM ⚡️ Build success in 44ms
154
+ ESM dist/prosemirror/index.js 77.63 KB
155
+ ESM dist/prosemirror/index.js.map 306.98 KB
156
+ ESM ⚡️ Build success in 50ms
161
157
  ESM dist/react/testing.js 122.00 B
162
- ESM dist/react/index.js 24.66 KB
158
+ ESM dist/react/index.js 24.71 KB
163
159
  ESM dist/react/testing.js.map 165.00 B
164
- ESM dist/react/index.js.map 53.43 KB
160
+ ESM dist/react/index.js.map 53.50 KB
165
161
  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
162
+ ESM dist/react-native-core/index.js 17.95 KB
163
+ ESM dist/react-native-core/crypto.js 2.10 KB
164
+ ESM dist/react-native-core/testing.js 119.00 B
165
+ ESM dist/react-native-core/index.js.map 36.70 KB
166
+ ESM dist/react-native-core/crypto.js.map 4.25 KB
167
+ ESM dist/react-native-core/testing.js.map 175.00 B
168
+ ESM ⚡️ Build success in 53ms
169
+ ESM dist/inspector/index.js 69.71 KB
170
+ ESM dist/inspector/index.js.map 121.38 KB
171
+ ESM ⚡️ Build success in 72ms
172
+ ESM dist/testing.js 7.17 KB
173
+ ESM dist/index.js 26.13 KB
174
+ ESM dist/chunk-CFAY3FMQ.js 168.48 KB
175
+ ESM dist/testing.js.map 14.10 KB
176
+ ESM dist/index.js.map 52.92 KB
177
+ ESM dist/chunk-CFAY3FMQ.js.map 400.30 KB
178
+ ESM ⚡️ Build success in 105ms
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 145.49 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 399.32 KB
185
+ ESM ⚡️ Build success in 106ms
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-G6SPZEBR.js 1.54 MB
189
+ ESM dist/inspector/custom-element-G6SPZEBR.js.map 2.36 MB
190
+ ESM ⚡️ Build success in 148ms
191
191
 
192
- > jazz-tools@0.18.5 types /home/runner/_work/jazz/jazz/packages/jazz-tools
192
+ > jazz-tools@0.18.7 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.7 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,38 @@
1
1
  # jazz-tools
2
2
 
3
+ ## 0.18.7
4
+
5
+ ### Patch Changes
6
+
7
+ - cf26739: Add `useCoStateWithSelector` for granular reactivity
8
+ - a3cd9c8: Add lastUpdatedAt & createdAt properties to $jazz in all the coValue types
9
+ - ca5cd26: Make CoLists structurally equal to arrays
10
+ - 32d1444: fix: ensure better-auth email-otp verification uniqueness
11
+ - Updated dependencies [c2d8bf7]
12
+ - Updated dependencies [dccb464]
13
+ - Updated dependencies [a3cd9c8]
14
+ - Updated dependencies [e8e7bf8]
15
+ - Updated dependencies [51d3558]
16
+ - cojson@0.18.7
17
+ - cojson-storage-indexeddb@0.18.7
18
+ - cojson-transport-ws@0.18.7
19
+
20
+ ## 0.18.6
21
+
22
+ ### Patch Changes
23
+
24
+ - 975d1c3: Fixed the startWorker type to return a shallowly-loaded worker account.
25
+ - ccbb795: Add skipInboxLoad option to startWorker
26
+ - 0dae338: Add concurrency limit on the Inbox subscribe, and simplify the failed messages management
27
+ - 934679c: feat: Better Auth EmailOTP plugin is now supported
28
+ - 28defd0: Fix peer role to be client when connecting the test accounts to the test sync server
29
+ - e0f17ed: Fix the react dependency error when loading the inspector as custom element
30
+ - 88ef339: fix: removed unwanted browser dependency in order to make better-auth provider works on react-native
31
+ - Updated dependencies [9e792c7]
32
+ - cojson@0.18.6
33
+ - cojson-storage-indexeddb@0.18.6
34
+ - cojson-transport-ws@0.18.6
35
+
3
36
  ## 0.18.5
4
37
 
5
38
  ### 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"]}