jazz-tools 0.18.24 → 0.18.25

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 (80) hide show
  1. package/.svelte-kit/__package__/Provider.svelte +2 -0
  2. package/.svelte-kit/__package__/Provider.svelte.d.ts.map +1 -1
  3. package/.turbo/turbo-build.log +53 -53
  4. package/CHANGELOG.md +14 -0
  5. package/dist/browser/index.js +9 -9
  6. package/dist/browser/index.js.map +1 -1
  7. package/dist/{chunk-W7JT3QUN.js → chunk-DOCEAUVD.js} +72 -35
  8. package/dist/chunk-DOCEAUVD.js.map +1 -0
  9. package/dist/{chunk-BOMSRY5H.js → chunk-M2HGBOXS.js} +2 -2
  10. package/dist/chunk-M2HGBOXS.js.map +1 -0
  11. package/dist/index.js +2 -2
  12. package/dist/inspector/{custom-element-XDJT5T57.js → custom-element-A7UAELEG.js} +3 -1
  13. package/dist/inspector/{custom-element-XDJT5T57.js.map → custom-element-A7UAELEG.js.map} +1 -1
  14. package/dist/inspector/index.js +2 -0
  15. package/dist/inspector/index.js.map +1 -1
  16. package/dist/inspector/register-custom-element.js +1 -1
  17. package/dist/inspector/viewer/use-open-inspector.d.ts.map +1 -1
  18. package/dist/inspector/viewer/use-page-path.d.ts.map +1 -1
  19. package/dist/react/index.js +4 -2
  20. package/dist/react/index.js.map +1 -1
  21. package/dist/react/provider.d.ts +2 -1
  22. package/dist/react/provider.d.ts.map +1 -1
  23. package/dist/react/ssr.js +1 -1
  24. package/dist/react/ssr.js.map +1 -1
  25. package/dist/react-native-core/index.js +12 -11
  26. package/dist/react-native-core/index.js.map +1 -1
  27. package/dist/react-native-core/provider.d.ts +2 -1
  28. package/dist/react-native-core/provider.d.ts.map +1 -1
  29. package/dist/svelte/Provider.svelte +2 -0
  30. package/dist/svelte/Provider.svelte.d.ts.map +1 -1
  31. package/dist/testing.js +4 -4
  32. package/dist/testing.js.map +1 -1
  33. package/dist/tools/auth/AuthSecretStorage.d.ts +3 -1
  34. package/dist/tools/auth/AuthSecretStorage.d.ts.map +1 -1
  35. package/dist/tools/coValues/account.d.ts +3 -3
  36. package/dist/tools/coValues/account.d.ts.map +1 -1
  37. package/dist/tools/coValues/group.d.ts +20 -1
  38. package/dist/tools/coValues/group.d.ts.map +1 -1
  39. package/dist/tools/coValues/interfaces.d.ts.map +1 -1
  40. package/dist/tools/implementation/ContextManager.d.ts +1 -0
  41. package/dist/tools/implementation/ContextManager.d.ts.map +1 -1
  42. package/dist/tools/implementation/createContext.d.ts +7 -7
  43. package/dist/tools/implementation/createContext.d.ts.map +1 -1
  44. package/dist/tools/implementation/zodSchema/schemaTypes/GroupSchema.d.ts +5 -0
  45. package/dist/tools/implementation/zodSchema/schemaTypes/GroupSchema.d.ts.map +1 -1
  46. package/dist/tools/ssr.js +1 -1
  47. package/dist/tools/testing.d.ts.map +1 -1
  48. package/dist/worker/index.js +3 -3
  49. package/dist/worker/index.js.map +1 -1
  50. package/package.json +4 -4
  51. package/src/better-auth/database-adapter/tests/sync-utils.ts +1 -1
  52. package/src/browser/createBrowserContext.ts +9 -9
  53. package/src/browser/tests/utils.ts +2 -2
  54. package/src/inspector/viewer/use-open-inspector.ts +1 -0
  55. package/src/inspector/viewer/use-page-path.ts +1 -0
  56. package/src/react/provider.tsx +3 -0
  57. package/src/react-native-core/platform.ts +9 -9
  58. package/src/react-native-core/provider.tsx +3 -1
  59. package/src/svelte/Provider.svelte +2 -0
  60. package/src/tools/auth/AuthSecretStorage.ts +16 -9
  61. package/src/tools/coValues/account.ts +5 -5
  62. package/src/tools/coValues/group.ts +33 -0
  63. package/src/tools/coValues/interfaces.ts +4 -1
  64. package/src/tools/implementation/ContextManager.ts +7 -3
  65. package/src/tools/implementation/createContext.ts +12 -12
  66. package/src/tools/implementation/zodSchema/schemaTypes/GroupSchema.ts +7 -1
  67. package/src/tools/ssr/ssr.ts +1 -1
  68. package/src/tools/testing.ts +3 -3
  69. package/src/tools/tests/AuthSecretStorage.test.ts +59 -1
  70. package/src/tools/tests/ContextManager.test.ts +11 -1
  71. package/src/tools/tests/account.test.ts +16 -0
  72. package/src/tools/tests/coPlainText.test.ts +2 -2
  73. package/src/tools/tests/createContext.test.ts +19 -19
  74. package/src/tools/tests/deepLoading.test.ts +2 -2
  75. package/src/tools/tests/group.test.ts +59 -0
  76. package/src/tools/tests/inbox.test.ts +2 -2
  77. package/src/tools/tests/utils.ts +3 -3
  78. package/src/worker/index.ts +3 -3
  79. package/dist/chunk-BOMSRY5H.js.map +0 -1
  80. package/dist/chunk-W7JT3QUN.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"createContext.d.ts","sourceRoot":"","sources":["../../../src/tools/implementation/createContext.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,cAAc,EACd,SAAS,EACT,IAAI,EAEJ,YAAY,EACZ,SAAS,EACT,UAAU,EACX,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,EACL,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,EAAE,EACP,KAAK,gBAAgB,EAEtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IACvB,MAAM,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF,KAAK,eAAe,GAAG,CACrB,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,EACtB,MAAM,EAAE,cAAc,KACnB,OAAO,CAAC;IAAE,SAAS,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,CAAC;AAEhE,MAAM,MAAM,UAAU,GAClB;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,KAAK,IAAI,CAAC;IACzC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B,GACD;IACE,IAAI,EAAE,KAAK,CAAC;IACZ,aAAa,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,CAAC;IACF,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,eAAe,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,KAAK,IAAI,CAAC;IACzC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B,CAAC;AAEN,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,EACtB,MAAM,EAAE,cAAc;;;GAMvB;AAED,MAAM,MAAM,sBAAsB,CAAC,GAAG,SAAS,OAAO,IAAI;IACxD,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,GAAG,CAAC;IACb,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,GAAG,SAAS,OAAO,IACvC,sBAAsB,CAAC,GAAG,CAAC,GAC3B,oBAAoB,CAAC;AAEzB,wBAAsB,wCAAwC,CAC5D,CAAC,SACG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GACjD,iBAAiB,EACrB,EACA,WAAW,EACX,eAAe,EACf,MAAM,EACN,OAAO,EACP,aAAa,EAAE,kBAAkB,EACjC,eAAe,EACf,QAAQ,EACR,eAAe,GAChB,EAAE;IACD,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,IAAI,EAAE,CAAC;IACxB,MAAM,EAAE,cAAc,CAAC;IACvB,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,eAAe,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CA+CvD;AAED,wBAAsB,8BAA8B,CAClD,CAAC,SACG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GACjD,iBAAiB,EACrB,EACA,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,MAAM,EACN,aAAa,EAAE,kBAAkB,EACjC,QAAQ,EACR,OAAO,GACR,EAAE;IACD,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC,kBAAkB,CAAC,EAAE,WAAW,CAAC;IACjC,eAAe,EAAE,IAAI,EAAE,CAAC;IACxB,MAAM,EAAE,cAAc,CAAC;IACvB,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB,GAAG,OAAO,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAmCvD;AAED,wBAAsB,iBAAiB,CACrC,CAAC,SACG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GACjD,iBAAiB,EACrB,OAAO,EAAE;IACT,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,eAAe,EAAE,IAAI,EAAE,CAAC;IACxB,MAAM,EAAE,cAAc,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,eAAe,EAAE,eAAe,CAAC;IACjC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;;UA9JO,SAAS;;UAET,MAAM,IAAI;YACR,MAAM,OAAO,CAAC,IAAI,CAAC;GA2N5B;AAED,wBAAgB,0BAA0B,CAAC,EACzC,eAAe,EACf,MAAM,EACN,OAAO,GACR,EAAE;IACD,eAAe,EAAE,IAAI,EAAE,CAAC;IACxB,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB,GAAG,oBAAoB,CAwBvB"}
