jazz-tools 0.20.16 → 0.20.18
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/.svelte-kit/__package__/client.d.ts.map +1 -1
- package/.svelte-kit/__package__/client.js +8 -1
- package/.svelte-kit/__package__/tests/client.test.js +67 -0
- package/.turbo/turbo-build.log +65 -65
- package/CHANGELOG.md +24 -0
- package/dist/better-auth/auth/client.d.ts.map +1 -1
- package/dist/better-auth/auth/client.js +12 -1
- package/dist/better-auth/auth/client.js.map +1 -1
- package/dist/browser/BrowserContextManager.d.ts +1 -0
- package/dist/browser/BrowserContextManager.d.ts.map +1 -1
- package/dist/browser/createBrowserContext.d.ts +2 -12
- package/dist/browser/createBrowserContext.d.ts.map +1 -1
- package/dist/browser/index.js +12 -6
- package/dist/browser/index.js.map +1 -1
- package/dist/{chunk-WAYFZQXB.js → chunk-MIPBSAS7.js} +474 -86
- package/dist/chunk-MIPBSAS7.js.map +1 -0
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp/backend-sqlite.d.ts.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +4 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/react/index.js +11 -3
- package/dist/react/index.js.map +1 -1
- package/dist/react/provider.d.ts +1 -1
- package/dist/react/provider.d.ts.map +1 -1
- package/dist/react-native/index.js +26 -8
- package/dist/react-native/index.js.map +1 -1
- package/dist/react-native-core/ReactNativeContextManager.d.ts +1 -0
- package/dist/react-native-core/ReactNativeContextManager.d.ts.map +1 -1
- package/dist/react-native-core/index.js +26 -8
- package/dist/react-native-core/index.js.map +1 -1
- package/dist/react-native-core/platform.d.ts +1 -0
- package/dist/react-native-core/platform.d.ts.map +1 -1
- package/dist/react-native-core/provider.d.ts +1 -1
- package/dist/react-native-core/provider.d.ts.map +1 -1
- package/dist/svelte/Provider.svelte +3 -0
- package/dist/svelte/Provider.svelte.d.ts.map +1 -1
- package/dist/testing.js +1 -1
- package/dist/tools/coValues/deepLoading.d.ts +21 -1
- package/dist/tools/coValues/deepLoading.d.ts.map +1 -1
- package/dist/tools/coValues/interfaces.d.ts +1 -0
- package/dist/tools/coValues/interfaces.d.ts.map +1 -1
- package/dist/tools/coValues/registeredSchemas.d.ts +1 -1
- package/dist/tools/coValues/registeredSchemas.d.ts.map +1 -1
- package/dist/tools/coValues/schemaUnion.d.ts +9 -0
- package/dist/tools/coValues/schemaUnion.d.ts.map +1 -1
- package/dist/tools/coValues/snapshotRef.d.ts +114 -0
- package/dist/tools/coValues/snapshotRef.d.ts.map +1 -0
- package/dist/tools/implementation/createContext.d.ts +7 -3
- package/dist/tools/implementation/createContext.d.ts.map +1 -1
- package/dist/tools/implementation/invites.d.ts +9 -1
- package/dist/tools/implementation/invites.d.ts.map +1 -1
- package/dist/tools/implementation/schemaRuntime.d.ts +1 -0
- package/dist/tools/implementation/schemaRuntime.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/coExport.d.ts +2 -1
- package/dist/tools/implementation/zodSchema/coExport.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/runtimeConverters/coValueSchemaTransformation.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/runtimeConverters/schemaFieldToCoFieldDef.d.ts +3 -0
- package/dist/tools/implementation/zodSchema/runtimeConverters/schemaFieldToCoFieldDef.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaInvariant.d.ts +2 -1
- package/dist/tools/implementation/zodSchema/schemaInvariant.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaPermissions.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoDiscriminatedUnionSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/SnapshotRefSchema.d.ts +106 -0
- package/dist/tools/implementation/zodSchema/schemaTypes/SnapshotRefSchema.d.ts.map +1 -0
- package/dist/tools/implementation/zodSchema/typeConverters/CoFieldSchemaInit.d.ts +2 -2
- package/dist/tools/implementation/zodSchema/typeConverters/CoFieldSchemaInit.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchema.d.ts +2 -2
- package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchemaCoValuesMaybeLoaded.d.ts +3 -2
- package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchemaCoValuesMaybeLoaded.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/unionUtils.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/zodCo.d.ts +5 -1
- package/dist/tools/implementation/zodSchema/zodCo.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/zodSchema.d.ts +4 -3
- package/dist/tools/implementation/zodSchema/zodSchema.d.ts.map +1 -1
- package/dist/tools/internal.d.ts +2 -0
- package/dist/tools/internal.d.ts.map +1 -1
- package/dist/tools/subscribe/SubscriptionScope.d.ts.map +1 -1
- package/dist/tools/tests/snapshotRef.test.d.ts +2 -0
- package/dist/tools/tests/snapshotRef.test.d.ts.map +1 -0
- package/dist/worker/index.d.ts +1 -0
- package/dist/worker/index.d.ts.map +1 -1
- package/dist/worker/index.js +6 -2
- package/dist/worker/index.js.map +1 -1
- package/package.json +4 -4
- package/src/better-auth/auth/client.ts +15 -1
- package/src/better-auth/auth/tests/client.test.ts +92 -0
- package/src/browser/BrowserContextManager.ts +5 -0
- package/src/browser/createBrowserContext.ts +8 -67
- package/src/browser/index.ts +1 -1
- package/src/mcp/backend-sqlite.ts +4 -1
- package/src/mcp/server.ts +4 -1
- package/src/react/provider.tsx +9 -1
- package/src/react-native-core/ReactNativeContextManager.ts +5 -0
- package/src/react-native-core/platform.ts +12 -1
- package/src/react-native-core/provider.tsx +9 -1
- package/src/svelte/Provider.svelte +3 -0
- package/src/tools/coValues/deepLoading.ts +46 -15
- package/src/tools/coValues/interfaces.ts +29 -24
- package/src/tools/coValues/registeredSchemas.ts +1 -1
- package/src/tools/coValues/schemaUnion.ts +13 -0
- package/src/tools/coValues/snapshotRef.ts +364 -0
- package/src/tools/implementation/createContext.ts +14 -0
- package/src/tools/implementation/invites.ts +26 -2
- package/src/tools/implementation/schemaRuntime.ts +1 -0
- package/src/tools/implementation/zodSchema/coExport.ts +2 -0
- package/src/tools/implementation/zodSchema/runtimeConverters/coValueSchemaTransformation.ts +10 -0
- package/src/tools/implementation/zodSchema/runtimeConverters/schemaFieldToCoFieldDef.ts +1 -1
- package/src/tools/implementation/zodSchema/schemaInvariant.ts +3 -1
- package/src/tools/implementation/zodSchema/schemaPermissions.ts +2 -4
- package/src/tools/implementation/zodSchema/schemaTypes/CoDiscriminatedUnionSchema.ts +0 -1
- package/src/tools/implementation/zodSchema/schemaTypes/CoMapSchema.ts +24 -8
- package/src/tools/implementation/zodSchema/schemaTypes/SnapshotRefSchema.ts +259 -0
- package/src/tools/implementation/zodSchema/typeConverters/CoFieldSchemaInit.ts +24 -19
- package/src/tools/implementation/zodSchema/typeConverters/InstanceOfSchema.ts +11 -5
- package/src/tools/implementation/zodSchema/typeConverters/InstanceOfSchemaCoValuesMaybeLoaded.ts +18 -10
- package/src/tools/implementation/zodSchema/unionUtils.ts +2 -1
- package/src/tools/implementation/zodSchema/zodCo.ts +17 -0
- package/src/tools/implementation/zodSchema/zodSchema.ts +10 -3
- package/src/tools/internal.ts +2 -0
- package/src/tools/subscribe/SubscriptionScope.ts +45 -5
- package/src/tools/tests/coMap.test.ts +30 -0
- package/src/tools/tests/createContext.test.ts +64 -0
- package/src/tools/tests/invites.test.ts +13 -0
- package/src/tools/tests/schemaUnion.test.ts +19 -0
- package/src/tools/tests/snapshotRef.test.ts +688 -0
- package/src/worker/index.ts +6 -0
- package/dist/chunk-WAYFZQXB.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/better-auth/auth/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,iBAAiB,EAEjB,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAS9C;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB;;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/better-auth/auth/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,iBAAiB,EAEjB,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAS9C;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB;;wBAqBC,UAAU,CAAC,OAAO,UAAU,CAAC;;;sCAIvB,eAAe,CAAC,OAAO,CAAC;4CAGlB,iBAAiB;;;;;;;;;;;CA2I1D,CAAC"}
|
|
@@ -16,7 +16,9 @@ export const jazzPluginClient = () => {
|
|
|
16
16
|
let jazzContext;
|
|
17
17
|
let authSecretStorage;
|
|
18
18
|
let signOutUnsubscription;
|
|
19
|
+
let authGeneration = 0;
|
|
19
20
|
const authenticateOnJazz = async (jazzAuth) => {
|
|
21
|
+
authGeneration++;
|
|
20
22
|
const parsedJazzAuth = {
|
|
21
23
|
...jazzAuth,
|
|
22
24
|
secretSeed: jazzAuth.secretSeed
|
|
@@ -74,6 +76,9 @@ export const jazzPluginClient = () => {
|
|
|
74
76
|
name: "jazz-plugin",
|
|
75
77
|
hooks: {
|
|
76
78
|
async onRequest(context) {
|
|
79
|
+
if (context.url.toString().includes("/get-session")) {
|
|
80
|
+
context.headers.set("x-jazz-auth-generation", String(authGeneration));
|
|
81
|
+
}
|
|
77
82
|
if (SIGNUP_URLS.some((url) => context.url.toString().includes(url))) {
|
|
78
83
|
const credentials = await authSecretStorage.get();
|
|
79
84
|
if (!credentials) {
|
|
@@ -99,7 +104,9 @@ export const jazzPluginClient = () => {
|
|
|
99
104
|
}
|
|
100
105
|
if (context.request.url.toString().includes("/get-session")) {
|
|
101
106
|
if (context.data === null) {
|
|
102
|
-
|
|
107
|
+
const requestAuthGeneration = Number(context.request.headers.get("x-jazz-auth-generation") ?? "0");
|
|
108
|
+
if (authSecretStorage.isAuthenticated === true &&
|
|
109
|
+
requestAuthGeneration === authGeneration) {
|
|
103
110
|
console.info("Jazz is authenticated, but the session is null. Logging out");
|
|
104
111
|
await jazzContext.logOut();
|
|
105
112
|
}
|
|
@@ -421,6 +421,73 @@ describe("Better-Auth client plugin", () => {
|
|
|
421
421
|
await expect(Promise.all(promises)).rejects.toThrow();
|
|
422
422
|
expect(customFetchImpl).toHaveBeenCalledTimes(3);
|
|
423
423
|
});
|
|
424
|
+
it("should NOT logout from Jazz if a stale null get-session arrives after authentication", async () => {
|
|
425
|
+
const credentials = await authSecretStorage.get();
|
|
426
|
+
assert(credentials, "Jazz credentials are not available");
|
|
427
|
+
// This test validates race condition handling where a stale null response
|
|
428
|
+
// arrives after authentication. The authGeneration is tracked via the
|
|
429
|
+
// x-jazz-auth-generation header set in onRequest and read in onSuccess.
|
|
430
|
+
// Since authGeneration increments after sign-in, the stale response's
|
|
431
|
+
// generation number will be older, preventing an unintended logout.
|
|
432
|
+
const capturedHeaders = [];
|
|
433
|
+
let resolveStaleSession;
|
|
434
|
+
const staleSessionPromise = new Promise((resolve) => {
|
|
435
|
+
resolveStaleSession = resolve;
|
|
436
|
+
});
|
|
437
|
+
customFetchImpl.mockImplementation((urlOrRequest, init) => {
|
|
438
|
+
const headers = urlOrRequest instanceof Request
|
|
439
|
+
? urlOrRequest.headers
|
|
440
|
+
: init?.headers || {};
|
|
441
|
+
capturedHeaders.push(headers);
|
|
442
|
+
const url = urlOrRequest instanceof Request ? urlOrRequest.url : urlOrRequest;
|
|
443
|
+
if (url.toString().includes("/get-session")) {
|
|
444
|
+
return staleSessionPromise;
|
|
445
|
+
}
|
|
446
|
+
return Promise.resolve(new Response(JSON.stringify({
|
|
447
|
+
user: {
|
|
448
|
+
id: "user-1",
|
|
449
|
+
email: "test@jazz.dev",
|
|
450
|
+
name: "Matteo",
|
|
451
|
+
},
|
|
452
|
+
jazzAuth: {
|
|
453
|
+
accountID: credentials.accountID,
|
|
454
|
+
secretSeed: credentials.secretSeed,
|
|
455
|
+
accountSecret: credentials.accountSecret,
|
|
456
|
+
provider: "better-auth",
|
|
457
|
+
},
|
|
458
|
+
})));
|
|
459
|
+
});
|
|
460
|
+
const staleSessionFetch = authClient.getSession();
|
|
461
|
+
// We need to wait a tick for onRequest to be called and customFetchImpl to be triggered
|
|
462
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
463
|
+
const getHeader = (headers, name) => {
|
|
464
|
+
if (!headers)
|
|
465
|
+
return null;
|
|
466
|
+
if (typeof headers.get === "function")
|
|
467
|
+
return headers.get(name);
|
|
468
|
+
if (Array.isArray(headers)) {
|
|
469
|
+
const pair = headers.find((h) => h[0]?.toLowerCase() === name.toLowerCase());
|
|
470
|
+
return pair ? pair[1] : null;
|
|
471
|
+
}
|
|
472
|
+
return headers[name] || headers[name.toLowerCase()] || null;
|
|
473
|
+
};
|
|
474
|
+
// Verify the stale request had authGeneration=0 in the header
|
|
475
|
+
expect(getHeader(capturedHeaders[0], "x-jazz-auth-generation")).toBe("0");
|
|
476
|
+
// Now sign in, which increments authGeneration to 1
|
|
477
|
+
await authClient.signIn.email({
|
|
478
|
+
email: "test@jazz.dev",
|
|
479
|
+
password: "password",
|
|
480
|
+
});
|
|
481
|
+
expect(authSecretStorage.isAuthenticated).toBe(true);
|
|
482
|
+
// Verify the sign-in request had no x-jazz-auth-generation header (it is gated to get-session)
|
|
483
|
+
expect(getHeader(capturedHeaders[1], "x-jazz-auth-generation")).toBeNull();
|
|
484
|
+
// Resolve the stale get-session response with null
|
|
485
|
+
resolveStaleSession(new Response(JSON.stringify(null)));
|
|
486
|
+
await staleSessionFetch;
|
|
487
|
+
// The stale null response should not trigger a logout because its
|
|
488
|
+
// authGeneration (0) < current authGeneration (1), so >= comparison fails
|
|
489
|
+
expect(authSecretStorage.isAuthenticated).toBe(true);
|
|
490
|
+
});
|
|
424
491
|
it("should deduplicate auth requests for the same account", async () => {
|
|
425
492
|
const credentials = await authSecretStorage.get();
|
|
426
493
|
assert(credentials, "Jazz credentials are not available");
|
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> jazz-tools@0.20.
|
|
2
|
+
> jazz-tools@0.20.18 build /home/runner/_work/jazz/jazz/packages/jazz-tools
|
|
3
3
|
> tsup && pnpm types && pnpm build:svelte && pnpm build:better-auth-svelte
|
|
4
4
|
|
|
5
5
|
[34mCLI[39m Building entry: {"index":"src/index.ts","testing":"src/testing.ts","tools/ssr":"src/tools/ssr/index.ts"}
|
|
@@ -116,115 +116,115 @@
|
|
|
116
116
|
[34mESM[39m Build start
|
|
117
117
|
[32mESM[39m [1mdist/tiptap/index.js [22m[32m572.00 B[39m
|
|
118
118
|
[32mESM[39m [1mdist/tiptap/index.js.map [22m[32m1.29 KB[39m
|
|
119
|
-
[32mESM[39m ⚡️ Build success in
|
|
120
|
-
[32mESM[39m [1mdist/
|
|
121
|
-
[32mESM[39m [1mdist/better-auth/auth/react.js [22m[32m813.00 B[39m
|
|
122
|
-
[32mESM[39m [1mdist/better-auth/auth/server.js [22m[32m8.38 KB[39m
|
|
123
|
-
[32mESM[39m [1mdist/better-auth/auth/client.js.map [22m[32m8.44 KB[39m
|
|
124
|
-
[32mESM[39m [1mdist/better-auth/auth/react.js.map [22m[32m2.07 KB[39m
|
|
125
|
-
[32mESM[39m [1mdist/better-auth/auth/server.js.map [22m[32m15.56 KB[39m
|
|
126
|
-
[32mESM[39m ⚡️ Build success in 35ms
|
|
127
|
-
[32mESM[39m [1mdist/worker/index.js [22m[32m3.45 KB[39m
|
|
119
|
+
[32mESM[39m ⚡️ Build success in 34ms
|
|
120
|
+
[32mESM[39m [1mdist/worker/index.js [22m[32m3.63 KB[39m
|
|
128
121
|
[32mESM[39m [1mdist/worker/edge-wasm.js [22m[32m259.00 B[39m
|
|
129
122
|
[32mESM[39m [1mdist/worker/napi-crypto.js [22m[32m110.00 B[39m
|
|
130
|
-
[32mESM[39m [1mdist/worker/index.js.map [22m[
|
|
123
|
+
[32mESM[39m [1mdist/worker/index.js.map [22m[32m7.29 KB[39m
|
|
131
124
|
[32mESM[39m [1mdist/worker/edge-wasm.js.map [22m[32m505.00 B[39m
|
|
132
125
|
[32mESM[39m [1mdist/worker/napi-crypto.js.map [22m[32m162.00 B[39m
|
|
133
|
-
[32mESM[39m ⚡️ Build success in
|
|
126
|
+
[32mESM[39m ⚡️ Build success in 35ms
|
|
127
|
+
[32mESM[39m [1mdist/better-auth/auth/client.js [22m[32m4.99 KB[39m
|
|
128
|
+
[32mESM[39m [1mdist/better-auth/auth/server.js [22m[32m8.38 KB[39m
|
|
129
|
+
[32mESM[39m [1mdist/better-auth/auth/react.js [22m[32m813.00 B[39m
|
|
130
|
+
[32mESM[39m [1mdist/better-auth/auth/client.js.map [22m[32m9.19 KB[39m
|
|
131
|
+
[32mESM[39m [1mdist/better-auth/auth/server.js.map [22m[32m15.56 KB[39m
|
|
132
|
+
[32mESM[39m [1mdist/better-auth/auth/react.js.map [22m[32m2.07 KB[39m
|
|
133
|
+
[32mESM[39m ⚡️ Build success in 26ms
|
|
134
134
|
[32mESM[39m [1mdist/media/index.js [22m[32m236.00 B[39m
|
|
135
135
|
[32mESM[39m [1mdist/media/index.browser.js [22m[32m2.79 KB[39m
|
|
136
136
|
[32mESM[39m [1mdist/media/index.native.js [22m[32m4.02 KB[39m
|
|
137
137
|
[32mESM[39m [1mdist/media/index.server.js [22m[32m2.95 KB[39m
|
|
138
138
|
[32mESM[39m [1mdist/media/chunk-IRL3KNPO.js [22m[32m6.70 KB[39m
|
|
139
139
|
[32mESM[39m [1mdist/media/index.js.map [22m[32m71.00 B[39m
|
|
140
|
-
[32mESM[39m [1mdist/media/index.browser.js.map [22m[32m6.15 KB[39m
|
|
141
140
|
[32mESM[39m [1mdist/media/index.native.js.map [22m[32m8.13 KB[39m
|
|
142
141
|
[32mESM[39m [1mdist/media/index.server.js.map [22m[32m6.38 KB[39m
|
|
142
|
+
[32mESM[39m [1mdist/media/index.browser.js.map [22m[32m6.15 KB[39m
|
|
143
143
|
[32mESM[39m [1mdist/media/chunk-IRL3KNPO.js.map [22m[32m17.00 KB[39m
|
|
144
|
-
[32mESM[39m ⚡️ Build success in
|
|
145
|
-
[32mESM[39m [1mdist/mcp/server.js [22m[
|
|
144
|
+
[32mESM[39m ⚡️ Build success in 49ms
|
|
145
|
+
[32mESM[39m [1mdist/mcp/server.js [22m[32m21.02 KB[39m
|
|
146
146
|
[32mESM[39m [1mdist/mcp/build-index.js [22m[32m6.62 KB[39m
|
|
147
|
-
[32mESM[39m [1mdist/mcp/server.js.map [22m[32m48.
|
|
147
|
+
[32mESM[39m [1mdist/mcp/server.js.map [22m[32m48.96 KB[39m
|
|
148
148
|
[32mESM[39m [1mdist/mcp/build-index.js.map [22m[32m16.00 KB[39m
|
|
149
|
-
[32mESM[39m ⚡️ Build success in
|
|
149
|
+
[32mESM[39m ⚡️ Build success in 53ms
|
|
150
|
+
[32mESM[39m [1mdist/react-core/index.js [22m[32m18.06 KB[39m
|
|
151
|
+
[32mESM[39m [1mdist/react-core/chunk-UOYH6JFJ.js [22m[32m189.00 B[39m
|
|
152
|
+
[32mESM[39m [1mdist/react-core/testing.js [22m[32m904.00 B[39m
|
|
153
|
+
[32mESM[39m [1mdist/react-core/index.js.map [22m[32m60.18 KB[39m
|
|
154
|
+
[32mESM[39m [1mdist/react-core/chunk-UOYH6JFJ.js.map [22m[32m363.00 B[39m
|
|
155
|
+
[32mESM[39m [1mdist/react-core/testing.js.map [22m[32m1.34 KB[39m
|
|
156
|
+
[32mESM[39m ⚡️ Build success in 50ms
|
|
150
157
|
[32mESM[39m [1mdist/expo/index.js [22m[32m5.65 KB[39m
|
|
151
158
|
[32mESM[39m [1mdist/expo/testing.js [22m[32m112.00 B[39m
|
|
152
159
|
[32mESM[39m [1mdist/expo/polyfills.js [22m[32m858.00 B[39m
|
|
153
160
|
[32mESM[39m [1mdist/expo/index.js.map [22m[32m11.85 KB[39m
|
|
154
161
|
[32mESM[39m [1mdist/expo/testing.js.map [22m[32m168.00 B[39m
|
|
155
162
|
[32mESM[39m [1mdist/expo/polyfills.js.map [22m[32m1.61 KB[39m
|
|
156
|
-
[32mESM[39m ⚡️ Build success in
|
|
157
|
-
[32mESM[39m [1mdist/react-core/index.js [22m[32m18.06 KB[39m
|
|
158
|
-
[32mESM[39m [1mdist/react-core/testing.js [22m[32m904.00 B[39m
|
|
159
|
-
[32mESM[39m [1mdist/react-core/chunk-UOYH6JFJ.js [22m[32m189.00 B[39m
|
|
160
|
-
[32mESM[39m [1mdist/react-core/index.js.map [22m[32m60.18 KB[39m
|
|
161
|
-
[32mESM[39m [1mdist/react-core/testing.js.map [22m[32m1.34 KB[39m
|
|
162
|
-
[32mESM[39m [1mdist/react-core/chunk-UOYH6JFJ.js.map [22m[32m363.00 B[39m
|
|
163
|
-
[32mESM[39m ⚡️ Build success in 55ms
|
|
163
|
+
[32mESM[39m ⚡️ Build success in 45ms
|
|
164
164
|
[32mESM[39m [1mdist/better-auth/database-adapter/index.js [22m[32m26.86 KB[39m
|
|
165
165
|
[32mESM[39m [1mdist/better-auth/database-adapter/index.js.map [22m[32m58.67 KB[39m
|
|
166
|
-
[32mESM[39m ⚡️ Build success in
|
|
167
|
-
[32mESM[39m [1mdist/
|
|
168
|
-
[32mESM[39m [1mdist/browser/index.js.map [22m[32m34.06 KB[39m
|
|
169
|
-
[32mESM[39m ⚡️ Build success in 66ms
|
|
170
|
-
[32mESM[39m [1mdist/react/ssr.js [22m[32m693.00 B[39m
|
|
171
|
-
[32mESM[39m [1mdist/react/testing.js [22m[32m122.00 B[39m
|
|
172
|
-
[32mESM[39m [1mdist/react/index.js [22m[32m26.02 KB[39m
|
|
173
|
-
[32mESM[39m [1mdist/react/ssr.js.map [22m[32m1.10 KB[39m
|
|
174
|
-
[32mESM[39m [1mdist/react/testing.js.map [22m[32m165.00 B[39m
|
|
175
|
-
[32mESM[39m [1mdist/react/index.js.map [22m[32m55.45 KB[39m
|
|
176
|
-
[32mESM[39m ⚡️ Build success in 69ms
|
|
177
|
-
[32mESM[39m [1mdist/prosemirror/index.js [22m[32m78.48 KB[39m
|
|
178
|
-
[32mESM[39m [1mdist/prosemirror/index.js.map [22m[32m309.11 KB[39m
|
|
179
|
-
[32mESM[39m ⚡️ Build success in 87ms
|
|
166
|
+
[32mESM[39m ⚡️ Build success in 45ms
|
|
167
|
+
[32mESM[39m [1mdist/react-native-core/index.js [22m[32m35.08 KB[39m
|
|
180
168
|
[32mESM[39m [1mdist/react-native-core/testing.js [22m[32m119.00 B[39m
|
|
181
|
-
[32mESM[39m [1mdist/react-native-core/index.js
|
|
169
|
+
[32mESM[39m [1mdist/react-native-core/index.js.map [22m[32m70.09 KB[39m
|
|
182
170
|
[32mESM[39m [1mdist/react-native-core/testing.js.map [22m[32m175.00 B[39m
|
|
183
|
-
[32mESM[39m
|
|
184
|
-
[32mESM[39m
|
|
185
|
-
[32mESM[39m [1mdist/
|
|
171
|
+
[32mESM[39m ⚡️ Build success in 62ms
|
|
172
|
+
[32mESM[39m [1mdist/prosemirror/index.js [22m[32m78.48 KB[39m
|
|
173
|
+
[32mESM[39m [1mdist/prosemirror/index.js.map [22m[32m309.11 KB[39m
|
|
174
|
+
[32mESM[39m ⚡️ Build success in 78ms
|
|
175
|
+
[32mESM[39m [1mdist/browser/index.js [22m[32m16.36 KB[39m
|
|
176
|
+
[32mESM[39m [1mdist/browser/index.js.map [22m[32m32.83 KB[39m
|
|
177
|
+
[32mESM[39m ⚡️ Build success in 80ms
|
|
178
|
+
[32mESM[39m [1mdist/react/index.js [22m[32m26.16 KB[39m
|
|
179
|
+
[32mESM[39m [1mdist/react/testing.js [22m[32m122.00 B[39m
|
|
180
|
+
[32mESM[39m [1mdist/react/ssr.js [22m[32m693.00 B[39m
|
|
181
|
+
[32mESM[39m [1mdist/react/index.js.map [22m[32m55.65 KB[39m
|
|
182
|
+
[32mESM[39m [1mdist/react/testing.js.map [22m[32m165.00 B[39m
|
|
183
|
+
[32mESM[39m [1mdist/react/ssr.js.map [22m[32m1.10 KB[39m
|
|
184
|
+
[32mESM[39m ⚡️ Build success in 72ms
|
|
185
|
+
[32mESM[39m [1mdist/react-native/index.js [22m[32m38.82 KB[39m
|
|
186
186
|
[32mESM[39m [1mdist/react-native/testing.js [22m[32m120.00 B[39m
|
|
187
|
-
[32mESM[39m [1mdist/react-native/
|
|
188
|
-
[32mESM[39m [1mdist/react-native/
|
|
187
|
+
[32mESM[39m [1mdist/react-native/polyfills.js [22m[32m858.00 B[39m
|
|
188
|
+
[32mESM[39m [1mdist/react-native/index.js.map [22m[32m77.74 KB[39m
|
|
189
189
|
[32mESM[39m [1mdist/react-native/testing.js.map [22m[32m176.00 B[39m
|
|
190
|
-
[32mESM[39m [1mdist/react-native/
|
|
191
|
-
[32mESM[39m ⚡️ Build success in
|
|
192
|
-
[32mESM[39m [1mdist/inspector/index.js [22m[32m37.49 KB[39m
|
|
190
|
+
[32mESM[39m [1mdist/react-native/polyfills.js.map [22m[32m1.61 KB[39m
|
|
191
|
+
[32mESM[39m ⚡️ Build success in 81ms
|
|
193
192
|
[32mESM[39m [1mdist/inspector/standalone.js [22m[32m12.61 KB[39m
|
|
193
|
+
[32mESM[39m [1mdist/inspector/index.js [22m[32m37.49 KB[39m
|
|
194
194
|
[32mESM[39m [1mdist/inspector/chunk-ORKZSKZF.js [22m[32m128.83 KB[39m
|
|
195
|
-
[32mESM[39m [1mdist/inspector/index.js.map [22m[32m63.80 KB[39m
|
|
196
195
|
[32mESM[39m [1mdist/inspector/standalone.js.map [22m[32m20.11 KB[39m
|
|
197
196
|
[32mESM[39m [1mdist/inspector/chunk-ORKZSKZF.js.map [22m[32m222.34 KB[39m
|
|
198
|
-
[32mESM[39m
|
|
199
|
-
[32mESM[39m
|
|
200
|
-
[32mESM[39m [1mdist/
|
|
197
|
+
[32mESM[39m [1mdist/inspector/index.js.map [22m[32m63.80 KB[39m
|
|
198
|
+
[32mESM[39m ⚡️ Build success in 90ms
|
|
199
|
+
[32mESM[39m [1mdist/inspector/register-custom-element.js [22m[32m305.00 B[39m
|
|
200
|
+
[32mESM[39m [1mdist/inspector/register-custom-element.js.map [22m[32m445.00 B[39m
|
|
201
|
+
[32mESM[39m [1mdist/inspector/custom-element-7G7IZVLL.js [22m[32m1.64 MB[39m
|
|
202
|
+
[32mESM[39m [1mdist/inspector/custom-element-7G7IZVLL.js.map [22m[32m2.52 MB[39m
|
|
203
|
+
[32mESM[39m ⚡️ Build success in 138ms
|
|
204
|
+
[32mESM[39m [1mdist/index.js [22m[32m32.38 KB[39m
|
|
201
205
|
[32mESM[39m [1mdist/testing.js [22m[32m8.56 KB[39m
|
|
202
206
|
[32mESM[39m [1mdist/chunk-K4D7IMFM.js [22m[32m690.00 B[39m
|
|
203
|
-
[32mESM[39m [1mdist/chunk-ZQWSQH6L.js [22m[32m945.00 B[39m
|
|
204
207
|
[32mESM[39m [1mdist/tools/ssr.js [22m[32m156.00 B[39m
|
|
205
|
-
[32mESM[39m [1mdist/
|
|
206
|
-
[32mESM[39m [1mdist/
|
|
208
|
+
[32mESM[39m [1mdist/chunk-ZQWSQH6L.js [22m[32m945.00 B[39m
|
|
209
|
+
[32mESM[39m [1mdist/chunk-MIPBSAS7.js [22m[32m281.05 KB[39m
|
|
210
|
+
[32mESM[39m [1mdist/index.js.map [22m[32m66.14 KB[39m
|
|
207
211
|
[32mESM[39m [1mdist/chunk-K4D7IMFM.js.map [22m[32m1.10 KB[39m
|
|
208
212
|
[32mESM[39m [1mdist/chunk-ZQWSQH6L.js.map [22m[32m71.00 B[39m
|
|
213
|
+
[32mESM[39m [1mdist/testing.js.map [22m[32m16.22 KB[39m
|
|
209
214
|
[32mESM[39m [1mdist/tools/ssr.js.map [22m[32m71.00 B[39m
|
|
210
|
-
[32mESM[39m [1mdist/chunk-
|
|
211
|
-
[32mESM[39m ⚡️ Build success in
|
|
212
|
-
[32mESM[39m [1mdist/inspector/register-custom-element.js [22m[32m305.00 B[39m
|
|
213
|
-
[32mESM[39m [1mdist/inspector/register-custom-element.js.map [22m[32m445.00 B[39m
|
|
214
|
-
[32mESM[39m [1mdist/inspector/custom-element-7G7IZVLL.js [22m[32m1.64 MB[39m
|
|
215
|
-
[32mESM[39m [1mdist/inspector/custom-element-7G7IZVLL.js.map [22m[32m2.52 MB[39m
|
|
216
|
-
[32mESM[39m ⚡️ Build success in 166ms
|
|
215
|
+
[32mESM[39m [1mdist/chunk-MIPBSAS7.js.map [22m[32m648.81 KB[39m
|
|
216
|
+
[32mESM[39m ⚡️ Build success in 136ms
|
|
217
217
|
|
|
218
|
-
> jazz-tools@0.20.
|
|
218
|
+
> jazz-tools@0.20.18 types /home/runner/_work/jazz/jazz/packages/jazz-tools
|
|
219
219
|
> tsc --outDir dist
|
|
220
220
|
|
|
221
221
|
|
|
222
|
-
> jazz-tools@0.20.
|
|
222
|
+
> jazz-tools@0.20.18 build:svelte /home/runner/_work/jazz/jazz/packages/jazz-tools
|
|
223
223
|
> rm -rf dist/svelte && svelte-package -i src/svelte -o dist/svelte --tsconfig tsconfig.svelte.json
|
|
224
224
|
|
|
225
225
|
src/svelte -> dist/svelte
|
|
226
226
|
|
|
227
|
-
> jazz-tools@0.20.
|
|
227
|
+
> jazz-tools@0.20.18 build:better-auth-svelte /home/runner/_work/jazz/jazz/packages/jazz-tools
|
|
228
228
|
> mkdir -p dist/better-auth/auth && svelte-package -i src/better-auth/auth -o dist/better-auth/auth-temp --tsconfig tsconfig.svelte.json && cp dist/better-auth/auth-temp/svelte.svelte dist/better-auth/auth/svelte.svelte && cp dist/better-auth/auth-temp/svelte.svelte.d.ts dist/better-auth/auth/svelte.d.ts && rm -rf dist/better-auth/auth-temp
|
|
229
229
|
|
|
230
230
|
src/better-auth/auth -> dist/better-auth/auth-temp
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# jazz-tools
|
|
2
2
|
|
|
3
|
+
## 0.20.18
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- ab2e90b: Fix a Better Auth race condition where a slow `/get-session` request returning `null` after a successful sign-in would incorrectly log the user out. The client plugin now tracks an `authGeneration` counter, attaches it to `/get-session` requests via an `x-jazz-auth-generation` header, and ignores stale null responses whose generation no longer matches the current one.
|
|
8
|
+
- 12b27e1: Add opt-in experimental clock synchronisation from server pings.
|
|
9
|
+
- 1c6e9ff: Fix circularity issues when using CoMap `extend()` or `safeExtend()`
|
|
10
|
+
- ab2e90b: Fix `createJazzContext` hanging when an account migration loads a `co.discriminatedUnion()` CoValue whose stored value matches no declared variant. The runtime discriminator now throws a dedicated `SchemaUnionNoMatchingVariantError` that `SubscriptionScope` catches and surfaces as `UNAVAILABLE`, so `load()` settles instead of hanging. Other instantiation errors (e.g. `CoVector` dimension mismatches) still throw loudly.
|
|
11
|
+
- Updated dependencies [12b27e1]
|
|
12
|
+
- cojson@0.20.18
|
|
13
|
+
- cojson-transport-ws@0.20.18
|
|
14
|
+
- cojson-storage-indexeddb@0.20.18
|
|
15
|
+
|
|
16
|
+
## 0.20.17
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- d26dccc: Fix MCP docs server failing to use SQLite/FTS5 backend by preventing bundlers from stripping the `node:` prefix on `node:sqlite` imports.
|
|
21
|
+
- 6572f1f: Add new co.snapshotRef() CoValue that abstracts away cursor-based snapshotting and allows snapshots of values to be seamlessly referenced
|
|
22
|
+
- 754df86: Accept an options object `{ baseURL, valueHint? }` as the third argument to `createInviteLink`, matching the signature already used by the browser and React Native wrappers. The positional form `(value, role, baseURL, valueHint?)` is deprecated but still supported.
|
|
23
|
+
- cojson@0.20.17
|
|
24
|
+
- cojson-storage-indexeddb@0.20.17
|
|
25
|
+
- cojson-transport-ws@0.20.17
|
|
26
|
+
|
|
3
27
|
## 0.20.16
|
|
4
28
|
|
|
5
29
|
### 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,OAAO,EACP,iBAAiB,EAEjB,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAS9C;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB;;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/better-auth/auth/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,iBAAiB,EAEjB,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAS9C;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB;;wBAqBC,UAAU,CAAC,OAAO,UAAU,CAAC;;;sCAIvB,eAAe,CAAC,OAAO,CAAC;4CAGlB,iBAAiB;;;;;;;;;;;CA2I1D,CAAC"}
|
|
@@ -9,7 +9,9 @@ var jazzPluginClient = () => {
|
|
|
9
9
|
let jazzContext;
|
|
10
10
|
let authSecretStorage;
|
|
11
11
|
let signOutUnsubscription;
|
|
12
|
+
let authGeneration = 0;
|
|
12
13
|
const authenticateOnJazz = async (jazzAuth) => {
|
|
14
|
+
authGeneration++;
|
|
13
15
|
const parsedJazzAuth = {
|
|
14
16
|
...jazzAuth,
|
|
15
17
|
secretSeed: jazzAuth.secretSeed ? Uint8Array.from(jazzAuth.secretSeed) : void 0
|
|
@@ -57,6 +59,12 @@ var jazzPluginClient = () => {
|
|
|
57
59
|
name: "jazz-plugin",
|
|
58
60
|
hooks: {
|
|
59
61
|
async onRequest(context) {
|
|
62
|
+
if (context.url.toString().includes("/get-session")) {
|
|
63
|
+
context.headers.set(
|
|
64
|
+
"x-jazz-auth-generation",
|
|
65
|
+
String(authGeneration)
|
|
66
|
+
);
|
|
67
|
+
}
|
|
60
68
|
if (SIGNUP_URLS.some((url) => context.url.toString().includes(url))) {
|
|
61
69
|
const credentials = await authSecretStorage.get();
|
|
62
70
|
if (!credentials) {
|
|
@@ -83,7 +91,10 @@ var jazzPluginClient = () => {
|
|
|
83
91
|
}
|
|
84
92
|
if (context.request.url.toString().includes("/get-session")) {
|
|
85
93
|
if (context.data === null) {
|
|
86
|
-
|
|
94
|
+
const requestAuthGeneration = Number(
|
|
95
|
+
context.request.headers.get("x-jazz-auth-generation") ?? "0"
|
|
96
|
+
);
|
|
97
|
+
if (authSecretStorage.isAuthenticated === true && requestAuthGeneration === authGeneration) {
|
|
87
98
|
console.info(
|
|
88
99
|
"Jazz is authenticated, but the session is null. Logging out"
|
|
89
100
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/better-auth/auth/client.ts"],"sourcesContent":["import type { BetterAuthClientPlugin } from \"better-auth\";\nimport type {\n Account,\n AuthSecretStorage,\n AuthSetPayload,\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 ? Array.from(credentials.secretSeed)\n : undefined,\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.info(\n \"Jazz is authenticated, but the session is null. Logging out\",\n );\n await jazzContext.logOut();\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":";AASA,IAAM,cAAc;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAUO,IAAM,mBAAmB,MAAM;AACpC,MAAI;AACJ,MAAI;AACJ,MAAI;
|
|
1
|
+
{"version":3,"sources":["../../../src/better-auth/auth/client.ts"],"sourcesContent":["import type { BetterAuthClientPlugin } from \"better-auth\";\nimport type {\n Account,\n AuthSecretStorage,\n AuthSetPayload,\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 let authGeneration = 0;\n\n const authenticateOnJazz = async (jazzAuth: AuthSetPayload) => {\n authGeneration++;\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 (context.url.toString().includes(\"/get-session\")) {\n context.headers.set(\n \"x-jazz-auth-generation\",\n String(authGeneration),\n );\n }\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 ? Array.from(credentials.secretSeed)\n : undefined,\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 const requestAuthGeneration = Number(\n context.request.headers.get(\"x-jazz-auth-generation\") ?? \"0\",\n );\n if (\n authSecretStorage.isAuthenticated === true &&\n requestAuthGeneration === authGeneration\n ) {\n console.info(\n \"Jazz is authenticated, but the session is null. Logging out\",\n );\n await jazzContext.logOut();\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"]}
|
|
@@ -11,6 +11,7 @@ export type JazzContextManagerProps<S extends (AccountClass<Account> & CoValueFr
|
|
|
11
11
|
storage?: BaseBrowserContextOptions["storage"];
|
|
12
12
|
AccountSchema?: S;
|
|
13
13
|
defaultProfileName?: string;
|
|
14
|
+
experimental_clockSyncFromServerPings?: boolean;
|
|
14
15
|
};
|
|
15
16
|
export declare class JazzBrowserContextManager<S extends (AccountClass<Account> & CoValueFromRaw<Account>) | AnyAccountSchema> extends JazzContextManager<InstanceOfSchema<S>, JazzContextManagerProps<S>> {
|
|
16
17
|
getKvStore(): InMemoryKVStore | LocalStorageKVStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowserContextManager.d.ts","sourceRoot":"","sources":["../../src/browser/BrowserContextManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EACL,yBAAyB,EAG1B,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,uBAAuB,CACjC,CAAC,SACG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GACjD,gBAAgB,IAClB;IACF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,2BAA2B,CAAC,EAAE,CAC5B,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAClC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,OAAO,CAAC,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC;IAC/C,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"BrowserContextManager.d.ts","sourceRoot":"","sources":["../../src/browser/BrowserContextManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EACL,yBAAyB,EAG1B,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,uBAAuB,CACjC,CAAC,SACG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GACjD,gBAAgB,IAClB;IACF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,2BAA2B,CAAC,EAAE,CAC5B,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAClC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,OAAO,CAAC,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC;IAC/C,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qCAAqC,CAAC,EAAE,OAAO,CAAC;CACjD,CAAC;AAEF,qBAAa,yBAAyB,CACpC,CAAC,SACG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GACjD,gBAAgB,CACpB,SAAQ,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAE3E,UAAU;IASJ,aAAa,CACjB,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC,EACjC,SAAS,CAAC,EAAE,2BAA2B;;;;;;;;;;;;;;;;IAyBzC,YAAY,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC;CAW/C"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { LocalNode } from "cojson";
|
|
2
|
-
import { Account, AccountClass, AgentID, AnyAccountSchema, AuthCredentials, AuthSecretStorage,
|
|
2
|
+
import { Account, AccountClass, AgentID, AnyAccountSchema, AuthCredentials, AuthSecretStorage, CoValueFromRaw, CryptoProvider, ID, NewAccountProps, SessionID, SyncConfig } from "jazz-tools";
|
|
3
3
|
export type BaseBrowserContextOptions = {
|
|
4
4
|
sync: SyncConfig;
|
|
5
5
|
reconnectionTimeout?: number;
|
|
6
6
|
storage?: "indexedDB";
|
|
7
7
|
crypto?: CryptoProvider;
|
|
8
8
|
authSecretStorage: AuthSecretStorage;
|
|
9
|
+
experimental_clockSyncFromServerPings?: boolean;
|
|
9
10
|
};
|
|
10
11
|
export declare function createJazzBrowserGuestContext(options: BaseBrowserContextOptions): Promise<{
|
|
11
12
|
guest: import("jazz-tools").AnonymousJazzAgent;
|
|
@@ -32,15 +33,4 @@ export declare function createJazzBrowserContext<S extends (AccountClass<Account
|
|
|
32
33
|
}>;
|
|
33
34
|
/** @category Auth Providers */
|
|
34
35
|
export type SessionProvider = (accountID: ID<Account> | AgentID) => Promise<SessionID>;
|
|
35
|
-
/** @category Invite Links */
|
|
36
|
-
export declare function createInviteLink<C extends CoValue>(value: C, role: "reader" | "writer" | "admin" | "writeOnly", { baseURL, valueHint, }?: {
|
|
37
|
-
baseURL?: string;
|
|
38
|
-
valueHint?: string;
|
|
39
|
-
}): string;
|
|
40
|
-
/** @category Invite Links */
|
|
41
|
-
export declare function parseInviteLink<C extends CoValue>(inviteURL: string): {
|
|
42
|
-
valueID: ID<C>;
|
|
43
|
-
valueHint?: string;
|
|
44
|
-
inviteSecret: InviteSecret;
|
|
45
|
-
} | undefined;
|
|
46
36
|
//# sourceMappingURL=createBrowserContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createBrowserContext.d.ts","sourceRoot":"","sources":["../../src/browser/createBrowserContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAQ,MAAM,QAAQ,CAAC;AAIzC,OAAO,EACL,OAAO,EACP,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,eAAe,EACf,iBAAiB,
|
|
1
|
+
{"version":3,"file":"createBrowserContext.d.ts","sourceRoot":"","sources":["../../src/browser/createBrowserContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAQ,MAAM,QAAQ,CAAC;AAIzC,OAAO,EACL,OAAO,EACP,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EAEjB,cAAc,EACd,cAAc,EACd,EAAE,EACF,eAAe,EACf,SAAS,EACT,UAAU,EAEX,MAAM,YAAY,CAAC;AAOpB,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,UAAU,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,qCAAqC,CAAC,EAAE,OAAO,CAAC;CACjD,CAAC;AA0FF,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,yBAAyB;;;;;4DAnBA,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI;;GA2D/D;AAED,MAAM,MAAM,qBAAqB,CAC/B,CAAC,SACG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GACjD,gBAAgB,IAClB;IACF,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,yBAAyB,CAAC;AAE9B,wBAAsB,wBAAwB,CAC5C,CAAC,SACG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GACjD,gBAAgB,EACpB,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC;;;;;;4DA5EC,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI;;GA4I/D;AAED,+BAA+B;AAC/B,MAAM,MAAM,eAAe,GAAG,CAC5B,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,OAAO,KAC7B,OAAO,CAAC,SAAS,CAAC,CAAC"}
|
package/dist/browser/index.js
CHANGED
|
@@ -187,7 +187,6 @@ import { getIndexedDBStorage } from "cojson-storage-indexeddb";
|
|
|
187
187
|
import { WebSocketPeerWithReconnection } from "cojson-transport-ws";
|
|
188
188
|
import { WasmCrypto } from "cojson/crypto/WasmCrypto";
|
|
189
189
|
import {
|
|
190
|
-
cojsonInternals as cojsonInternals2,
|
|
191
190
|
createAnonymousJazzContext
|
|
192
191
|
} from "jazz-tools";
|
|
193
192
|
import { createJazzContext } from "jazz-tools";
|
|
@@ -359,6 +358,9 @@ async function setupPeers(options) {
|
|
|
359
358
|
},
|
|
360
359
|
removePeer: (peer) => {
|
|
361
360
|
peers.splice(peers.indexOf(peer), 1);
|
|
361
|
+
},
|
|
362
|
+
onPingReceived: (sample) => {
|
|
363
|
+
node?.clockOffset.addSample(sample);
|
|
362
364
|
}
|
|
363
365
|
});
|
|
364
366
|
function toggleNetwork(enabled) {
|
|
@@ -407,7 +409,8 @@ async function createJazzBrowserGuestContext(options) {
|
|
|
407
409
|
crypto,
|
|
408
410
|
peers,
|
|
409
411
|
syncWhen,
|
|
410
|
-
storage
|
|
412
|
+
storage,
|
|
413
|
+
experimental_clockSyncFromServerPings: options.experimental_clockSyncFromServerPings
|
|
411
414
|
});
|
|
412
415
|
setNode(context.agent.node);
|
|
413
416
|
options.authSecretStorage.emitUpdate(null);
|
|
@@ -462,7 +465,8 @@ async function createJazzBrowserContext(options) {
|
|
|
462
465
|
defaultProfileName: options.defaultProfileName,
|
|
463
466
|
AccountSchema: options.AccountSchema,
|
|
464
467
|
sessionProvider: getBrowserLockSessionProvider(),
|
|
465
|
-
authSecretStorage: options.authSecretStorage
|
|
468
|
+
authSecretStorage: options.authSecretStorage,
|
|
469
|
+
experimental_clockSyncFromServerPings: options.experimental_clockSyncFromServerPings
|
|
466
470
|
});
|
|
467
471
|
setNode(context.node);
|
|
468
472
|
return {
|
|
@@ -522,7 +526,8 @@ var JazzBrowserContextManager = class extends JazzContextManager {
|
|
|
522
526
|
return createJazzBrowserGuestContext({
|
|
523
527
|
sync: props.sync,
|
|
524
528
|
storage: props.storage,
|
|
525
|
-
authSecretStorage: this.authSecretStorage
|
|
529
|
+
authSecretStorage: this.authSecretStorage,
|
|
530
|
+
experimental_clockSyncFromServerPings: props.experimental_clockSyncFromServerPings
|
|
526
531
|
});
|
|
527
532
|
} else {
|
|
528
533
|
return createJazzBrowserContext({
|
|
@@ -532,7 +537,8 @@ var JazzBrowserContextManager = class extends JazzContextManager {
|
|
|
532
537
|
credentials: authProps?.credentials,
|
|
533
538
|
newAccountProps: authProps?.newAccountProps,
|
|
534
539
|
defaultProfileName: props.defaultProfileName,
|
|
535
|
-
authSecretStorage: this.authSecretStorage
|
|
540
|
+
authSecretStorage: this.authSecretStorage,
|
|
541
|
+
experimental_clockSyncFromServerPings: props.experimental_clockSyncFromServerPings
|
|
536
542
|
});
|
|
537
543
|
}
|
|
538
544
|
}
|
|
@@ -551,7 +557,7 @@ function createInviteLink(value, role, {
|
|
|
551
557
|
baseURL = window.location.href.replace(/#.*$/, ""),
|
|
552
558
|
valueHint
|
|
553
559
|
} = {}) {
|
|
554
|
-
return baseCreateInviteLink(value, role, baseURL, valueHint);
|
|
560
|
+
return baseCreateInviteLink(value, role, { baseURL, valueHint });
|
|
555
561
|
}
|
|
556
562
|
async function consumeInviteLinkFromWindowLocation({
|
|
557
563
|
as,
|