jazz-tools 0.18.0 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +54 -40
- package/CHANGELOG.md +10 -0
- package/dist/better-auth/auth/client.d.ts +29 -0
- package/dist/better-auth/auth/client.d.ts.map +1 -0
- package/dist/better-auth/auth/client.js +127 -0
- package/dist/better-auth/auth/client.js.map +1 -0
- package/dist/better-auth/auth/react.d.ts +2170 -0
- package/dist/better-auth/auth/react.d.ts.map +1 -0
- package/dist/better-auth/auth/react.js +40 -0
- package/dist/better-auth/auth/react.js.map +1 -0
- package/dist/better-auth/auth/server.d.ts +14 -0
- package/dist/better-auth/auth/server.d.ts.map +1 -0
- package/dist/better-auth/auth/server.js +198 -0
- package/dist/better-auth/auth/server.js.map +1 -0
- package/dist/better-auth/auth/tests/client.test.d.ts +2 -0
- package/dist/better-auth/auth/tests/client.test.d.ts.map +1 -0
- package/dist/better-auth/auth/tests/server.test.d.ts +2 -0
- package/dist/better-auth/auth/tests/server.test.d.ts.map +1 -0
- package/dist/{chunk-HJ3GTGY7.js → chunk-IERUTUXB.js} +18 -1
- package/dist/chunk-IERUTUXB.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/react-core/index.js +17 -0
- package/dist/react-core/index.js.map +1 -1
- package/dist/testing.js +1 -1
- package/dist/tools/coValues/account.d.ts +1 -0
- package/dist/tools/coValues/account.d.ts.map +1 -1
- package/dist/tools/coValues/coMap.d.ts +10 -0
- package/dist/tools/coValues/coMap.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/zodCo.d.ts +1 -1
- package/dist/tools/testing.d.ts.map +1 -1
- package/package.json +23 -4
- package/src/better-auth/auth/client.ts +169 -0
- package/src/better-auth/auth/react.tsx +105 -0
- package/src/better-auth/auth/server.ts +250 -0
- package/src/better-auth/auth/tests/client.test.ts +249 -0
- package/src/better-auth/auth/tests/server.test.ts +226 -0
- package/src/tools/coValues/account.ts +5 -0
- package/src/tools/coValues/coMap.ts +14 -0
- package/src/tools/implementation/zodSchema/zodCo.ts +1 -1
- package/src/tools/tests/ContextManager.test.ts +2 -2
- package/src/tools/tests/account.test.ts +51 -0
- package/src/tools/tests/coMap.test.ts +99 -0
- package/src/tools/tests/patterns/notifications.test.ts +1 -1
- package/src/tools/tests/testing.test.ts +2 -2
- package/tsup.config.ts +9 -0
- package/dist/chunk-HJ3GTGY7.js.map +0 -1
package/.turbo/turbo-build.log
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
> jazz-tools@0.18.
|
2
|
+
> jazz-tools@0.18.1 build /home/runner/_work/jazz/jazz/packages/jazz-tools
|
3
3
|
> tsup && pnpm types && pnpm build:svelte
|
4
4
|
|
5
5
|
[34mCLI[39m Building entry: {"index":"src/index.ts","testing":"src/testing.ts"}
|
@@ -30,6 +30,10 @@
|
|
30
30
|
[34mCLI[39m Using tsconfig: tsconfig.json
|
31
31
|
[34mCLI[39m Building entry: {"index":"src/worker/index.ts"}
|
32
32
|
[34mCLI[39m Using tsconfig: tsconfig.json
|
33
|
+
[34mCLI[39m Building entry: {"client":"src/better-auth/auth/client.ts","server":"src/better-auth/auth/server.ts","react":"src/better-auth/auth/react.tsx"}
|
34
|
+
[34mCLI[39m Using tsconfig: tsconfig.json
|
35
|
+
[34mCLI[39m tsup v8.5.0
|
36
|
+
[34mCLI[39m Using tsup config: /home/runner/_work/jazz/jazz/packages/jazz-tools/tsup.config.ts
|
33
37
|
[34mCLI[39m tsup v8.5.0
|
34
38
|
[34mCLI[39m Using tsup config: /home/runner/_work/jazz/jazz/packages/jazz-tools/tsup.config.ts
|
35
39
|
[34mCLI[39m tsup v8.5.0
|
@@ -72,6 +76,9 @@
|
|
72
76
|
[34mCLI[39m Target: es2021
|
73
77
|
[34mCLI[39m Target: es2021
|
74
78
|
[34mCLI[39m Target: es2021
|
79
|
+
[34mCLI[39m Target: es2021
|
80
|
+
[34mCLI[39m Cleaning output folder
|
81
|
+
[34mESM[39m Build start
|
75
82
|
[34mCLI[39m Cleaning output folder
|
76
83
|
[34mESM[39m Build start
|
77
84
|
[34mCLI[39m Cleaning output folder
|
@@ -100,84 +107,91 @@
|
|
100
107
|
[34mESM[39m Build start
|
101
108
|
[34mCLI[39m Cleaning output folder
|
102
109
|
[34mESM[39m Build start
|
103
|
-
[32mESM[39m [1mdist/tiptap/index.js [22m[32m564.00 B[39m
|
104
|
-
[32mESM[39m [1mdist/tiptap/index.js.map [22m[32m1.21 KB[39m
|
105
|
-
[32mESM[39m ⚡️ Build success in 16ms
|
106
110
|
[32mESM[39m [1mdist/react/ssr.js [22m[32m688.00 B[39m
|
107
111
|
[32mESM[39m [1mdist/react/ssr.js.map [22m[32m1.12 KB[39m
|
108
|
-
[32mESM[39m ⚡️ Build success in
|
112
|
+
[32mESM[39m ⚡️ Build success in 28ms
|
113
|
+
[32mESM[39m [1mdist/tiptap/index.js [22m[32m564.00 B[39m
|
114
|
+
[32mESM[39m [1mdist/tiptap/index.js.map [22m[32m1.21 KB[39m
|
115
|
+
[32mESM[39m ⚡️ Build success in 27ms
|
116
|
+
[32mESM[39m [1mdist/worker/index.js [22m[32m2.33 KB[39m
|
117
|
+
[32mESM[39m [1mdist/worker/index.js.map [22m[32m4.79 KB[39m
|
118
|
+
[32mESM[39m ⚡️ Build success in 25ms
|
109
119
|
[32mESM[39m [1mdist/media/index.js [22m[32m236.00 B[39m
|
110
120
|
[32mESM[39m [1mdist/media/index.browser.js [22m[32m3.21 KB[39m
|
111
121
|
[32mESM[39m [1mdist/media/index.native.js [22m[32m3.53 KB[39m
|
112
122
|
[32mESM[39m [1mdist/media/chunk-KR2V6X2N.js [22m[32m6.42 KB[39m
|
113
123
|
[32mESM[39m [1mdist/media/index.js.map [22m[32m71.00 B[39m
|
114
|
-
[32mESM[39m [1mdist/media/index.browser.js.map [22m[32m6.02 KB[39m
|
115
124
|
[32mESM[39m [1mdist/media/index.native.js.map [22m[32m6.52 KB[39m
|
125
|
+
[32mESM[39m [1mdist/media/index.browser.js.map [22m[32m6.02 KB[39m
|
116
126
|
[32mESM[39m [1mdist/media/chunk-KR2V6X2N.js.map [22m[32m16.19 KB[39m
|
117
|
-
[32mESM[39m ⚡️ Build success in
|
118
|
-
[32mESM[39m [1mdist/
|
119
|
-
[32mESM[39m [1mdist/
|
120
|
-
[32mESM[39m
|
127
|
+
[32mESM[39m ⚡️ Build success in 34ms
|
128
|
+
[32mESM[39m [1mdist/better-auth/auth/server.js [22m[32m5.94 KB[39m
|
129
|
+
[32mESM[39m [1mdist/better-auth/auth/react.js [22m[32m1.19 KB[39m
|
130
|
+
[32mESM[39m [1mdist/better-auth/auth/client.js [22m[32m4.36 KB[39m
|
131
|
+
[32mESM[39m [1mdist/better-auth/auth/server.js.map [22m[32m10.66 KB[39m
|
132
|
+
[32mESM[39m [1mdist/better-auth/auth/react.js.map [22m[32m3.37 KB[39m
|
133
|
+
[32mESM[39m [1mdist/better-auth/auth/client.js.map [22m[32m8.12 KB[39m
|
134
|
+
[32mESM[39m ⚡️ Build success in 26ms
|
121
135
|
[32mESM[39m [1mdist/browser/index.js [22m[32m13.44 KB[39m
|
122
136
|
[32mESM[39m [1mdist/browser/index.js.map [22m[32m28.70 KB[39m
|
123
|
-
[32mESM[39m ⚡️ Build success in
|
124
|
-
[32mESM[39m [1mdist/expo/index.js [22m[32m4.68 KB[39m
|
125
|
-
[32mESM[39m [1mdist/expo/testing.js [22m[32m112.00 B[39m
|
126
|
-
[32mESM[39m [1mdist/expo/crypto.js [22m[32m153.00 B[39m
|
127
|
-
[32mESM[39m [1mdist/expo/index.js.map [22m[32m10.23 KB[39m
|
128
|
-
[32mESM[39m [1mdist/expo/testing.js.map [22m[32m168.00 B[39m
|
129
|
-
[32mESM[39m [1mdist/expo/crypto.js.map [22m[32m189.00 B[39m
|
130
|
-
[32mESM[39m ⚡️ Build success in 31ms
|
131
|
-
[32mESM[39m [1mdist/react/index.js [22m[32m24.66 KB[39m
|
132
|
-
[32mESM[39m [1mdist/react/testing.js [22m[32m122.00 B[39m
|
133
|
-
[32mESM[39m [1mdist/react/testing.js.map [22m[32m165.00 B[39m
|
134
|
-
[32mESM[39m [1mdist/react/index.js.map [22m[32m53.09 KB[39m
|
135
|
-
[32mESM[39m ⚡️ Build success in 35ms
|
137
|
+
[32mESM[39m ⚡️ Build success in 40ms
|
136
138
|
[32mESM[39m [1mdist/react-native/index.js [22m[32m2.53 KB[39m
|
137
139
|
[32mESM[39m [1mdist/react-native/testing.js [22m[32m120.00 B[39m
|
138
140
|
[32mESM[39m [1mdist/react-native/crypto.js [22m[32m161.00 B[39m
|
139
141
|
[32mESM[39m [1mdist/react-native/index.js.map [22m[32m5.68 KB[39m
|
140
142
|
[32mESM[39m [1mdist/react-native/testing.js.map [22m[32m176.00 B[39m
|
141
143
|
[32mESM[39m [1mdist/react-native/crypto.js.map [22m[32m197.00 B[39m
|
142
|
-
[32mESM[39m ⚡️ Build success in
|
144
|
+
[32mESM[39m ⚡️ Build success in 46ms
|
145
|
+
[32mESM[39m [1mdist/expo/index.js [22m[32m4.68 KB[39m
|
146
|
+
[32mESM[39m [1mdist/expo/testing.js [22m[32m112.00 B[39m
|
147
|
+
[32mESM[39m [1mdist/expo/crypto.js [22m[32m153.00 B[39m
|
148
|
+
[32mESM[39m [1mdist/expo/index.js.map [22m[32m10.23 KB[39m
|
149
|
+
[32mESM[39m [1mdist/expo/crypto.js.map [22m[32m189.00 B[39m
|
150
|
+
[32mESM[39m [1mdist/expo/testing.js.map [22m[32m168.00 B[39m
|
151
|
+
[32mESM[39m ⚡️ Build success in 50ms
|
143
152
|
[32mESM[39m [1mdist/react-native-core/index.js [22m[32m17.90 KB[39m
|
144
153
|
[32mESM[39m [1mdist/react-native-core/testing.js [22m[32m119.00 B[39m
|
145
154
|
[32mESM[39m [1mdist/react-native-core/crypto.js [22m[32m2.10 KB[39m
|
155
|
+
[32mESM[39m [1mdist/react-native-core/index.js.map [22m[32m36.66 KB[39m
|
146
156
|
[32mESM[39m [1mdist/react-native-core/testing.js.map [22m[32m175.00 B[39m
|
147
157
|
[32mESM[39m [1mdist/react-native-core/crypto.js.map [22m[32m4.25 KB[39m
|
148
|
-
[32mESM[39m
|
149
|
-
[32mESM[39m
|
158
|
+
[32mESM[39m ⚡️ Build success in 47ms
|
159
|
+
[32mESM[39m [1mdist/react/index.js [22m[32m24.66 KB[39m
|
160
|
+
[32mESM[39m [1mdist/react/testing.js [22m[32m122.00 B[39m
|
161
|
+
[32mESM[39m [1mdist/react/index.js.map [22m[32m53.09 KB[39m
|
162
|
+
[32mESM[39m [1mdist/react/testing.js.map [22m[32m165.00 B[39m
|
163
|
+
[32mESM[39m ⚡️ Build success in 61ms
|
150
164
|
[32mESM[39m [1mdist/prosemirror/index.js [22m[32m77.63 KB[39m
|
151
165
|
[32mESM[39m [1mdist/prosemirror/index.js.map [22m[32m306.98 KB[39m
|
152
|
-
[32mESM[39m ⚡️ Build success in
|
166
|
+
[32mESM[39m ⚡️ Build success in 62ms
|
153
167
|
[32mESM[39m [1mdist/inspector/index.js [22m[32m61.52 KB[39m
|
154
168
|
[32mESM[39m [1mdist/inspector/index.js.map [22m[32m109.98 KB[39m
|
155
|
-
[32mESM[39m ⚡️ Build success in
|
156
|
-
[32mESM[39m [1mdist/testing.js [22m[32m7.17 KB[39m
|
157
|
-
[32mESM[39m [1mdist/chunk-HJ3GTGY7.js [22m[32m163.41 KB[39m
|
169
|
+
[32mESM[39m ⚡️ Build success in 76ms
|
158
170
|
[32mESM[39m [1mdist/index.js [22m[32m26.13 KB[39m
|
171
|
+
[32mESM[39m [1mdist/chunk-IERUTUXB.js [22m[32m163.90 KB[39m
|
172
|
+
[32mESM[39m [1mdist/testing.js [22m[32m7.17 KB[39m
|
159
173
|
[32mESM[39m [1mdist/testing.js.map [22m[32m14.10 KB[39m
|
160
|
-
[32mESM[39m [1mdist/chunk-HJ3GTGY7.js.map [22m[32m388.20 KB[39m
|
161
174
|
[32mESM[39m [1mdist/index.js.map [22m[32m52.92 KB[39m
|
162
|
-
[32mESM[39m
|
163
|
-
[32mESM[39m
|
164
|
-
[32mESM[39m [1mdist/react-core/chunk-7DYMJ74I.js [22m[32m279.00 B[39m
|
175
|
+
[32mESM[39m [1mdist/chunk-IERUTUXB.js.map [22m[32m389.03 KB[39m
|
176
|
+
[32mESM[39m ⚡️ Build success in 108ms
|
165
177
|
[32mESM[39m [1mdist/react-core/testing.js [22m[32m1.17 KB[39m
|
166
|
-
[32mESM[39m [1mdist/react-core/
|
167
|
-
[32mESM[39m [1mdist/react-core/
|
178
|
+
[32mESM[39m [1mdist/react-core/chunk-7DYMJ74I.js [22m[32m279.00 B[39m
|
179
|
+
[32mESM[39m [1mdist/react-core/index.js [22m[32m141.07 KB[39m
|
168
180
|
[32mESM[39m [1mdist/react-core/testing.js.map [22m[32m1.82 KB[39m
|
169
|
-
[32mESM[39m
|
181
|
+
[32mESM[39m [1mdist/react-core/chunk-7DYMJ74I.js.map [22m[32m533.00 B[39m
|
182
|
+
[32mESM[39m [1mdist/react-core/index.js.map [22m[32m383.45 KB[39m
|
183
|
+
[32mESM[39m ⚡️ Build success in 107ms
|
170
184
|
[32mESM[39m [1mdist/inspector/register-custom-element.js [22m[32m218.00 B[39m
|
171
185
|
[32mESM[39m [1mdist/inspector/register-custom-element.js.map [22m[32m314.00 B[39m
|
172
186
|
[32mESM[39m [1mdist/inspector/custom-element-WCY6D3QJ.js [22m[32m1.53 MB[39m
|
173
187
|
[32mESM[39m [1mdist/inspector/custom-element-WCY6D3QJ.js.map [22m[32m2.35 MB[39m
|
174
|
-
[32mESM[39m ⚡️ Build success in
|
188
|
+
[32mESM[39m ⚡️ Build success in 147ms
|
175
189
|
|
176
|
-
> jazz-tools@0.18.
|
190
|
+
> jazz-tools@0.18.1 types /home/runner/_work/jazz/jazz/packages/jazz-tools
|
177
191
|
> tsc --outDir dist
|
178
192
|
|
179
193
|
|
180
|
-
> jazz-tools@0.18.
|
194
|
+
> jazz-tools@0.18.1 build:svelte /home/runner/_work/jazz/jazz/packages/jazz-tools
|
181
195
|
> rm -rf dist/svelte && svelte-package -i src/svelte -o dist/svelte --tsconfig tsconfig.svelte.json
|
182
196
|
|
183
197
|
src/svelte -> dist/svelte
|
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
# jazz-tools
|
2
2
|
|
3
|
+
## 0.18.1
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- af5fbe7: New BetterAuth plugins to store Jazz's credentials
|
8
|
+
- 9837459: Add `CoMap.$jazz.has` and `Account.$jazz.has` method to check for property existance without loading referenced CoValues or checking permissions
|
9
|
+
- cojson@0.18.1
|
10
|
+
- cojson-storage-indexeddb@0.18.1
|
11
|
+
- cojson-transport-ws@0.18.1
|
12
|
+
|
3
13
|
## 0.18.0
|
4
14
|
|
5
15
|
### Minor Changes
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import type { AuthSecretStorage, Account, JazzContextType } from "jazz-tools";
|
2
|
+
import type { jazzPlugin } from "./server.js";
|
3
|
+
/**
|
4
|
+
* @example
|
5
|
+
* ```ts
|
6
|
+
* const auth = betterAuth({
|
7
|
+
* plugins: [jazzPluginClient()],
|
8
|
+
* });
|
9
|
+
* ```
|
10
|
+
*/
|
11
|
+
export declare const jazzPluginClient: () => {
|
12
|
+
id: "jazz-plugin";
|
13
|
+
$InferServerPlugin: ReturnType<typeof jazzPlugin>;
|
14
|
+
getActions: ($fetch: import("@better-fetch/fetch").BetterFetch, $store: import("better-auth").Store) => {
|
15
|
+
jazz: {
|
16
|
+
setJazzContext: (context: JazzContextType<Account>) => void;
|
17
|
+
setAuthSecretStorage: (storage: AuthSecretStorage) => void;
|
18
|
+
};
|
19
|
+
};
|
20
|
+
fetchPlugins: {
|
21
|
+
id: string;
|
22
|
+
name: string;
|
23
|
+
hooks: {
|
24
|
+
onRequest<T extends Record<string, any>>(context: import("@better-fetch/fetch").RequestContext<T>): Promise<void>;
|
25
|
+
onSuccess(context: import("@better-fetch/fetch").SuccessContext<any>): Promise<void>;
|
26
|
+
};
|
27
|
+
}[];
|
28
|
+
};
|
29
|
+
//# sourceMappingURL=client.d.ts.map
|
@@ -0,0 +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"}
|
@@ -0,0 +1,127 @@
|
|
1
|
+
// src/better-auth/auth/client.ts
|
2
|
+
var jazzPluginClient = () => {
|
3
|
+
let jazzContext;
|
4
|
+
let authSecretStorage;
|
5
|
+
let signOutUnsubscription;
|
6
|
+
const authenticateOnJazz = async (jazzAuth) => {
|
7
|
+
const parsedJazzAuth = {
|
8
|
+
...jazzAuth,
|
9
|
+
secretSeed: jazzAuth.secretSeed ? Uint8Array.from(jazzAuth.secretSeed) : void 0
|
10
|
+
};
|
11
|
+
await jazzContext.authenticate(parsedJazzAuth);
|
12
|
+
await authSecretStorage.set(parsedJazzAuth);
|
13
|
+
};
|
14
|
+
return {
|
15
|
+
id: "jazz-plugin",
|
16
|
+
$InferServerPlugin: {},
|
17
|
+
getActions: ($fetch, $store) => {
|
18
|
+
return {
|
19
|
+
jazz: {
|
20
|
+
setJazzContext: (context) => {
|
21
|
+
jazzContext = context;
|
22
|
+
},
|
23
|
+
setAuthSecretStorage: (storage) => {
|
24
|
+
authSecretStorage = storage;
|
25
|
+
if (signOutUnsubscription) signOutUnsubscription();
|
26
|
+
signOutUnsubscription = authSecretStorage.onUpdate(
|
27
|
+
(isAuthenticated) => {
|
28
|
+
if (isAuthenticated === false) {
|
29
|
+
const session = $store.atoms.session?.get();
|
30
|
+
if (!session) return;
|
31
|
+
if (session.isPending || session.isRefetching) {
|
32
|
+
const unsub = $store.atoms.session?.listen((session2) => {
|
33
|
+
unsub?.();
|
34
|
+
if (session2.data !== null) {
|
35
|
+
$fetch("/sign-out", { method: "POST" });
|
36
|
+
}
|
37
|
+
});
|
38
|
+
} else {
|
39
|
+
$fetch("/sign-out", { method: "POST" });
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
);
|
44
|
+
}
|
45
|
+
}
|
46
|
+
};
|
47
|
+
},
|
48
|
+
fetchPlugins: [
|
49
|
+
{
|
50
|
+
id: "jazz-plugin",
|
51
|
+
name: "jazz-plugin",
|
52
|
+
hooks: {
|
53
|
+
async onRequest(context) {
|
54
|
+
if (context.url.toString().includes("/sign-up") || context.url.toString().includes("/sign-in/social")) {
|
55
|
+
const credentials = await authSecretStorage.get();
|
56
|
+
if (!credentials) {
|
57
|
+
throw new Error("Jazz credentials not found");
|
58
|
+
}
|
59
|
+
context.headers.set(
|
60
|
+
"x-jazz-auth",
|
61
|
+
JSON.stringify({
|
62
|
+
accountID: credentials.accountID,
|
63
|
+
secretSeed: credentials.secretSeed,
|
64
|
+
accountSecret: credentials.accountSecret
|
65
|
+
})
|
66
|
+
);
|
67
|
+
}
|
68
|
+
},
|
69
|
+
async onSuccess(context) {
|
70
|
+
if (context.request.url.toString().includes("/sign-up")) {
|
71
|
+
await authenticateOnJazz(context.data.jazzAuth);
|
72
|
+
return;
|
73
|
+
}
|
74
|
+
if (context.request.url.toString().includes("/sign-in/email")) {
|
75
|
+
await authenticateOnJazz(context.data.jazzAuth);
|
76
|
+
return;
|
77
|
+
}
|
78
|
+
if (context.request.url.toString().includes("/get-session")) {
|
79
|
+
if (context.data === null) {
|
80
|
+
if (authSecretStorage.isAuthenticated === true) {
|
81
|
+
console.warn(
|
82
|
+
"Jazz is authenticated, but the session is null"
|
83
|
+
);
|
84
|
+
}
|
85
|
+
return;
|
86
|
+
}
|
87
|
+
if (!context.data?.user) {
|
88
|
+
return;
|
89
|
+
}
|
90
|
+
if (authSecretStorage.isAuthenticated === false) {
|
91
|
+
console.info(
|
92
|
+
"Jazz is not authenticated, using Better Auth stored credentials"
|
93
|
+
);
|
94
|
+
await authenticateOnJazz(context.data.jazzAuth);
|
95
|
+
return;
|
96
|
+
}
|
97
|
+
const sessionAccountID = context.data.user.accountID;
|
98
|
+
const credentials = await authSecretStorage.get();
|
99
|
+
if (!credentials) {
|
100
|
+
throw new Error("Jazz credentials not found");
|
101
|
+
}
|
102
|
+
if (credentials.accountID !== sessionAccountID) {
|
103
|
+
console.info(
|
104
|
+
"Jazz credentials mismatch, using Better Auth stored credentials"
|
105
|
+
);
|
106
|
+
await authenticateOnJazz(context.data.jazzAuth);
|
107
|
+
}
|
108
|
+
return;
|
109
|
+
}
|
110
|
+
if (context.request.url.toString().includes("/sign-out")) {
|
111
|
+
await jazzContext.logOut();
|
112
|
+
return;
|
113
|
+
}
|
114
|
+
if (context.request.url.toString().includes("/delete-user")) {
|
115
|
+
await jazzContext.logOut();
|
116
|
+
return;
|
117
|
+
}
|
118
|
+
}
|
119
|
+
}
|
120
|
+
}
|
121
|
+
]
|
122
|
+
};
|
123
|
+
};
|
124
|
+
export {
|
125
|
+
jazzPluginClient
|
126
|
+
};
|
127
|
+
//# sourceMappingURL=client.js.map
|
@@ -0,0 +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"]}
|