jazz-tools 0.18.17 → 0.18.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/.svelte-kit/__package__/jazz.class.svelte.d.ts +14 -0
  2. package/.svelte-kit/__package__/jazz.class.svelte.d.ts.map +1 -1
  3. package/.svelte-kit/__package__/jazz.class.svelte.js +37 -0
  4. package/.svelte-kit/__package__/testing.d.ts +1 -1
  5. package/.svelte-kit/__package__/testing.d.ts.map +1 -1
  6. package/.svelte-kit/__package__/testing.js +1 -1
  7. package/.svelte-kit/__package__/tests/TestConnectionStatus.svelte +8 -0
  8. package/.svelte-kit/__package__/tests/TestConnectionStatus.svelte.d.ts +27 -0
  9. package/.svelte-kit/__package__/tests/TestConnectionStatus.svelte.d.ts.map +1 -0
  10. package/.svelte-kit/__package__/tests/sync-connection-status.svelte.test.d.ts +2 -0
  11. package/.svelte-kit/__package__/tests/sync-connection-status.svelte.test.d.ts.map +1 -0
  12. package/.svelte-kit/__package__/tests/sync-connection-status.svelte.test.js +47 -0
  13. package/.turbo/turbo-build.log +57 -57
  14. package/CHANGELOG.md +27 -0
  15. package/dist/better-auth/auth/client.d.ts.map +1 -1
  16. package/dist/better-auth/auth/client.js +3 -2
  17. package/dist/better-auth/auth/client.js.map +1 -1
  18. package/dist/browser/BrowserContextManager.d.ts +4 -0
  19. package/dist/browser/BrowserContextManager.d.ts.map +1 -1
  20. package/dist/browser/createBrowserContext.d.ts +4 -0
  21. package/dist/browser/createBrowserContext.d.ts.map +1 -1
  22. package/dist/browser/index.js +36 -4
  23. package/dist/browser/index.js.map +1 -1
  24. package/dist/{chunk-OTWWOZMB.js → chunk-RN3Y24WX.js} +9 -4
  25. package/dist/chunk-RN3Y24WX.js.map +1 -0
  26. package/dist/index.js +1 -1
  27. package/dist/react/hooks.d.ts +1 -1
  28. package/dist/react/hooks.d.ts.map +1 -1
  29. package/dist/react/index.d.ts +1 -1
  30. package/dist/react/index.d.ts.map +1 -1
  31. package/dist/react/index.js +4 -2
  32. package/dist/react/index.js.map +1 -1
  33. package/dist/react-core/hooks.d.ts +26 -0
  34. package/dist/react-core/hooks.d.ts.map +1 -1
  35. package/dist/react-core/index.js +16 -1
  36. package/dist/react-core/index.js.map +1 -1
  37. package/dist/react-core/testing.d.ts +1 -1
  38. package/dist/react-core/testing.d.ts.map +1 -1
  39. package/dist/react-core/testing.js +3 -1
  40. package/dist/react-core/testing.js.map +1 -1
  41. package/dist/react-core/tests/useSyncConnectionStatus.test.d.ts +2 -0
  42. package/dist/react-core/tests/useSyncConnectionStatus.test.d.ts.map +1 -0
  43. package/dist/react-native-core/ReactNativeContextManager.d.ts +4 -0
  44. package/dist/react-native-core/ReactNativeContextManager.d.ts.map +1 -1
  45. package/dist/react-native-core/hooks.d.ts +1 -1
  46. package/dist/react-native-core/hooks.d.ts.map +1 -1
  47. package/dist/react-native-core/index.js +38 -6
  48. package/dist/react-native-core/index.js.map +1 -1
  49. package/dist/react-native-core/platform.d.ts +4 -0
  50. package/dist/react-native-core/platform.d.ts.map +1 -1
  51. package/dist/svelte/jazz.class.svelte.d.ts +14 -0
  52. package/dist/svelte/jazz.class.svelte.d.ts.map +1 -1
  53. package/dist/svelte/jazz.class.svelte.js +37 -0
  54. package/dist/svelte/testing.d.ts +1 -1
  55. package/dist/svelte/testing.d.ts.map +1 -1
  56. package/dist/svelte/testing.js +1 -1
  57. package/dist/svelte/tests/TestConnectionStatus.svelte +8 -0
  58. package/dist/svelte/tests/TestConnectionStatus.svelte.d.ts +27 -0
  59. package/dist/svelte/tests/TestConnectionStatus.svelte.d.ts.map +1 -0
  60. package/dist/svelte/tests/sync-connection-status.svelte.test.d.ts +2 -0
  61. package/dist/svelte/tests/sync-connection-status.svelte.test.d.ts.map +1 -0
  62. package/dist/svelte/tests/sync-connection-status.svelte.test.js +47 -0
  63. package/dist/testing.js +34 -4
  64. package/dist/testing.js.map +1 -1
  65. package/dist/tools/coValues/coMap.d.ts +2 -2
  66. package/dist/tools/coValues/coMap.d.ts.map +1 -1
  67. package/dist/tools/implementation/ContextManager.d.ts +4 -0
  68. package/dist/tools/implementation/ContextManager.d.ts.map +1 -1
  69. package/dist/tools/subscribe/SubscriptionScope.d.ts.map +1 -1
  70. package/dist/tools/testing.d.ts +8 -0
  71. package/dist/tools/testing.d.ts.map +1 -1
  72. package/dist/tools/types.d.ts +4 -0
  73. package/dist/tools/types.d.ts.map +1 -1
  74. package/package.json +4 -4
  75. package/src/better-auth/auth/client.ts +3 -2
  76. package/src/better-auth/auth/tests/client.test.ts +22 -0
  77. package/src/browser/createBrowserContext.ts +34 -4
  78. package/src/react/hooks.tsx +1 -0
  79. package/src/react/index.ts +1 -0
  80. package/src/react-core/hooks.ts +42 -0
  81. package/src/react-core/testing.tsx +1 -0
  82. package/src/react-core/tests/useAccountWithSelector.test.ts +98 -2
  83. package/src/react-core/tests/useSyncConnectionStatus.test.ts +48 -0
  84. package/src/react-native-core/hooks.tsx +1 -0
  85. package/src/react-native-core/platform.ts +32 -4
  86. package/src/svelte/jazz.class.svelte.ts +44 -0
  87. package/src/svelte/testing.ts +1 -0
  88. package/src/svelte/tests/TestConnectionStatus.svelte +8 -0
  89. package/src/svelte/tests/sync-connection-status.svelte.test.ts +61 -0
  90. package/src/tools/coValues/coMap.ts +5 -5
  91. package/src/tools/implementation/ContextManager.ts +8 -0
  92. package/src/tools/subscribe/SubscriptionScope.ts +5 -1
  93. package/src/tools/subscribe/index.ts +1 -1
  94. package/src/tools/testing.ts +29 -0
  95. package/src/tools/tests/ContextManager.test.ts +2 -2
  96. package/src/tools/tests/coMap.test.ts +68 -2
  97. package/src/tools/tests/subscribe.test.ts +42 -4
  98. package/src/tools/types.ts +4 -0
  99. package/dist/chunk-OTWWOZMB.js.map +0 -1
