jazz-tools 0.18.0 → 0.18.2
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 +44 -30
- package/CHANGELOG.md +20 -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.2 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
|
@@ -102,10 +109,13 @@
|
|
102
109
|
[34mESM[39m Build start
|
103
110
|
[32mESM[39m [1mdist/tiptap/index.js [22m[32m564.00 B[39m
|
104
111
|
[32mESM[39m [1mdist/tiptap/index.js.map [22m[32m1.21 KB[39m
|
105
|
-
[32mESM[39m ⚡️ Build success in
|
112
|
+
[32mESM[39m ⚡️ Build success in 10ms
|
106
113
|
[32mESM[39m [1mdist/react/ssr.js [22m[32m688.00 B[39m
|
107
114
|
[32mESM[39m [1mdist/react/ssr.js.map [22m[32m1.12 KB[39m
|
108
|
-
[32mESM[39m ⚡️ Build success in
|
115
|
+
[32mESM[39m ⚡️ Build success in 17ms
|
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 15ms
|
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
|
@@ -115,69 +125,73 @@
|
|
115
125
|
[32mESM[39m [1mdist/media/index.native.js.map [22m[32m6.52 KB[39m
|
116
126
|
[32mESM[39m [1mdist/media/chunk-KR2V6X2N.js.map [22m[32m16.19 KB[39m
|
117
127
|
[32mESM[39m ⚡️ Build success in 21ms
|
118
|
-
[32mESM[39m [1mdist/
|
119
|
-
[32mESM[39m [1mdist/
|
120
|
-
[32mESM[39m
|
121
|
-
[32mESM[39m [1mdist/
|
122
|
-
[32mESM[39m [1mdist/
|
123
|
-
[32mESM[39m
|
128
|
+
[32mESM[39m [1mdist/better-auth/auth/client.js [22m[32m4.36 KB[39m
|
129
|
+
[32mESM[39m [1mdist/better-auth/auth/react.js [22m[32m1.19 KB[39m
|
130
|
+
[32mESM[39m [1mdist/better-auth/auth/server.js [22m[32m5.94 KB[39m
|
131
|
+
[32mESM[39m [1mdist/better-auth/auth/client.js.map [22m[32m8.12 KB[39m
|
132
|
+
[32mESM[39m [1mdist/better-auth/auth/react.js.map [22m[32m3.37 KB[39m
|
133
|
+
[32mESM[39m [1mdist/better-auth/auth/server.js.map [22m[32m10.66 KB[39m
|
134
|
+
[32mESM[39m ⚡️ Build success in 16ms
|
124
135
|
[32mESM[39m [1mdist/expo/index.js [22m[32m4.68 KB[39m
|
125
136
|
[32mESM[39m [1mdist/expo/testing.js [22m[32m112.00 B[39m
|
126
137
|
[32mESM[39m [1mdist/expo/crypto.js [22m[32m153.00 B[39m
|
127
138
|
[32mESM[39m [1mdist/expo/index.js.map [22m[32m10.23 KB[39m
|
128
139
|
[32mESM[39m [1mdist/expo/testing.js.map [22m[32m168.00 B[39m
|
129
140
|
[32mESM[39m [1mdist/expo/crypto.js.map [22m[32m189.00 B[39m
|
130
|
-
[32mESM[39m ⚡️ Build success in
|
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
|
141
|
+
[32mESM[39m ⚡️ Build success in 24ms
|
136
142
|
[32mESM[39m [1mdist/react-native/index.js [22m[32m2.53 KB[39m
|
137
143
|
[32mESM[39m [1mdist/react-native/testing.js [22m[32m120.00 B[39m
|
138
144
|
[32mESM[39m [1mdist/react-native/crypto.js [22m[32m161.00 B[39m
|
139
145
|
[32mESM[39m [1mdist/react-native/index.js.map [22m[32m5.68 KB[39m
|
140
146
|
[32mESM[39m [1mdist/react-native/testing.js.map [22m[32m176.00 B[39m
|
141
147
|
[32mESM[39m [1mdist/react-native/crypto.js.map [22m[32m197.00 B[39m
|
142
|
-
[32mESM[39m ⚡️ Build success in
|
148
|
+
[32mESM[39m ⚡️ Build success in 22ms
|
149
|
+
[32mESM[39m [1mdist/browser/index.js [22m[32m13.44 KB[39m
|
150
|
+
[32mESM[39m [1mdist/browser/index.js.map [22m[32m28.70 KB[39m
|
151
|
+
[32mESM[39m ⚡️ Build success in 31ms
|
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 30ms
|
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 39ms
|
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 40ms
|
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
169
|
[32mESM[39m ⚡️ Build success in 58ms
|
156
|
-
[32mESM[39m [1mdist/testing.js [22m[32m7.17 KB[39m
|
157
|
-
[32mESM[39m [1mdist/chunk-HJ3GTGY7.js [22m[32m163.41 KB[39m
|
158
170
|
[32mESM[39m [1mdist/index.js [22m[32m26.13 KB[39m
|
159
|
-
[32mESM[39m [1mdist/testing.js
|
160
|
-
[32mESM[39m [1mdist/chunk-
|
171
|
+
[32mESM[39m [1mdist/testing.js [22m[32m7.17 KB[39m
|
172
|
+
[32mESM[39m [1mdist/chunk-IERUTUXB.js [22m[32m163.90 KB[39m
|
161
173
|
[32mESM[39m [1mdist/index.js.map [22m[32m52.92 KB[39m
|
162
|
-
[32mESM[39m
|
163
|
-
[32mESM[39m [1mdist/
|
174
|
+
[32mESM[39m [1mdist/testing.js.map [22m[32m14.10 KB[39m
|
175
|
+
[32mESM[39m [1mdist/chunk-IERUTUXB.js.map [22m[32m389.03 KB[39m
|
176
|
+
[32mESM[39m ⚡️ Build success in 78ms
|
164
177
|
[32mESM[39m [1mdist/react-core/chunk-7DYMJ74I.js [22m[32m279.00 B[39m
|
165
178
|
[32mESM[39m [1mdist/react-core/testing.js [22m[32m1.17 KB[39m
|
166
|
-
[32mESM[39m [1mdist/react-core/index.js
|
179
|
+
[32mESM[39m [1mdist/react-core/index.js [22m[32m141.07 KB[39m
|
167
180
|
[32mESM[39m [1mdist/react-core/chunk-7DYMJ74I.js.map [22m[32m533.00 B[39m
|
168
181
|
[32mESM[39m [1mdist/react-core/testing.js.map [22m[32m1.82 KB[39m
|
169
|
-
[32mESM[39m
|
182
|
+
[32mESM[39m [1mdist/react-core/index.js.map [22m[32m383.45 KB[39m
|
183
|
+
[32mESM[39m ⚡️ Build success in 75ms
|
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 106ms
|
175
189
|
|
176
|
-
> jazz-tools@0.18.
|
190
|
+
> jazz-tools@0.18.2 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.2 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,25 @@
|
|
1
1
|
# jazz-tools
|
2
2
|
|
3
|
+
## 0.18.2
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- Updated dependencies [82ba2dd]
|
8
|
+
- Updated dependencies [01f4889]
|
9
|
+
- cojson@0.18.2
|
10
|
+
- cojson-storage-indexeddb@0.18.2
|
11
|
+
- cojson-transport-ws@0.18.2
|
12
|
+
|
13
|
+
## 0.18.1
|
14
|
+
|
15
|
+
### Patch Changes
|
16
|
+
|
17
|
+
- af5fbe7: New BetterAuth plugins to store Jazz's credentials
|
18
|
+
- 9837459: Add `CoMap.$jazz.has` and `Account.$jazz.has` method to check for property existance without loading referenced CoValues or checking permissions
|
19
|
+
- cojson@0.18.1
|
20
|
+
- cojson-storage-indexeddb@0.18.1
|
21
|
+
- cojson-transport-ws@0.18.1
|
22
|
+
|
3
23
|
## 0.18.0
|
4
24
|
|
5
25
|
### 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"]}
|