1
+ {"version":3,"file":"createContext.d.ts","sourceRoot":"","sources":["../../../src/tools/implementation/createContext.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { ID, SubscribeListenerOptions } from "../../../coValues/interfaces.js";
3
3
  import { Account, RefsToResolve, RefsToResolveStrict, Resolved, ResolveQuery } from "../../../internal.js";
4
4
  import { CoreCoValueSchema } from "./CoValueSchema.js";
5
5
  import { CoOptionalSchema } from "./CoOptionalSchema.js";
6
+ import type { AccountRole, InviteSecret } from "cojson";
6
7
  export interface CoreGroupSchema extends CoreCoValueSchema {
7
8
  builtin: "Group";
8
9
  }
@@ -19,6 +20,10 @@ export declare class GroupSchema implements CoreGroupSchema {
19
20
  loadAs?: Account;
20
21
  resolve?: RefsToResolveStrict<Group, R>;
21
22
  }): Promise<Group | null>;
23
+ createInvite<G extends Group>(id: ID<G>, options?: {
24
+ role?: AccountRole;
25
+ loadAs?: Account;
26
+ }): Promise<InviteSecret>;
22
27
  subscribe<G extends Group, const R extends RefsToResolve<G>>(id: ID<G>, listener: (value: Resolved<G, R>, unsubscribe: () => void) => void): () => void;
23
28
  subscribe<G extends Group, const R extends RefsToResolve<G>>(id: ID<G>, options: SubscribeListenerOptions<G, R>, listener: (value: Resolved<G, R>, unsubscribe: () => void) => void): () => void;
24
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GroupSchema.d.ts","sourceRoot":"","sources":["../../../../../src/tools/implementation/zodSchema/schemaTypes/GroupSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EACL,EAAE,EACF,wBAAwB,EAEzB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,OAAO,EACP,aAAa,EACb,mBAAmB,EACnB,QAAQ,EACR,YAAY,EACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,qBAAqB,IAAI,eAAe,CAKvD;AAED,qBAAa,WAAY,YAAW,eAAe;IACjD,QAAQ,CAAC,aAAa,OAAiB;IACvC,QAAQ,CAAC,OAAO,UAAoB;IAEpC,eAAe,IAAI,OAAO,KAAK;IAI/B,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC;IAIlC,MAAM,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO;IAI7C,IAAI,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS,YAAY,CAAC,WAAW,CAAC,EACvD,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EACT,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,mBAAmB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KACzC,GACA,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAIxB,SAAS,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,EACzD,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EACT,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,IAAI,KAAK,IAAI,GACjE,MAAM,IAAI;IACb,SAAS,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,EACzD,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EACT,OAAO,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,EACvC,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,IAAI,KAAK,IAAI,GACjE,MAAM,IAAI;CAQd"}
1
+ {"version":3,"file":"GroupSchema.d.ts","sourceRoot":"","sources":["../../../../../src/tools/implementation/zodSchema/schemaTypes/GroupSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EACL,EAAE,EACF,wBAAwB,EAEzB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,OAAO,EACP,aAAa,EACb,mBAAmB,EACnB,QAAQ,EACR,YAAY,EACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAExD,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,qBAAqB,IAAI,eAAe,CAKvD;AAED,qBAAa,WAAY,YAAW,eAAe;IACjD,QAAQ,CAAC,aAAa,OAAiB;IACvC,QAAQ,CAAC,OAAO,UAAoB;IAEpC,eAAe,IAAI,OAAO,KAAK;IAI/B,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC;IAIlC,MAAM,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO;IAI7C,IAAI,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS,YAAY,CAAC,WAAW,CAAC,EACvD,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EACT,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,mBAAmB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KACzC,GACA,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAGxB,YAAY,CAAC,CAAC,SAAS,KAAK,EAC1B,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EACT,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,WAAW,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GACjD,OAAO,CAAC,YAAY,CAAC;IAGxB,SAAS,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,EACzD,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EACT,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,IAAI,KAAK,IAAI,GACjE,MAAM,IAAI;IACb,SAAS,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,EACzD,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EACT,OAAO,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,EACvC,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,IAAI,KAAK,IAAI,GACjE,MAAM,IAAI;CAQd"}
package/dist/tools/ssr.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createSSRJazzAgent
3
- } from "../chunk-BOMSRY5H.js";
3
+ } from "../chunk-M2HGBOXS.js";
4
4
  import "../chunk-PZ5AY32C.js";