@@ -34,5 +34,19 @@ export declare class AccountCoState<A extends (AccountClass<Account> & CoValueFr
34
34
  get agent(): import("jazz-tools").AnonymousJazzAgent | InstanceOfSchema<A>;
35
35
  get isAuthenticated(): boolean;
36
36
  }
37
+ /**
38
+ * Class that provides the current connection status to the Jazz sync server.
39
+ *
40
+ * @returns `true` when connected to the server, `false` when disconnected
41
+ *
42
+ * @remarks
43
+ * On connection drop, this will return `false` only when Jazz detects the disconnection
44
+ * after 5 seconds of not receiving a ping from the server.
45
+ */
46
+ export declare class SyncConnectionStatus {
47
+ #private;
48
+ constructor();
49
+ get current(): boolean;
50
+ }
37
51
  export {};
38
52
  //# sourceMappingURL=jazz.class.svelte.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jazz.class.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/jazz.class.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,MAAM,EACN,YAAY,EACZ,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAUpB,KAAK,cAAc,CAAC,CAAC,SAAS,oBAAoB,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,IAAI;IAC/E,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC;;;;;;;;;;;;;;MAcE;IACF,eAAe,CAAC,EAAE,gBAAgB,CAAA;CACnC,CAAC;AAEF,KAAK,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;AAE3C,qBAAa,OAAO,CAClB,CAAC,SAAS,oBAAoB,EAC9B,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;;gBAU9B,MAAM,EAAE,CAAC,EACT,EAAE,EAAE,SAAS,GAAG,CAAC,MAAM,SAAS,CAAC,EACjC,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAgD/D,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI;IAM7C,IAAI,OAAO,oCAGV;CACF;AAED,qBAAa,cAAc,CACzB,CAAC,SACC,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GACjD,gBAAgB,EAClB,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;;gBAQpB,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IA8CpF,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI;IAM7C,MAAM,aAEJ;IAEF,IAAI,OAAO,oCAIV;IAED,IAAI,KAAK,kEAQR;IAID,IAAI,eAAe,YAElB;CACF"}
1
+ {"version":3,"file":"jazz.class.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/jazz.class.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,MAAM,EACN,YAAY,EACZ,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAUpB,KAAK,cAAc,CAAC,CAAC,SAAS,oBAAoB,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,IAAI;IAC/E,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC;;;;;;;;;;;;;;MAcE;IACF,eAAe,CAAC,EAAE,gBAAgB,CAAA;CACnC,CAAC;AAEF,KAAK,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;AAE3C,qBAAa,OAAO,CAClB,CAAC,SAAS,oBAAoB,EAC9B,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;;gBAU9B,MAAM,EAAE,CAAC,EACT,EAAE,EAAE,SAAS,GAAG,CAAC,MAAM,SAAS,CAAC,EACjC,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAgD/D,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI;IAM7C,IAAI,OAAO,oCAGV;CACF;AAED,qBAAa,cAAc,CACzB,CAAC,SACC,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GACjD,gBAAgB,EAClB,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;;gBAQpB,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IA8CpF,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI;IAM7C,MAAM,aAEJ;IAEF,IAAI,OAAO,oCAIV;IAED,IAAI,KAAK,kEAQR;IAID,IAAI,eAAe,YAElB;CACF;AAED;;;;;;;;GAQG;AACH,qBAAa,oBAAoB;;;IA6B/B,IAAI,OAAO,YAGV;CACF"}
@@ -123,3 +123,40 @@ export class AccountCoState {
123
123
  return this.#isAuthenticated.current;
124
124
  }
