jazz-tools 0.7.35-unique.2 → 0.8.0

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 (46) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/.turbo/turbo-lint.log +1 -1
  3. package/.turbo/turbo-test.log +44 -57
  4. package/CHANGELOG.md +27 -7
  5. package/dist/coValues/account.js +8 -2
  6. package/dist/coValues/account.js.map +1 -1
  7. package/dist/coValues/coList.js +5 -2
  8. package/dist/coValues/coList.js.map +1 -1
  9. package/dist/coValues/coMap.js +16 -9
  10. package/dist/coValues/coMap.js.map +1 -1
  11. package/dist/coValues/coStream.js +30 -3
  12. package/dist/coValues/coStream.js.map +1 -1
  13. package/dist/coValues/interfaces.js +5 -2
  14. package/dist/coValues/interfaces.js.map +1 -1
  15. package/dist/implementation/createContext.js +55 -5
  16. package/dist/implementation/createContext.js.map +1 -1
  17. package/dist/implementation/devtoolsFormatters.js +1 -0
  18. package/dist/implementation/devtoolsFormatters.js.map +1 -1
  19. package/dist/implementation/refs.js +8 -2
  20. package/dist/implementation/refs.js.map +1 -1
  21. package/dist/implementation/schema.js.map +1 -1
  22. package/dist/implementation/subscriptionScope.js +4 -3
  23. package/dist/implementation/subscriptionScope.js.map +1 -1
  24. package/dist/index.js +1 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/tests/coMap.test.js +92 -1
  27. package/dist/tests/coMap.test.js.map +1 -1
  28. package/dist/tests/coStream.test.js +37 -0
  29. package/dist/tests/coStream.test.js.map +1 -1
  30. package/dist/tests/deepLoading.test.js +7 -7
  31. package/dist/tests/deepLoading.test.js.map +1 -1
  32. package/package.json +4 -4
  33. package/src/coValues/account.ts +9 -3
  34. package/src/coValues/coList.ts +5 -1
  35. package/src/coValues/coMap.ts +56 -17
  36. package/src/coValues/coStream.ts +38 -4
  37. package/src/coValues/interfaces.ts +8 -4
  38. package/src/implementation/createContext.ts +117 -11
  39. package/src/implementation/devtoolsFormatters.ts +1 -0
  40. package/src/implementation/refs.ts +13 -6
  41. package/src/implementation/schema.ts +1 -0
  42. package/src/implementation/subscriptionScope.ts +28 -25
  43. package/src/index.ts +3 -0
  44. package/src/tests/coMap.test.ts +139 -1
  45. package/src/tests/coStream.test.ts +53 -0
  46. package/src/tests/deepLoading.test.ts +7 -7
@@ -40,15 +40,16 @@ describe("Deep loading with depth arg", async () => {
40
40
  crypto: Crypto,
41
41
  });
42
42
  test("loading a deeply nested object will wait until all required refs are loaded", async () => {
43
+ const ownership = { owner: me };
43
44
  const map = TestMap.create({
44
45
  list: TestList.create([
45
46
  InnerMap.create({
46
47
  stream: TestStream.create([
47
- InnermostMap.create({ value: "hello" }, { owner: me }),
48
- ], { owner: me }),
49
- }, { owner: me }),
50
- ], { owner: me }),
51
- }, { owner: me });
48
+ InnermostMap.create({ value: "hello" }, ownership),
49
+ ], ownership),
50
+ }, ownership),
51
+ ], ownership),
52
+ }, ownership);
52
53
  const map1 = await TestMap.load(map.id, meOnSecondPeer, {});
53
54
  expectTypeOf(map1).toEqualTypeOf();