5
5
  export {
6
6
  createSSRJazzAgent
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/tools/testing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/tools/testing.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,7 @@ async function startWorker(options) {
19
19
  asActiveAccount = true
20
20
  } = options;
21
21
  let node = void 0;
22
- const peersToLoadFrom = [];
22
+ const peers = [];
23
23
  const wsPeer = new WebSocketPeerWithReconnection({
24
24
  peer: syncServer,
25
25
  reconnectionTimeout: 100,
@@ -27,7 +27,7 @@ async function startWorker(options) {
27
27
  if (node) {
28
28
  node.syncManager.addPeer(peer);
29
29
  } else {
30
- peersToLoadFrom.push(peer);
30
+ peers.push(peer);
31
31
  }
32
32
  },
33
33
  removePeer: () => {
@@ -54,7 +54,7 @@ async function startWorker(options) {
54
54
  },
55
55
  AccountSchema,
56
56
  sessionProvider: randomSessionProvider,
57
- peersToLoadFrom,
57
+ peers,
58
58
  crypto: options.crypto ?? await WasmCrypto.create(),
59
59
  asActiveAccount
60
60
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/worker/index.ts"],"sourcesContent":["import { AgentSecret, CryptoProvider, LocalNode, Peer } from \"cojson\";\nimport {\n type AnyWebSocketConstructor,\n WebSocketPeerWithReconnection,\n} from \"cojson-transport-ws\";\nimport { WasmCrypto } from \"cojson/crypto/WasmCrypto\";\nimport {\n Account,\n AccountClass,\n AnyAccountSchema,\n CoValueFromRaw,\n Inbox,\n InstanceOfSchema,\n Loaded,\n createJazzContextFromExistingCredentials,\n randomSessionProvider,\n} from \"jazz-tools\";\n\ntype WorkerOptions<\n S extends\n | (AccountClass<Account> & CoValueFromRaw<Account>)\n | AnyAccountSchema,\n> = {\n accountID?: string;\n accountSecret?: string;\n syncServer?: string;\n WebSocket?: AnyWebSocketConstructor;\n AccountSchema?: S;\n crypto?: CryptoProvider;\n /**\n * If true, the inbox will not be loaded.\n */\n skipInboxLoad?: boolean;\n /**\n * If false, the worker will not set in the global account context\n */\n asActiveAccount?: boolean;\n};\n\n/** @category Context Creation */\nexport async function startWorker<\n S extends\n | (AccountClass<Account> & CoValueFromRaw<Account>)\n | AnyAccountSchema,\n>(options: WorkerOptions<S>) {\n const {\n accountID = process.env.JAZZ_WORKER_ACCOUNT,\n accountSecret = process.env.JAZZ_WORKER_SECRET,\n syncServer = \"wss://cloud.jazz.tools\",\n AccountSchema = Account as unknown as S,\n skipInboxLoad = false,\n asActiveAccount = true,\n } = options;\n\n let node: LocalNode | undefined = undefined;\n\n const peersToLoadFrom: Peer[] = [];\n\n const wsPeer = new WebSocketPeerWithReconnection({\n peer: syncServer,\n reconnectionTimeout: 100,\n addPeer: (peer) => {\n if (node) {\n node.syncManager.addPeer(peer);\n } else {\n peersToLoadFrom.push(peer);\n }\n },\n removePeer: () => {},\n WebSocketConstructor: options.WebSocket,\n });\n\n wsPeer.enable();\n\n if (!accountID) {\n throw new Error(\"No accountID provided\");\n }\n if (!accountSecret) {\n throw new Error(\"No accountSecret provided\");\n }\n if (!accountID.startsWith(\"co_\")) {\n throw new Error(\"Invalid accountID\");\n }\n if (!accountSecret?.startsWith(\"sealerSecret_\")) {\n throw new Error(\"Invalid accountSecret\");\n }\n\n const context = await createJazzContextFromExistingCredentials({\n credentials: {\n accountID: accountID,\n secret: accountSecret as AgentSecret,\n },\n AccountSchema,\n sessionProvider: randomSessionProvider,\n peersToLoadFrom,\n crypto: options.crypto ?? (await WasmCrypto.create()),\n asActiveAccount,\n });\n\n const account = context.account as InstanceOfSchema<S>;\n node = account.$jazz.localNode;\n\n if (!account.$jazz.refs.profile?.id) {\n throw new Error(\"Account has no profile\");\n }\n\n const inbox = skipInboxLoad ? undefined : await Inbox.load(account);\n\n async function done() {\n await context.account.$jazz.waitForAllCoValuesSync();\n\n wsPeer.disable();\n context.done();\n }\n\n const inboxPublicApi = inbox\n ? {\n subscribe: inbox.subscribe.bind(inbox) as Inbox[\"subscribe\"],\n }\n : {\n subscribe: () => {},\n };\n\n return {\n /**\n * The worker account instance.\n */\n worker: context.account as Loaded<S>,\n experimental: {\n /**\n * API to subscribe to the inbox messages.\n *\n * More info on the Inbox API: https://jazz.tools/docs/react/server-side/inbox\n */\n inbox: inboxPublicApi,\n },\n /**\n * Wait for the connection to the sync server to be established.\n *\n * If already connected, it will resolve immediately.\n */\n waitForConnection() {\n return wsPeer.waitUntilConnected();\n },\n subscribeToConnectionChange(listener: (connected: boolean) => void) {\n wsPeer.subscribe(listener);\n\n return () => {\n wsPeer.unsubscribe(listener);\n };\n },\n /**\n * Waits for all CoValues to sync and then shuts down the worker.\n *\n * To only wait for sync use worker.$jazz.waitForAllCoValuesSync()\n *\n * @deprecated Use shutdownWorker\n */\n done,\n /**\n * Waits for all CoValues to sync and then shuts down the worker.\n *\n * To only wait for sync use worker.$jazz.waitForAllCoValuesSync()\n */\n shutdownWorker() {\n return done();\n },\n };\n}\n"],"mappings":";AACA;AAAA,EAEE;AAAA,OACK;AACP,SAAS,kBAAkB;AAC3B;AAAA,EACE;AAAA,EAIA;AAAA,EAGA;AAAA,EACA;AAAA,OACK;AAwBP,eAAsB,YAIpB,SAA2B;AAC3B,QAAM;AAAA,IACJ,YAAY,QAAQ,IAAI;AAAA,IACxB,gBAAgB,QAAQ,IAAI;AAAA,IAC5B,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,EACpB,IAAI;AAEJ,MAAI,OAA8B;AAElC,QAAM,kBAA0B,CAAC;AAEjC,QAAM,SAAS,IAAI,8BAA8B;AAAA,IAC/C,MAAM;AAAA,IACN,qBAAqB;AAAA,IACrB,SAAS,CAAC,SAAS;AACjB,UAAI,MAAM;AACR,aAAK,YAAY,QAAQ,IAAI;AAAA,MAC/B,OAAO;AACL,wBAAgB,KAAK,IAAI;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,YAAY,MAAM;AAAA,IAAC;AAAA,IACnB,sBAAsB,QAAQ;AAAA,EAChC,CAAC;AAED,SAAO,OAAO;AAEd,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,uBAAuB;AAAA,EACzC;AACA,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AACA,MAAI,CAAC,UAAU,WAAW,KAAK,GAAG;AAChC,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACrC;AACA,MAAI,CAAC,eAAe,WAAW,eAAe,GAAG;AAC/C,UAAM,IAAI,MAAM,uBAAuB;AAAA,EACzC;AAEA,QAAM,UAAU,MAAM,yCAAyC;AAAA,IAC7D,aAAa;AAAA,MACX;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,IACA,QAAQ,QAAQ,UAAW,MAAM,WAAW,OAAO;AAAA,IACnD;AAAA,EACF,CAAC;AAED,QAAM,UAAU,QAAQ;AACxB,SAAO,QAAQ,MAAM;AAErB,MAAI,CAAC,QAAQ,MAAM,KAAK,SAAS,IAAI;AACnC,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAEA,QAAM,QAAQ,gBAAgB,SAAY,MAAM,MAAM,KAAK,OAAO;AAElE,iBAAe,OAAO;AACpB,UAAM,QAAQ,QAAQ,MAAM,uBAAuB;AAEnD,WAAO,QAAQ;AACf,YAAQ,KAAK;AAAA,EACf;AAEA,QAAM,iBAAiB,QACnB;AAAA,IACE,WAAW,MAAM,UAAU,KAAK,KAAK;AAAA,EACvC,IACA;AAAA,IACE,WAAW,MAAM;AAAA,IAAC;AAAA,EACpB;AAEJ,SAAO;AAAA;AAAA;AAAA;AAAA,IAIL,QAAQ,QAAQ;AAAA,IAChB,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMZ,OAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,oBAAoB;AAClB,aAAO,OAAO,mBAAmB;AAAA,IACnC;AAAA,IACA,4BAA4B,UAAwC;AAClE,aAAO,UAAU,QAAQ;AAEzB,aAAO,MAAM;AACX,eAAO,YAAY,QAAQ;AAAA,MAC7B;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,iBAAiB;AACf,aAAO,KAAK;AAAA,IACd;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/worker/index.ts"],"sourcesContent":["import { AgentSecret, CryptoProvider, LocalNode, Peer } from \"cojson\";\nimport {\n type AnyWebSocketConstructor,\n WebSocketPeerWithReconnection,\n} from \"cojson-transport-ws\";\nimport { WasmCrypto } from \"cojson/crypto/WasmCrypto\";\nimport {\n Account,\n AccountClass,\n AnyAccountSchema,\n CoValueFromRaw,\n Inbox,\n InstanceOfSchema,\n Loaded,\n createJazzContextFromExistingCredentials,\n randomSessionProvider,\n} from \"jazz-tools\";\n\ntype WorkerOptions<\n S extends\n | (AccountClass<Account> & CoValueFromRaw<Account>)\n | AnyAccountSchema,\n> = {\n accountID?: string;\n accountSecret?: string;\n syncServer?: string;\n WebSocket?: AnyWebSocketConstructor;\n AccountSchema?: S;\n crypto?: CryptoProvider;\n /**\n * If true, the inbox will not be loaded.\n */\n skipInboxLoad?: boolean;\n /**\n * If false, the worker will not set in the global account context\n */\n asActiveAccount?: boolean;\n};\n\n/** @category Context Creation */\nexport async function startWorker<\n S extends\n | (AccountClass<Account> & CoValueFromRaw<Account>)\n | AnyAccountSchema,\n>(options: WorkerOptions<S>) {\n const {\n accountID = process.env.JAZZ_WORKER_ACCOUNT,\n accountSecret = process.env.JAZZ_WORKER_SECRET,\n syncServer = \"wss://cloud.jazz.tools\",\n AccountSchema = Account as unknown as S,\n skipInboxLoad = false,\n asActiveAccount = true,\n } = options;\n\n let node: LocalNode | undefined = undefined;\n\n const peers: Peer[] = [];\n\n const wsPeer = new WebSocketPeerWithReconnection({\n peer: syncServer,\n reconnectionTimeout: 100,\n addPeer: (peer) => {\n if (node) {\n node.syncManager.addPeer(peer);\n } else {\n peers.push(peer);\n }\n },\n removePeer: () => {},\n WebSocketConstructor: options.WebSocket,\n });\n\n wsPeer.enable();\n\n if (!accountID) {\n throw new Error(\"No accountID provided\");\n }\n if (!accountSecret) {\n throw new Error(\"No accountSecret provided\");\n }\n if (!accountID.startsWith(\"co_\")) {\n throw new Error(\"Invalid accountID\");\n }\n if (!accountSecret?.startsWith(\"sealerSecret_\")) {\n throw new Error(\"Invalid accountSecret\");\n }\n\n const context = await createJazzContextFromExistingCredentials({\n credentials: {\n accountID: accountID,\n secret: accountSecret as AgentSecret,\n },\n AccountSchema,\n sessionProvider: randomSessionProvider,\n peers,\n crypto: options.crypto ?? (await WasmCrypto.create()),\n asActiveAccount,\n });\n\n const account = context.account as InstanceOfSchema<S>;\n node = account.$jazz.localNode;\n\n if (!account.$jazz.refs.profile?.id) {\n throw new Error(\"Account has no profile\");\n }\n\n const inbox = skipInboxLoad ? undefined : await Inbox.load(account);\n\n async function done() {\n await context.account.$jazz.waitForAllCoValuesSync();\n\n wsPeer.disable();\n context.done();\n }\n\n const inboxPublicApi = inbox\n ? {\n subscribe: inbox.subscribe.bind(inbox) as Inbox[\"subscribe\"],\n }\n : {\n subscribe: () => {},\n };\n\n return {\n /**\n * The worker account instance.\n */\n worker: context.account as Loaded<S>,\n experimental: {\n /**\n * API to subscribe to the inbox messages.\n *\n * More info on the Inbox API: https://jazz.tools/docs/react/server-side/inbox\n */\n inbox: inboxPublicApi,\n },\n /**\n * Wait for the connection to the sync server to be established.\n *\n * If already connected, it will resolve immediately.\n */\n waitForConnection() {\n return wsPeer.waitUntilConnected();\n },\n subscribeToConnectionChange(listener: (connected: boolean) => void) {\n wsPeer.subscribe(listener);\n\n return () => {\n wsPeer.unsubscribe(listener);\n };\n },\n /**\n * Waits for all CoValues to sync and then shuts down the worker.\n *\n * To only wait for sync use worker.$jazz.waitForAllCoValuesSync()\n *\n * @deprecated Use shutdownWorker\n */\n done,\n /**\n * Waits for all CoValues to sync and then shuts down the worker.\n *\n * To only wait for sync use worker.$jazz.waitForAllCoValuesSync()\n */\n shutdownWorker() {\n return done();\n },\n };\n}\n"],"mappings":";AACA;AAAA,EAEE;AAAA,OACK;AACP,SAAS,kBAAkB;AAC3B;AAAA,EACE;AAAA,EAIA;AAAA,EAGA;AAAA,EACA;AAAA,OACK;AAwBP,eAAsB,YAIpB,SAA2B;AAC3B,QAAM;AAAA,IACJ,YAAY,QAAQ,IAAI;AAAA,IACxB,gBAAgB,QAAQ,IAAI;AAAA,IAC5B,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,EACpB,IAAI;AAEJ,MAAI,OAA8B;AAElC,QAAM,QAAgB,CAAC;AAEvB,QAAM,SAAS,IAAI,8BAA8B;AAAA,IAC/C,MAAM;AAAA,IACN,qBAAqB;AAAA,IACrB,SAAS,CAAC,SAAS;AACjB,UAAI,MAAM;AACR,aAAK,YAAY,QAAQ,IAAI;AAAA,MAC/B,OAAO;AACL,cAAM,KAAK,IAAI;AAAA,MACjB;AAAA,IACF;AAAA,IACA,YAAY,MAAM;AAAA,IAAC;AAAA,IACnB,sBAAsB,QAAQ;AAAA,EAChC,CAAC;AAED,SAAO,OAAO;AAEd,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,uBAAuB;AAAA,EACzC;AACA,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AACA,MAAI,CAAC,UAAU,WAAW,KAAK,GAAG;AAChC,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACrC;AACA,MAAI,CAAC,eAAe,WAAW,eAAe,GAAG;AAC/C,UAAM,IAAI,MAAM,uBAAuB;AAAA,EACzC;AAEA,QAAM,UAAU,MAAM,yCAAyC;AAAA,IAC7D,aAAa;AAAA,MACX;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,IACA,QAAQ,QAAQ,UAAW,MAAM,WAAW,OAAO;AAAA,IACnD;AAAA,EACF,CAAC;AAED,QAAM,UAAU,QAAQ;AACxB,SAAO,QAAQ,MAAM;AAErB,MAAI,CAAC,QAAQ,MAAM,KAAK,SAAS,IAAI;AACnC,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAEA,QAAM,QAAQ,gBAAgB,SAAY,MAAM,MAAM,KAAK,OAAO;AAElE,iBAAe,OAAO;AACpB,UAAM,QAAQ,QAAQ,MAAM,uBAAuB;AAEnD,WAAO,QAAQ;AACf,YAAQ,KAAK;AAAA,EACf;AAEA,QAAM,iBAAiB,QACnB;AAAA,IACE,WAAW,MAAM,UAAU,KAAK,KAAK;AAAA,EACvC,IACA;AAAA,IACE,WAAW,MAAM;AAAA,IAAC;AAAA,EACpB;AAEJ,SAAO;AAAA;AAAA;AAAA;AAAA,IAIL,QAAQ,QAAQ;AAAA,IAChB,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMZ,OAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,oBAAoB;AAClB,aAAO,OAAO,mBAAmB;AAAA,IACnC;AAAA,IACA,4BAA4B,UAAwC;AAClE,aAAO,UAAU,QAAQ;AAEzB,aAAO,MAAM;AACX,eAAO,YAAY,QAAQ;AAAA,MAC7B;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,iBAAiB;AACf,aAAO,KAAK;AAAA,IACd;AAAA,EACF;AACF;","names":[]}
package/package.json CHANGED
@@ -187,7 +187,7 @@
187
187
  },