125
125
  }
126
+ /**
127
+ * Class that provides the current connection status to the Jazz sync server.
128
+ *
129
+ * @returns `true` when connected to the server, `false` when disconnected
130
+ *
131
+ * @remarks
132
+ * On connection drop, this will return `false` only when Jazz detects the disconnection
133
+ * after 5 seconds of not receiving a ping from the server.
134
+ */
135
+ export class SyncConnectionStatus {
136
+ #ctx = getJazzContext();
137
+ #subscribe;
138
+ #update = () => { };
139
+ constructor() {
140
+ this.#subscribe = createSubscriber((update) => {
141
+ this.#update = update;
142
+ });
143
+ $effect.pre(() => {
144
+ const ctx = this.#ctx.current;
145
+ return untrack(() => {
146
+ if (!ctx) {
147
+ return;
148
+ }
149
+ const unsubscribe = ctx.addConnectionListener(() => {
150
+ this.#update();
151
+ });
152
+ return () => {
153
+ unsubscribe();
154
+ };
155
+ });
156
+ });
157
+ }
158
+ get current() {
159
+ this.#subscribe();
160
+ return this.#ctx.current?.connected() ?? false;
161
+ }
162
+ }
@@ -6,5 +6,5 @@ export declare function createJazzTestContext<Acc extends Account>(opts?: {
6
6
  };
7
7
  isAuthenticated?: boolean;
8
8
  }): Map<{} | {}, AuthSecretStorage | JazzContext<Acc>>;
9
- export { createJazzTestAccount, createJazzTestGuest, linkAccounts, setActiveAccount, setupJazzTestSync, } from "jazz-tools/testing";
9
+ export { createJazzTestAccount, createJazzTestGuest, linkAccounts, setActiveAccount, setupJazzTestSync, MockConnectionStatus, } from "jazz-tools/testing";
10
10
  //# sourceMappingURL=testing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../../src/svelte/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE5E,OAAO,EAA2B,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE7E,wBAAgB,qBAAqB,CAAC,GAAG,SAAS,OAAO,EACvD,IAAI,GAAE;IACJ,OAAO,CAAC,EAAE,GAAG,GAAG;QAAE,KAAK,EAAE,kBAAkB,CAAA;KAAE,CAAC;IAC9C,eAAe,CAAC,EAAE,OAAO,CAAC;CACtB,sDAyBP;AAED,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../../src/svelte/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE5E,OAAO,EAA2B,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE7E,wBAAgB,qBAAqB,CAAC,GAAG,SAAS,OAAO,EACvD,IAAI,GAAE;IACJ,OAAO,CAAC,EAAE,GAAG,GAAG;QAAE,KAAK,EAAE,kBAAkB,CAAA;KAAE,CAAC;IAC9C,eAAe,CAAC,EAAE,OAAO,CAAC;CACtB,sDAyBP;AAED,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC"}
@@ -20,4 +20,4 @@ export function createJazzTestContext(opts = {}) {
20
20
  }
21
21
  return ctx;
22
22
  }