54
55
  if (map1 === undefined) {
@@ -81,8 +82,7 @@ describe("Deep loading with depth arg", async () => {
81
82
  throw new Error("map4 is undefined");
82
83
  }
83
84
  expect(map4.list[0]?.stream).not.toBe(null);
84
- // TODO: why is this actually defined?
85
- // expect(map4.list[0]?.stream?.[me.id]).toBe(undefined)
85
+ expect(map4.list[0]?.stream?.[me.id]).not.toBe(null);
86
86
  expect(map4.list[0]?.stream?.byMe?.value).toBe(null);
87
87
  const map5 = await TestMap.load(map.id, meOnSecondPeer, {
88
88
  list: [{ stream: [{}] }],
@@ -1 +1 @@
1
- {"version":3,"file":"deepLoading.test.js","sourceRoot":"","sources":["../../src/tests/deepLoading.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deepLoading.test.js","sourceRoot":"","sources":["../../src/tests/deepLoading.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -5,14 +5,14 @@
5
5
  "types": "./src/index.ts",
6
6
  "type": "module",
7
7
  "license": "MIT",
8
- "version": "0.7.35-unique.2",
8
+ "version": "0.8.0",
9
9
  "dependencies": {
10
- "fast-check": "^3.17.2",
11
- "cojson": "0.7.35-unique.2"
10
+ "cojson": "0.8.0",
11
+ "fast-check": "^3.17.2"
12
12
  },
13
13
  "devDependencies": {
14
14
  "typescript": "^5.3.3",
15
- "vitest": "^0.34.6"
15
+ "vitest": "1.5.3"
16
16
  },
17
17
  "madge": {
18
18
  "detectiveOptions": {
@@ -1,5 +1,5 @@
1
1
  import { LocalNode, cojsonInternals } from "cojson";
2
- import type {
2
+ import {
3
3
  AgentSecret,
4
4
  CoID,
5
5
  CryptoProvider,
@@ -21,6 +21,7 @@ import {
21
21
  RefIfCoValue,
22
22
  DeeplyLoaded,
23
23
  DepthsIn,
24
+ AnonymousJazzAgent,
24
25
  } from "../internal.js";
25
26
  import {
26
27
  Group,
@@ -67,8 +68,13 @@ export class Account extends CoValueBase implements CoValue {
67
68
  get _owner(): Account {
68
69
  return this as Account;
69
70
  }
70
- get _loadedAs(): Account {
71
- return this.isMe ? this : Account.fromNode(this._raw.core.node);
71
+ get _loadedAs(): Account | AnonymousJazzAgent {
72
+ if (this.isMe) return this;
73
+
74
+ if (this._raw.core.node.account instanceof RawAccount) {
75
+ return Account.fromRaw(this._raw.core.node.account);
76
+ }
77
+ return new AnonymousJazzAgent(this._raw.core.node);
72
78
  }
73
79
 
74
80
  declare profile: Profile | null;
@@ -14,6 +14,7 @@ import type {
14
14
  } from "../internal.js";
15
15
  import {
16
16
  Account,
17
+ AnonymousJazzAgent,
17
18
  Group,
18
19
  ItemsSym,
19
20
  Ref,
@@ -163,7 +164,10 @@ export class CoList<Item = any> extends Array<Item> implements CoValue {
163
164
  }
164
165
 
165
166
  get _loadedAs() {
166
- return Account.fromNode(this._raw.core.node);
167
+ if (this._raw.core.node.account instanceof RawAccount) {
168
+ return Account.fromRaw(this._raw.core.node.account);
169
+ }
170
+ return new AnonymousJazzAgent(this._raw.core.node);
167
171
  }
168
172
 
169
173
  static get [Symbol.species]() {
@@ -15,6 +15,8 @@ import type {
15
15
  DepthsIn,
16
16
  DeeplyLoaded,
17
17
  CoValueClass,
18
+ AnonymousJazzAgent,
19
+ co,
18
20
  } from "../internal.js";
19
21
  import {
20
22
  Account,
@@ -194,11 +196,6 @@ export class CoMap extends CoValueBase implements CoValue {
194
196
  };
195
197
  }
196
198
 
197
- /** @internal */
198
- get _loadedAs() {
199
- return Account.fromNode(this._raw.core.node);
200
- }
201
-
202
199
  /** @internal */
203
200
  constructor(
204
201
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -445,9 +442,9 @@ export class CoMap extends CoValueBase implements CoValue {
445
442
 
446
443
  static findUnique<M extends CoMap>(
447
444
  this: CoValueClass<M>,
448
- unique: CoValueUniqueness['uniqueness'],
445
+ unique: CoValueUniqueness["uniqueness"],
449
446
  ownerID: ID<Account> | ID<Group>,
450
- as: Account | Group,
447
+ as: Account | Group | AnonymousJazzAgent,
451
448
  ) {
452
449
  const header = {
453
450
  type: "comap" as const,
@@ -458,10 +455,9 @@ export class CoMap extends CoValueBase implements CoValue {
458
455
  meta: null,
459
456
  uniqueness: unique,
460
457
  };
461
- return cojsonInternals.idforHeader(
462
- header,
463
- as._raw.core.crypto,
464
- ) as ID<M>;
458
+ const crypto =
459
+ as._type === "Anonymous" ? as.node.crypto : as._raw.core.crypto;
460
+ return cojsonInternals.idforHeader(header, crypto) as ID<M>;
465
461
  }
466
462
 
467
463
  /**
@@ -532,11 +528,44 @@ export type CoKeys<Map extends object> = Exclude<
532
528
  keyof CoMap
533
529
  >;
534
530
 
531
+ /**
532
+ * Force required ref fields to be non nullable
533
+ *
534
+ * Considering that:
535
+ * - Optional refs are typed as co<InstanceType<CoValueClass> | null | undefined>
536
+ * - Required refs are typed as co<InstanceType<CoValueClass> | null>
537
+ *
538
+ * This type works in two steps:
539
+ * - Remove the null from both types
540
+ * - Then we check if the input type accepts undefined, if positive we put the null union back
541
+ *
542
+ * So the optional refs stays unchanged while we safely remove the null union
543
+ * from required refs
544
+ *
545
+ * This way required refs can be marked as required in the CoMapInit while
546
+ * staying a nullable property for value access.
547
+ *
548
+ * Example:
549
+ *
550
+ * const map = MyCoMap.create({
551
+ * requiredRef: NestedMap.create({}) // null is not valid here
552
+ * })
553
+ *
554
+ * map.requiredRef // this value is still nullable
555
+ */
556
+ type ForceRequiredRef<V> = V extends co<InstanceType<CoValueClass> | null>
557
+ ? NonNullable<V>
558
+ : V extends co<InstanceType<CoValueClass> | undefined>
559
+ ? V | null
560
+ : V;
561
+
535
562
  export type CoMapInit<Map extends object> = {
536
563
  [Key in CoKeys<Map> as undefined extends Map[Key]
537
564
  ? never
538
- : IfCo<Map[Key], Key>]: Map[Key];
539
- } & { [Key in CoKeys<Map> as IfCo<Map[Key], Key>]?: Map[Key] };
565
+ : IfCo<Map[Key], Key>]: ForceRequiredRef<Map[Key]>;
566
+ } & {
567
+ [Key in CoKeys<Map> as IfCo<Map[Key], Key>]?: ForceRequiredRef<Map[Key]>;
568
+ };
540
569
 
541
570
  // TODO: cache handlers per descriptor for performance?
542
571
  const CoMapProxyHandler: ProxyHandler<CoMap> = {
@@ -592,10 +621,20 @@ const CoMapProxyHandler: ProxyHandler<CoMap> = {
592
621
  } else if ("encoded" in descriptor) {
593
622
  target._raw.set(key, descriptor.encoded.encode(value));
594
623
  } else if (isRefEncoded(descriptor)) {
595
- target._raw.set(key, value.id);
596
- subscriptionsScopes
597
- .get(target)
598
- ?.onRefAccessedOrSet(target.id, value.id);
624
+ if (value === null) {
625
+ if (descriptor.optional) {
626
+ target._raw.set(key, null);
627
+ } else {
628
+ throw new Error(
629
+ `Cannot set required reference ${key} to null`,
630
+ );
631
+ }
632
+ } else {
633
+ target._raw.set(key, value.id);
634
+ subscriptionsScopes
635
+ .get(target)
636
+ ?.onRefAccessedOrSet(target.id, value.id);
637
+ }
599
638
  }
600
639
  return true;
601
640
  } else {
@@ -20,6 +20,7 @@ import type {
20
20
  CoValueClass,
21
21
  DeeplyLoaded,
22
22
  DepthsIn,
23
+ AnonymousJazzAgent,
23
24
  } from "../internal.js";
24
25
  import {
25
26
  ItemsSym,
@@ -77,13 +78,21 @@ export class CoStream<Item = any> extends CoValueBase implements CoValue {
77
78
  [key: ID<Account>]: CoStreamEntry<Item>;
78
79
 
79
80
  get byMe(): CoStreamEntry<Item> | undefined {
80
- return this[this._loadedAs.id];
81
+ if (this._loadedAs._type === "Account") {
82
+ return this[this._loadedAs.id];
83
+ } else {
84
+ return undefined;
85
+ }
81
86
  }
82
87
  perSession!: {
83
88
  [key: SessionID]: CoStreamEntry<Item>;
84
89
  };
85
90
  get inCurrentSession(): CoStreamEntry<Item> | undefined {
86
- return this.perSession[this._loadedAs.sessionID!];
91
+ if (this._loadedAs._type === "Account") {
92
+ return this.perSession[this._loadedAs.sessionID!];
93
+ } else {
94
+ return undefined;
95
+ }
87
96
  }
88
97
 
89
98
  constructor(
@@ -233,7 +242,7 @@ function entryFromRawEntry<Item>(
233
242
  at: Date;
234
243
  value: JsonValue;
235
244
  },
236
- loadedAs: Account,
245
+ loadedAs: Account | AnonymousJazzAgent,
237
246
  accountID: ID<Account> | undefined,
238
247
  itemField: Schema,
239
248
  ): Omit<CoStreamEntry<Item>, "all"> {
@@ -509,6 +518,10 @@ export class BinaryCoStream extends CoValueBase implements CoValue {
509
518
  return this._raw.getBinaryChunks(options?.allowUnfinished);
510
519
  }
511
520
 
521
+ isBinaryStreamEnded(): boolean {
522
+ return this._raw.isBinaryStreamEnded();
523
+ }
524
+
512
525
  start(options: BinaryStreamInfo): void {
513
526
  this._raw.startBinaryStream(options);
514
527
  }
@@ -540,7 +553,28 @@ export class BinaryCoStream extends CoValueBase implements CoValue {
540
553
  allowUnfinished?: boolean;
541
554
  },
542
555
  ): Promise<Blob | undefined> {
543
- const stream = await this.load(id, as, []);
556
+ let stream = await this.load(id, as, []);
557
+
558
+ /**
559
+ * If the user hasn't requested an incomplete blob and the
560
+ * stream isn't complete wait for the stream download before progressing
561
+ */
562
+ if (!options?.allowUnfinished && !stream?.isBinaryStreamEnded()) {
563
+ stream = await new Promise<BinaryCoStream>((resolve) => {
564
+ const unsubscribe = subscribeToCoValue(
565
+ this,
566
+ id,
567
+ as,
568
+ [],
569
+ (value) => {
570
+ if (value.isBinaryStreamEnded()) {
571
+ unsubscribe();
572
+ resolve(value);
573
+ }
574
+ },
575
+ );
576
+ });
577
+ }
544
578
 
545
579
  return stream?.toBlob({
546
580
  allowUnfinished: options?.allowUnfinished,
@@ -8,6 +8,7 @@ import {
8
8
  Ref,
9
9
  inspect,
10
10
  subscriptionsScopes,
11
+ AnonymousJazzAgent,
11
12
  } from "../internal.js";
12
13
  import { fulfillsDepth } from "./deepLoading.js";
13
14
 
@@ -35,7 +36,7 @@ export interface CoValue {
35
36
  /** @category Internals */
36
37
  _raw: RawCoValue;
37
38
  /** @internal */
38
- readonly _loadedAs: Account;
39
+ readonly _loadedAs: Account | AnonymousJazzAgent;
39
40
  /** @category Stringifying & Inspection */
40
41
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
42
  toJSON(key?: string, seenAbove?: ID<CoValue>[]): any[] | object | string;
@@ -86,7 +87,10 @@ export class CoValueBase implements CoValue {
86
87
 
87
88
  /** @private */
88
89
  get _loadedAs() {
89
- return Account.fromNode(this._raw.core.node);
90
+ if (this._raw.core.node.account instanceof RawAccount) {
91
+ return Account.fromRaw(this._raw.core.node.account);
92
+ }
93
+ return new AnonymousJazzAgent(this._raw.core.node);
90
94
  }
91
95
 
92
96
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -134,7 +138,7 @@ export class CoValueBase implements CoValue {
134
138
  export function loadCoValue<V extends CoValue, Depth>(
135
139
  cls: CoValueClass<V>,
136
140
  id: ID<V>,
137
- as: Account,
141
+ as: Account | AnonymousJazzAgent,
138
142
  depth: Depth & DepthsIn<V>,
139
143
  ): Promise<DeeplyLoaded<V, Depth> | undefined> {
140
144
  return new Promise((resolve) => {
@@ -170,7 +174,7 @@ export function ensureCoValueLoaded<V extends CoValue, Depth>(
170
174
  export function subscribeToCoValue<V extends CoValue, Depth>(
171
175
  cls: CoValueClass<V>,
172
176
  id: ID<V>,
173
- as: Account,
177
+ as: Account | AnonymousJazzAgent,
174
178
  depth: Depth & DepthsIn<V>,
175
179
  listener: (value: DeeplyLoaded<V, Depth>) => void,
176
180
  onUnavailable?: () => void,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  AgentSecret,
3
3
  CoID,
4
- cojsonInternals,
4
+ ControlledAgent,
5
5
  CryptoProvider,
6
6
  LocalNode,
7
7
  Peer,
@@ -17,6 +17,7 @@ export type AuthResult =
17
17
  credentials: { accountID: ID<Account>; secret: AgentSecret };
18
18
  onSuccess: () => void;
19
19
  onError: (error: string | Error) => void;
20
+ logOut: () => void;
20
21
  }
21
22
  | {
22
23
  type: "new";
@@ -28,6 +29,7 @@ export type AuthResult =
28
29
  }) => Promise<void>;
29
30
  onSuccess: () => void;
30
31
  onError: (error: string | Error) => void;
32
+ logOut: () => void;
31
33
  };
32
34
 
33
35
  export interface AuthMethod {
@@ -44,42 +46,105 @@ export const fixedCredentialsAuth = (credentials: {
44
46
  credentials,
45
47
  onSuccess: () => {},
46
48
  onError: () => {},
49
+ logOut: () => {},
47
50
  }),
48
51
  };
49
52
  };
50
53
 
51
- export async function randomSessionProvider(accountID: ID<Account>) {
54
+ export const ephemeralCredentialsAuth = (): AuthMethod => {
52
55
  return {
53
- sessionID: cojsonInternals.newRandomSessionID(
56
+ start: async () => ({
57
+ type: "new",
58
+ creationProps: { name: "Ephemeral" },
59
+ saveCredentials: async () => {},
60
+ onSuccess: () => {},
61
+ onError: () => {},
62
+ logOut: () => {},
63
+ }),
64
+ };
65
+ };
66
+
67
+ export async function randomSessionProvider(
68
+ accountID: ID<Account>,
69
+ crypto: CryptoProvider,
70
+ ) {
71
+ return {
72
+ sessionID: crypto.newRandomSessionID(
54
73
  accountID as unknown as RawAccountID,
55
74
  ),
56
75
  sessionDone: () => {},
57
76
  };
58
77
  }
59
78
 
60
- export async function createJazzContext<Acc extends Account>({
61
- AccountSchema = Account as unknown as AccountClass<Acc>,
62
- auth,
63
- sessionProvider,
64
- peersToLoadFrom,
65
- crypto,
66
- }: {
79
+ type ContextParamsWithAuth<Acc extends Account> = {
67
80
  AccountSchema?: AccountClass<Acc>;
68
81
  auth: AuthMethod;
69
82
  sessionProvider: (
70
83
  accountID: ID<Account>,
84
+ crypto: CryptoProvider,
71
85
  ) => Promise<{ sessionID: SessionID; sessionDone: () => void }>;
86
+ } & BaseContextParams;
87
+
88
+ type BaseContextParams = {
72
89
  peersToLoadFrom: Peer[];
73
90
  crypto: CryptoProvider;
74
- }): Promise<{ account: Acc; done: () => void }> {
91
+ };
92
+
93
+ export type JazzContextWithAccount<Acc extends Account> = {
94
+ account: Acc;
95
+ done: () => void;
96
+ logOut: () => void;
97
+ };
98
+
99
+ export type JazzContextWithAgent = {
100
+ agent: AnonymousJazzAgent;
101
+ done: () => void;
102
+ logOut: () => void;
103
+ };
104
+
105
+ export type JazzContext<Acc extends Account> = JazzContextWithAccount<Acc> | JazzContextWithAgent;
106
+
107
+ export async function createJazzContext<Acc extends Account>({
108
+ AccountSchema,
109
+ auth,
110
+ sessionProvider,
111
+ peersToLoadFrom,
112
+ crypto,
113
+ }: ContextParamsWithAuth<Acc>): Promise<JazzContextWithAccount<Acc>>;
114
+ export async function createJazzContext({
115
+ peersToLoadFrom,
116
+ crypto,
117
+ }: BaseContextParams): Promise<JazzContextWithAgent>;
118
+ export async function createJazzContext<Acc extends Account>(
119
+ options: ContextParamsWithAuth<Acc> | BaseContextParams,
120
+ ): Promise<
121
+ JazzContext<Acc>
122
+ >
123
+ export async function createJazzContext<Acc extends Account>(
124
+ options: ContextParamsWithAuth<Acc> | BaseContextParams,
125
+ ): Promise<
126
+ JazzContext<Acc>
127
+ > {
75
128
  // eslint-disable-next-line no-constant-condition
76
129
  while (true) {
130
+ if (!("auth" in options)) {
131
+ return createAnonymousJazzContext({
132
+ peersToLoadFrom: options.peersToLoadFrom,
133
+ crypto: options.crypto,
134
+ });
135
+ }
136
+
137
+ const { auth, sessionProvider, peersToLoadFrom, crypto } = options;
138
+ const AccountSchema =
139
+ options.AccountSchema ?? (Account as unknown as AccountClass<Acc>);
140
+
77
141
  const authResult = await auth.start(crypto);
78
142
 
79
143
  if (authResult.type === "existing") {
80
144
  try {
81
145
  const { sessionID, sessionDone } = await sessionProvider(
82
146
  authResult.credentials.accountID,
147
+ crypto,
83
148
  );
84
149
 
85
150
  try {
@@ -108,6 +173,11 @@ export async function createJazzContext<Acc extends Account>({
108
173
  node.gracefulShutdown();
109
174
  sessionDone();
110
175
  },
176
+ logOut: () => {
177
+ node.gracefulShutdown();
178
+ sessionDone();
179
+ authResult.logOut();
180
+ },
111
181
  };
112
182
  } catch (e) {
113
183
  authResult.onError(
@@ -151,6 +221,10 @@ export async function createJazzContext<Acc extends Account>({
151
221
  done: () => {
152
222
  node.gracefulShutdown();
153
223
  },
224
+ logOut: () => {
225
+ node.gracefulShutdown();
226
+ authResult.logOut();
227
+ },
154
228
  };
155
229
  } catch (e) {
156
230
  authResult.onError(
@@ -160,3 +234,35 @@ export async function createJazzContext<Acc extends Account>({
160
234
  }
161
235
  }
162
236
  }
237
+
238
+ export class AnonymousJazzAgent {
239
+ _type = "Anonymous" as const;
240
+ constructor(public node: LocalNode) {}
241
+ }
242
+
243
+ export async function createAnonymousJazzContext({
244
+ peersToLoadFrom,
245
+ crypto,
246
+ }: {
247
+ peersToLoadFrom: Peer[];
248
+ crypto: CryptoProvider;
249
+ }): Promise<JazzContextWithAgent> {
250
+ const agentSecret = crypto.newRandomAgentSecret();
251
+ const rawAgent = new ControlledAgent(agentSecret, crypto);
252
+
253
+ const node = new LocalNode(
254
+ rawAgent,
255
+ crypto.newRandomSessionID(rawAgent.id),
256
+ crypto,
257
+ );
258
+
259
+ for (const peer of peersToLoadFrom) {
260
+ node.syncManager.addPeer(peer);
261
+ }
262
+
263
+ return {
264
+ agent: new AnonymousJazzAgent(node),
265
+ done: () => {},
266
+ logOut: () => {},
267
+ };
268
+ }
@@ -1,3 +1,4 @@
1
+ /* istanbul ignore file -- @preserve */
1
2
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
3
  import { ItemsSym } from "./symbols.js";
3
4
 
@@ -1,6 +1,7 @@
1
1
  import type { CoID, RawCoValue } from "cojson";
2
2
  import type {
3
3
  Account,
4
+ AnonymousJazzAgent,
4
5
  CoValue,
5
6
  ID,
6
7
  RefEncoded,
@@ -19,7 +20,7 @@ const TRACE_ACCESSES = false;
19
20
  export class Ref<out V extends CoValue> {
20
21
  constructor(
21
22
  readonly id: ID<V>,
22
- readonly controlledAccount: Account,
23
+ readonly controlledAccount: Account | AnonymousJazzAgent,
23
24
  readonly schema: RefEncoded<V>,
24
25
  ) {
25
26
  if (!isRefEncoded(schema)) {
@@ -28,9 +29,11 @@ export class Ref<out V extends CoValue> {
28
29
  }
29
30
 
30
31
  get value() {
31
- const raw = this.controlledAccount._raw.core.node.getLoaded(
32
- this.id as unknown as CoID<RawCoValue>,
33
- );
32
+ const node =
33
+ "node" in this.controlledAccount
34
+ ? this.controlledAccount.node
35
+ : this.controlledAccount._raw.core.node;
36
+ const raw = node.getLoaded(this.id as unknown as CoID<RawCoValue>);
34
37
  if (raw) {
35
38
  let value = refCache.get(raw);
36
39
  if (value) {
@@ -48,7 +51,11 @@ export class Ref<out V extends CoValue> {
48
51
  private async loadHelper(options?: {
49
52
  onProgress: (p: number) => void;
50
53
  }): Promise<V | "unavailable"> {
51
- const raw = await this.controlledAccount._raw.core.node.load(
54
+ const node =
55
+ "node" in this.controlledAccount
56
+ ? this.controlledAccount.node
57
+ : this.controlledAccount._raw.core.node;
58
+ const raw = await node.load(
52
59
  this.id as unknown as CoID<RawCoValue>,
53
60
  options?.onProgress,
54
61
  );
@@ -117,7 +124,7 @@ export class Ref<out V extends CoValue> {
117
124
  export function makeRefs<Keys extends string | number>(
118
125
  getIdForKey: (key: Keys) => ID<CoValue> | undefined,
119
126
  getKeysWithIds: () => Keys[],
120
- controlledAccount: Account,
127
+ controlledAccount: Account | AnonymousJazzAgent,
121
128
  refSchemaForKey: (key: Keys) => RefEncoded<CoValue>,
122
129
  ): { [K in Keys]: Ref<CoValue> } & {
123
130
  [Symbol.iterator]: () => IterableIterator<Ref<CoValue>>;
@@ -88,6 +88,7 @@ function optionalRef<C extends CoValueClass>(
88
88
 
89
89
  function ref<C extends CoValueClass>(
90
90
  arg: C | ((_raw: InstanceType<C>["_raw"]) => C),
91
+ options?: never,
91
92
  ): co<InstanceType<C> | null>;
92
93
  function ref<C extends CoValueClass>(
93
94
  arg: C | ((_raw: InstanceType<C>["_raw"]) => C),