188
188
  "type": "module",
189
189
  "license": "MIT",
190
- "version": "0.18.24",
190
+ "version": "0.18.25",
191
191
  "dependencies": {
192
192
  "@manuscripts/prosemirror-recreate-steps": "^0.1.4",
193
193
  "@scure/base": "1.2.1",
@@ -204,9 +204,9 @@
204
204
  "prosemirror-transform": "^1.9.0",
205
205
  "use-sync-external-store": "^1.5.0",
206
206
  "zod": "4.1.11",
207
- "cojson-storage-indexeddb": "0.18.24",
208
- "cojson": "0.18.24",
209
- "cojson-transport-ws": "0.18.24"
207
+ "cojson": "0.18.25",
208
+ "cojson-storage-indexeddb": "0.18.25",
209
+ "cojson-transport-ws": "0.18.25"
210
210
  },
211
211
  "devDependencies": {
212
212
  "@scure/bip39": "^1.3.0",
@@ -110,7 +110,7 @@ export const createWorkerAccount = async ({
110
110
 
111
111
  const account = await Account.create({
112
112
  creationProps: { name },
113
- peersToLoadFrom: [peer],
113
+ peers: [peer],
114
114
  crypto,
115
115
  });
116
116
 
@@ -53,7 +53,7 @@ async function setupPeers(options: BaseBrowserContextOptions) {
53
53
 
54
54
  const { useIndexedDB } = getStorageOptions(options.storage);
55
55
 
56
- const peersToLoadFrom: Peer[] = [];
56
+ const peers: Peer[] = [];
57
57
 
58
58
  const storage = useIndexedDB ? await getIndexedDBStorage() : undefined;
59
59
 
@@ -62,7 +62,7 @@ async function setupPeers(options: BaseBrowserContextOptions) {
62
62
  addConnectionListener: () => () => {},
63
63
  connected: () => false,
64
64
  toggleNetwork: () => {},
65
- peersToLoadFrom,
65
+ peers,
66
66
  storage,
67
67
  setNode: () => {},
68
68
  crypto,
@@ -76,11 +76,11 @@ async function setupPeers(options: BaseBrowserContextOptions) {
76
76
  if (node) {
77
77
  node.syncManager.addPeer(peer);
78
78
  } else {
79
- peersToLoadFrom.push(peer);
79
+ peers.push(peer);
80
80
  }
81
81
  },
82
82
  removePeer: (peer) => {
83
- peersToLoadFrom.splice(peersToLoadFrom.indexOf(peer), 1);
83
+ peers.splice(peers.indexOf(peer), 1);
84
84
  },
85
85
  });
86
86
 
@@ -112,7 +112,7 @@ async function setupPeers(options: BaseBrowserContextOptions) {
112
112
  connected() {
113
113
  return wsPeer.connected;
114
114
  },
115
- peersToLoadFrom,
115
+ peers,
116
116
  storage,
117
117
  setNode,
118
118
  crypto,
@@ -124,7 +124,7 @@ export async function createJazzBrowserGuestContext(
124
124
  ) {
125
125
  const {
126
126
  toggleNetwork,
127
- peersToLoadFrom,
127
+ peers,
128
128
  setNode,
129
129
  crypto,
130
130
  storage,
@@ -134,7 +134,7 @@ export async function createJazzBrowserGuestContext(
134
134
 
135
135
  const context = await createAnonymousJazzContext({
136
136
  crypto,
137
- peersToLoadFrom,
137
+ peers,
138
138
  storage,
139
139
  });
140
140
 
@@ -176,7 +176,7 @@ export async function createJazzBrowserContext<
176
176
  >(options: BrowserContextOptions<S>) {
177
177
  const {
178
178
  toggleNetwork,
179
- peersToLoadFrom,
179
+ peers,
180
180
  setNode,
181
181
  crypto,
182
182
  storage,
@@ -205,7 +205,7 @@ export async function createJazzBrowserContext<
205
205
  const context = await createJazzContext({
206
206
  credentials: options.credentials,
207
207
  newAccountProps: options.newAccountProps,
208
- peersToLoadFrom,
208
+ peers,
209
209
  storage,
210
210
  crypto,
211
211
  defaultProfileName: options.defaultProfileName,
@@ -16,7 +16,7 @@ export async function setupTwoNodes() {
16
16
  );
17
17
 
18
18
  const client = await LocalNode.withNewlyCreatedAccount({
19
- peersToLoadFrom: [serverAsPeer],
19
+ peers: [serverAsPeer],
20
20
  crypto,
21
21
  creationProps: { name: "Client" },
22
22
  migration: async (rawAccount, _node, creationProps) => {
@@ -29,7 +29,7 @@ export async function setupTwoNodes() {
29
29
  });
30
30
 
31
31
  const server = await LocalNode.withNewlyCreatedAccount({
32
- peersToLoadFrom: [clientAsPeer],
32
+ peers: [clientAsPeer],
33
33
  crypto,
34
34
  creationProps: { name: "Server" },
35
35
  migration: async (rawAccount, _node, creationProps) => {
@@ -5,6 +5,7 @@ const STORAGE_KEY = "jazz-inspector-open";
5
5
  export function useOpenInspector() {
6
6
  const [open, setOpen] = useState(() => {
7
7
  // Initialize from localStorage if available
8
+ if (typeof window === "undefined") return false;
8
9
  const stored = localStorage.getItem(STORAGE_KEY);
9
10
  return stored ? JSON.parse(stored) : false;
10
11
  });
@@ -6,6 +6,7 @@ const STORAGE_KEY = "jazz-inspector-paths";
6
6
 
7
7
  export function usePagePath(defaultPath?: PageInfo[]) {
8
8
  const [path, setPath] = useState<PageInfo[]>(() => {
9
+ if (typeof window === "undefined") return [];
9
10
  const stored = localStorage.getItem(STORAGE_KEY);
10
11
  if (stored) {
11
12
  try {
@@ -21,6 +21,7 @@ export type JazzProviderProps<
21
21
  children: React.ReactNode;
22
22
  enableSSR?: boolean;
23
23
  fallback?: React.ReactNode | null;
24
+ authSecretStorageKey?: string;
24
25
  } & JazzContextManagerProps<S>;
25
26
 
26
27
  /** @category Context & Hooks */
@@ -40,11 +41,13 @@ export function JazzReactProvider<
40
41
  onAnonymousAccountDiscarded,
41
42
  enableSSR,
42
43
  fallback = null,
44
+ authSecretStorageKey,
43
45
  }: JazzProviderProps<S>) {
44
46
  const [contextManager] = React.useState(
45
47
  () =>
46
48
  new JazzBrowserContextManager<S>({
47
49
  useAnonymousFallback: enableSSR,
50
+ authSecretStorageKey,
48
51
  }),
49
52
  );
50
53
 
@@ -46,7 +46,7 @@ async function setupPeers(options: BaseReactNativeContextOptions) {
46
46
  const crypto = await CryptoProvider.create();
47
47
  let node: LocalNode | undefined = undefined;
48
48
 
49
- const peersToLoadFrom: Peer[] = [];
49
+ const peers: Peer[] = [];
50
50
 
51
51
  const storage =
52
52
  options.storage && options.storage !== "disabled"
@@ -58,7 +58,7 @@ async function setupPeers(options: BaseReactNativeContextOptions) {
58
58
  toggleNetwork: () => {},
59
59
  addConnectionListener: () => () => {},
60
60
  connected: () => false,
61
- peersToLoadFrom,
61
+ peers,
62
62
  setNode: () => {},
63
63
  crypto,
64
64
  storage,
@@ -72,11 +72,11 @@ async function setupPeers(options: BaseReactNativeContextOptions) {
72
72
  if (node) {
73
73
  node.syncManager.addPeer(peer);
74
74
  } else {
75
- peersToLoadFrom.push(peer);
75
+ peers.push(peer);
76
76
  }
77
77
  },
78
78
  removePeer: (peer) => {
79
- peersToLoadFrom.splice(peersToLoadFrom.indexOf(peer), 1);
79
+ peers.splice(peers.indexOf(peer), 1);
80
80
  },
81
81
  });
82
82
 
@@ -106,7 +106,7 @@ async function setupPeers(options: BaseReactNativeContextOptions) {
106
106
  };
107
107
  },
108
108
  connected: () => wsPeer.connected,
109
- peersToLoadFrom,
109
+ peers,
110
110
  setNode,
111
111
  crypto,
112
112
  storage,
@@ -118,7 +118,7 @@ export async function createJazzReactNativeGuestContext(
118
118
  ) {
119
119
  const {
120
120
  toggleNetwork,
121
- peersToLoadFrom,
121
+ peers,
122
122
  setNode,
123
123
  crypto,
124
124
  storage,
@@ -128,7 +128,7 @@ export async function createJazzReactNativeGuestContext(
128
128
 
129
129
  const context = createAnonymousJazzContext({
130
130
  crypto,
131
- peersToLoadFrom,
131
+ peers,
132
132
  storage,
133
133
  });
134
134
 
@@ -170,7 +170,7 @@ export async function createJazzReactNativeContext<
170
170
  >(options: ReactNativeContextOptions<S>) {
171
171
  const {
172
172
  toggleNetwork,
173
- peersToLoadFrom,
173
+ peers,
174
174
  setNode,
175
175
  crypto,
176
176
  storage,
@@ -202,7 +202,7 @@ export async function createJazzReactNativeContext<
202
202
  const context = await createJazzContext({
203
203
  credentials: options.credentials,
204
204
  newAccountProps: options.newAccountProps,
205
- peersToLoadFrom,
205
+ peers,
206
206
  crypto,
207
207
  defaultProfileName: options.defaultProfileName,
208
208
  AccountSchema: options.AccountSchema,
@@ -20,6 +20,7 @@ export type JazzProviderProps<
20
20
  > = {
21
21
  children: React.ReactNode;
22
22
  kvStore?: KvStore;
23
+ authSecretStorageKey?: string;
23
24
  } & JazzContextManagerProps<S>;
24
25
 
25
26
  /** @category Context & Hooks */
@@ -39,11 +40,12 @@ export function JazzProviderCore<
39
40
  onAnonymousAccountDiscarded,
40
41
  kvStore,
41
42
  CryptoProvider,
43
+ authSecretStorageKey,
42
44
  }: JazzProviderProps<S>) {
43
45
  setupKvStore(kvStore);
44
46
 
45
47
  const [contextManager] = React.useState(
46
- () => new ReactNativeContextManager<S>(),
48
+ () => new ReactNativeContextManager<S>({ authSecretStorageKey }),
47
49
  );
48
50
 
49
51
  const onLogOutRefCallback = useRefCallback(onLogOut);
@@ -19,10 +19,12 @@
19
19
  let props: JazzContextManagerProps<S> & {
20
20
  children?: Snippet;
21
21
  enableSSR?: boolean;
22
+ authSecretStorageKey?: string;
22
23
  } = $props();
23
24
 
24
25
  const contextManager = new JazzBrowserContextManager<S>({
25
26
  useAnonymousFallback: props.enableSSR,
27
+ authSecretStorageKey: props.authSecretStorageKey,
26
28
  });
27
29
 
28
30
  const ctx = $state<JazzContext<InstanceOfSchema<S>>>({ current: undefined });
@@ -3,6 +3,7 @@ import type { Account } from "../coValues/account.js";
3
3
  import type { ID } from "../internal.js";
4
4
  import { AuthCredentials } from "../types.js";
5
5
  import KvStoreContext from "./KvStoreContext.js";
6
+ import { z } from "zod/v4";
6
7
 
7
8
  const STORAGE_KEY = "jazz-logged-in-secret";
8
9
 
@@ -24,20 +25,26 @@ export class AuthSecretStorage {
24
25
  private listeners: Set<(isAuthenticated: boolean) => void>;
25
26
  public isAuthenticated: boolean;
26
27
 
27
- constructor() {
28
+ constructor(private storageKey: string = STORAGE_KEY) {
29
+ z.string().nonempty().parse(storageKey);
30
+
28
31
  this.listeners = new Set();
29
32
  this.isAuthenticated = false;
30
33
  }
31
34
 
35
+ getStorageKey(): string {
36
+ return this.storageKey;
37
+ }
38
+
32
39
  async migrate() {
33
40
  const kvStore = KvStoreContext.getInstance().getStorage();
34
41
 
35
- if (!(await kvStore.get(STORAGE_KEY))) {
42
+ if (!(await kvStore.get(this.storageKey))) {
36
43
  const demoAuthSecret = await kvStore.get("demo-auth-logged-in-secret");
37
44
  if (demoAuthSecret) {
38
45
  const parsed = JSON.parse(demoAuthSecret);
39
46
  await kvStore.set(
40
- STORAGE_KEY,
47
+ this.storageKey,
41
48
  JSON.stringify({
42
49
  accountID: parsed.accountID,
43
50
  accountSecret: parsed.accountSecret,
@@ -51,7 +58,7 @@ export class AuthSecretStorage {
51
58
  if (clerkAuthSecret) {
52
59
  const parsed = JSON.parse(clerkAuthSecret);
53
60
  await kvStore.set(
54
- STORAGE_KEY,
61
+ this.storageKey,
55
62
  JSON.stringify({
56
63
  accountID: parsed.accountID,
57
64
  accountSecret: parsed.secret,
@@ -62,14 +69,14 @@ export class AuthSecretStorage {
62
69
  }
63
70
  }
64
71
 
65
- const value = await kvStore.get(STORAGE_KEY);
72
+ const value = await kvStore.get(this.storageKey);
66
73
 
67
74
  if (value) {
68
75
  const parsed = JSON.parse(value);
69
76
 
70
77
  if ("secret" in parsed) {
71
78
  await kvStore.set(
72
- STORAGE_KEY,
79
+ this.storageKey,
73
80
  JSON.stringify({
74
81
  accountID: parsed.accountID,
75
82
  secretSeed: parsed.secretSeed,
@@ -83,7 +90,7 @@ export class AuthSecretStorage {
83
90
 
84
91
  async get(): Promise<AuthCredentials | null> {
85
92
  const kvStore = KvStoreContext.getInstance().getStorage();
86
- const data = await kvStore.get(STORAGE_KEY);
93
+ const data = await kvStore.get(this.storageKey);
87
94
 
88
95
  if (!data) return null;
89
96
 
@@ -106,7 +113,7 @@ export class AuthSecretStorage {
106
113
  async setWithoutNotify(payload: AuthSetPayload) {
107
114
  const kvStore = KvStoreContext.getInstance().getStorage();
108
115
  await kvStore.set(
109
- STORAGE_KEY,
116
+ this.storageKey,
110
117
  JSON.stringify({
111
118
  accountID: payload.accountID,
112
119
  secretSeed: payload.secretSeed
@@ -148,7 +155,7 @@ export class AuthSecretStorage {
148
155
 
149
156
  async clearWithoutNotify() {
150
157
  const kvStore = KvStoreContext.getInstance().getStorage();
151
- await kvStore.delete(STORAGE_KEY);
158
+ await kvStore.delete(this.storageKey);
152
159
  }
153
160
 
154
161
  async clear() {
@@ -120,13 +120,13 @@ export class Account extends CoValueBase implements CoValue {
120
120
  *
121
121
  * @param valueID The ID of the `CoValue` or `Group` to accept the invite to.
122
122
  * @param inviteSecret The secret of the invite to accept.
123
- * @param coValueClass The class of the `CoValue` or `Group` to accept the invite to.
123
+ * @param coValueClass [Group] The class of the `CoValue` or `Group` to accept the invite to.
124
124
  * @returns The loaded `CoValue` or `Group`.
125
125
  */
126
126
  async acceptInvite<S extends CoValueClassOrSchema>(
127
127
  valueID: string,
128
128
  inviteSecret: InviteSecret,
129
- coValueClass: S,
129
+ coValueClass?: S,
130
130
  ): Promise<Resolved<InstanceOrPrimitiveOfSchema<S>, true> | null> {
131
131
  if (!this.$jazz.isLocalNodeOwner) {
132
132
  throw new Error("Only a controlled account can accept invites");
@@ -138,7 +138,7 @@ export class Account extends CoValueBase implements CoValue {
138
138
  );
139
139
 
140
140
  return loadCoValue(
141
- coValueClassFromCoValueClassOrSchema(coValueClass),
141
+ coValueClassFromCoValueClassOrSchema(coValueClass ?? Group),
142
142
  valueID,
143
143
  {
144
144
  loadAs: this,
@@ -212,7 +212,7 @@ export class Account extends CoValueBase implements CoValue {
212
212
  options: {
213
213
  creationProps: { name: string };
214
214
  initialAgentSecret?: AgentSecret;
215
- peersToLoadFrom?: Peer[];
215
+ peers?: Peer[];
216
216
  crypto: CryptoProvider;
217
217
  },
218
218
  ): Promise<A> {
@@ -256,7 +256,7 @@ export class Account extends CoValueBase implements CoValue {
256
256
  const account = await this.create<A>({
257
257
  creationProps: options.creationProps,
258
258
  crypto: as.$jazz.localNode.crypto,
259
- peersToLoadFrom: [connectedPeers[0]],
259
+ peers: [connectedPeers[0]],
260
260
  });
261
261
 
262
262
  await account.$jazz.waitForAllCoValuesSync();
@@ -3,6 +3,7 @@ import {
3
3
  type AccountRole,
4
4
  type AgentID,
5
5
  type Everyone,
6
+ type InviteSecret,
6
7
  type RawAccountID,
7
8
  type RawGroup,
8
9
  type Role,
@@ -299,6 +300,29 @@ export class Group extends CoValueBase implements CoValue {
299
300
  const { options, listener } = parseSubscribeRestArgs(args);
300
301
  return subscribeToCoValueWithoutMe<G, R>(this, id, options, listener);
301
302
  }
303
+
304
+ /** @category Invites
305
+ * Creates a group invite
306
+ * @param id The ID of the group to create an invite for
307
+ * @param options Optional configuration
308
+ * @param options.role The role to grant to the accepter of the invite. Defaults to 'reader'
309
+ * @param options.loadAs The account to use when loading the group. Defaults to the current account
310
+ * @returns An invite secret, (a string starting with "inviteSecret_"). Can be
311
+ * accepted using `Account.acceptInvite()`
312
+ */
313
+ static async createInvite<G extends Group>(
314
+ this: CoValueClass<G>,
315
+ id: ID<G>,
316
+ options?: { role?: AccountRole; loadAs?: Account },
317
+ ): Promise<InviteSecret> {
318
+ const group = await loadCoValueWithoutMe(this, id, {
319
+ loadAs: options?.loadAs,
320
+ });
321
+ if (!group) {
322
+ throw new Error(`Group with id ${id} not found`);
323
+ }
324
+ return group.$jazz.createInvite(options?.role ?? "reader");
325
+ }
302
326
  }
303
327
 
304
328
  export class GroupJazzApi<G extends Group> extends CoValueJazzApi<G> {
@@ -350,6 +374,15 @@ export class GroupJazzApi<G extends Group> extends CoValueJazzApi<G> {
350
374
  return subscribeToExistingCoValue(this.group, options, listener);
351
375
  }
352
376
 
377
+ /**
378
+ * Create an invite to this group
379
+ *
380
+ * @category Invites
381
+ */
382
+ createInvite(role: AccountRole = "reader"): InviteSecret {
383
+ return this.raw.createInvite(role);
384
+ }
385
+
353
386
  /**
354
387
  * Wait for the `Group` to be uploaded to the other peers.
355
388
  *
@@ -301,7 +301,10 @@ export function subscribeToCoValue<
301
301
  if (value.type === "unavailable") {
302
302
  options.onUnavailable?.();
303
303
 
304
- console.error(value.toString());
304
+ // Don't log unavailable errors when `loadUnique` or `upsertUnique` are used
305
+ if (!options.skipRetry) {
306
+ console.error(value.toString());
307
+ }
305
308
  } else if (value.type === "unauthorized") {
306
309
  options.onUnauthorized?.();
307
310
 
@@ -45,7 +45,7 @@ type PlatformSpecificContext<Acc extends Account> =
45
45
 
46
46
  function getAnonymousFallback() {
47
47
  const context = createAnonymousJazzContext({
48
- peersToLoadFrom: [],
48
+ peers: [],
49
49
  crypto: new PureJSCrypto(),
50
50
  });
51
51
 
@@ -71,13 +71,17 @@ export class JazzContextManager<
71
71
  protected value: JazzContextType<Acc> | undefined;
72
72
  protected context: PlatformSpecificContext<Acc> | undefined;
73
73
  protected props: P | undefined;
74
- protected authSecretStorage = new AuthSecretStorage();
74
+ protected authSecretStorage;
75
75
  protected keepContextOpen = false;
76
76
  contextPromise: Promise<void> | undefined;
77
77
  protected authenticatingAccountID: string | null = null;
78
78
 
79
- constructor(opts?: { useAnonymousFallback?: boolean }) {
79
+ constructor(opts?: {
80
+ useAnonymousFallback?: boolean;
81
+ authSecretStorageKey?: string;
82
+ }) {
80
83
  KvStoreContext.getInstance().initialize(this.getKvStore());
84
+ this.authSecretStorage = new AuthSecretStorage(opts?.authSecretStorageKey);
81
85
 
82
86
  if (opts?.useAnonymousFallback) {
83
87
  this.value = getAnonymousFallback();