23
- export { createJazzTestAccount, createJazzTestGuest, linkAccounts, setActiveAccount, setupJazzTestSync, } from "jazz-tools/testing";
23
+ export { createJazzTestAccount, createJazzTestGuest, linkAccounts, setActiveAccount, setupJazzTestSync, MockConnectionStatus, } from "jazz-tools/testing";
@@ -0,0 +1,8 @@
1
+ <script>
2
+ import { SyncConnectionStatus } from "../jazz.class.svelte";
3
+ const connectionStatus = new SyncConnectionStatus();
4
+ </script>
5
+
6
+ <div>
7
+ <div data-testid="connected">{connectionStatus.current ? "true" : "false"}</div>
8
+ </div>
@@ -0,0 +1,27 @@
1
+ export default TestConnectionStatus;
2
+ type TestConnectionStatus = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const TestConnectionStatus: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
15
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
16
+ $$bindings?: Bindings;
17
+ } & Exports;
18
+ (internal: unknown, props: {
19
+ $$events?: Events;
20
+ $$slots?: Slots;
21
+ }): Exports & {
22
+ $set?: any;
23
+ $on?: any;
24
+ };
25
+ z_$$bindings?: Bindings;
26
+ }
27
+ //# sourceMappingURL=TestConnectionStatus.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestConnectionStatus.svelte.d.ts","sourceRoot":"","sources":["../../../../src/svelte/tests/TestConnectionStatus.svelte.js"],"names":[],"mappings":";;;;;;;;AAyBA;;;;mBAA8H;6CATjF,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,OAAO,QAAQ;IAC3L,cAAc,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,WAAW,OAAO,SAAS;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sync-connection-status.svelte.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-connection-status.svelte.test.d.ts","sourceRoot":"","sources":["../../../../src/svelte/tests/sync-connection-status.svelte.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ // @vitest-environment happy-dom
2
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
3
+ import { createJazzTestAccount, setupJazzTestSync, MockConnectionStatus, } from "../testing";
4
+ import { render, screen, waitFor } from "./testUtils";
5
+ import TestConnectionStatus from "./TestConnectionStatus.svelte";
6
+ describe("SyncConnectionStatus", () => {
7
+ beforeEach(async () => {
8
+ await setupJazzTestSync();
9
+ await createJazzTestAccount({
10
+ isCurrentActiveAccount: true,
11
+ });
12
+ });
13
+ afterEach(() => {
14
+ vi.clearAllMocks();
15
+ });
16
+ it("should return true by default in the test environment", async () => {
17
+ const { container } = render(TestConnectionStatus, {}, {
18
+ account: await createJazzTestAccount({
19
+ isCurrentActiveAccount: true,
20
+ }),
21
+ });
22
+ await waitFor(() => {
23
+ expect(screen.getByTestId("connected").textContent).toBe("true");
24
+ });
25
+ });
26
+ it("should handle updates", async () => {
27
+ const { container } = render(TestConnectionStatus, {}, {
28
+ account: await createJazzTestAccount({
29
+ isCurrentActiveAccount: true,
30
+ }),
31
+ });
32
+ // Initially should be connected
33
+ await waitFor(() => {
34
+ expect(screen.getByTestId("connected").textContent).toBe("true");
35
+ });
36
+ // Simulate disconnection
37
+ MockConnectionStatus.setIsConnected(false);
38
+ await waitFor(() => {
39
+ expect(screen.getByTestId("connected").textContent).toBe("false");
40
+ });
41
+ // Simulate reconnection
42
+ MockConnectionStatus.setIsConnected(true);
43
+ await waitFor(() => {
44
+ expect(screen.getByTestId("connected").textContent).toBe("true");
45
+ });
46
+ });
47
+ });
@@ -1,5 +1,5 @@
1
1
 
2
- > jazz-tools@0.18.17 build /home/runner/_work/jazz/jazz/packages/jazz-tools
2
+ > jazz-tools@0.18.19 build /home/runner/_work/jazz/jazz/packages/jazz-tools
3
3
  > tsup && pnpm types && pnpm build:svelte
4
4
 
5
5
  CLI Building entry: {"index":"src/index.ts","testing":"src/testing.ts"}
@@ -114,17 +114,31 @@
114
114
  ESM Build start
115
115
  CLI Cleaning output folder
116
116
  ESM Build start
117
- ESM dist/react/ssr.js 688.00 B
118
- ESM dist/react/ssr.js.map 1.12 KB
119
- ESM ⚡️ Build success in 20ms
120
117
  ESM dist/tiptap/index.js 564.00 B
121
118
  ESM dist/tiptap/index.js.map 1.21 KB
122
- ESM ⚡️ Build success in 15ms
119
+ ESM ⚡️ Build success in 20ms
120
+ ESM dist/react/ssr.js 688.00 B
121
+ ESM dist/react/ssr.js.map 1.12 KB
122
+ ESM ⚡️ Build success in 24ms
123
123
  ESM dist/worker/index.js 3.19 KB
124
124
  ESM dist/worker/edge-wasm.js 215.00 B
125
125
  ESM dist/worker/index.js.map 6.17 KB
126
126
  ESM dist/worker/edge-wasm.js.map 434.00 B
127
- ESM ⚡️ Build success in 16ms
127
+ ESM ⚡️ Build success in 21ms
128
+ ESM dist/react-native/index.js 2.53 KB
129
+ ESM dist/react-native/crypto.js 161.00 B
130
+ ESM dist/react-native/testing.js 120.00 B
131
+ ESM dist/react-native/index.js.map 5.68 KB
132
+ ESM dist/react-native/crypto.js.map 197.00 B
133
+ ESM dist/react-native/testing.js.map 176.00 B
134
+ ESM ⚡️ Build success in 24ms
135
+ ESM dist/better-auth/auth/client.js 4.50 KB
136
+ ESM dist/better-auth/auth/react.js 799.00 B
137
+ ESM dist/better-auth/auth/server.js 8.36 KB
138
+ ESM dist/better-auth/auth/client.js.map 8.32 KB
139
+ ESM dist/better-auth/auth/react.js.map 2.04 KB
140
+ ESM dist/better-auth/auth/server.js.map 15.29 KB
141
+ ESM ⚡️ Build success in 23ms
128
142
  ESM dist/media/index.js 236.00 B
129
143
  ESM dist/media/index.browser.js 2.79 KB
130
144
  ESM dist/media/index.native.js 2.90 KB
@@ -135,77 +149,63 @@
135
149
  ESM dist/media/index.native.js.map 6.09 KB
136
150
  ESM dist/media/index.server.js.map 6.37 KB
137
151
  ESM dist/media/chunk-W3S526L3.js.map 16.57 KB
138
- ESM ⚡️ Build success in 31ms
139
- ESM dist/better-auth/auth/client.js 4.44 KB
140
- ESM dist/better-auth/auth/react.js 799.00 B
141
- ESM dist/better-auth/auth/server.js 8.36 KB
142
- ESM dist/better-auth/auth/client.js.map 8.24 KB
143
- ESM dist/better-auth/auth/react.js.map 2.04 KB
144
- ESM dist/better-auth/auth/server.js.map 15.29 KB
145
- ESM ⚡️ Build success in 27ms
146
- ESM dist/react-native/index.js 2.53 KB
147
- ESM dist/react-native/crypto.js 161.00 B
148
- ESM dist/react-native/testing.js 120.00 B
149
- ESM dist/react-native/index.js.map 5.68 KB
150
- ESM dist/react-native/crypto.js.map 197.00 B
151
- ESM dist/react-native/testing.js.map 176.00 B
152
- ESM ⚡️ Build success in 35ms
153
- ESM dist/react-core/index.js 10.72 KB
154
- ESM dist/react-core/testing.js 1.17 KB
155
- ESM dist/react-core/chunk-7DYMJ74I.js 279.00 B
156
- ESM dist/react-core/index.js.map 33.90 KB
157
- ESM dist/react-core/testing.js.map 1.82 KB
158
- ESM dist/react-core/chunk-7DYMJ74I.js.map 533.00 B
159
- ESM ⚡️ Build success in 32ms
152
+ ESM ⚡️ Build success in 29ms
153
+ ESM dist/better-auth/database-adapter/index.js 26.34 KB
154
+ ESM dist/better-auth/database-adapter/index.js.map 57.62 KB
155
+ ESM ⚡️ Build success in 24ms
160
156
  ESM dist/expo/index.js 4.68 KB
161
- ESM dist/expo/testing.js 112.00 B
162
157
  ESM dist/expo/crypto.js 153.00 B
158
+ ESM dist/expo/testing.js 112.00 B
163
159
  ESM dist/expo/index.js.map 10.23 KB
164
- ESM dist/expo/testing.js.map 168.00 B
165
160
  ESM dist/expo/crypto.js.map 189.00 B
166
- ESM ⚡️ Build success in 44ms
167
- ESM dist/browser/index.js 13.64 KB
168
- ESM dist/browser/index.js.map 29.14 KB
169
- ESM ⚡️ Build success in 46ms
170
- ESM dist/better-auth/database-adapter/index.js 26.34 KB
171
- ESM dist/better-auth/database-adapter/index.js.map 57.62 KB
172
- ESM ⚡️ Build success in 39ms
173
- ESM dist/react-native-core/index.js 18.13 KB
174
- ESM dist/react-native-core/crypto.js 2.10 KB
175
- ESM dist/react-native-core/testing.js 119.00 B
176
- ESM dist/react-native-core/index.js.map 36.96 KB
177
- ESM dist/react-native-core/crypto.js.map 4.25 KB
178
- ESM dist/react-native-core/testing.js.map 175.00 B
179
- ESM ⚡️ Build success in 51ms
180
- ESM dist/react/index.js 24.88 KB
161
+ ESM dist/expo/testing.js.map 168.00 B
162
+ ESM ⚡️ Build success in 36ms
163
+ ESM dist/react/index.js 24.93 KB
181
164
  ESM dist/react/testing.js 122.00 B
165
+ ESM dist/react/index.js.map 53.78 KB
182
166
  ESM dist/react/testing.js.map 165.00 B
183
- ESM dist/react/index.js.map 53.71 KB
184
- ESM ⚡️ Build success in 52ms
167
+ ESM ⚡️ Build success in 34ms
168
+ ESM dist/browser/index.js 14.13 KB
169
+ ESM dist/browser/index.js.map 30.00 KB
170
+ ESM ⚡️ Build success in 43ms
171
+ ESM dist/react-core/index.js 11.07 KB
172
+ ESM dist/react-core/testing.js 1.22 KB
173
+ ESM dist/react-core/chunk-7DYMJ74I.js 279.00 B
174
+ ESM dist/react-core/index.js.map 35.67 KB
175
+ ESM dist/react-core/testing.js.map 1.86 KB
176
+ ESM dist/react-core/chunk-7DYMJ74I.js.map 533.00 B
177
+ ESM ⚡️ Build success in 38ms
178
+ ESM dist/react-native-core/index.js 18.65 KB
179
+ ESM dist/react-native-core/testing.js 119.00 B
180
+ ESM dist/react-native-core/crypto.js 2.10 KB
181
+ ESM dist/react-native-core/index.js.map 37.83 KB
182
+ ESM dist/react-native-core/testing.js.map 175.00 B
183
+ ESM dist/react-native-core/crypto.js.map 4.25 KB
184
+ ESM ⚡️ Build success in 39ms
185
185
  ESM dist/prosemirror/index.js 77.76 KB
186
186
  ESM dist/prosemirror/index.js.map 307.20 KB
187
- ESM ⚡️ Build success in 54ms
187
+ ESM ⚡️ Build success in 43ms
188
188
  ESM dist/inspector/index.js 69.71 KB
189
189
  ESM dist/inspector/index.js.map 121.38 KB
190
- ESM ⚡️ Build success in 64ms
191
- ESM dist/chunk-OTWWOZMB.js 176.08 KB
192
- ESM dist/testing.js 7.17 KB
190
+ ESM ⚡️ Build success in 52ms
193
191
  ESM dist/index.js 26.13 KB
194
- ESM dist/chunk-OTWWOZMB.js.map 419.55 KB
195
- ESM dist/testing.js.map 14.10 KB
192
+ ESM dist/chunk-RN3Y24WX.js 176.29 KB
193
+ ESM dist/testing.js 8.33 KB
196
194
  ESM dist/index.js.map 52.92 KB
197
- ESM ⚡️ Build success in 82ms
195
+ ESM dist/chunk-RN3Y24WX.js.map 420.21 KB
196
+ ESM dist/testing.js.map 15.87 KB
197
+ ESM ⚡️ Build success in 70ms
198
198
  ESM dist/inspector/register-custom-element.js 218.00 B
199
199
  ESM dist/inspector/register-custom-element.js.map 314.00 B
200
200
  ESM dist/inspector/custom-element-G6SPZEBR.js 1.54 MB
201
201
  ESM dist/inspector/custom-element-G6SPZEBR.js.map 2.36 MB
202
- ESM ⚡️ Build success in 123ms
202
+ ESM ⚡️ Build success in 113ms
203
203
 
204
- > jazz-tools@0.18.17 types /home/runner/_work/jazz/jazz/packages/jazz-tools
204
+ > jazz-tools@0.18.19 types /home/runner/_work/jazz/jazz/packages/jazz-tools
205
205
  > tsc --outDir dist
206
206
 
207
207
 
208
- > jazz-tools@0.18.17 build:svelte /home/runner/_work/jazz/jazz/packages/jazz-tools
208
+ > jazz-tools@0.18.19 build:svelte /home/runner/_work/jazz/jazz/packages/jazz-tools
209
209
  > rm -rf dist/svelte && svelte-package -i src/svelte -o dist/svelte --tsconfig tsconfig.svelte.json
210
210
 
211
211
  src/svelte -> dist/svelte
package/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # jazz-tools
2
2
 
3
+ ## 0.18.19
4
+
5
+ ### Patch Changes
6
+
7
+ - f88db5f: Ensure subscription scope is cached for each CoValue
8
+ - 8eac2fc: Fix refs in partially loaded CoMaps being incorrectly marked as optional
9
+ - 08b6c03: fix: keep sync between Better Auth's session and Jazz's
10
+ - cojson@0.18.19
11
+ - cojson-storage-indexeddb@0.18.19
12
+ - cojson-transport-ws@0.18.19
13
+
14
+ ## 0.18.18
15
+
16
+ ### Patch Changes
17
+
18
+ - f2f478a: Add connection status API for React and Svelte
19
+
20
+ - **React**: Added `useSyncConnectionStatus()` hook that returns the current connection status to the Jazz sync server
21
+ - **Svelte**: Added `SyncConnectionStatus` class that provides reactive connection status monitoring
22
+
23
+ - ed7e353: Bugfix: wait for full streaming before triggering migrations on comap
24
+ - 1698d41: Add `unstable_branch` option to useAccountWithSelector
25
+ - Updated dependencies [ed7e353]
26
+ - cojson@0.18.18
27
+ - cojson-storage-indexeddb@0.18.18
28
+ - cojson-transport-ws@0.18.18
29
+
3
30
  ## 0.18.17
4
31
 
5
32
  ### 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;;wBAmBC,UAAU,CAAC,OAAO,UAAU,CAAC;;;sCAIvB,eAAe,CAAC,OAAO,CAAC;4CAGlB,iBAAiB;;;;;;;;;;;CA4H1D,CAAC"}
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;;wBAmBC,UAAU,CAAC,OAAO,UAAU,CAAC;;;sCAIvB,eAAe,CAAC,OAAO,CAAC;4CAGlB,iBAAiB;;;;;;;;;;;CA6H1D,CAAC"}
@@ -84,9 +84,10 @@ var jazzPluginClient = () => {
84
84
  if (context.request.url.toString().includes("/get-session")) {
85
85
  if (context.data === null) {
86
86
  if (authSecretStorage.isAuthenticated === true) {
87
- console.warn(
88
- "Jazz is authenticated, but the session is null"
87
+ console.info(
88
+ "Jazz is authenticated, but the session is null. Logging out"
89
89
  );
90
+ await jazzContext.logOut();
90
91
  }
91
92
  return;
92
93
  }
@@ -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 accountSecret: credentials.accountSecret,\n }),\n );\n }\n },\n async onSuccess(context) {\n if (context.request.url.toString().includes(\"/sign-up\")) {\n await authenticateOnJazz(context.data.jazzAuth);\n return;\n }\n\n if (context.request.url.toString().includes(\"/sign-in/email\")) {\n await authenticateOnJazz(context.data.jazzAuth);\n return;\n }\n\n if (context.request.url.toString().includes(\"/get-session\")) {\n if (context.data === null) {\n if (authSecretStorage.isAuthenticated === true) {\n console.warn(\n \"Jazz is authenticated, but the session is null\",\n );\n }\n return;\n }\n\n if (!context.data?.user) {\n return;\n }\n\n if (authSecretStorage.isAuthenticated === false) {\n console.info(\n \"Jazz is not authenticated, using Better Auth stored credentials\",\n );\n await authenticateOnJazz(context.data.jazzAuth);\n return;\n }\n\n const sessionAccountID = context.data.user.accountID;\n\n const credentials = await authSecretStorage.get();\n\n if (!credentials) {\n throw new Error(\"Jazz credentials not found\");\n }\n\n if (credentials.accountID !== sessionAccountID) {\n console.info(\n \"Jazz credentials mismatch, using Better Auth stored credentials\",\n );\n await authenticateOnJazz(context.data.jazzAuth);\n }\n return;\n }\n\n if (context.request.url.toString().includes(\"/sign-out\")) {\n await jazzContext.logOut();\n return;\n }\n\n if (context.request.url.toString().includes(\"/delete-user\")) {\n await jazzContext.logOut();\n return;\n }\n },\n },\n },\n ],\n } satisfies BetterAuthClientPlugin;\n};\n"],"mappings":"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","names":["session"]}
1
+ {"version":3,"sources":["../../../src/better-auth/auth/client.ts"],"sourcesContent":["import type { BetterAuthClientPlugin } from \"better-auth\";\nimport type {\n 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 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":"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","names":["session"]}
@@ -19,12 +19,16 @@ export declare class JazzBrowserContextManager<S extends (AccountClass<Account>
19
19
  node: import("cojson").LocalNode;
20
20
  done: () => void;
21
21
  logOut: () => Promise<void>;
22
+ addConnectionListener: (listener: (connected: boolean) => void) => () => void;
23
+ connected: () => boolean;
22
24
  } | {
23
25
  me: InstanceOfSchema<S>;
24
26
  node: import("cojson").LocalNode;
25
27
  authSecretStorage: import("jazz-tools").AuthSecretStorage;
26
28
  done: () => void;
27
29
  logOut: () => Promise<void>;
30
+ addConnectionListener: (listener: (connected: boolean) => void) => () => void;
31
+ connected: () => boolean;
28
32
  }>;
29
33
  propsChanged(props: JazzContextManagerProps<S>): boolean;
30
34
  }
@@ -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;CAC7B,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;;;;;;;;;;;;IAqBzC,YAAY,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC;CAW/C"}
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;CAC7B,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;;;;;;;;;;;;;;;;IAqBzC,YAAY,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC;CAW/C"}
@@ -13,6 +13,8 @@ export declare function createJazzBrowserGuestContext(options: BaseBrowserContex
13
13
  node: LocalNode;
14
14
  done: () => void;
15
15
  logOut: () => Promise<void>;
16
+ addConnectionListener: (listener: (connected: boolean) => void) => () => void;
17
+ connected: () => boolean;
16
18
  }>;
17
19
  export type BrowserContextOptions<S extends (AccountClass<Account> & CoValueFromRaw<Account>) | AnyAccountSchema> = {
18
20
  credentials?: AuthCredentials;
@@ -26,6 +28,8 @@ export declare function createJazzBrowserContext<S extends (AccountClass<Account
26
28
  authSecretStorage: AuthSecretStorage;
27
29
  done: () => void;
28
30
  logOut: () => Promise<void>;
31
+ addConnectionListener: (listener: (connected: boolean) => void) => () => void;
32
+ connected: () => boolean;
29
33
  }>;
30
34
  /** @category Auth Providers */
31
35
  export type SessionProvider = (accountID: ID<Account> | AgentID) => Promise<SessionID>;
@@ -1 +1 @@
1
- {"version":3,"file":"createBrowserContext.d.ts","sourceRoot":"","sources":["../../src/browser/createBrowserContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAQ,YAAY,EAAE,MAAM,QAAQ,CAAC;AAIvD,OAAO,EACL,OAAO,EACP,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,cAAc,EACd,cAAc,EACd,EAAE,EACF,YAAY,EACZ,eAAe,EACf,SAAS,EACT,UAAU,EAGX,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,aAAa,EAAqB,MAAM,qBAAqB,CAAC;AAKvE,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,UAAU,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,iBAAiB,EAAE,iBAAiB,CAAC;CACtC,CAAC;AA2EF,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,yBAAyB;;;;;GA2BnC;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;;;;;;GAmDlC;AAED,+BAA+B;AAC/B,MAAM,MAAM,eAAe,GAAG,CAC5B,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,OAAO,KAC7B,OAAO,CAAC,SAAS,CAAC,CAAC;AAExB,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,OAAO,EAChC,MAAM,EAAE,cAAc;;;GAwDvB;AAED,6BAA6B;AAC7B,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,OAAO,EAChD,KAAK,EAAE,CAAC,EACR,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,EAEjD,EACE,OAAkD,EAClD,SAAS,GACV,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/C,MAAM,CAoBR;AAED,6BAA6B;AAC7B,wBAAgB,eAAe,CAAC,CAAC,SAAS,OAAO,EAC/C,SAAS,EAAE,MAAM,GAEf;IACE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;CAC5B,GACD,SAAS,CAuBZ"}
1
+ {"version":3,"file":"createBrowserContext.d.ts","sourceRoot":"","sources":["../../src/browser/createBrowserContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAQ,YAAY,EAAE,MAAM,QAAQ,CAAC;AAIvD,OAAO,EACL,OAAO,EACP,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,cAAc,EACd,cAAc,EACd,EAAE,EACF,YAAY,EACZ,eAAe,EACf,SAAS,EACT,UAAU,EAGX,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,aAAa,EAAqB,MAAM,qBAAqB,CAAC;AAKvE,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,UAAU,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,iBAAiB,EAAE,iBAAiB,CAAC;CACtC,CAAC;AAuFF,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,yBAAyB;;;;;sCAlBA,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI;;GAsD/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;;;;;;sCAvEC,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI;;GAmI/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;AAExB,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,OAAO,EAChC,MAAM,EAAE,cAAc;;;GAwDvB;AAED,6BAA6B;AAC7B,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,OAAO,EAChD,KAAK,EAAE,CAAC,EACR,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,EAEjD,EACE,OAAkD,EAClD,SAAS,GACV,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/C,MAAM,CAoBR;AAED,6BAA6B;AAC7B,wBAAgB,eAAe,CAAC,CAAC,SAAS,OAAO,EAC/C,SAAS,EAAE,MAAM,GAEf;IACE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;CAC5B,GACD,SAAS,CAuBZ"}
@@ -219,6 +219,9 @@ async function setupPeers(options) {
219
219
  const storage = useIndexedDB ? await getIndexedDBStorage() : void 0;
220
220
  if (options.sync.when === "never") {
221
221
  return {
222
+ addConnectionListener: () => () => {
223
+ },
224
+ connected: () => false,
222
225
  toggleNetwork: () => {
223
226
  },
224
227
  peersToLoadFrom,
@@ -257,6 +260,15 @@ async function setupPeers(options) {
257
260
  }
258
261
  return {
259
262
  toggleNetwork,
263
+ addConnectionListener(listener) {
264
+ wsPeer.subscribe(listener);
265
+ return () => {
266
+ wsPeer.unsubscribe(listener);
267
+ };
268
+ },
269
+ connected() {
270
+ return wsPeer.connected;
271
+ },
260
272
  peersToLoadFrom,
261
273
  storage,
262
274
  setNode,
@@ -264,7 +276,15 @@ async function setupPeers(options) {
264
276
  };
265
277
  }
266
278
  async function createJazzBrowserGuestContext(options) {
267
- const { toggleNetwork, peersToLoadFrom, setNode, crypto, storage } = await setupPeers(options);
279
+ const {
280
+ toggleNetwork,
281
+ peersToLoadFrom,
282
+ setNode,
283
+ crypto,
284
+ storage,
285
+ addConnectionListener,
286
+ connected
287
+ } = await setupPeers(options);
268
288
  const context = await createAnonymousJazzContext({
269
289
  crypto,
270
290
  peersToLoadFrom,
@@ -281,11 +301,21 @@ async function createJazzBrowserGuestContext(options) {
281
301
  },
282
302
  logOut: () => {
283
303
  return context.logOut();
284
- }
304
+ },
305
+ addConnectionListener,
306
+ connected
285
307
  };
286
308
  }
287
309
  async function createJazzBrowserContext(options) {
288
- const { toggleNetwork, peersToLoadFrom, setNode, crypto, storage } = await setupPeers(options);
310
+ const {
311
+ toggleNetwork,
312
+ peersToLoadFrom,
313
+ setNode,
314
+ crypto,
315
+ storage,
316
+ addConnectionListener,
317
+ connected
318
+ } = await setupPeers(options);
289
319
  let unsubscribeAuthUpdate = () => {
290
320
  };
291
321
  if (options.sync.when === "signedUp") {
@@ -326,7 +356,9 @@ async function createJazzBrowserContext(options) {
326
356
  logOut: () => {
327
357
  unsubscribeAuthUpdate();
328
358
  return context.logOut();
329
- }
359
+ },
360
+ addConnectionListener,
361
+ connected
330
362
  };
331
363
  }
332
364
  function provideBrowserLockSession(accountID, crypto) {