jazz-tools 0.18.7 → 0.18.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +35 -35
- package/CHANGELOG.md +31 -0
- package/dist/better-auth/auth/client.d.ts +1 -1
- package/dist/better-auth/auth/client.d.ts.map +1 -1
- package/dist/better-auth/auth/client.js.map +1 -1
- package/dist/better-auth/auth/server.js +1 -1
- package/dist/better-auth/auth/server.js.map +1 -1
- package/dist/{chunk-CFAY3FMQ.js → chunk-RQHJFPIB.js} +61 -26
- package/dist/{chunk-CFAY3FMQ.js.map → chunk-RQHJFPIB.js.map} +1 -1
- package/dist/index.js +1 -1
- package/dist/react/hooks.d.ts +1 -1
- package/dist/react/hooks.d.ts.map +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +3 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react-core/hooks.d.ts +56 -0
- package/dist/react-core/hooks.d.ts.map +1 -1
- package/dist/react-core/index.js +25 -1
- package/dist/react-core/index.js.map +1 -1
- package/dist/react-core/tests/useAccountWithSelector.test.d.ts +2 -0
- package/dist/react-core/tests/useAccountWithSelector.test.d.ts.map +1 -0
- package/dist/react-native-core/hooks.d.ts +1 -1
- package/dist/react-native-core/hooks.d.ts.map +1 -1
- package/dist/react-native-core/index.js +3 -1
- package/dist/react-native-core/index.js.map +1 -1
- package/dist/testing.js +1 -1
- package/dist/tools/coValues/CoFieldInit.d.ts +5 -5
- package/dist/tools/coValues/CoFieldInit.d.ts.map +1 -1
- package/dist/tools/implementation/ContextManager.d.ts +2 -0
- package/dist/tools/implementation/ContextManager.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts +5 -3
- package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/better-auth/auth/client.ts +1 -1
- package/src/better-auth/auth/server.ts +1 -1
- package/src/better-auth/auth/tests/client.test.ts +229 -0
- package/src/react/hooks.tsx +1 -0
- package/src/react/index.ts +1 -0
- package/src/react-core/hooks.ts +84 -0
- package/src/react-core/tests/useAccountWithSelector.test.ts +411 -0
- package/src/react-native-core/hooks.tsx +1 -0
- package/src/tools/coValues/CoFieldInit.ts +5 -5
- package/src/tools/implementation/ContextManager.ts +75 -32
- package/src/tools/implementation/zodSchema/schemaTypes/CoMapSchema.ts +22 -8
- package/src/tools/tests/ContextManager.test.ts +252 -0
- package/src/tools/tests/coMap.test.ts +37 -0
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/tools/implementation/zodSchema/zodReExport.ts","../src/tools/implementation/schemaUtils.ts","../src/tools/coValues/CoValueBase.ts","../src/tools/implementation/inspect.ts","../src/tools/implementation/symbols.ts","../src/tools/coValues/registeredSchemas.ts","../src/tools/coValues/coMap.ts","../src/tools/coValues/coList.ts","../src/tools/coValues/coFeed.ts","../src/tools/coValues/account.ts","../src/tools/coValues/group.ts","../src/tools/coValues/profile.ts","../src/tools/coValues/inbox.ts","../src/tools/lib/id.ts","../src/tools/coValues/coPlainText.ts","../src/tools/coValues/coRichText.ts","../src/tools/coValues/schemaUnion.ts","../src/tools/implementation/anonymousJazzAgent.ts","../src/tools/implementation/activeAccountContext.ts","../src/tools/implementation/refs.ts","../src/tools/implementation/schema.ts","../src/tools/lib/migration.ts","../src/tools/subscribe/CoValueCoreSubscription.ts","../src/tools/subscribe/JazzError.ts","../src/tools/subscribe/utils.ts","../src/tools/lib/cache.ts","../src/tools/subscribe/SubscriptionScope.ts","../src/tools/subscribe/index.ts","../src/tools/implementation/createContext.ts","../src/tools/implementation/zodSchema/schemaTypes/CoDiscriminatedUnionSchema.ts","../src/tools/implementation/zodSchema/schemaTypes/CoOptionalSchema.ts","../src/tools/implementation/zodSchema/schemaTypes/RichTextSchema.ts","../src/tools/implementation/zodSchema/zodCo.ts","../src/tools/implementation/zodSchema/coExport.ts","../src/tools/implementation/zodSchema/schemaTypes/CoMapSchema.ts","../src/tools/implementation/zodSchema/schemaTypes/CoListSchema.ts","../src/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.ts","../src/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.ts","../src/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.ts","../src/tools/implementation/zodSchema/schemaTypes/AccountSchema.ts","../src/tools/implementation/zodSchema/unionUtils.ts","../src/tools/implementation/zodSchema/runtimeConverters/schemaFieldToCoFieldDef.ts","../src/tools/implementation/zodSchema/runtimeConverters/coValueSchemaTransformation.ts","../src/tools/coValues/extensions/imageDef.ts","../src/tools/implementation/ContextManager.ts","../src/tools/auth/KvStoreContext.ts","../src/tools/auth/AuthSecretStorage.ts","../src/tools/auth/InMemoryKVStore.ts","../src/tools/implementation/devtoolsFormatters.ts","../src/tools/coValues/interfaces.ts"],"sourcesContent":["import {\n ZodObject,\n core,\n object as zodObject,\n strictObject as zodStrictObject,\n} from \"zod/v4\";\nimport { removeGetters } from \"../schemaUtils.js\";\nexport {\n string,\n number,\n boolean,\n templateLiteral,\n json,\n date,\n emoji,\n base64,\n base64url,\n nanoid,\n cuid,\n cuid2,\n ulid,\n ipv4,\n ipv6,\n email,\n url,\n uuid,\n literal,\n enum,\n cidrv4,\n cidrv6,\n iso,\n int32,\n union,\n discriminatedUnion,\n // record,\n // intersection,\n int,\n optional,\n array,\n tuple,\n type ZodOptional,\n type ZodReadonly,\n type ZodLazy,\n type ZodDefault,\n type ZodCatch,\n type output as infer,\n type ZodDiscriminatedUnion,\n z,\n} from \"zod/v4\";\n\nexport function object<\n T extends core.$ZodLooseShape = Partial<Record<never, core.SomeType>>,\n>(\n shape?: T,\n params?: string | core.$ZodObjectParams,\n): ZodObject<T, core.$strip> {\n rejectCoValueSchemas(\n shape,\n \"z.object() does not support collaborative types as values. Use co.map() instead\",\n );\n return zodObject(shape, params);\n}\n\nexport function strictObject<T extends core.$ZodLooseShape>(\n shape: T,\n params?: string | core.$ZodObjectParams,\n): ZodObject<T, core.$strict> {\n rejectCoValueSchemas(\n shape,\n \"z.strictObject() does not support collaborative types as values. Use co.map() instead\",\n );\n return zodStrictObject(shape, params);\n}\n\nfunction rejectCoValueSchemas(\n shape: core.$ZodLooseShape | undefined,\n errorMessage: string,\n) {\n if (containsCoValueSchema(shape)) {\n throw Error(errorMessage);\n }\n}\n\nfunction containsCoValueSchema(shape?: core.$ZodLooseShape): boolean {\n // Remove getters to avoid circularity issues accessing schemas that may not be defined yet\n return Object.values(removeGetters(shape ?? {})).some(isAnyCoValueSchema);\n}\n\n// Note: if you're editing this function, edit the `isAnyCoValueSchema`\n// function in `zodSchemaToCoSchema.ts` as well\nfunction isAnyCoValueSchema(schema: unknown): boolean {\n return (\n typeof schema === \"object\" &&\n schema !== null &&\n \"collaborative\" in schema &&\n schema.collaborative === true\n );\n}\n","/**\n * Remove getters from an object\n *\n * @param obj - The object to remove getters from.\n * @returns A new object with the getters removed.\n */\nexport function removeGetters<T extends object>(obj: T): Partial<T> {\n const result: any = {};\n\n for (const key of Object.keys(obj)) {\n const descriptor = Object.getOwnPropertyDescriptor(obj, key);\n if (!descriptor?.get) {\n result[key] = (obj as any)[key];\n }\n }\n\n return result;\n}\n","import { ControlledAccount, LocalNode, type RawCoValue } from \"cojson\";\nimport { CoreCoValueSchema } from \"../implementation/zodSchema/schemaTypes/CoValueSchema.js\";\nimport {\n AnonymousJazzAgent,\n CoValue,\n CoValueClass,\n CoValueFromRaw,\n ID,\n RegisteredSchemas,\n coValueClassFromCoValueClassOrSchema,\n coValuesCache,\n inspect,\n} from \"../internal.js\";\nimport {\n CoValueClassOrSchema,\n Group,\n InstanceOfSchemaCoValuesNullable,\n TypeSym,\n} from \"../internal.js\";\n\n/** @internal */\nexport abstract class CoValueBase implements CoValue {\n declare [TypeSym]: string;\n\n declare abstract $jazz: CoValueJazzApi<this>;\n\n /** @category Internals */\n static fromRaw<V extends CoValue>(this: CoValueClass<V>, raw: RawCoValue): V {\n return new this({ fromRaw: raw });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n toJSON(): object | any[] | string {\n return {\n id: this.$jazz.id,\n type: this[TypeSym],\n error: \"unknown CoValue class\",\n };\n }\n\n [inspect]() {\n return this.toJSON();\n }\n}\n\nexport abstract class CoValueJazzApi<V extends CoValue> {\n /** @category Internals */\n declare _instanceID: string;\n\n constructor(private coValue: V) {\n Object.defineProperty(this, \"_instanceID\", {\n value: `instance-${Math.random().toString(36).slice(2)}`,\n enumerable: false,\n });\n }\n\n abstract get id(): ID<V>;\n abstract get raw(): RawCoValue;\n abstract get owner(): Group | undefined;\n\n /** @internal */\n get localNode(): LocalNode {\n return this.raw.core.node;\n }\n\n /** @private */\n get loadedAs() {\n const agent = this.localNode.getCurrentAgent();\n\n if (agent instanceof ControlledAccount) {\n return coValuesCache.get(agent.account, () =>\n coValueClassFromCoValueClassOrSchema(\n RegisteredSchemas[\"Account\"],\n ).fromRaw(agent.account),\n );\n }\n\n return new AnonymousJazzAgent(this.localNode);\n }\n\n /**\n * The timestamp of the creation time of the CoValue\n *\n * @category Content\n */\n get createdAt(): number {\n const createdAt = this.raw.core.verified.header.meta?.createdAt;\n\n if (typeof createdAt === \"string\") {\n return new Date(createdAt).getTime();\n }\n\n return this.raw.core.earliestTxMadeAt;\n }\n\n /**\n * The timestamp of the last updated time of the CoValue\n *\n * Returns the creation time if there are no updates.\n *\n * @category Content\n */\n get lastUpdatedAt(): number {\n const value = this.raw.core.latestTxMadeAt;\n\n if (value === 0) {\n return this.createdAt;\n }\n\n return value;\n }\n}\n","export const inspect = Symbol.for(\"nodejs.util.inspect.custom\");\nexport type inspect = typeof inspect;\n","export type JazzToolsSymbol = SchemaInit | ItemsSym | MembersSym;\n\nexport const SchemaInit = \"$SchemaInit$\";\nexport type SchemaInit = typeof SchemaInit;\n\nexport const ItemsSym = \"$items$\";\nexport type ItemsSym = typeof ItemsSym;\n\nexport const MembersSym = \"$members$\";\nexport type MembersSym = typeof MembersSym;\n\nexport const TypeSym = \"$type$\";\nexport type TypeSym = typeof TypeSym;\n","import type { Account, CoMap, Group } from \"../internal.js\";\n\n/**\n * Regisering schemas into this Record to avoid circular dependencies.\n */\nexport const RegisteredSchemas = {} as {\n Account: typeof Account;\n Group: typeof Group;\n CoMap: typeof CoMap;\n};\n","import {\n AgentID,\n type CoValueUniqueness,\n CojsonInternalTypes,\n type JsonValue,\n RawAccountID,\n RawCoID,\n type RawCoMap,\n cojsonInternals,\n} from \"cojson\";\nimport {\n AnonymousJazzAgent,\n CoFieldInit,\n CoValue,\n CoValueClass,\n getCoValueOwner,\n Group,\n ID,\n PartialOnUndefined,\n RefEncoded,\n RefIfCoValue,\n RefsToResolve,\n RefsToResolveStrict,\n Resolved,\n Schema,\n Simplify,\n SubscribeListenerOptions,\n SubscribeRestArgs,\n TypeSym,\n} from \"../internal.js\";\nimport {\n Account,\n CoValueBase,\n CoValueJazzApi,\n ItemsSym,\n Ref,\n RegisteredSchemas,\n SchemaInit,\n accessChildById,\n accessChildByKey,\n activeAccountContext,\n ensureCoValueLoaded,\n inspect,\n instantiateRefEncodedWithInit,\n isRefEncoded,\n loadCoValueWithoutMe,\n makeRefs,\n parseCoValueCreateOptions,\n parseSubscribeRestArgs,\n subscribeToCoValueWithoutMe,\n subscribeToExistingCoValue,\n} from \"../internal.js\";\n\ntype CoMapEdit<V> = {\n value?: V;\n ref?: RefIfCoValue<V>;\n by: Account | null;\n madeAt: Date;\n key?: string;\n};\n\ntype LastAndAllCoMapEdits<V> = CoMapEdit<V> & { all: CoMapEdit<V>[] };\n\ntype CoMapEdits<M extends CoMap> = {\n [Key in CoKeys<M>]?: LastAndAllCoMapEdits<M[Key]>;\n};\n\ntype CoMapFieldSchema = {\n [key: string]: Schema;\n} & { [ItemsSym]?: Schema };\n\n/**\n * CoMaps are collaborative versions of plain objects, mapping string-like keys to values.\n *\n * @categoryDescription Declaration\n * Declare your own CoMap schemas by subclassing `CoMap` and assigning field schemas with `co`.\n *\n * Optional `coField.ref(...)` fields must be marked with `{ optional: true }`.\n *\n * ```ts\n * import { coField, CoMap } from \"jazz-tools\";\n *\n * class Person extends CoMap {\n * name = coField.string;\n * age = coField.number;\n * pet = coField.ref(Animal);\n * car = coField.ref(Car, { optional: true });\n * }\n * ```\n *\n * @categoryDescription Content\n * You can access properties you declare on a `CoMap` (using `co`) as if they were normal properties on a plain object, using dot notation, `Object.keys()`, etc.\n *\n * ```ts\n * person.name;\n * person[\"age\"];\n * person.age = 42;\n * person.pet?.name;\n * Object.keys(person);\n * // => [\"name\", \"age\", \"pet\"]\n * ```\n *\n * @category CoValues\n * */\nexport class CoMap extends CoValueBase implements CoValue {\n /** @category Type Helpers */\n declare [TypeSym]: \"CoMap\";\n static {\n this.prototype[TypeSym] = \"CoMap\";\n }\n\n /**\n * Jazz methods for CoMaps are inside this property.\n *\n * This allows CoMaps to be used as plain objects while still having\n * access to Jazz methods, and also doesn't limit which key names can be\n * used inside CoMaps.\n */\n declare $jazz: CoMapJazzApi<this>;\n\n /** @internal */\n static _schema: CoMapFieldSchema;\n\n /** @internal */\n constructor(options: { fromRaw: RawCoMap } | undefined) {\n super();\n\n const proxy = new Proxy(this, CoMapProxyHandler as ProxyHandler<this>);\n\n if (options) {\n if (\"fromRaw\" in options) {\n Object.defineProperties(this, {\n $jazz: {\n value: new CoMapJazzApi(proxy, () => options.fromRaw),\n enumerable: false,\n },\n });\n } else {\n throw new Error(\"Invalid CoMap constructor arguments\");\n }\n }\n\n return proxy;\n }\n\n /**\n * Create a new CoMap with the given initial values and owner.\n *\n * The owner (a Group or Account) determines access rights to the CoMap.\n *\n * The CoMap will immediately be persisted and synced to connected peers.\n *\n * @example\n * ```ts\n * const person = Person.create({\n * name: \"Alice\",\n * age: 42,\n * pet: cat,\n * }, { owner: friendGroup });\n * ```\n *\n * @category Creation\n *\n * @deprecated Use `co.map(...).create`.\n **/\n static create<M extends CoMap>(\n this: CoValueClass<M>,\n init: Simplify<CoMapInit_DEPRECATED<M>>,\n options?:\n | {\n owner?: Account | Group;\n unique?: CoValueUniqueness[\"uniqueness\"];\n }\n | Account\n | Group,\n ) {\n const instance = new this();\n\n return CoMap._createCoMap(instance, init, options);\n }\n\n /**\n * Return a JSON representation of the `CoMap`\n * @category Content\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n toJSON(_key?: string, processedValues?: ID<CoValue>[]): any {\n const result = {\n $jazz: { id: this.$jazz.id },\n } as Record<string, any>;\n\n for (const key of this.$jazz.raw.keys()) {\n const tKey = key as CoKeys<this>;\n const descriptor = this.$jazz.getDescriptor(tKey);\n\n if (!descriptor) {\n continue;\n }\n\n if (descriptor == \"json\" || \"encoded\" in descriptor) {\n result[key] = this.$jazz.raw.get(key);\n } else if (isRefEncoded(descriptor)) {\n const id = this.$jazz.raw.get(key) as ID<CoValue>;\n\n if (processedValues?.includes(id) || id === this.$jazz.id) {\n result[key] = { _circular: id };\n continue;\n }\n\n const ref = this[tKey];\n\n if (\n ref &&\n typeof ref === \"object\" &&\n \"toJSON\" in ref &&\n typeof ref.toJSON === \"function\"\n ) {\n const jsonedRef = ref.toJSON(tKey, [\n ...(processedValues || []),\n this.$jazz.id,\n ]);\n result[key] = jsonedRef;\n }\n } else {\n result[key] = undefined;\n }\n }\n\n return result;\n }\n\n [inspect]() {\n return this.toJSON();\n }\n\n /**\n * @internal\n */\n static _createCoMap<M extends CoMap>(\n instance: M,\n init: Simplify<CoMapInit_DEPRECATED<M>>,\n options?:\n | {\n owner?: Account | Group;\n unique?: CoValueUniqueness[\"uniqueness\"];\n }\n | Account\n | Group,\n ): M {\n const { owner, uniqueness } = parseCoValueCreateOptions(options);\n\n Object.defineProperties(instance, {\n $jazz: {\n value: new CoMapJazzApi(instance, () => raw),\n enumerable: false,\n },\n });\n\n const raw = CoMap.rawFromInit(instance, init, owner, uniqueness);\n\n return instance;\n }\n\n /**\n * Create a new `RawCoMap` from an initialization object\n * @internal\n */\n static rawFromInit<M extends CoMap, Fields extends object>(\n instance: M,\n init: Simplify<CoMapInit_DEPRECATED<Fields>> | undefined,\n owner: Group,\n uniqueness?: CoValueUniqueness,\n ) {\n const rawOwner = owner.$jazz.raw;\n\n const rawInit = {} as {\n [key in keyof Fields]: JsonValue | undefined;\n };\n\n if (init)\n for (const key of Object.keys(init) as (keyof Fields)[]) {\n const initValue = init[key as keyof typeof init];\n\n const descriptor = instance.$jazz.getDescriptor(key as string);\n\n if (!descriptor) {\n continue;\n }\n\n if (descriptor === \"json\") {\n rawInit[key] = initValue as JsonValue;\n } else if (isRefEncoded(descriptor)) {\n if (initValue != null) {\n let refId = (initValue as unknown as CoValue).$jazz?.id;\n if (!refId) {\n const coValue = instantiateRefEncodedWithInit(\n descriptor,\n initValue,\n owner,\n );\n refId = coValue.$jazz.id;\n }\n rawInit[key] = refId;\n }\n } else if (\"encoded\" in descriptor) {\n rawInit[key] = descriptor.encoded.encode(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n initValue as any,\n );\n }\n }\n\n return rawOwner.createMap(rawInit, null, \"private\", uniqueness);\n }\n\n /**\n * Declare a Record-like CoMap schema, by extending `CoMap.Record(...)` and passing the value schema using `co`. Keys are always `string`.\n *\n * @example\n * ```ts\n * import { coField, CoMap } from \"jazz-tools\";\n *\n * class ColorToFruitMap extends CoMap.Record(\n * coField.ref(Fruit)\n * ) {}\n *\n * // assume we have map: ColorToFruitMap\n * // and strawberry: Fruit\n * map[\"red\"] = strawberry;\n * ```\n *\n * @category Declaration\n */\n static Record<Value>(value: Value) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\n class RecordLikeCoMap extends CoMap {\n [ItemsSym] = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\n interface RecordLikeCoMap extends Record<string, Value> {}\n\n return RecordLikeCoMap;\n }\n\n /**\n * Load a `CoMap` with a given ID, as a given account.\n *\n * `depth` specifies which (if any) fields that reference other CoValues to load as well before resolving.\n * The `DeeplyLoaded` return type guarantees that corresponding referenced CoValues are loaded to the specified depth.\n *\n * You can pass `[]` or `{}` for shallowly loading only this CoMap, or `{ fieldA: depthA, fieldB: depthB }` for recursively loading referenced CoValues.\n *\n * Check out the `load` methods on `CoMap`/`CoList`/`CoFeed`/`Group`/`Account` to see which depth structures are valid to nest.\n *\n * @example\n * ```ts\n * const person = await Person.load(\n * \"co_zdsMhHtfG6VNKt7RqPUPvUtN2Ax\",\n * { pet: {} }\n * );\n * ```\n *\n * @category Subscription & Loading\n *\n * @deprecated Use `co.map(...).load` instead.\n */\n static load<M extends CoMap, const R extends RefsToResolve<M> = true>(\n this: CoValueClass<M>,\n id: ID<M>,\n options?: {\n resolve?: RefsToResolveStrict<M, R>;\n loadAs?: Account | AnonymousJazzAgent;\n skipRetry?: boolean;\n },\n ): Promise<Resolved<M, R> | null> {\n return loadCoValueWithoutMe(this, id, options);\n }\n\n /**\n * Load and subscribe to a `CoMap` with a given ID, as a given account.\n *\n * Automatically also subscribes to updates to all referenced/nested CoValues as soon as they are accessed in the listener.\n *\n * `depth` specifies which (if any) fields that reference other CoValues to load as well before calling `listener` for the first time.\n * The `DeeplyLoaded` return type guarantees that corresponding referenced CoValues are loaded to the specified depth.\n *\n * You can pass `[]` or `{}` for shallowly loading only this CoMap, or `{ fieldA: depthA, fieldB: depthB }` for recursively loading referenced CoValues.\n *\n * Check out the `load` methods on `CoMap`/`CoList`/`CoFeed`/`Group`/`Account` to see which depth structures are valid to nest.\n *\n * Returns an unsubscribe function that you should call when you no longer need updates.\n *\n * Also see the `useCoState` hook to reactively subscribe to a CoValue in a React component.\n *\n * @example\n * ```ts\n * const unsub = Person.subscribe(\n * \"co_zdsMhHtfG6VNKt7RqPUPvUtN2Ax\",\n * { pet: {} },\n * (person) => console.log(person)\n * );\n * ```\n *\n * @category Subscription & Loading\n *\n * @deprecated Use `co.map(...).subscribe` instead.\n */\n static subscribe<M extends CoMap, const R extends RefsToResolve<M> = true>(\n this: CoValueClass<M>,\n id: ID<M>,\n listener: (value: Resolved<M, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<M extends CoMap, const R extends RefsToResolve<M> = true>(\n this: CoValueClass<M>,\n id: ID<M>,\n options: SubscribeListenerOptions<M, R>,\n listener: (value: Resolved<M, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<M extends CoMap, const R extends RefsToResolve<M>>(\n this: CoValueClass<M>,\n id: ID<M>,\n ...args: SubscribeRestArgs<M, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToCoValueWithoutMe<M, R>(this, id, options, listener);\n }\n\n /** @deprecated Use `CoMap.upsertUnique` and `CoMap.loadUnique` instead. */\n static findUnique<M extends CoMap>(\n this: CoValueClass<M>,\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: ID<Account> | ID<Group>,\n as?: Account | Group | AnonymousJazzAgent,\n ) {\n return CoMap._findUnique(unique, ownerID, as);\n }\n\n /** @internal */\n static _findUnique<M extends CoMap>(\n this: CoValueClass<M>,\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: ID<Account> | ID<Group>,\n as?: Account | Group | AnonymousJazzAgent,\n ) {\n as ||= activeAccountContext.get();\n\n const header = {\n type: \"comap\" as const,\n ruleset: {\n type: \"ownedByGroup\" as const,\n group: ownerID as RawCoID,\n },\n meta: null,\n uniqueness: unique,\n };\n const crypto =\n as[TypeSym] === \"Anonymous\" ? as.node.crypto : as.$jazz.localNode.crypto;\n return cojsonInternals.idforHeader(header, crypto) as ID<M>;\n }\n\n /**\n * Given some data, updates an existing CoMap or initialises a new one if none exists.\n *\n * Note: This method respects resolve options, and thus can return `null` if the references cannot be resolved.\n *\n * @example\n * ```ts\n * const activeEvent = await Event.upsertUnique(\n * sourceData.identifier,\n * workspace.id,\n * {\n * title: sourceData.title,\n * identifier: sourceData.identifier,\n * external_id: sourceData._id,\n * },\n * workspace\n * );\n * ```\n *\n * @param options The options for creating or loading the CoMap. This includes the intended state of the CoMap, its unique identifier, its owner, and the references to resolve.\n * @returns Either an existing & modified CoMap, or a new initialised CoMap if none exists.\n * @category Subscription & Loading\n *\n * @deprecated Use `co.map(...).upsertUnique` instead.\n */\n static async upsertUnique<\n M extends CoMap,\n const R extends RefsToResolve<M> = true,\n >(\n this: CoValueClass<M>,\n options: {\n value: Simplify<CoMapInit_DEPRECATED<M>>;\n unique: CoValueUniqueness[\"uniqueness\"];\n owner: Account | Group;\n resolve?: RefsToResolveStrict<M, R>;\n },\n ): Promise<Resolved<M, R> | null> {\n const mapId = CoMap._findUnique(\n options.unique,\n options.owner.$jazz.id,\n options.owner.$jazz.loadedAs,\n );\n let map: Resolved<M, R> | null = await loadCoValueWithoutMe(this, mapId, {\n ...options,\n loadAs: options.owner.$jazz.loadedAs,\n skipRetry: true,\n });\n if (!map) {\n const instance = new this();\n map = CoMap._createCoMap(instance, options.value, {\n owner: options.owner,\n unique: options.unique,\n }) as Resolved<M, R>;\n } else {\n (map as M).$jazz.applyDiff(\n options.value as unknown as Partial<CoMapInit<M>>,\n );\n }\n\n return await loadCoValueWithoutMe(this, mapId, {\n ...options,\n loadAs: options.owner.$jazz.loadedAs,\n skipRetry: true,\n });\n }\n\n /**\n * Loads a CoMap by its unique identifier and owner's ID.\n * @param unique The unique identifier of the CoMap to load.\n * @param ownerID The ID of the owner of the CoMap.\n * @param options Additional options for loading the CoMap.\n * @returns The loaded CoMap, or null if unavailable.\n *\n * @deprecated Use `co.map(...).loadUnique` instead.\n */\n static loadUnique<M extends CoMap, const R extends RefsToResolve<M> = true>(\n this: CoValueClass<M>,\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: ID<Account> | ID<Group>,\n options?: {\n resolve?: RefsToResolveStrict<M, R>;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Resolved<M, R> | null> {\n return loadCoValueWithoutMe(\n this,\n CoMap._findUnique(unique, ownerID, options?.loadAs),\n { ...options, skipRetry: true },\n );\n }\n}\n\n/**\n * Contains CoMap Jazz methods that are part of the {@link CoMap.$jazz`} property.\n */\nclass CoMapJazzApi<M extends CoMap> extends CoValueJazzApi<M> {\n constructor(\n private coMap: M,\n private getRaw: () => RawCoMap,\n ) {\n super(coMap);\n }\n\n /**\n * The ID of this `CoMap`\n * @category Content\n */\n get id(): ID<M> {\n return this.raw.id;\n }\n\n get owner(): Group {\n return getCoValueOwner(this.coMap);\n }\n\n /**\n * Check if a key is defined in the CoMap.\n *\n * This check does not load the referenced value or validate permissions.\n *\n * @param key The key to check\n * @returns True if the key is defined, false otherwise\n * @category Content\n */\n has(key: CoKeys<M>): boolean {\n const entry = this.raw.getRaw(key);\n return entry?.change !== undefined && entry.change.op !== \"del\";\n }\n\n /**\n * Set a value on the CoMap\n *\n * @param key The key to set\n * @param value The value to set\n *\n * @category Content\n */\n set<K extends CoKeys<M>>(key: K, value: CoFieldInit<M[K]>): void {\n const descriptor = this.getDescriptor(key as string);\n\n if (!descriptor) {\n throw Error(`Cannot set unknown key ${key}`);\n }\n\n let refId = (value as CoValue)?.$jazz?.id;\n if (descriptor === \"json\") {\n this.raw.set(key, value as JsonValue | undefined);\n } else if (\"encoded\" in descriptor) {\n this.raw.set(key, descriptor.encoded.encode(value));\n } else if (isRefEncoded(descriptor)) {\n if (value === undefined) {\n if (!descriptor.optional) {\n throw Error(`Cannot set required reference ${key} to undefined`);\n }\n this.raw.set(key, null);\n } else {\n if (!refId) {\n const coValue = instantiateRefEncodedWithInit(\n descriptor,\n value,\n this.owner,\n );\n refId = coValue.$jazz.id;\n }\n this.raw.set(key, refId);\n }\n }\n }\n\n /**\n * Delete a value from a CoMap.\n *\n * For record-like CoMaps (created with `co.record`), any string key can be deleted.\n * For struct-like CoMaps (created with `co.map`), only optional properties can be deleted.\n *\n * @param key The key to delete\n *\n * @category Content\n */\n delete(\n key: OptionalCoKeys<M> | (string extends keyof M ? string : never),\n ): void {\n this.raw.delete(key);\n }\n\n /**\n * Modify the `CoMap` to match another map.\n *\n * The new values are assigned to the CoMap, overwriting existing values\n * when the property already exists.\n *\n * @param newValues - The new values to apply to the CoMap. For collaborative values,\n * both CoValues and JSON values are supported.\n * @returns The modified CoMap.\n *\n * @category Content\n */\n applyDiff(newValues: Partial<CoMapInit<M>>): M {\n for (const key in newValues) {\n if (Object.prototype.hasOwnProperty.call(newValues, key)) {\n const tKey = key as keyof typeof newValues & keyof this;\n const descriptor = this.getDescriptor(key);\n\n if (!descriptor) continue;\n\n const newValue = newValues[tKey];\n const currentValue = this.coMap[tKey];\n\n if (descriptor === \"json\" || \"encoded\" in descriptor) {\n if (currentValue !== newValue) {\n this.set(tKey as any, newValue as CoFieldInit<M[keyof M]>);\n }\n } else if (isRefEncoded(descriptor)) {\n const currentId = (currentValue as CoValue | undefined)?.$jazz.id;\n let newId = (newValue as CoValue | undefined)?.$jazz?.id;\n if (currentId !== newId) {\n this.set(tKey as any, newValue as CoFieldInit<M[keyof M]>);\n }\n }\n }\n }\n return this.coMap;\n }\n\n /**\n * Given an already loaded `CoMap`, ensure that the specified fields are loaded to the specified depth.\n *\n * Works like `CoMap.load()`, but you don't need to pass the ID or the account to load as again.\n *\n * @category Subscription & Loading\n */\n ensureLoaded<Map extends CoMap, const R extends RefsToResolve<Map>>(\n this: CoMapJazzApi<Map>,\n options: {\n resolve: RefsToResolveStrict<Map, R>;\n },\n ): Promise<Resolved<Map, R>> {\n return ensureCoValueLoaded(this.coMap, options);\n }\n\n /**\n * Given an already loaded `CoMap`, subscribe to updates to the `CoMap` and ensure that the specified fields are loaded to the specified depth.\n *\n * Works like `CoMap.subscribe()`, but you don't need to pass the ID or the account to load as again.\n *\n * Returns an unsubscribe function that you should call when you no longer need updates.\n *\n * @category Subscription & Loading\n **/\n subscribe<Map extends CoMap, const R extends RefsToResolve<Map> = true>(\n this: CoMapJazzApi<Map>,\n listener: (value: Resolved<Map, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<Map extends CoMap, const R extends RefsToResolve<Map> = true>(\n this: CoMapJazzApi<Map>,\n options: { resolve?: RefsToResolveStrict<Map, R> },\n listener: (value: Resolved<Map, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<Map extends CoMap, const R extends RefsToResolve<Map>>(\n this: CoMapJazzApi<Map>,\n ...args: SubscribeRestArgs<Map, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToExistingCoValue(this.coMap, options, listener);\n }\n\n /**\n * Wait for the `CoMap` to be uploaded to the other peers.\n *\n * @category Subscription & Loading\n */\n async waitForSync(options?: { timeout?: number }): Promise<void> {\n await this.raw.core.waitForSync(options);\n }\n\n /**\n * Get the descriptor for a given key\n * @internal\n */\n getDescriptor(key: string): Schema | undefined {\n return this.schema?.[key] || this.schema?.[ItemsSym];\n }\n\n /**\n * If property `prop` is a `coField.ref(...)`, you can use `coMap.$jazz.refs.prop` to access\n * the `Ref` instead of the potentially loaded/null value.\n *\n * This allows you to always get the ID or load the value manually.\n *\n * @example\n * ```ts\n * person.$jazz.refs.pet.id; // => ID<Animal>\n * person.$jazz.refs.pet.value;\n * // => Animal | null\n * const pet = await person.$jazz.refs.pet.load();\n * ```\n *\n * @category Content\n **/\n get refs(): Simplify<\n {\n [Key in CoKeys<M> as NonNullable<M[Key]> extends CoValue\n ? Key\n : never]?: RefIfCoValue<M[Key]>;\n } & {\n [Key in CoKeys<M> as M[Key] extends undefined\n ? never\n : M[Key] extends CoValue\n ? Key\n : never]: RefIfCoValue<M[Key]>;\n }\n > {\n return makeRefs<CoKeys<this>>(\n this.coMap,\n (key) => this.raw.get(key as string) as unknown as ID<CoValue>,\n () => {\n const keys = this.raw.keys().filter((key) => {\n const descriptor = this.getDescriptor(key as string);\n return (\n descriptor && descriptor !== \"json\" && isRefEncoded(descriptor)\n );\n }) as CoKeys<this>[];\n\n return keys;\n },\n this.loadedAs,\n (key) => this.getDescriptor(key as string) as RefEncoded<CoValue>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) as any;\n }\n\n /**\n * Get the edits made to the CoMap.\n *\n * @category Collaboration\n */\n getEdits(): CoMapEdits<M> {\n const map = this.coMap;\n return new Proxy(\n {},\n {\n get(_target, key) {\n const rawEdit = map.$jazz.raw.lastEditAt(key as string);\n if (!rawEdit) return undefined;\n\n const descriptor = map.$jazz.getDescriptor(key as string);\n\n if (!descriptor) return undefined;\n\n return {\n ...getEditFromRaw(map, rawEdit, descriptor, key as string),\n get all() {\n return [...map.$jazz.raw.editsAt(key as string)].map((rawEdit) =>\n getEditFromRaw(map, rawEdit, descriptor, key as string),\n );\n },\n };\n },\n ownKeys(_target) {\n return map.$jazz.raw.keys();\n },\n getOwnPropertyDescriptor(target, key) {\n return {\n value: Reflect.get(target, key),\n writable: false,\n enumerable: true,\n configurable: true,\n };\n },\n },\n );\n }\n\n /** @internal */\n override get raw() {\n return this.getRaw();\n }\n\n /** @internal */\n get schema(): CoMapFieldSchema {\n return (this.coMap.constructor as typeof CoMap)._schema;\n }\n}\n\nexport type CoKeys<Map extends object> = Exclude<\n keyof Map & string,\n keyof CoMap\n>;\n\n/**\n * Extract keys of properties that are required\n */\nexport type RequiredCoKeys<Map extends object> = {\n [K in CoKeys<Map>]: undefined extends Map[K] ? never : K;\n}[CoKeys<Map>];\n\n/**\n * Extract keys of properties that can be undefined\n */\nexport type OptionalCoKeys<Map extends object> = {\n [K in CoKeys<Map>]: undefined extends Map[K] ? K : never;\n}[CoKeys<Map>];\n\n/**\n * Force required ref fields to be non nullable\n *\n * Considering that:\n * - Optional refs are typed as coField<InstanceType<CoValueClass> | null | undefined>\n * - Required refs are typed as coField<InstanceType<CoValueClass> | null>\n *\n * This type works in two steps:\n * - Remove the null from both types\n * - Then we check if the input type accepts undefined, if positive we put the null union back\n *\n * So the optional refs stays unchanged while we safely remove the null union\n * from required refs\n *\n * This way required refs can be marked as required in the CoMapInit while\n * staying a nullable property for value access.\n *\n * Example:\n *\n * const map = MyCoMap.create({\n * requiredRef: NestedMap.create({}) // null is not valid here\n * })\n *\n * map.requiredRef // this value is still nullable\n */\ntype ForceRequiredRef<V> = V extends InstanceType<CoValueClass> | null\n ? NonNullable<V>\n : V extends InstanceType<CoValueClass> | undefined\n ? V | null\n : V;\n\nexport type CoMapInit_DEPRECATED<Map extends object> = PartialOnUndefined<{\n [Key in CoKeys<Map>]: ForceRequiredRef<Map[Key]>;\n}>;\n\nexport type CoMapInit<Map extends object> = {\n [K in RequiredCoKeys<Map>]: CoFieldInit<Map[K]>;\n} & {\n [K in OptionalCoKeys<Map>]?: CoFieldInit<Map[K]> | undefined;\n};\n\n// TODO: cache handlers per descriptor for performance?\nconst CoMapProxyHandler: ProxyHandler<CoMap> = {\n get(target, key, receiver) {\n if (key === \"_schema\") {\n return Reflect.get(target, key);\n } else if (key in target) {\n return Reflect.get(target, key, receiver);\n } else {\n if (typeof key !== \"string\") {\n return undefined;\n }\n\n const descriptor = target.$jazz.getDescriptor(key as string);\n\n if (!descriptor) {\n return undefined;\n }\n\n const raw = target.$jazz.raw.get(key);\n\n if (descriptor === \"json\") {\n return raw;\n } else if (\"encoded\" in descriptor) {\n return raw === undefined ? undefined : descriptor.encoded.decode(raw);\n } else if (isRefEncoded(descriptor)) {\n return raw === undefined || raw === null\n ? undefined\n : accessChildByKey(target, raw as string, key);\n }\n }\n },\n set(target, key, value, receiver) {\n if (\n typeof key === \"string\" &&\n typeof value === \"object\" &&\n value !== null &&\n SchemaInit in value\n ) {\n (target.constructor as typeof CoMap)._schema ||= {};\n (target.constructor as typeof CoMap)._schema[key] = value[SchemaInit];\n return true;\n }\n\n const descriptor = target.$jazz.getDescriptor(key as string);\n\n if (!descriptor) return false;\n\n if (typeof key === \"string\") {\n throw Error(\"Cannot update a CoMap directly. Use `$jazz.set` instead.\");\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n },\n defineProperty(target, key, attributes) {\n if (\n \"value\" in attributes &&\n typeof attributes.value === \"object\" &&\n SchemaInit in attributes.value\n ) {\n (target.constructor as typeof CoMap)._schema ||= {};\n (target.constructor as typeof CoMap)._schema[key as string] =\n attributes.value[SchemaInit];\n return true;\n } else {\n return Reflect.defineProperty(target, key, attributes);\n }\n },\n ownKeys(target) {\n const keys = Reflect.ownKeys(target).filter((k) => k !== ItemsSym);\n\n for (const key of target.$jazz.raw.keys()) {\n if (!keys.includes(key)) {\n keys.push(key);\n }\n }\n\n return keys;\n },\n getOwnPropertyDescriptor(target, key) {\n if (key in target) {\n return Reflect.getOwnPropertyDescriptor(target, key);\n } else {\n const descriptor = target.$jazz.getDescriptor(key as string);\n\n if (descriptor || key in target.$jazz.raw.latest) {\n return {\n enumerable: true,\n configurable: true,\n writable: true,\n };\n }\n }\n },\n has(target, key) {\n // The `has` trap can be called when defining properties during CoMap creation\n // when using the class-based syntax. In that case, $jazz may not yet be initialized,\n // as it's defined afterwards in the create method.\n const descriptor = target.$jazz?.getDescriptor(key as string);\n\n if (target.$jazz?.raw && typeof key === \"string\" && descriptor) {\n return target.$jazz.raw.get(key) !== undefined;\n } else {\n return Reflect.has(target, key);\n }\n },\n deleteProperty(target, key) {\n const descriptor = target.$jazz.getDescriptor(key as string);\n\n if (typeof key === \"string\" && descriptor) {\n throw Error(\n \"Cannot delete a CoMap property directly. Use `$jazz.delete` instead.\",\n );\n } else {\n return Reflect.deleteProperty(target, key);\n }\n },\n};\n\nRegisteredSchemas[\"CoMap\"] = CoMap;\n\n/** @internal */\nfunction getEditFromRaw(\n target: CoMap,\n rawEdit: {\n by: RawAccountID | AgentID;\n tx: CojsonInternalTypes.TransactionID;\n at: Date;\n value?: JsonValue | undefined;\n },\n descriptor: Schema,\n key: string,\n) {\n return {\n value:\n descriptor === \"json\"\n ? rawEdit.value\n : \"encoded\" in descriptor\n ? rawEdit.value === null || rawEdit.value === undefined\n ? rawEdit.value\n : descriptor.encoded.decode(rawEdit.value)\n : accessChildById(target, rawEdit.value as string, descriptor),\n ref:\n descriptor !== \"json\" && isRefEncoded(descriptor)\n ? new Ref(\n rawEdit.value as ID<CoValue>,\n target.$jazz.loadedAs,\n descriptor,\n target,\n )\n : undefined,\n get by() {\n return (\n rawEdit.by &&\n accessChildById(target, rawEdit.by, {\n ref: Account,\n optional: false,\n })\n );\n },\n madeAt: rawEdit.at,\n key,\n };\n}\n","import type { CoValueUniqueness, JsonValue, RawCoID, RawCoList } from \"cojson\";\nimport { cojsonInternals } from \"cojson\";\nimport { calcPatch } from \"fast-myers-diff\";\nimport {\n Account,\n CoFieldInit,\n CoValue,\n CoValueClass,\n CoValueJazzApi,\n getCoValueOwner,\n Group,\n ID,\n RefEncoded,\n RefsToResolve,\n RefsToResolveStrict,\n Resolved,\n Schema,\n SchemaFor,\n SubscribeListenerOptions,\n SubscribeRestArgs,\n TypeSym,\n} from \"../internal.js\";\nimport {\n AnonymousJazzAgent,\n ItemsSym,\n Ref,\n SchemaInit,\n accessChildByKey,\n activeAccountContext,\n coField,\n ensureCoValueLoaded,\n inspect,\n instantiateRefEncodedWithInit,\n isRefEncoded,\n loadCoValueWithoutMe,\n makeRefs,\n parseCoValueCreateOptions,\n parseSubscribeRestArgs,\n subscribeToCoValueWithoutMe,\n subscribeToExistingCoValue,\n} from \"../internal.js\";\n\n/**\n * CoLists are collaborative versions of plain arrays.\n *\n * @categoryDescription Content\n * You can access items on a `CoList` as if they were normal items on a plain array, using `[]` notation, etc.\n *\n * All readonly array methods are available on `CoList`. You can also use the `.$jazz` API to mutate the CoList.\n *\n * ```ts\n * const colorList = ColorList.create([\"red\", \"green\", \"blue\"]);\n * ```\n *\n * ```ts\n * colorList[0];\n * colorList.$jazz.set(3, \"yellow\");\n * colorList.$jazz.push(\"Kawazaki Green\");\n * colorList.$jazz.splice(1, 1);\n * ```\n *\n * @category CoValues\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class CoList<out Item = any>\n extends Array<Item>\n implements ReadonlyArray<Item>, CoValue\n{\n declare $jazz: CoListJazzApi<this>;\n\n /**\n * Declare a `CoList` by subclassing `CoList.Of(...)` and passing the item schema using `co`.\n *\n * @example\n * ```ts\n * class ColorList extends CoList.Of(\n * coField.string\n * ) {}\n * class AnimalList extends CoList.Of(\n * coField.ref(Animal)\n * ) {}\n * ```\n *\n * @category Declaration\n */\n static Of<Item>(item: Item): typeof CoList<Item> {\n // TODO: cache superclass for item class\n return class CoListOf extends CoList<Item> {\n [coField.items] = item;\n };\n }\n\n /**\n * @ignore\n * @deprecated Use UPPERCASE `CoList.Of` instead! */\n static of(..._args: never): never {\n throw new Error(\"Can't use Array.of with CoLists\");\n }\n\n /** @category Type Helpers */\n declare [TypeSym]: \"CoList\";\n static {\n this.prototype[TypeSym] = \"CoList\";\n }\n\n /** @internal This is only a marker type and doesn't exist at runtime */\n [ItemsSym]!: Item;\n /** @internal */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static _schema: any;\n\n static get [Symbol.species]() {\n return Array;\n }\n\n constructor(options: { fromRaw: RawCoList } | undefined) {\n super();\n\n const proxy = new Proxy(this, CoListProxyHandler as ProxyHandler<this>);\n\n if (options && \"fromRaw\" in options) {\n Object.defineProperties(this, {\n $jazz: {\n value: new CoListJazzApi(proxy, () => options.fromRaw),\n enumerable: false,\n },\n });\n }\n\n return proxy;\n }\n\n /**\n * Create a new CoList with the given initial values and owner.\n *\n * The owner (a Group or Account) determines access rights to the CoMap.\n *\n * The CoList will immediately be persisted and synced to connected peers.\n *\n * @example\n * ```ts\n * const colours = ColorList.create(\n * [\"red\", \"green\", \"blue\"],\n * { owner: me }\n * );\n * const animals = AnimalList.create(\n * [cat, dog, fish],\n * { owner: me }\n * );\n * ```\n *\n * @category Creation\n * @deprecated Use `co.list(...).create` instead.\n **/\n static create<L extends CoList>(\n this: CoValueClass<L>,\n items: L[number][],\n options?:\n | {\n owner: Account | Group;\n unique?: CoValueUniqueness[\"uniqueness\"];\n }\n | Account\n | Group,\n ) {\n const { owner, uniqueness } = parseCoValueCreateOptions(options);\n const instance = new this();\n\n Object.defineProperties(instance, {\n $jazz: {\n value: new CoListJazzApi(instance, () => raw),\n enumerable: false,\n },\n });\n\n const raw = owner.$jazz.raw.createList(\n toRawItems(items, instance.$jazz.schema[ItemsSym], owner),\n null,\n \"private\",\n uniqueness,\n );\n\n return instance;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n toJSON(_key?: string, seenAbove?: ID<CoValue>[]): any[] {\n const itemDescriptor = this.$jazz.schema[ItemsSym] as Schema;\n if (itemDescriptor === \"json\") {\n return this.$jazz.raw.asArray();\n } else if (\"encoded\" in itemDescriptor) {\n return this.$jazz.raw\n .asArray()\n .map((e) => itemDescriptor.encoded.encode(e));\n } else if (isRefEncoded(itemDescriptor)) {\n return this.map((item, idx) =>\n seenAbove?.includes((item as CoValue)?.$jazz.id)\n ? { _circular: (item as CoValue).$jazz.id }\n : (item as unknown as CoValue)?.toJSON(idx + \"\", [\n ...(seenAbove || []),\n this.$jazz.id,\n ]),\n );\n } else {\n return [];\n }\n }\n\n [inspect]() {\n return this.toJSON();\n }\n\n /** @category Internals */\n static fromRaw<V extends CoList>(\n this: CoValueClass<V> & typeof CoList,\n raw: RawCoList,\n ) {\n return new this({ fromRaw: raw });\n }\n\n /** @internal */\n static schema<V extends CoList>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: { new (...args: any): V } & typeof CoList,\n def: { [ItemsSym]: V[\"$jazz\"][\"schema\"][ItemsSym] },\n ) {\n this._schema ||= {};\n Object.assign(this._schema, def);\n }\n\n /**\n * Load a `CoList` with a given ID, as a given account.\n *\n * `depth` specifies if item CoValue references should be loaded as well before resolving.\n * The `DeeplyLoaded` return type guarantees that corresponding referenced CoValues are loaded to the specified depth.\n *\n * You can pass `[]` or for shallowly loading only this CoList, or `[itemDepth]` for recursively loading referenced CoValues.\n *\n * Check out the `load` methods on `CoMap`/`CoList`/`CoFeed`/`Group`/`Account` to see which depth structures are valid to nest.\n *\n * @example\n * ```ts\n * const animalsWithVets =\n * await ListOfAnimals.load(\n * \"co_zdsMhHtfG6VNKt7RqPUPvUtN2Ax\",\n * me,\n * [{ vet: {} }]\n * );\n * ```\n *\n * @category Subscription & Loading\n * @deprecated Use `co.list(...).load` instead.\n */\n static load<L extends CoList, const R extends RefsToResolve<L> = true>(\n this: CoValueClass<L>,\n id: ID<L>,\n options?: {\n resolve?: RefsToResolveStrict<L, R>;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Resolved<L, R> | null> {\n return loadCoValueWithoutMe(this, id, options);\n }\n\n /**\n * Load and subscribe to a `CoList` with a given ID, as a given account.\n *\n * Automatically also subscribes to updates to all referenced/nested CoValues as soon as they are accessed in the listener.\n *\n * `depth` specifies if item CoValue references should be loaded as well before calling `listener` for the first time.\n * The `DeeplyLoaded` return type guarantees that corresponding referenced CoValues are loaded to the specified depth.\n *\n * You can pass `[]` or for shallowly loading only this CoList, or `[itemDepth]` for recursively loading referenced CoValues.\n *\n * Check out the `load` methods on `CoMap`/`CoList`/`CoFeed`/`Group`/`Account` to see which depth structures are valid to nest.\n *\n * Returns an unsubscribe function that you should call when you no longer need updates.\n *\n * Also see the `useCoState` hook to reactively subscribe to a CoValue in a React component.\n *\n * @example\n * ```ts\n * const unsub = ListOfAnimals.subscribe(\n * \"co_zdsMhHtfG6VNKt7RqPUPvUtN2Ax\",\n * me,\n * { vet: {} },\n * (animalsWithVets) => console.log(animalsWithVets)\n * );\n * ```\n *\n * @category Subscription & Loading\n * @deprecated Use `co.list(...).subscribe` instead.\n */\n static subscribe<L extends CoList, const R extends RefsToResolve<L> = true>(\n this: CoValueClass<L>,\n id: ID<L>,\n listener: (value: Resolved<L, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<L extends CoList, const R extends RefsToResolve<L> = true>(\n this: CoValueClass<L>,\n id: ID<L>,\n options: SubscribeListenerOptions<L, R>,\n listener: (value: Resolved<L, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<L extends CoList, const R extends RefsToResolve<L>>(\n this: CoValueClass<L>,\n id: ID<L>,\n ...args: SubscribeRestArgs<L, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToCoValueWithoutMe<L, R>(this, id, options, listener);\n }\n\n /** @deprecated Use `CoList.upsertUnique` and `CoList.loadUnique` instead. */\n static findUnique<L extends CoList>(\n this: CoValueClass<L>,\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: ID<Account> | ID<Group>,\n as?: Account | Group | AnonymousJazzAgent,\n ) {\n return CoList._findUnique(unique, ownerID, as);\n }\n\n /** @internal */\n static _findUnique<L extends CoList>(\n this: CoValueClass<L>,\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: ID<Account> | ID<Group>,\n as?: Account | Group | AnonymousJazzAgent,\n ) {\n as ||= activeAccountContext.get();\n\n const header = {\n type: \"colist\" as const,\n ruleset: {\n type: \"ownedByGroup\" as const,\n group: ownerID as RawCoID,\n },\n meta: null,\n uniqueness: unique,\n };\n const crypto =\n as[TypeSym] === \"Anonymous\" ? as.node.crypto : as.$jazz.localNode.crypto;\n return cojsonInternals.idforHeader(header, crypto) as ID<L>;\n }\n\n /**\n * Given some data, updates an existing CoList or initialises a new one if none exists.\n *\n * Note: This method respects resolve options, and thus can return `null` if the references cannot be resolved.\n *\n * @example\n * ```ts\n * const activeItems = await ItemList.upsertUnique(\n * {\n * value: [item1, item2, item3],\n * unique: sourceData.identifier,\n * owner: workspace,\n * }\n * );\n * ```\n *\n * @param options The options for creating or loading the CoList. This includes the intended state of the CoList, its unique identifier, its owner, and the references to resolve.\n * @returns Either an existing & modified CoList, or a new initialised CoList if none exists.\n * @category Subscription & Loading\n */\n static async upsertUnique<\n L extends CoList,\n const R extends RefsToResolve<L> = true,\n >(\n this: CoValueClass<L>,\n options: {\n value: L[number][];\n unique: CoValueUniqueness[\"uniqueness\"];\n owner: Account | Group;\n resolve?: RefsToResolveStrict<L, R>;\n },\n ): Promise<Resolved<L, R> | null> {\n const listId = CoList._findUnique(\n options.unique,\n options.owner.$jazz.id,\n options.owner.$jazz.loadedAs,\n );\n let list: Resolved<L, R> | null = await loadCoValueWithoutMe(this, listId, {\n ...options,\n loadAs: options.owner.$jazz.loadedAs,\n skipRetry: true,\n });\n if (!list) {\n list = (this as any).create(options.value, {\n owner: options.owner,\n unique: options.unique,\n }) as Resolved<L, R>;\n } else {\n (list as L).$jazz.applyDiff(options.value);\n }\n\n return await loadCoValueWithoutMe(this, listId, {\n ...options,\n loadAs: options.owner.$jazz.loadedAs,\n skipRetry: true,\n });\n }\n\n /**\n * Loads a CoList by its unique identifier and owner's ID.\n * @param unique The unique identifier of the CoList to load.\n * @param ownerID The ID of the owner of the CoList.\n * @param options Additional options for loading the CoList.\n * @returns The loaded CoList, or null if unavailable.\n */\n static loadUnique<L extends CoList, const R extends RefsToResolve<L> = true>(\n this: CoValueClass<L>,\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: ID<Account> | ID<Group>,\n options?: {\n resolve?: RefsToResolveStrict<L, R>;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Resolved<L, R> | null> {\n return loadCoValueWithoutMe(\n this,\n CoList._findUnique(unique, ownerID, options?.loadAs),\n { ...options, skipRetry: true },\n );\n }\n\n // Override mutation methods defined on Array, as CoLists aren't meant to be mutated directly\n /**\n * @deprecated Use `.$jazz.push` instead.\n */\n override push(...items: never): never {\n throw new Error(\n \"Cannot mutate a CoList directly. Use `.$jazz.push` instead.\",\n );\n }\n /**\n * @deprecated Use `.$jazz.unshift` instead.\n */\n override unshift(...items: never): number {\n throw new Error(\n \"Cannot mutate a CoList directly. Use `.$jazz.unshift` instead.\",\n );\n }\n /**\n * @deprecated Use `.$jazz.pop` instead.\n */\n // @ts-expect-error\n override pop(value: never): never {\n throw new Error(\n \"Cannot mutate a CoList directly. Use `.$jazz.pop` instead.\",\n );\n }\n /**\n * @deprecated Use `.$jazz.shift` instead.\n */\n // @ts-expect-error\n override shift(value: never): never {\n throw new Error(\n \"Cannot mutate a CoList directly. Use `.$jazz.shift` instead.\",\n );\n }\n /**\n * @deprecated Use `.$jazz.splice` instead.\n */\n override splice(start: never, deleteCount: never, ...items: never): never {\n throw new Error(\n \"Cannot mutate a CoList directly. Use `.$jazz.splice` instead.\",\n );\n }\n /**\n * @deprecated Use `.$jazz.set` instead.\n */\n override copyWithin(target: never, start: never, end: never): never {\n throw new Error(\n \"Cannot mutate a CoList directly. Use `.$jazz.set` instead.\",\n );\n }\n /**\n * @deprecated Use `.$jazz.set` instead.\n */\n override fill(value: never, start?: never, end?: never): never {\n throw new Error(\n \"Cannot mutate a CoList directly. Use `.$jazz.set` instead.\",\n );\n }\n /**\n * @deprecated Use `.toReversed` if you want a reversed copy, or `.$jazz.set` to mutate the CoList.\n */\n // @ts-expect-error\n override reverse(value: never): never {\n throw new Error(\n \"Cannot mutate a CoList directly. Use `.toReversed` if you want a reversed copy, or `.$jazz.set` to mutate the CoList.\",\n );\n }\n /**\n * @deprecated Use `.toSorted()` if you want a sorted copy, or `.$jazz.set` to mutate the CoList.\n */\n override sort(compareFn?: never): never {\n throw new Error(\n \"Cannot mutate a CoList directly. Use `.toSorted` if you want a sorted copy, or `.$jazz.set` to mutate the CoList.\",\n );\n }\n}\n\n/** @internal */\ntype CoListItem<L> = L extends CoList<unknown> ? L[number] : never;\n\nexport class CoListJazzApi<L extends CoList> extends CoValueJazzApi<L> {\n constructor(\n private coList: L,\n private getRaw: () => RawCoList,\n ) {\n super(coList);\n }\n\n /**\n * The ID of this `CoList`\n * @category Content\n */\n get id(): ID<L> {\n return this.raw.id;\n }\n\n /** @category Collaboration */\n get owner(): Group {\n return getCoValueOwner(this.coList);\n }\n\n set(index: number, value: CoFieldInit<CoListItem<L>>): void {\n const itemDescriptor = this.schema[ItemsSym];\n const rawValue = toRawItems([value], itemDescriptor, this.owner)[0]!;\n if (rawValue === null && !itemDescriptor.optional) {\n throw new Error(`Cannot set required reference ${index} to undefined`);\n }\n this.raw.replace(index, rawValue);\n }\n\n /**\n * Appends new elements to the end of an array, and returns the new length of the array.\n * @param items New elements to add to the array.\n *\n * @category Content\n */\n push(...items: CoFieldInit<CoListItem<L>>[]): number {\n this.raw.appendItems(\n toRawItems(items, this.schema[ItemsSym], this.owner),\n undefined,\n \"private\",\n );\n\n return this.raw.entries().length;\n }\n\n /**\n * Inserts new elements at the start of an array, and returns the new length of the array.\n * @param items Elements to insert at the start of the array.\n *\n * @category Content\n */\n unshift(...items: CoFieldInit<CoListItem<L>>[]): number {\n for (const item of toRawItems(\n items as CoFieldInit<CoListItem<L>>[],\n this.schema[ItemsSym],\n this.owner,\n )) {\n this.raw.prepend(item);\n }\n\n return this.raw.entries().length;\n }\n\n /**\n * Removes the last element from an array and returns it.\n * If the array is empty, undefined is returned and the array is not modified.\n *\n * @category Content\n */\n pop(): CoListItem<L> | undefined {\n const last = this.coList[this.coList.length - 1];\n\n this.raw.delete(this.coList.length - 1);\n\n return last;\n }\n\n /**\n * Removes the first element from an array and returns it.\n * If the array is empty, undefined is returned and the array is not modified.\n *\n * @category Content\n */\n shift(): CoListItem<L> | undefined {\n const first = this.coList[0];\n\n this.raw.delete(0);\n\n return first;\n }\n\n /**\n * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.\n * @param start The zero-based location in the array from which to start removing elements.\n * @param deleteCount The number of elements to remove.\n * @param items Elements to insert into the array in place of the deleted elements.\n * @returns An array containing the elements that were deleted.\n *\n * @category Content\n */\n splice(\n start: number,\n deleteCount: number,\n ...items: CoFieldInit<CoListItem<L>>[]\n ): CoListItem<L>[] {\n const deleted = this.coList.slice(start, start + deleteCount);\n\n for (\n let idxToDelete = start + deleteCount - 1;\n idxToDelete >= start;\n idxToDelete--\n ) {\n this.raw.delete(idxToDelete);\n }\n\n const rawItems = toRawItems(\n items as CoListItem<L>[],\n this.schema[ItemsSym],\n this.owner,\n );\n\n // If there are no items to insert, return the deleted items\n if (rawItems.length === 0) {\n return deleted;\n }\n\n // Fast path for single item insertion\n if (rawItems.length === 1) {\n const item = rawItems[0];\n if (item === undefined) return deleted;\n if (start === 0) {\n this.raw.prepend(item);\n } else {\n this.raw.append(item, Math.max(start - 1, 0));\n }\n return deleted;\n }\n\n // Handle multiple items\n if (start === 0) {\n // Iterate in reverse order without creating a new array\n for (let i = rawItems.length - 1; i >= 0; i--) {\n const item = rawItems[i];\n if (item === undefined) continue;\n this.raw.prepend(item);\n }\n } else {\n let appendAfter = Math.max(start - 1, 0);\n for (const item of rawItems) {\n if (item === undefined) continue;\n this.raw.append(item, appendAfter);\n appendAfter++;\n }\n }\n\n return deleted;\n }\n\n /**\n * Removes the elements at the specified indices from the array.\n * @param indices The indices of the elements to remove.\n * @returns The removed elements.\n *\n * @category Content\n */\n remove(...indices: number[]): CoListItem<L>[];\n /**\n * Removes the elements matching the predicate from the array.\n * @param predicate The predicate to match the elements to remove.\n * @returns The removed elements.\n *\n * @category Content\n */\n remove(\n predicate: (item: CoListItem<L>, index: number, coList: L) => boolean,\n ): CoListItem<L>[];\n remove(\n ...args: (\n | number\n | ((item: CoListItem<L>, index: number, coList: L) => boolean)\n )[]\n ): CoListItem<L>[] {\n const predicate = args[0] instanceof Function ? args[0] : undefined;\n let indices: number[] = [];\n if (predicate) {\n for (let i = 0; i < this.coList.length; i++) {\n if (predicate(this.coList[i], i, this.coList)) {\n indices.push(i);\n }\n }\n } else {\n indices = (args as number[])\n .filter((index) => index >= 0 && index < this.coList.length)\n .sort((a, b) => a - b);\n }\n const deletedItems = indices.map((index) => this.coList[index]);\n for (const index of indices.reverse()) {\n this.raw.delete(index);\n }\n return deletedItems;\n }\n\n /**\n * Retains only the elements matching the predicate from the array.\n * @param predicate The predicate to match the elements to retain.\n * @returns The removed elements.\n *\n * @category Content\n */\n retain(\n predicate: (item: CoListItem<L>, index: number, coList: L) => boolean,\n ): CoListItem<L>[] {\n return this.remove((...args) => !predicate(...args));\n }\n\n /**\n * Modify the `CoList` to match another list, where the changes are managed internally.\n *\n * Changes are detected using `Object.is` for non-collaborative values and `$jazz.id` for collaborative values.\n *\n * @param result - The resolved list of items. For collaborative values, both CoValues and JSON values are supported.\n * @returns The modified CoList.\n *\n * @category Content\n */\n applyDiff(result: CoFieldInit<CoListItem<L>>[]): L {\n const current = this.raw.asArray() as CoFieldInit<CoListItem<L>>[];\n const comparator = isRefEncoded(this.schema[ItemsSym])\n ? (aIdx: number, bIdx: number) => {\n const oldCoValueId = (current[aIdx] as CoValue)?.$jazz?.id;\n const newCoValueId = (result[bIdx] as CoValue)?.$jazz?.id;\n const isSame =\n !!oldCoValueId && !!newCoValueId && oldCoValueId === newCoValueId;\n return isSame;\n }\n : undefined;\n\n const patches = [...calcPatch(current, result, comparator)];\n for (const [from, to, insert] of patches.reverse()) {\n this.splice(from, to - from, ...insert);\n }\n return this.coList;\n }\n\n /**\n * Given an already loaded `CoList`, ensure that items are loaded to the specified depth.\n *\n * Works like `CoList.load()`, but you don't need to pass the ID or the account to load as again.\n *\n * @category Subscription & Loading\n */\n ensureLoaded<L extends CoList, const R extends RefsToResolve<L>>(\n this: CoListJazzApi<L>,\n options: { resolve: RefsToResolveStrict<L, R> },\n ): Promise<Resolved<L, R>> {\n return ensureCoValueLoaded(this.coList, options);\n }\n\n /**\n * Given an already loaded `CoList`, subscribe to updates to the `CoList` and ensure that items are loaded to the specified depth.\n *\n * Works like `CoList.subscribe()`, but you don't need to pass the ID or the account to load as again.\n *\n * Returns an unsubscribe function that you should call when you no longer need updates.\n *\n * @category Subscription & Loading\n **/\n subscribe<L extends CoList, const R extends RefsToResolve<L> = true>(\n this: CoListJazzApi<L>,\n listener: (value: Resolved<L, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<L extends CoList, const R extends RefsToResolve<L> = true>(\n this: CoListJazzApi<L>,\n options: { resolve?: RefsToResolveStrict<L, R> },\n listener: (value: Resolved<L, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<L extends CoList, const R extends RefsToResolve<L>>(\n this: CoListJazzApi<L>,\n ...args: SubscribeRestArgs<L, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToExistingCoValue(this.coList, options, listener);\n }\n\n /**\n * Wait for the `CoList` to be uploaded to the other peers.\n *\n * @category Subscription & Loading\n */\n async waitForSync(options?: { timeout?: number }): Promise<void> {\n await this.raw.core.waitForSync(options);\n }\n\n /**\n * Get the descriptor for the items in the `CoList`\n * @internal\n */\n getItemsDescriptor(): Schema | undefined {\n return this.schema[ItemsSym];\n }\n\n /**\n * If a `CoList`'s items are a `coField.ref(...)`, you can use `coList.$jazz.refs[i]` to access\n * the `Ref` instead of the potentially loaded/null value.\n *\n * This allows you to always get the ID or load the value manually.\n *\n * @example\n * ```ts\n * animals.$jazz.refs[0].id; // => ID<Animal>\n * animals.$jazz.refs[0].value;\n * // => Animal | null\n * const animal = await animals.$jazz.refs[0].load();\n * ```\n *\n * @category Content\n **/\n get refs(): {\n [idx: number]: Exclude<CoListItem<L>, null> extends CoValue\n ? Ref<Exclude<CoListItem<L>, null>>\n : never;\n } & {\n length: number;\n [Symbol.iterator](): IterableIterator<\n Exclude<CoListItem<L>, null> extends CoValue\n ? Ref<Exclude<CoListItem<L>, null>>\n : never\n >;\n } {\n return makeRefs<number>(\n this.coList,\n (idx) => this.raw.get(idx) as unknown as ID<CoValue>,\n () => Array.from({ length: this.raw.entries().length }, (_, idx) => idx),\n this.loadedAs,\n (_idx) => this.schema[ItemsSym] as RefEncoded<CoValue>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) as any;\n }\n\n /**\n * Get the edits made to the CoList.\n *\n * @category Collaboration\n */\n getEdits(): {\n [idx: number]: {\n value?: CoListItem<L>;\n ref?: CoListItem<L> extends CoValue ? Ref<CoListItem<L>> : never;\n by: Account | null;\n madeAt: Date;\n };\n } {\n throw new Error(\"Not implemented\");\n }\n\n /** @internal */\n get raw(): RawCoList {\n return this.getRaw();\n }\n\n /** @internal */\n get schema(): {\n [ItemsSym]: SchemaFor<CoListItem<L>> | any;\n } {\n return (this.coList.constructor as typeof CoList)._schema;\n }\n}\n\n/**\n * Convert an array of items to a raw array of items.\n * @param items - The array of items to convert.\n * @param itemDescriptor - The descriptor of the items.\n * @param owner - The owner of the CoList.\n * @returns The raw array of items.\n */\nfunction toRawItems<Item>(\n items: Item[],\n itemDescriptor: Schema,\n owner: Group,\n): JsonValue[] {\n let rawItems: JsonValue[] = [];\n if (itemDescriptor === \"json\") {\n rawItems = items as JsonValue[];\n } else if (\"encoded\" in itemDescriptor) {\n rawItems = items?.map((e) => itemDescriptor.encoded.encode(e));\n } else if (isRefEncoded(itemDescriptor)) {\n rawItems = items?.map((value) => {\n if (value == null) {\n return null;\n }\n let refId = (value as unknown as CoValue).$jazz?.id;\n if (!refId) {\n const coValue = instantiateRefEncodedWithInit(\n itemDescriptor,\n value,\n owner,\n );\n refId = coValue.$jazz.id;\n }\n return refId;\n });\n } else {\n throw new Error(\"Invalid element descriptor\");\n }\n return rawItems;\n}\n\nconst CoListProxyHandler: ProxyHandler<CoList> = {\n get(target, key, receiver) {\n if (typeof key === \"string\" && !isNaN(+key)) {\n const itemDescriptor = target.$jazz.schema[ItemsSym] as Schema;\n const rawValue = target.$jazz.raw.get(Number(key));\n if (itemDescriptor === \"json\") {\n return rawValue;\n } else if (\"encoded\" in itemDescriptor) {\n return rawValue === undefined\n ? undefined\n : itemDescriptor.encoded.decode(rawValue);\n } else if (isRefEncoded(itemDescriptor)) {\n return rawValue === undefined || rawValue === null\n ? undefined\n : accessChildByKey(target, rawValue as string, key);\n }\n } else if (key === \"length\") {\n return target.$jazz.raw.entries().length;\n } else {\n return Reflect.get(target, key, receiver);\n }\n },\n set(target, key, value, receiver) {\n if (key === ItemsSym && typeof value === \"object\" && SchemaInit in value) {\n (target.constructor as typeof CoList)._schema ||= {};\n (target.constructor as typeof CoList)._schema[ItemsSym] =\n value[SchemaInit];\n return true;\n }\n if (typeof key === \"string\" && !isNaN(+key)) {\n throw Error(\"Cannot update a CoList directly. Use `$jazz.set` instead.\");\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n },\n defineProperty(target, key, descriptor) {\n if (\n descriptor.value &&\n key === ItemsSym &&\n typeof descriptor.value === \"object\" &&\n SchemaInit in descriptor.value\n ) {\n (target.constructor as typeof CoList)._schema ||= {};\n (target.constructor as typeof CoList)._schema[ItemsSym] =\n descriptor.value[SchemaInit];\n return true;\n } else {\n return Reflect.defineProperty(target, key, descriptor);\n }\n },\n has(target, key) {\n if (typeof key === \"string\" && !isNaN(+key)) {\n return Number(key) < target.$jazz.raw.entries().length;\n } else {\n return Reflect.has(target, key);\n }\n },\n ownKeys(target) {\n const keys = Reflect.ownKeys(target);\n // Add numeric indices for all entries in the list\n const indexKeys = target.$jazz.raw.entries().map((_entry, i) => String(i));\n keys.push(...indexKeys);\n return keys;\n },\n getOwnPropertyDescriptor(target, key) {\n if (key === TypeSym) {\n // Make TypeSym non-enumerable so it doesn't show up in Object.keys()\n return {\n enumerable: false,\n configurable: true,\n writable: false,\n value: target[TypeSym],\n };\n } else if (key in target) {\n return Reflect.getOwnPropertyDescriptor(target, key);\n } else if (typeof key === \"string\" && !isNaN(+key)) {\n const index = Number(key);\n if (index >= 0 && index < target.$jazz.raw.entries().length) {\n return {\n enumerable: true,\n configurable: true,\n writable: true,\n };\n }\n } else if (key === \"length\") {\n return {\n enumerable: false,\n configurable: false,\n writable: false,\n };\n }\n },\n};\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport type {\n AgentID,\n BinaryStreamInfo,\n CojsonInternalTypes,\n JsonValue,\n RawAccountID,\n RawBinaryCoStream,\n RawCoStream,\n SessionID,\n} from \"cojson\";\nimport { cojsonInternals } from \"cojson\";\nimport {\n AnonymousJazzAgent,\n CoFieldInit,\n CoValue,\n CoValueClass,\n getCoValueOwner,\n Group,\n ID,\n RefsToResolve,\n RefsToResolveStrict,\n Resolved,\n Schema,\n SchemaFor,\n SubscribeListenerOptions,\n SubscribeRestArgs,\n TypeSym,\n} from \"../internal.js\";\nimport {\n Account,\n CoValueBase,\n CoValueJazzApi,\n ItemsSym,\n Ref,\n SchemaInit,\n accessChildById,\n coField,\n ensureCoValueLoaded,\n inspect,\n instantiateRefEncodedWithInit,\n isRefEncoded,\n loadCoValueWithoutMe,\n parseCoValueCreateOptions,\n parseSubscribeRestArgs,\n subscribeToCoValueWithoutMe,\n subscribeToExistingCoValue,\n} from \"../internal.js\";\n\n/** @deprecated Use CoFeedEntry instead */\nexport type CoStreamEntry<Item> = CoFeedEntry<Item>;\n\nexport type CoFeedEntry<Item> = SingleCoFeedEntry<Item> & {\n all: IterableIterator<SingleCoFeedEntry<Item>>;\n};\n\n/** @deprecated Use SingleCoFeedEntry instead */\nexport type SingleCoStreamEntry<Item> = SingleCoFeedEntry<Item>;\n\nexport type SingleCoFeedEntry<Item> = {\n value: NonNullable<Item> extends CoValue ? NonNullable<Item> | null : Item;\n ref: NonNullable<Item> extends CoValue ? Ref<NonNullable<Item>> : never;\n by: Account | null;\n madeAt: Date;\n tx: CojsonInternalTypes.TransactionID;\n};\n\n/** @deprecated Use CoFeed instead */\nexport { CoFeed as CoStream };\n\n/**\n * CoFeeds are collaborative logs of data.\n *\n * @categoryDescription Content\n * They are similar to `CoList`s, but with a few key differences:\n * - They are append-only\n * - They consist of several internal append-only logs, one per account session (tab, device, app instance, etc.)\n * - They expose those as a per-account aggregated view (default) or a precise per-session view\n *\n * ```ts\n * favDog.push(\"Poodle\");\n * favDog.push(\"Schnowzer\");\n * ```\n *\n * @category CoValues\n */\nexport class CoFeed<out Item = any> extends CoValueBase implements CoValue {\n declare $jazz: CoFeedJazzApi<this>;\n\n /**\n * Declare a `CoFeed` by subclassing `CoFeed.Of(...)` and passing the item schema using a `co` primitive or a `coField.ref`.\n *\n * @example\n * ```ts\n * class ColorFeed extends CoFeed.Of(coField.string) {}\n * class AnimalFeed extends CoFeed.Of(coField.ref(Animal)) {}\n * ```\n *\n * @category Declaration\n */\n static Of<Item>(item: Item): typeof CoFeed<Item> {\n const cls = class CoFeedOf extends CoFeed<Item> {\n [coField.items] = item;\n };\n\n cls._schema ||= {};\n cls._schema[ItemsSym] = (item as any)[SchemaInit];\n\n return cls;\n }\n\n /** @category Type Helpers */\n declare [TypeSym]: \"CoStream\";\n static {\n this.prototype[TypeSym] = \"CoStream\";\n }\n\n /** @internal This is only a marker type and doesn't exist at runtime */\n [ItemsSym]!: Item;\n /** @internal */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static _schema: any;\n\n /**\n * The current account's view of this `CoFeed`\n * @category Content\n */\n get byMe(): CoFeedEntry<Item> | undefined {\n if (this.$jazz.loadedAs[TypeSym] === \"Account\") {\n return this.perAccount[this.$jazz.loadedAs.$jazz.id];\n } else {\n return undefined;\n }\n }\n\n /**\n * The per-account view of this `CoFeed`\n *\n * @example\n * ```ts\n * // Access entries directly by account ID\n * const aliceEntries = feed[aliceAccount.id];\n * console.log(aliceEntries.value); // Latest value from Alice\n *\n * // Iterate through all accounts' entries\n * for (const [accountId, entries] of Object.entries(feed)) {\n * console.log(`Latest entry from ${accountId}:`, entries.value);\n *\n * // Access all entries from this account\n * for (const entry of entries.all) {\n * console.log(`Entry made at ${entry.madeAt}:`, entry.value);\n * }\n * }\n * ```\n *\n * @category Content\n */\n get perAccount(): {\n [key: ID<Account>]: CoFeedEntry<Item>;\n } {\n return new Proxy({}, CoStreamPerAccountProxyHandler(this)) as any;\n }\n\n /**\n * The per-session view of this `CoFeed`\n * @category Content\n */\n get perSession(): {\n [key: SessionID]: CoFeedEntry<Item>;\n } {\n return new Proxy(\n {},\n CoStreamPerSessionProxyHandler(this, this) as any,\n ) as any;\n }\n\n /**\n * The current session's view of this `CoFeed`\n *\n * This is a shortcut for `this.perSession` where the session ID is the current session ID.\n *\n * @category Content\n */\n get inCurrentSession(): CoFeedEntry<Item> | undefined {\n if (this.$jazz.loadedAs[TypeSym] === \"Account\") {\n return this.perSession[this.$jazz.loadedAs.$jazz.sessionID!];\n } else {\n return undefined;\n }\n }\n\n /** @internal */\n constructor(options: { fromRaw: RawCoStream }) {\n super();\n\n Object.defineProperties(this, {\n $jazz: {\n value: new CoFeedJazzApi(this, options.fromRaw),\n enumerable: false,\n },\n });\n\n return this;\n }\n\n /**\n * Create a new `CoFeed`\n * @category Creation\n * @deprecated Use `co.feed(...).create` instead.\n */\n static create<S extends CoFeed>(\n this: CoValueClass<S>,\n init: S extends CoFeed<infer Item> ? Item[] : never,\n options?: { owner: Account | Group } | Account | Group,\n ) {\n const { owner } = parseCoValueCreateOptions(options);\n const raw = owner.$jazz.raw.createStream();\n const instance = new this({ fromRaw: raw });\n\n if (init) {\n instance.$jazz.push(...init);\n }\n return instance;\n }\n\n /**\n * Get a JSON representation of the `CoFeed`\n * @category\n */\n toJSON(): {\n $jazz: { id: string };\n [key: string]: unknown;\n in: { [key: string]: unknown };\n } {\n const itemDescriptor = this.$jazz.schema[ItemsSym] as Schema;\n const mapper =\n itemDescriptor === \"json\"\n ? (v: unknown) => v\n : \"encoded\" in itemDescriptor\n ? itemDescriptor.encoded.encode\n : (v: unknown) => v && (v as CoValue).$jazz.id;\n\n return {\n $jazz: { id: this.$jazz.id },\n ...Object.fromEntries(\n Object.entries(this).map(([account, entry]) => [\n account,\n mapper(entry.value),\n ]),\n ),\n in: Object.fromEntries(\n Object.entries(this.perSession).map(([session, entry]) => [\n session,\n mapper(entry.value),\n ]),\n ),\n };\n }\n\n /** @internal */\n [inspect](): {\n $jazz: { id: string };\n [key: string]: unknown;\n in: { [key: string]: unknown };\n } {\n return this.toJSON();\n }\n\n /** @internal */\n static schema<V extends CoFeed>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: { new (...args: any): V } & typeof CoFeed,\n def: { [ItemsSym]: V[\"$jazz\"][\"schema\"][ItemsSym] },\n ) {\n this._schema ||= {};\n Object.assign(this._schema, def);\n }\n\n /**\n * Load a `CoFeed`\n * @category Subscription & Loading\n * @deprecated Use `co.feed(...).load` instead.\n */\n static load<F extends CoFeed, const R extends RefsToResolve<F> = true>(\n this: CoValueClass<F>,\n id: ID<F>,\n options: {\n resolve?: RefsToResolveStrict<F, R>;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Resolved<F, R> | null> {\n return loadCoValueWithoutMe(this, id, options);\n }\n\n /**\n * Subscribe to a `CoFeed`, when you have an ID but don't have a `CoFeed` instance yet\n * @category Subscription & Loading\n * @deprecated Use `co.feed(...).subscribe` instead.\n */\n static subscribe<F extends CoFeed, const R extends RefsToResolve<F> = true>(\n this: CoValueClass<F>,\n id: ID<F>,\n listener: (value: Resolved<F, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<F extends CoFeed, const R extends RefsToResolve<F> = true>(\n this: CoValueClass<F>,\n id: ID<F>,\n options: SubscribeListenerOptions<F, R>,\n listener: (value: Resolved<F, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<F extends CoFeed, const R extends RefsToResolve<F>>(\n this: CoValueClass<F>,\n id: ID<F>,\n ...args: SubscribeRestArgs<F, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToCoValueWithoutMe<F, R>(this, id, options, listener);\n }\n}\n\n/** @internal */\ntype CoFeedItem<L> = L extends CoFeed<infer Item> ? Item : never;\n\nexport class CoFeedJazzApi<F extends CoFeed> extends CoValueJazzApi<F> {\n constructor(\n private coFeed: F,\n public raw: RawCoStream,\n ) {\n super(coFeed);\n }\n\n /**\n * The ID of this `CoFeed`\n * @category Content\n */\n get id(): ID<F> {\n return this.raw.id;\n }\n\n get owner(): Group {\n return getCoValueOwner(this.coFeed);\n }\n\n /**\n * Push items to this `CoFeed`\n *\n * Items are appended to the current session's log. Each session (tab, device, app instance)\n * maintains its own append-only log, which is then aggregated into the per-account view.\n *\n * @example\n * ```ts\n * // Adds items to current session's log\n * feed.$jazz.push(\"item1\", \"item2\");\n *\n * // View items from current session\n * console.log(feed.inCurrentSession);\n *\n * // View aggregated items from all sessions for current account\n * console.log(feed.byMe);\n * ```\n *\n * @category Content\n */\n push(...items: CoFieldInit<CoFeedItem<F>>[]): void {\n for (const item of items) {\n this.pushItem(item);\n }\n }\n\n private pushItem(item: CoFieldInit<CoFeedItem<F>>) {\n const itemDescriptor = this.schema[ItemsSym] as Schema;\n\n if (itemDescriptor === \"json\") {\n this.raw.push(item as JsonValue);\n } else if (\"encoded\" in itemDescriptor) {\n this.raw.push(itemDescriptor.encoded.encode(item));\n } else if (isRefEncoded(itemDescriptor)) {\n let refId = (item as unknown as CoValue).$jazz?.id;\n if (!refId) {\n const coValue = instantiateRefEncodedWithInit(\n itemDescriptor,\n item,\n this.owner,\n );\n refId = coValue.$jazz.id;\n }\n this.raw.push(refId);\n }\n }\n\n /**\n * Ensure a `CoFeed` is loaded to the specified depth\n *\n * @returns A new instance of the same CoFeed that's loaded to the specified depth\n * @category Subscription & Loading\n */\n ensureLoaded<F extends CoFeed, const R extends RefsToResolve<F>>(\n this: CoFeedJazzApi<F>,\n options?: { resolve?: RefsToResolveStrict<F, R> },\n ): Promise<Resolved<F, R>> {\n return ensureCoValueLoaded(this.coFeed, options);\n }\n\n /**\n * An instance method to subscribe to an existing `CoFeed`\n *\n * No need to provide an ID or Account since they're already part of the instance.\n * @category Subscription & Loading\n */\n subscribe<F extends CoFeed, const R extends RefsToResolve<F>>(\n this: CoFeedJazzApi<F>,\n listener: (value: Resolved<F, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<F extends CoFeed, const R extends RefsToResolve<F>>(\n this: CoFeedJazzApi<F>,\n options: { resolve?: RefsToResolveStrict<F, R> },\n listener: (value: Resolved<F, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<F extends CoFeed, const R extends RefsToResolve<F>>(\n this: CoFeedJazzApi<F>,\n ...args: SubscribeRestArgs<F, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToExistingCoValue(this.coFeed, options, listener);\n }\n\n /**\n * Wait for the `CoFeed` to be uploaded to the other peers.\n *\n * @category Subscription & Loading\n */\n waitForSync(options?: { timeout?: number }) {\n return this.raw.core.waitForSync(options);\n }\n\n /**\n * Get the descriptor for the items in the `CoFeed`\n * @internal\n */\n getItemsDescriptor(): Schema | undefined {\n return this.schema[ItemsSym];\n }\n\n /** @internal */\n get schema(): {\n [ItemsSym]: SchemaFor<CoFeedItem<F>> | any;\n } {\n return (this.coFeed.constructor as typeof CoFeed)._schema;\n }\n}\n\n/**\n * Converts a raw stream entry into a formatted CoFeed entry with proper typing and accessors.\n * @internal\n */\nfunction entryFromRawEntry<Item>(\n accessFrom: CoValue,\n rawEntry: {\n by: RawAccountID | AgentID;\n tx: CojsonInternalTypes.TransactionID;\n at: Date;\n value: JsonValue;\n },\n loadedAs: Account | AnonymousJazzAgent,\n accountID: ID<Account> | undefined,\n itemField: Schema,\n): Omit<CoFeedEntry<Item>, \"all\"> {\n return {\n get value(): NonNullable<Item> extends CoValue\n ? (CoValue & Item) | null\n : Item {\n if (itemField === \"json\") {\n return rawEntry.value as NonNullable<Item> extends CoValue\n ? (CoValue & Item) | null\n : Item;\n } else if (\"encoded\" in itemField) {\n return itemField.encoded.decode(rawEntry.value);\n } else if (isRefEncoded(itemField)) {\n return accessChildById(\n accessFrom,\n rawEntry.value as string,\n itemField,\n ) as NonNullable<Item> extends CoValue ? (CoValue & Item) | null : Item;\n } else {\n throw new Error(\"Invalid item field schema\");\n }\n },\n get ref(): NonNullable<Item> extends CoValue\n ? Ref<NonNullable<Item>>\n : never {\n if (itemField !== \"json\" && isRefEncoded(itemField)) {\n const rawId = rawEntry.value;\n return new Ref(\n rawId as unknown as ID<CoValue>,\n loadedAs,\n itemField,\n accessFrom,\n ) as NonNullable<Item> extends CoValue ? Ref<NonNullable<Item>> : never;\n } else {\n return undefined as never;\n }\n },\n get by() {\n return (\n accountID &&\n accessChildById(accessFrom, accountID, {\n ref: Account,\n optional: false,\n })\n );\n },\n madeAt: rawEntry.at,\n tx: rawEntry.tx,\n };\n}\n\n/**\n * The proxy handler for `CoFeed` instances\n * @internal\n */\nexport const CoStreamPerAccountProxyHandler = (\n innerTarget: CoFeed,\n): ProxyHandler<{}> => ({\n get(_target, key, receiver) {\n if (typeof key === \"string\" && key.startsWith(\"co_\")) {\n const rawEntry = innerTarget.$jazz.raw.lastItemBy(key as RawAccountID);\n\n if (!rawEntry) return;\n const entry = entryFromRawEntry(\n receiver,\n rawEntry,\n innerTarget.$jazz.loadedAs,\n key as unknown as ID<Account>,\n innerTarget.$jazz.schema[ItemsSym],\n );\n\n Object.defineProperty(entry, \"all\", {\n get: () => {\n const allRawEntries = innerTarget.$jazz.raw.itemsBy(\n key as RawAccountID,\n );\n return (function* () {\n while (true) {\n const rawEntry = allRawEntries.next();\n if (rawEntry.done) return;\n yield entryFromRawEntry(\n receiver,\n rawEntry.value,\n innerTarget.$jazz.loadedAs,\n key as unknown as ID<Account>,\n innerTarget.$jazz.schema[ItemsSym],\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n })() satisfies IterableIterator<SingleCoFeedEntry<any>>;\n },\n });\n\n return entry;\n } else {\n return Reflect.get(innerTarget, key, receiver);\n }\n },\n ownKeys(_target) {\n return Array.from(innerTarget.$jazz.raw.accounts());\n },\n getOwnPropertyDescriptor(_target, key) {\n if (typeof key === \"string\" && key.startsWith(\"co_\")) {\n return {\n configurable: true,\n enumerable: true,\n writable: false,\n };\n } else {\n return Reflect.getOwnPropertyDescriptor(innerTarget, key);\n }\n },\n});\n\n/**\n * The proxy handler for the per-session view of a `CoFeed`\n * @internal\n */\nconst CoStreamPerSessionProxyHandler = (\n innerTarget: CoFeed,\n accessFrom: CoFeed,\n): ProxyHandler<Record<string, never>> => ({\n get(_target, key, receiver) {\n if (typeof key === \"string\" && key.includes(\"session\")) {\n const sessionID = key as SessionID;\n const rawEntry = innerTarget.$jazz.raw.lastItemIn(sessionID);\n\n if (!rawEntry) return;\n const by = cojsonInternals.accountOrAgentIDfromSessionID(sessionID);\n\n const entry = entryFromRawEntry(\n accessFrom,\n rawEntry,\n innerTarget.$jazz.loadedAs,\n cojsonInternals.isAccountID(by)\n ? (by as unknown as ID<Account>)\n : undefined,\n innerTarget.$jazz.schema[ItemsSym],\n );\n\n Object.defineProperty(entry, \"all\", {\n get: () => {\n const allRawEntries = innerTarget.$jazz.raw.itemsIn(sessionID);\n return (function* () {\n while (true) {\n const rawEntry = allRawEntries.next();\n if (rawEntry.done) return;\n yield entryFromRawEntry(\n accessFrom,\n rawEntry.value,\n innerTarget.$jazz.loadedAs,\n cojsonInternals.isAccountID(by)\n ? (by as unknown as ID<Account>)\n : undefined,\n innerTarget.$jazz.schema[ItemsSym],\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n })() satisfies IterableIterator<SingleCoFeedEntry<any>>;\n },\n });\n\n return entry;\n } else {\n return Reflect.get(innerTarget, key, receiver);\n }\n },\n ownKeys() {\n return innerTarget.$jazz.raw.sessions();\n },\n getOwnPropertyDescriptor(target, key) {\n if (typeof key === \"string\" && key.startsWith(\"co_\")) {\n return {\n configurable: true,\n enumerable: true,\n writable: false,\n };\n } else {\n return Reflect.getOwnPropertyDescriptor(target, key);\n }\n },\n});\n\n/** @deprecated Use FileStream instead */\nexport { FileStream as BinaryCoStream };\n\n/**\n * FileStreams are `CoFeed`s that contain binary data, collaborative versions of `Blob`s.\n *\n * @categoryDescription Declaration\n * `FileStream` can be referenced in schemas.\n *\n * ```ts\n * import { coField, FileStream } from \"jazz-tools\";\n *\n * class MyCoMap extends CoMap {\n * file = coField.ref(FileStream);\n * }\n * ```\n *\n * @category CoValues\n */\nexport class FileStream extends CoValueBase implements CoValue {\n declare $jazz: FileStreamJazzApi<this>;\n\n /** @category Type Helpers */\n declare [TypeSym]: \"BinaryCoStream\";\n\n constructor(\n options:\n | {\n owner: Account | Group;\n }\n | {\n fromRaw: RawBinaryCoStream;\n },\n ) {\n super();\n\n let raw: RawBinaryCoStream;\n\n if (\"fromRaw\" in options) {\n raw = options.fromRaw;\n } else {\n const rawOwner = options.owner.$jazz.raw;\n raw = rawOwner.createBinaryStream();\n }\n\n Object.defineProperties(this, {\n [TypeSym]: { value: \"BinaryCoStream\", enumerable: false },\n $jazz: {\n value: new FileStreamJazzApi(this, raw),\n enumerable: false,\n },\n });\n }\n\n /**\n * Create a new empty `FileStream` instance.\n *\n * @param options - Configuration options for the new FileStream\n * @param options.owner - The Account or Group that will own this FileStream and control access rights\n *\n * @example\n * ```typescript\n * // Create owned by an account\n * const stream = FileStream.create({ owner: myAccount });\n *\n * // Create owned by a group\n * const stream = FileStream.create({ owner: teamGroup });\n *\n * // Create with implicit owner\n * const stream = FileStream.create(myAccount);\n * ```\n *\n * @remarks\n * For uploading an existing file or blob, use {@link FileStream.createFromBlob} instead.\n *\n * @category Creation\n * @deprecated Use `co.fileStream(...).create` instead.\n */\n static create<S extends FileStream>(\n this: CoValueClass<S>,\n options?: { owner?: Account | Group } | Account | Group,\n ) {\n return new this(parseCoValueCreateOptions(options));\n }\n\n getMetadata(): BinaryStreamInfo | undefined {\n return this.$jazz.raw.getBinaryStreamInfo();\n }\n\n getChunks(options?: {\n allowUnfinished?: boolean;\n }):\n | (BinaryStreamInfo & { chunks: Uint8Array[]; finished: boolean })\n | undefined {\n return this.$jazz.raw.getBinaryChunks(options?.allowUnfinished);\n }\n\n isBinaryStreamEnded(): boolean {\n return this.$jazz.raw.isBinaryStreamEnded();\n }\n\n start(options: BinaryStreamInfo): void {\n this.$jazz.raw.startBinaryStream(options);\n }\n\n push(data: Uint8Array): void {\n this.$jazz.raw.pushBinaryStreamChunk(data);\n }\n\n end(): void {\n this.$jazz.raw.endBinaryStream();\n }\n\n toBlob(options?: { allowUnfinished?: boolean }): Blob | undefined {\n const chunks = this.getChunks({\n allowUnfinished: options?.allowUnfinished,\n });\n\n if (!chunks) {\n return undefined;\n }\n\n // @ts-ignore\n return new Blob(chunks.chunks, { type: chunks.mimeType });\n }\n\n /**\n * Load a `FileStream` as a `Blob`\n *\n * @category Content\n * @deprecated Use `co.fileStream(...).loadAsBlob` instead.\n */\n static async loadAsBlob(\n id: ID<FileStream>,\n options?: {\n allowUnfinished?: boolean;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Blob | undefined> {\n let stream = await this.load(id, options);\n\n return stream?.toBlob({\n allowUnfinished: options?.allowUnfinished,\n });\n }\n\n static async loadAsBase64(\n id: ID<FileStream>,\n options?: {\n allowUnfinished?: boolean;\n loadAs?: Account | AnonymousJazzAgent;\n dataURL?: boolean;\n },\n ): Promise<string | undefined> {\n const stream = await this.load(id, options);\n\n return stream?.asBase64(options);\n }\n\n asBase64(options?: {\n allowUnfinished?: boolean;\n dataURL?: boolean;\n }): string | undefined {\n const chunks = this.getChunks(options);\n\n if (!chunks) return undefined;\n\n const output = [];\n\n for (const chunk of chunks.chunks) {\n for (const byte of chunk) {\n output.push(String.fromCharCode(byte));\n }\n }\n\n const base64 = btoa(output.join(\"\"));\n\n if (options?.dataURL) {\n return `data:${chunks.mimeType};base64,${base64}`;\n }\n\n return base64;\n }\n\n /**\n * Create a `FileStream` from a `Blob` or `File`\n *\n * @example\n * ```ts\n * import { coField, FileStream } from \"jazz-tools\";\n *\n * const fileStream = await FileStream.createFromBlob(file, {owner: group})\n * ```\n * @category Content\n * @deprecated Use `co.fileStream(...).createFromBlob` instead.\n */\n static async createFromBlob(\n blob: Blob | File,\n options?:\n | {\n owner?: Account | Group;\n onProgress?: (progress: number) => void;\n }\n | Account\n | Group,\n ): Promise<FileStream> {\n const arrayBuffer = await blob.arrayBuffer();\n return this.createFromArrayBuffer(\n arrayBuffer,\n blob.type,\n blob instanceof File ? blob.name : undefined,\n options,\n );\n }\n\n /**\n * Create a `FileStream` from a `Blob` or `File`\n *\n * @example\n * ```ts\n * import { coField, FileStream } from \"jazz-tools\";\n *\n * const fileStream = await FileStream.createFromBlob(file, {owner: group})\n * ```\n * @category Content\n * @deprecated Use `co.fileStream(...).createFromArrayBuffer` instead.\n */\n static async createFromArrayBuffer(\n arrayBuffer: ArrayBuffer,\n mimeType: string,\n fileName: string | undefined,\n options?:\n | {\n owner?: Account | Group;\n onProgress?: (progress: number) => void;\n }\n | Account\n | Group,\n ): Promise<FileStream> {\n const stream = this.create(options);\n const onProgress =\n options && \"onProgress\" in options ? options.onProgress : undefined;\n\n const start = Date.now();\n\n const data = new Uint8Array(arrayBuffer);\n stream.start({\n mimeType,\n totalSizeBytes: arrayBuffer.byteLength,\n fileName,\n });\n const chunkSize =\n cojsonInternals.TRANSACTION_CONFIG.MAX_RECOMMENDED_TX_SIZE;\n\n let lastProgressUpdate = Date.now();\n\n for (let idx = 0; idx < data.length; idx += chunkSize) {\n stream.push(data.slice(idx, idx + chunkSize));\n\n if (Date.now() - lastProgressUpdate > 100) {\n onProgress?.(idx / data.length);\n lastProgressUpdate = Date.now();\n }\n\n await new Promise((resolve) => setTimeout(resolve, 0));\n }\n stream.end();\n const end = Date.now();\n\n console.debug(\n \"Finished creating binary stream in\",\n (end - start) / 1000,\n \"s - Throughput in MB/s\",\n (1000 * (arrayBuffer.byteLength / (end - start))) / (1024 * 1024),\n );\n onProgress?.(1);\n\n return stream;\n }\n\n /**\n * Get a JSON representation of the `FileStream`\n * @category Content\n */\n toJSON(): {\n $jazz: { id: string };\n mimeType?: string;\n totalSizeBytes?: number;\n fileName?: string;\n chunks?: Uint8Array[];\n finished?: boolean;\n } {\n return {\n $jazz: { id: this.$jazz.id },\n ...this.getChunks(),\n };\n }\n\n /** @internal */\n [inspect]() {\n return this.toJSON();\n }\n\n /**\n * Load a `FileStream`\n * @category Subscription & Loading\n * @deprecated Use `co.fileStream(...).load` instead.\n */\n static async load<C extends FileStream>(\n this: CoValueClass<C>,\n id: ID<C>,\n options?: {\n loadAs?: Account | AnonymousJazzAgent;\n allowUnfinished?: boolean;\n },\n ): Promise<FileStream | null> {\n const stream = await loadCoValueWithoutMe(this, id, options);\n\n /**\n * If the user hasn't requested an incomplete blob and the\n * stream isn't complete wait for the stream download before progressing\n */\n if (!options?.allowUnfinished && !stream?.isBinaryStreamEnded()) {\n return new Promise<FileStream>((resolve) => {\n subscribeToCoValueWithoutMe(\n this,\n id,\n options || {},\n (value, unsubscribe) => {\n if (value.isBinaryStreamEnded()) {\n unsubscribe();\n resolve(value);\n }\n },\n );\n });\n }\n\n return stream;\n }\n\n /**\n * Subscribe to a `FileStream`, when you have an ID but don't have a `FileStream` instance yet\n * @category Subscription & Loading\n * @deprecated Use `co.fileStream(...).subscribe` instead.\n */\n static subscribe<F extends FileStream, const R extends RefsToResolve<F>>(\n this: CoValueClass<F>,\n id: ID<F>,\n listener: (value: Resolved<F, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<F extends FileStream, const R extends RefsToResolve<F>>(\n this: CoValueClass<F>,\n id: ID<F>,\n options: SubscribeListenerOptions<F, R>,\n listener: (value: Resolved<F, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<F extends FileStream, const R extends RefsToResolve<F>>(\n this: CoValueClass<F>,\n id: ID<F>,\n ...args: SubscribeRestArgs<F, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToCoValueWithoutMe<F, R>(this, id, options, listener);\n }\n}\n\nexport class FileStreamJazzApi<F extends FileStream> extends CoValueJazzApi<F> {\n constructor(\n private fileStream: F,\n public raw: RawBinaryCoStream,\n ) {\n super(fileStream);\n }\n\n /**\n * The ID of this `FileStream`\n * @category Content\n */\n get id(): ID<F> {\n return this.raw.id;\n }\n\n get owner(): Group {\n return getCoValueOwner(this.fileStream);\n }\n\n /**\n * An instance method to subscribe to an existing `FileStream`\n * @category Subscription & Loading\n */\n subscribe<B extends FileStream>(\n this: FileStreamJazzApi<B>,\n listener: (value: Resolved<B, true>) => void,\n ): () => void {\n return subscribeToExistingCoValue(this.fileStream, {}, listener);\n }\n\n /**\n * Wait for the `FileStream` to be uploaded to the other peers.\n *\n * @category Subscription & Loading\n */\n waitForSync(options?: { timeout?: number }) {\n return this.raw.core.waitForSync(options);\n }\n}\n","import {\n AgentSecret,\n CoID,\n ControlledAccount as RawControlledAccount,\n CryptoProvider,\n Everyone,\n InviteSecret,\n LocalNode,\n Peer,\n RawAccount,\n RawCoMap,\n RawCoValue,\n SessionID,\n cojsonInternals,\n} from \"cojson\";\nimport {\n AnonymousJazzAgent,\n CoFieldInit,\n type CoMap,\n type CoValue,\n CoValueBase,\n CoValueClass,\n CoValueClassOrSchema,\n CoValueJazzApi,\n Group,\n ID,\n InstanceOrPrimitiveOfSchema,\n Profile,\n Ref,\n type RefEncoded,\n RefIfCoValue,\n RefsToResolve,\n RefsToResolveStrict,\n RegisteredSchemas,\n Resolved,\n SchemaInit,\n SubscribeListenerOptions,\n SubscribeRestArgs,\n TypeSym,\n accessChildByKey,\n accountOrGroupToGroup,\n activeAccountContext,\n coValueClassFromCoValueClassOrSchema,\n coValuesCache,\n createInboxRoot,\n ensureCoValueLoaded,\n inspect,\n instantiateRefEncodedWithInit,\n loadCoValue,\n loadCoValueWithoutMe,\n parseSubscribeRestArgs,\n subscribeToCoValueWithoutMe,\n subscribeToExistingCoValue,\n} from \"../internal.js\";\n\nexport type AccountCreationProps = {\n name: string;\n onboarding?: boolean;\n};\n\n/** @category Identity & Permissions */\nexport class Account extends CoValueBase implements CoValue {\n declare [TypeSym]: \"Account\";\n\n /**\n * Jazz methods for Accounts are inside this property.\n *\n * This allows Accounts to be used as plain objects while still having\n * access to Jazz methods.\n */\n declare $jazz: AccountJazzApi<this>;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static _schema: any = {\n profile: {\n ref: () => Profile,\n optional: false,\n } satisfies RefEncoded<Profile>,\n root: {\n ref: () => RegisteredSchemas[\"CoMap\"],\n optional: true,\n } satisfies RefEncoded<CoMap>,\n };\n\n declare readonly profile: Profile | null;\n declare readonly root: CoMap | null;\n\n constructor(options: { fromRaw: RawAccount }) {\n super();\n if (!(\"fromRaw\" in options)) {\n throw new Error(\"Can only construct account from raw or with .create()\");\n }\n\n const proxy = new Proxy(\n this,\n AccountAndGroupProxyHandler as ProxyHandler<this>,\n );\n\n Object.defineProperties(this, {\n [TypeSym]: { value: \"Account\", enumerable: false },\n $jazz: {\n value: new AccountJazzApi(proxy, options.fromRaw),\n enumerable: false,\n },\n });\n\n return proxy;\n }\n\n /**\n * Whether this account is the currently active account.\n */\n get isMe(): boolean {\n return activeAccountContext.get().$jazz.id === this.$jazz.id;\n }\n\n /**\n * Accept an invite to a `CoValue` or `Group`.\n *\n * @param valueID The ID of the `CoValue` or `Group` to accept the invite to.\n * @param inviteSecret The secret of the invite to accept.\n * @param coValueClass The class of the `CoValue` or `Group` to accept the invite to.\n * @returns The loaded `CoValue` or `Group`.\n */\n async acceptInvite<S extends CoValueClassOrSchema>(\n valueID: string,\n inviteSecret: InviteSecret,\n coValueClass: S,\n ): Promise<Resolved<InstanceOrPrimitiveOfSchema<S>, true> | null> {\n if (!this.$jazz.isLocalNodeOwner) {\n throw new Error(\"Only a controlled account can accept invites\");\n }\n\n await this.$jazz.localNode.acceptInvite(\n valueID as unknown as CoID<RawCoValue>,\n inviteSecret,\n );\n\n return loadCoValue(\n coValueClassFromCoValueClassOrSchema(coValueClass),\n valueID,\n {\n loadAs: this,\n },\n ) as Resolved<InstanceOrPrimitiveOfSchema<S>, true> | null;\n }\n\n getRoleOf(member: Everyone | ID<Account> | \"me\"): \"admin\" | undefined {\n if (member === \"me\") {\n return this.isMe ? \"admin\" : undefined;\n }\n\n if (member === this.$jazz.id) {\n return \"admin\";\n }\n\n return undefined;\n }\n\n canRead(value: CoValue): boolean {\n const valueOwner = value.$jazz.owner;\n if (!valueOwner) {\n // Groups and Accounts are public\n return true;\n }\n const role = valueOwner.getRoleOf(this.$jazz.id);\n\n return (\n role === \"admin\" ||\n role === \"writer\" ||\n role === \"reader\" ||\n role === \"writeOnly\"\n );\n }\n\n canWrite(value: CoValue): boolean {\n const valueOwner = value.$jazz.owner;\n if (!valueOwner) {\n if (value[TypeSym] === \"Group\") {\n const roleInGroup = (value as Group).getRoleOf(this.$jazz.id);\n return roleInGroup === \"admin\" || roleInGroup === \"writer\";\n }\n if (value[TypeSym] === \"Account\") {\n return value.$jazz.id === this.$jazz.id;\n }\n return false;\n }\n const role = valueOwner.getRoleOf(this.$jazz.id);\n\n return role === \"admin\" || role === \"writer\" || role === \"writeOnly\";\n }\n\n canAdmin(value: CoValue): boolean {\n const valueOwner = value.$jazz.owner;\n if (!valueOwner) {\n if (value[TypeSym] === \"Group\") {\n const roleInGroup = (value as Group).getRoleOf(this.$jazz.id);\n return roleInGroup === \"admin\";\n }\n if (value[TypeSym] === \"Account\") {\n return value.$jazz.id === this.$jazz.id;\n }\n return false;\n }\n return valueOwner.getRoleOf(this.$jazz.id) === \"admin\";\n }\n\n /** @private */\n static async create<A extends Account>(\n this: CoValueClass<A> & typeof Account,\n options: {\n creationProps: { name: string };\n initialAgentSecret?: AgentSecret;\n peersToLoadFrom?: Peer[];\n crypto: CryptoProvider;\n },\n ): Promise<A> {\n const { node } = await LocalNode.withNewlyCreatedAccount({\n ...options,\n migration: async (rawAccount, _node, creationProps) => {\n const account = new this({\n fromRaw: rawAccount,\n }) as A;\n\n await account.applyMigration?.(creationProps);\n },\n });\n\n return this.fromNode(node) as A;\n }\n\n static getMe<A extends Account>(this: CoValueClass<A> & typeof Account) {\n return activeAccountContext.get() as A;\n }\n\n /**\n * @deprecated Use `co.account(...).createAs` instead.\n */\n static async createAs<A extends Account>(\n this: CoValueClass<A> & typeof Account,\n as: Account,\n options: {\n creationProps: { name: string };\n },\n ) {\n // TODO: is there a cleaner way to do this?\n const connectedPeers = cojsonInternals.connectedPeers(\n \"creatingAccount\",\n \"createdAccount\",\n { peer1role: \"server\", peer2role: \"client\" },\n );\n\n as.$jazz.localNode.syncManager.addPeer(connectedPeers[1]);\n\n const account = await this.create<A>({\n creationProps: options.creationProps,\n crypto: as.$jazz.localNode.crypto,\n peersToLoadFrom: [connectedPeers[0]],\n });\n\n await account.$jazz.waitForAllCoValuesSync();\n\n return account;\n }\n\n static fromNode<A extends Account>(\n this: CoValueClass<A>,\n node: LocalNode,\n ): A {\n return new this({\n fromRaw: node.expectCurrentAccount(\"jazz-tools/Account.fromNode\"),\n }) as A;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n toJSON(): object | any[] {\n return {\n $jazz: { id: this.$jazz.id },\n };\n }\n\n [inspect]() {\n return this.toJSON();\n }\n\n async applyMigration(creationProps?: AccountCreationProps) {\n await this.migrate(creationProps);\n\n // if the user has not defined a profile themselves, we create one\n if (this.profile === undefined && creationProps) {\n const profileGroup = RegisteredSchemas[\"Group\"].create({ owner: this });\n\n this.$jazz.set(\n \"profile\",\n Profile.create({ name: creationProps.name }, profileGroup) as any,\n );\n profileGroup.addMember(\"everyone\", \"reader\");\n }\n\n const profile = this.$jazz.localNode\n .expectCoValueLoaded(this.$jazz.raw.get(\"profile\")!)\n .getCurrentContent() as RawCoMap;\n\n if (!profile.get(\"inbox\")) {\n const inboxRoot = createInboxRoot(this);\n profile.set(\"inbox\", inboxRoot.id);\n profile.set(\"inboxInvite\", inboxRoot.inviteLink);\n }\n }\n\n // Placeholder method for subclasses to override\n migrate(creationProps?: AccountCreationProps) {\n creationProps; // To avoid unused parameter warning\n }\n\n /**\n * Load an `Account`\n * @category Subscription & Loading\n * @deprecated Use `co.account(...).load` instead.\n */\n static load<A extends Account, const R extends RefsToResolve<A> = true>(\n this: CoValueClass<A>,\n id: ID<A>,\n options?: {\n resolve?: RefsToResolveStrict<A, R>;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Resolved<A, R> | null> {\n return loadCoValueWithoutMe(this, id, options);\n }\n\n /**\n * Subscribe to an `Account`, when you have an ID but don't have an `Account` instance yet\n * @category Subscription & Loading\n * @deprecated Use `co.account(...).subscribe` instead.\n */\n static subscribe<A extends Account, const R extends RefsToResolve<A> = true>(\n this: CoValueClass<A>,\n id: ID<A>,\n listener: (value: Resolved<A, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<A extends Account, const R extends RefsToResolve<A> = true>(\n this: CoValueClass<A>,\n id: ID<A>,\n options: SubscribeListenerOptions<A, R>,\n listener: (value: Resolved<A, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<A extends Account, const R extends RefsToResolve<A>>(\n this: CoValueClass<A>,\n id: ID<A>,\n ...args: SubscribeRestArgs<A, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToCoValueWithoutMe<A, R>(this, id, options, listener);\n }\n}\n\nclass AccountJazzApi<A extends Account> extends CoValueJazzApi<A> {\n /**\n * Whether this account is the owner of the local node.\n *\n * @internal\n */\n isLocalNodeOwner: boolean;\n /** @internal */\n sessionID: SessionID | undefined;\n\n constructor(\n private account: A,\n public raw: RawAccount,\n ) {\n super(account);\n this.isLocalNodeOwner = this.raw.id === this.localNode.getCurrentAgent().id;\n if (this.isLocalNodeOwner) {\n this.sessionID = this.localNode.currentSessionID;\n }\n }\n\n /**\n * The ID of this `Account`\n * @category Content\n */\n get id(): ID<A> {\n return this.raw.id;\n }\n\n /**\n * Accounts have no owner. They can be accessed by everyone.\n */\n get owner(): undefined {\n return undefined;\n }\n\n /**\n * Set the value of a key in the account.\n *\n * @param key The key to set.\n * @param value The value to set.\n *\n * @category Content\n */\n set<K extends \"root\" | \"profile\">(\n key: K,\n value: CoFieldInit<NonNullable<A[K]>>,\n ) {\n if (value) {\n let refId = (value as unknown as CoValue).$jazz?.id as\n | CoID<RawCoMap>\n | undefined;\n if (!refId) {\n const descriptor = this.schema[key];\n const coValue = instantiateRefEncodedWithInit(\n descriptor,\n value,\n accountOrGroupToGroup(this.account),\n );\n refId = coValue.$jazz.id as CoID<RawCoMap>;\n }\n this.raw.set(key, refId, \"trusting\");\n }\n }\n\n has(key: \"root\" | \"profile\"): boolean {\n const entry = this.raw.getRaw(key);\n return entry?.change !== undefined && entry.change.op !== \"del\";\n }\n\n /**\n * Get the descriptor for a given key\n * @internal\n */\n getDescriptor(key: string) {\n if (key === \"profile\") {\n return this.schema.profile;\n } else if (key === \"root\") {\n return this.schema.root;\n }\n\n return undefined;\n }\n\n /**\n * If property `prop` is a `coField.ref(...)`, you can use `account.$jazz.refs.prop` to access\n * the `Ref` instead of the potentially loaded/null value.\n *\n * This allows you to always get the ID or load the value manually.\n *\n * @category Content\n */\n get refs(): {\n profile: RefIfCoValue<Profile> | undefined;\n root: RefIfCoValue<CoMap> | undefined;\n } {\n const profileID = this.raw.get(\"profile\") as unknown as\n | ID<NonNullable<(typeof this.account)[\"profile\"]>>\n | undefined;\n const rootID = this.raw.get(\"root\") as unknown as\n | ID<NonNullable<(typeof this.account)[\"root\"]>>\n | undefined;\n\n return {\n profile: profileID\n ? (new Ref(\n profileID,\n this.loadedAs,\n this.schema.profile as RefEncoded<\n NonNullable<(typeof this.account)[\"profile\"]> & CoValue\n >,\n this.account,\n ) as unknown as RefIfCoValue<(typeof this.account)[\"profile\"]>)\n : undefined,\n root: rootID\n ? (new Ref(\n rootID,\n this.loadedAs,\n this.schema.root as RefEncoded<\n NonNullable<(typeof this.account)[\"root\"]> & CoValue\n >,\n this.account,\n ) as unknown as RefIfCoValue<(typeof this.account)[\"root\"]>)\n : undefined,\n };\n }\n\n /** @category Subscription & Loading */\n ensureLoaded<A extends Account, const R extends RefsToResolve<A>>(\n this: AccountJazzApi<A>,\n options: {\n resolve: RefsToResolveStrict<A, R>;\n },\n ): Promise<Resolved<A, R>> {\n return ensureCoValueLoaded(this.account as unknown as A, options);\n }\n\n /** @category Subscription & Loading */\n subscribe<A extends Account, const R extends RefsToResolve<A>>(\n this: AccountJazzApi<A>,\n listener: (value: Resolved<A, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<A extends Account, const R extends RefsToResolve<A>>(\n this: AccountJazzApi<A>,\n options: { resolve?: RefsToResolveStrict<A, R> },\n listener: (value: Resolved<A, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<A extends Account, const R extends RefsToResolve<A>>(\n this: AccountJazzApi<A>,\n ...args: SubscribeRestArgs<A, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToExistingCoValue(this.account, options, listener);\n }\n\n /**\n * Wait for the `Account` to be uploaded to the other peers.\n *\n * @category Subscription & Loading\n */\n waitForSync(options?: { timeout?: number }) {\n return this.raw.core.waitForSync(options);\n }\n\n /**\n * Wait for all the available `CoValues` to be uploaded to the other peers.\n *\n * @category Subscription & Loading\n */\n waitForAllCoValuesSync(options?: { timeout?: number }) {\n return this.localNode.syncManager.waitForAllCoValuesSync(options?.timeout);\n }\n\n /** @internal */\n get schema(): {\n profile: RefEncoded<Profile>;\n root: RefEncoded<CoMap>;\n } {\n return (this.account.constructor as typeof Account)._schema;\n }\n\n get loadedAs(): Account | AnonymousJazzAgent {\n if (this.isLocalNodeOwner) return this.account;\n\n const agent = this.localNode.getCurrentAgent();\n\n if (agent instanceof RawControlledAccount) {\n return coValuesCache.get(agent.account, () =>\n Account.fromRaw(agent.account),\n );\n }\n\n return new AnonymousJazzAgent(this.localNode);\n }\n}\n\nexport const AccountAndGroupProxyHandler: ProxyHandler<Account | Group> = {\n get(target, key, receiver) {\n if (key === \"profile\" || key === \"root\") {\n const id = target.$jazz.raw.get(key);\n\n if (id) {\n return accessChildByKey(target, id, key);\n } else {\n return undefined;\n }\n } else {\n return Reflect.get(target, key, receiver);\n }\n },\n set(target, key, value, receiver) {\n if (\n target instanceof Account &&\n (key === \"profile\" || key === \"root\") &&\n typeof value === \"object\" &&\n SchemaInit in value\n ) {\n (target.constructor as typeof Account)._schema ||= {};\n (target.constructor as typeof Account)._schema[key] = value[SchemaInit];\n return true;\n } else if (\n target instanceof Account &&\n (key === \"profile\" || key === \"root\")\n ) {\n if (value) {\n target.$jazz.set(key, value);\n }\n\n return true;\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n },\n defineProperty(target, key, descriptor) {\n if (\n (key === \"profile\" || key === \"root\") &&\n typeof descriptor.value === \"object\" &&\n SchemaInit in descriptor.value\n ) {\n (target.constructor as typeof Account)._schema ||= {};\n (target.constructor as typeof Account)._schema[key] =\n descriptor.value[SchemaInit];\n return true;\n } else {\n return Reflect.defineProperty(target, key, descriptor);\n }\n },\n};\n\nexport type ControlledAccount = Account & {\n $jazz: {\n raw: RawAccount;\n isLocalNodeOwner: true;\n sessionID: SessionID;\n };\n};\n\n/** @category Identity & Permissions */\nexport function isControlledAccount(\n account: Account,\n): account is ControlledAccount {\n return account.$jazz.isLocalNodeOwner;\n}\n\nexport type AccountClass<Acc extends Account> = CoValueClass<Acc> & {\n fromNode: (typeof Account)[\"fromNode\"];\n};\n\nRegisteredSchemas[\"Account\"] = Account;\n","import type {\n AccountRole,\n AgentID,\n Everyone,\n RawAccountID,\n RawGroup,\n Role,\n} from \"cojson\";\nimport {\n CoValue,\n CoValueClass,\n ID,\n RefEncoded,\n RefsToResolve,\n RefsToResolveStrict,\n Resolved,\n SubscribeListenerOptions,\n SubscribeRestArgs,\n TypeSym,\n} from \"../internal.js\";\nimport {\n Account,\n AccountAndGroupProxyHandler,\n CoValueBase,\n CoValueJazzApi,\n Ref,\n RegisteredSchemas,\n accessChildById,\n activeAccountContext,\n ensureCoValueLoaded,\n isControlledAccount,\n loadCoValueWithoutMe,\n parseGroupCreateOptions,\n parseSubscribeRestArgs,\n subscribeToCoValueWithoutMe,\n subscribeToExistingCoValue,\n} from \"../internal.js\";\n\ntype GroupMember = {\n id: string;\n role: AccountRole;\n ref: Ref<Account>;\n account: Account;\n};\n\n/** @category Identity & Permissions */\nexport class Group extends CoValueBase implements CoValue {\n declare [TypeSym]: \"Group\";\n static {\n this.prototype[TypeSym] = \"Group\";\n }\n declare $jazz: GroupJazzApi<this>;\n\n /** @deprecated Don't use constructor directly, use .create */\n constructor(options: { fromRaw: RawGroup } | { owner: Account }) {\n super();\n let raw: RawGroup;\n\n if (options && \"fromRaw\" in options) {\n raw = options.fromRaw;\n } else {\n const initOwner = options.owner;\n if (!initOwner) throw new Error(\"No owner provided\");\n if (initOwner[TypeSym] === \"Account\" && isControlledAccount(initOwner)) {\n const rawOwner = initOwner.$jazz.raw;\n raw = rawOwner.core.node.createGroup();\n } else {\n throw new Error(\"Can only construct group as a controlled account\");\n }\n }\n\n const proxy = new Proxy(\n this,\n AccountAndGroupProxyHandler as ProxyHandler<this>,\n );\n\n Object.defineProperties(this, {\n $jazz: {\n value: new GroupJazzApi(proxy, raw),\n enumerable: false,\n },\n });\n\n return proxy;\n }\n\n static create<G extends Group>(\n this: CoValueClass<G>,\n options?: { owner: Account } | Account,\n ) {\n return new this(parseGroupCreateOptions(options));\n }\n\n myRole(): Role | undefined {\n return this.$jazz.raw.myRole();\n }\n\n addMember(member: Everyone, role: \"writer\" | \"reader\" | \"writeOnly\"): void;\n addMember(member: Account, role: AccountRole): void;\n /** @category Identity & Permissions\n * Gives members of a parent group membership in this group.\n * @param member The group that will gain access to this group.\n * @param role The role all members of the parent group should have in this group.\n */\n addMember(\n member: Group,\n role?: \"reader\" | \"writer\" | \"admin\" | \"inherit\",\n ): void;\n addMember(member: Group | Account, role: \"reader\" | \"writer\" | \"admin\"): void;\n addMember(\n member: Group | Everyone | Account,\n role?: AccountRole | \"inherit\",\n ) {\n if (member !== \"everyone\" && member[TypeSym] === \"Group\") {\n if (role === \"writeOnly\")\n throw new Error(\"Cannot add group as member with write-only role\");\n this.$jazz.raw.extend(member.$jazz.raw, role);\n } else if (role !== undefined && role !== \"inherit\") {\n this.$jazz.raw.addMember(\n member === \"everyone\" ? member : member.$jazz.raw,\n role,\n );\n }\n }\n\n removeMember(member: Everyone | Account): void;\n /** @category Identity & Permissions\n * Revokes membership from members a parent group.\n * @param member The group that will lose access to this group.\n */\n removeMember(member: Group): void;\n removeMember(member: Group | Everyone | Account) {\n if (member !== \"everyone\" && member[TypeSym] === \"Group\") {\n this.$jazz.raw.revokeExtend(member.$jazz.raw);\n } else {\n return this.$jazz.raw.removeMember(\n member === \"everyone\" ? member : member.$jazz.raw,\n );\n }\n }\n\n private getMembersFromKeys(\n accountIDs: Iterable<RawAccountID | AgentID>,\n ): GroupMember[] {\n const members = [];\n\n const refEncodedAccountSchema = {\n ref: () => Account,\n optional: false,\n } satisfies RefEncoded<Account>;\n\n for (const accountID of accountIDs) {\n if (!isAccountID(accountID)) continue;\n\n const role = this.$jazz.raw.roleOf(accountID);\n\n if (\n role === \"admin\" ||\n role === \"writer\" ||\n role === \"reader\" ||\n role === \"writeOnly\"\n ) {\n const ref = new Ref<Account>(\n accountID,\n this.$jazz.loadedAs,\n refEncodedAccountSchema,\n this,\n );\n\n const group = this;\n\n members.push({\n id: accountID as unknown as ID<Account>,\n role,\n ref,\n get account() {\n // Accounts values are non-nullable because are loaded as dependencies\n return accessChildById(group, accountID, refEncodedAccountSchema);\n },\n });\n }\n }\n\n return members;\n }\n\n /**\n * Returns all members of the group, including inherited members from parent\n * groups.\n *\n * If you need only the direct members of the group, use\n * {@link getDirectMembers} instead.\n *\n * @returns The members of the group.\n */\n get members(): GroupMember[] {\n return this.getMembersFromKeys(this.$jazz.raw.getAllMemberKeysSet());\n }\n\n /**\n * Returns the direct members of the group.\n *\n * If you need all members of the group, including inherited members from\n * parent groups, use {@link Group.members|members} instead.\n * @returns The direct members of the group.\n */\n getDirectMembers(): GroupMember[] {\n return this.getMembersFromKeys(this.$jazz.raw.getMemberKeys());\n }\n\n getRoleOf(member: Everyone | ID<Account> | \"me\"): Role | undefined {\n const accountId =\n member === \"me\"\n ? (activeAccountContext.get().$jazz.id as RawAccountID)\n : member === \"everyone\"\n ? member\n : (member as RawAccountID);\n return this.$jazz.raw.roleOf(accountId);\n }\n\n /**\n * Make the group public, so that everyone can read it.\n * Alias for `addMember(\"everyone\", role)`.\n *\n * @param role - Optional: the role to grant to everyone. Defaults to \"reader\".\n * @returns The group itself.\n */\n makePublic(role: \"reader\" | \"writer\" = \"reader\"): this {\n this.addMember(\"everyone\", role);\n return this;\n }\n\n getParentGroups(): Array<Group> {\n return this.$jazz.raw\n .getParentGroups()\n .map((group) => Group.fromRaw(group));\n }\n\n /** @category Identity & Permissions\n * Gives members of a parent group membership in this group.\n * @deprecated Use `addMember` instead.\n * @param parent The group that will gain access to this group.\n * @param roleMapping The role all members of the parent group should have in this group.\n * @returns This group.\n */\n extend(\n parent: Group,\n roleMapping?: \"reader\" | \"writer\" | \"admin\" | \"inherit\",\n ): this {\n this.$jazz.raw.extend(parent.$jazz.raw, roleMapping);\n return this;\n }\n\n /** @category Identity & Permissions\n * Revokes membership from members a parent group.\n * @deprecated Use `removeMember` instead.\n * @param parent The group that will lose access to this group.\n * @returns This group.\n */\n async revokeExtend(parent: Group): Promise<this> {\n await this.$jazz.raw.revokeExtend(parent.$jazz.raw);\n return this;\n }\n\n /** @category Subscription & Loading */\n static load<G extends Group, const R extends RefsToResolve<G>>(\n this: CoValueClass<G>,\n id: ID<G>,\n options?: { resolve?: RefsToResolveStrict<G, R>; loadAs?: Account },\n ): Promise<Resolved<G, R> | null> {\n return loadCoValueWithoutMe(this, id, options);\n }\n\n /** @category Subscription & Loading */\n static subscribe<G extends Group, const R extends RefsToResolve<G>>(\n this: CoValueClass<G>,\n id: ID<G>,\n listener: (value: Resolved<G, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<G extends Group, const R extends RefsToResolve<G>>(\n this: CoValueClass<G>,\n id: ID<G>,\n options: SubscribeListenerOptions<G, R>,\n listener: (value: Resolved<G, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<G extends Group, const R extends RefsToResolve<G>>(\n this: CoValueClass<G>,\n id: ID<G>,\n ...args: SubscribeRestArgs<G, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToCoValueWithoutMe<G, R>(this, id, options, listener);\n }\n}\n\nexport class GroupJazzApi<G extends Group> extends CoValueJazzApi<G> {\n constructor(\n private group: G,\n public raw: RawGroup,\n ) {\n super(group);\n }\n\n /**\n * The ID of this `Group`\n * @category Content\n */\n get id(): ID<G> {\n return this.raw.id;\n }\n\n /**\n * Groups have no owner. They can be accessed by everyone.\n */\n get owner(): undefined {\n return undefined;\n }\n\n /** @category Subscription & Loading */\n ensureLoaded<G extends Group, const R extends RefsToResolve<G>>(\n this: GroupJazzApi<G>,\n options?: { resolve?: RefsToResolveStrict<G, R> },\n ): Promise<Resolved<G, R>> {\n return ensureCoValueLoaded(this.group, options);\n }\n\n /** @category Subscription & Loading */\n subscribe<G extends Group, const R extends RefsToResolve<G>>(\n this: GroupJazzApi<G>,\n listener: (value: Resolved<G, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<G extends Group, const R extends RefsToResolve<G>>(\n this: GroupJazzApi<G>,\n options: { resolve?: RefsToResolveStrict<G, R> },\n listener: (value: Resolved<G, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<G extends Group, const R extends RefsToResolve<G>>(\n this: GroupJazzApi<G>,\n ...args: SubscribeRestArgs<G, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToExistingCoValue(this.group, options, listener);\n }\n\n /**\n * Wait for the `Group` to be uploaded to the other peers.\n *\n * @category Subscription & Loading\n */\n waitForSync(options?: { timeout?: number }) {\n return this.raw.core.waitForSync(options);\n }\n}\n\nRegisteredSchemas[\"Group\"] = Group;\n\nexport function isAccountID(id: RawAccountID | AgentID): id is RawAccountID {\n return id.startsWith(\"co_\");\n}\n\nexport function getCoValueOwner(coValue: CoValue): Group {\n const group = accessChildById(coValue, coValue.$jazz.raw.group.id, {\n ref: RegisteredSchemas[\"Group\"],\n optional: false,\n });\n if (!group) {\n throw new Error(\"CoValue has no owner\");\n }\n return group;\n}\n","import {\n Account,\n CoMap,\n CoMapInit_DEPRECATED,\n CoValueClass,\n Group,\n Simplify,\n TypeSym,\n coField,\n} from \"../internal.js\";\n\n/** @category Identity & Permissions */\nexport class Profile extends CoMap {\n readonly name = coField.string;\n readonly inbox? = coField.optional.string;\n readonly inboxInvite? = coField.optional.string;\n\n /**\n * Creates a new profile with the given initial values and owner.\n *\n * The owner (a Group) determines access rights to the Profile.\n *\n * @category Creation\n * @deprecated Use `co.profile(...).create` instead.\n */\n static override create<M extends CoMap>(\n this: CoValueClass<M>,\n init: Simplify<CoMapInit_DEPRECATED<M>>,\n options?:\n | {\n owner: Group;\n }\n | Group,\n ) {\n const owner =\n options !== undefined && \"owner\" in options ? options.owner : options;\n\n // We add some guardrails to ensure that the owner of a profile is a group\n if ((owner as Group | Account | undefined)?.[TypeSym] === \"Account\") {\n throw new Error(\"Profiles should be owned by a group\");\n }\n\n return super.create<M>(init, options);\n }\n}\n","import {\n CoID,\n CoValueCore,\n InviteSecret,\n RawAccount,\n RawCoMap,\n SessionID,\n} from \"cojson\";\nimport { type AvailableCoValueCore, type RawCoStream } from \"cojson\";\nimport {\n type Account,\n CoValue,\n CoValueClassOrSchema,\n ID,\n InstanceOfSchema,\n activeAccountContext,\n coValueClassFromCoValueClassOrSchema,\n loadCoValue,\n} from \"../internal.js\";\nimport { isCoValueId } from \"../lib/id.js\";\n\nexport type InboxInvite = `${CoID<MessagesStream>}/${InviteSecret}`;\ntype TxKey = `${SessionID}/${number}`;\n\ntype MessagesStream = RawCoStream<CoID<InboxMessage<CoValue, any>>>;\ntype FailedMessagesStreamItem = {\n errors: string[];\n value: CoID<InboxMessage<CoValue, any>>;\n};\ntype FailedMessagesStream = RawCoStream<FailedMessagesStreamItem>;\ntype TxKeyStream = RawCoStream<TxKey>;\nexport type InboxRoot = RawCoMap<{\n messages: CoID<MessagesStream>;\n processed: CoID<TxKeyStream>;\n failed: CoID<FailedMessagesStream>;\n inviteLink: InboxInvite;\n}>;\n\nexport function createInboxRoot(account: Account) {\n if (!account.$jazz.isLocalNodeOwner) {\n throw new Error(\"Account is not controlled\");\n }\n\n const rawAccount = account.$jazz.raw;\n\n const group = rawAccount.core.node.createGroup();\n const messagesFeed = group.createStream<MessagesStream>();\n\n const inboxRoot = rawAccount.createMap<InboxRoot>();\n const processedFeed = rawAccount.createStream<TxKeyStream>();\n const failedFeed = rawAccount.createStream<FailedMessagesStream>();\n\n const inviteLink =\n `${messagesFeed.id}/${group.createInvite(\"writeOnly\")}` as const;\n\n inboxRoot.set(\"messages\", messagesFeed.id);\n inboxRoot.set(\"processed\", processedFeed.id);\n inboxRoot.set(\"failed\", failedFeed.id);\n\n return {\n id: inboxRoot.id,\n inviteLink,\n };\n}\n\n/**\n * An abstraction on top of CoStream to get the new items in a performant way.\n */\nclass IncrementalFeed {\n constructor(private feed: AvailableCoValueCore) {}\n\n private sessions = {};\n getNewItems() {\n const items = this.feed.getValidTransactions({\n ignorePrivateTransactions: false,\n from: this.sessions,\n });\n\n this.sessions = this.feed.knownState().sessions;\n\n return items;\n }\n}\n\ntype InboxMessage<I extends CoValue, O extends CoValue | undefined> = RawCoMap<{\n payload: ID<I>;\n result: ID<O> | undefined;\n processed: boolean;\n error: string | undefined;\n}>;\n\nasync function createInboxMessage<\n I extends CoValue,\n O extends CoValue | undefined,\n>(payload: I, inboxOwner: RawAccount) {\n const group = payload.$jazz.raw.group;\n\n if (group instanceof RawAccount) {\n throw new Error(\"Inbox messages should be owned by a group\");\n }\n\n group.addMember(inboxOwner, \"writer\");\n\n const message = group.createMap<InboxMessage<I, O>>({\n payload: payload.$jazz.id,\n result: undefined,\n processed: false,\n error: undefined,\n });\n\n await payload.$jazz.raw.core.waitForSync();\n await message.core.waitForSync();\n\n return message;\n}\n\nclass MessageQueue {\n private queue: Array<{\n txKey: TxKey;\n messageId: CoID<InboxMessage<CoValue, any>>;\n }> = [];\n private processing = new Set<TxKey>();\n private concurrencyLimit: number;\n private activeCount = 0;\n\n constructor(\n concurrencyLimit: number = 10,\n private processMessage: (\n txKey: TxKey,\n messageId: CoID<InboxMessage<CoValue, any>>,\n ) => Promise<void>,\n private handleError: (\n txKey: TxKey,\n messageId: CoID<InboxMessage<CoValue, any>>,\n error: Error,\n ) => void,\n ) {\n this.concurrencyLimit = concurrencyLimit;\n }\n\n enqueue(txKey: TxKey, messageId: CoID<InboxMessage<CoValue, any>>) {\n this.queue.push({ txKey, messageId });\n this.processNext();\n }\n\n private async processNext() {\n if (this.activeCount >= this.concurrencyLimit || this.queue.length === 0) {\n return;\n }\n\n const { txKey, messageId } = this.queue.shift()!;\n\n if (this.processing.has(txKey)) {\n this.processNext();\n return;\n }\n\n this.processing.add(txKey);\n this.activeCount++;\n\n try {\n await this.processMessage(txKey, messageId);\n } catch (error) {\n this.handleError(txKey, messageId, error as Error);\n } finally {\n this.processing.delete(txKey);\n this.activeCount--;\n this.processNext();\n }\n }\n}\n\nexport class Inbox {\n account: Account;\n messages: MessagesStream;\n processed: TxKeyStream;\n failed: FailedMessagesStream;\n root: InboxRoot;\n\n private constructor(\n account: Account,\n root: InboxRoot,\n messages: MessagesStream,\n processed: TxKeyStream,\n failed: FailedMessagesStream,\n ) {\n this.account = account;\n this.root = root;\n this.messages = messages;\n this.processed = processed;\n this.failed = failed;\n }\n\n subscribe<M extends CoValueClassOrSchema, O extends CoValue | undefined>(\n Schema: M,\n callback: (\n message: InstanceOfSchema<M>,\n senderAccountID: ID<Account>,\n ) => Promise<O | undefined | void>,\n options?: { concurrencyLimit?: number },\n ) {\n const processed = new Set<`${SessionID}/${number}`>();\n const node = this.account.$jazz.localNode;\n\n // Create queue instance inside subscribe function\n const concurrencyLimit = options?.concurrencyLimit ?? 10;\n\n const processedFeed = new IncrementalFeed(this.processed.core);\n\n // Track the already processed messages, triggered immediately so we know the messages processed in the previous sessions\n this.processed.subscribe(() => {\n for (const { changes } of processedFeed.getNewItems()) {\n processed.add(changes[0] as TxKey);\n }\n });\n\n const { account } = this;\n\n const messagesFeed = new IncrementalFeed(this.messages.core);\n\n // Set up the message processing handler for the queue\n const processMessage = async (\n txKey: TxKey,\n messageId: CoID<InboxMessage<CoValue, any>>,\n ) => {\n const message = await node.load(messageId);\n if (message === \"unavailable\") {\n throw new Error(`Inbox: message ${messageId} is unavailable`);\n }\n\n const value = await loadCoValue(\n coValueClassFromCoValueClassOrSchema(Schema),\n message.get(\"payload\")!,\n {\n loadAs: account,\n },\n );\n\n if (!value) {\n throw new Error(\n `Inbox: Unable to load the payload of message ${messageId}`,\n );\n }\n\n const accountID = getAccountIDfromSessionID(\n txKey.split(\"/\")[0] as SessionID,\n );\n if (!accountID) {\n throw new Error(`Inbox: Unknown account for message ${messageId}`);\n }\n\n const result = await callback(value as InstanceOfSchema<M>, accountID);\n\n const inboxMessage = node\n .expectCoValueLoaded(messageId)\n .getCurrentContent() as RawCoMap;\n\n if (result) {\n inboxMessage.set(\"result\", result.$jazz.id);\n }\n\n inboxMessage.set(\"processed\", true);\n this.processed.push(txKey);\n };\n\n const handleError = (\n txKey: TxKey,\n messageId: CoID<InboxMessage<CoValue, any>>,\n error: Error,\n ) => {\n console.error(error);\n\n const stringifiedError = String(error);\n\n this.processed.push(txKey);\n this.failed.push({ errors: [stringifiedError], value: messageId });\n\n try {\n const inboxMessage = node\n .expectCoValueLoaded(messageId)\n .getCurrentContent() as RawCoMap;\n\n inboxMessage.set(\"error\", stringifiedError);\n inboxMessage.set(\"processed\", true);\n } catch (error) {}\n };\n\n const messageQueue = new MessageQueue(\n concurrencyLimit,\n processMessage,\n handleError,\n );\n\n const handleNewMessages = () => {\n for (const tx of messagesFeed.getNewItems()) {\n const accountID = getAccountIDfromSessionID(tx.txID.sessionID);\n\n if (!accountID) {\n console.warn(\n \"Received message from unknown account\",\n tx.txID.sessionID,\n );\n continue;\n }\n\n const id = tx.changes[0] as CoID<InboxMessage<CoValue, any>>;\n\n if (!isCoValueId(id)) {\n continue;\n }\n\n const txKey = `${tx.txID.sessionID}/${tx.txID.txIndex}` as const;\n\n if (processed.has(txKey)) {\n continue;\n }\n\n // Enqueue the message for processing\n messageQueue.enqueue(txKey, id);\n }\n };\n\n const unsubscribe = this.messages.subscribe(handleNewMessages);\n\n return () => {\n unsubscribe();\n };\n }\n\n static async load(account: Account) {\n const profile = account.profile;\n\n if (!profile) {\n throw new Error(\"Account profile should already be loaded\");\n }\n\n if (!profile.inbox) {\n throw new Error(\"The account has not set up their inbox\");\n }\n\n const node = account.$jazz.localNode;\n\n const root = await node.load(profile.inbox as CoID<InboxRoot>);\n\n if (root === \"unavailable\") {\n throw new Error(\"Inbox not found\");\n }\n\n const [messages, processed, failed] = await Promise.all([\n node.load(root.get(\"messages\")!),\n node.load(root.get(\"processed\")!),\n node.load(root.get(\"failed\")!),\n ]);\n\n if (\n messages === \"unavailable\" ||\n processed === \"unavailable\" ||\n failed === \"unavailable\"\n ) {\n throw new Error(\"Inbox not found\");\n }\n\n await processed.core.waitForFullStreaming();\n\n return new Inbox(account, root, messages, processed, failed);\n }\n}\n\nexport class InboxSender<I extends CoValue, O extends CoValue | undefined> {\n currentAccount: Account;\n owner: RawAccount;\n messages: MessagesStream;\n\n private constructor(\n currentAccount: Account,\n owner: RawAccount,\n messages: MessagesStream,\n ) {\n this.currentAccount = currentAccount;\n this.owner = owner;\n this.messages = messages;\n }\n\n getOwnerAccount() {\n return this.owner;\n }\n\n async sendMessage(\n message: I,\n ): Promise<O extends CoValue ? ID<O> : undefined> {\n const inboxMessage = await createInboxMessage<I, O>(message, this.owner);\n\n this.messages.push(inboxMessage.id);\n\n return new Promise((resolve, reject) => {\n inboxMessage.subscribe((message) => {\n if (message.get(\"processed\")) {\n const error = message.get(\"error\");\n if (error) {\n reject(new Error(error));\n } else {\n resolve(\n message.get(\"result\") as O extends CoValue ? ID<O> : undefined,\n );\n }\n }\n });\n });\n }\n\n static async load<\n I extends CoValue,\n O extends CoValue | undefined = undefined,\n >(inboxOwnerID: ID<Account>, currentAccount?: Account) {\n currentAccount ||= activeAccountContext.get();\n\n const node = currentAccount.$jazz.localNode;\n\n const inboxOwnerRaw = await node.load(\n inboxOwnerID as unknown as CoID<RawAccount>,\n );\n\n if (inboxOwnerRaw === \"unavailable\") {\n throw new Error(\"Failed to load the inbox owner\");\n }\n\n const inboxOwnerProfileRaw = await node.load(inboxOwnerRaw.get(\"profile\")!);\n\n if (inboxOwnerProfileRaw === \"unavailable\") {\n throw new Error(\"Failed to load the inbox owner profile\");\n }\n\n if (\n inboxOwnerProfileRaw.group.roleOf(currentAccount.$jazz.raw.id) !==\n \"reader\" &&\n inboxOwnerProfileRaw.group.roleOf(currentAccount.$jazz.raw.id) !==\n \"writer\" &&\n inboxOwnerProfileRaw.group.roleOf(currentAccount.$jazz.raw.id) !== \"admin\"\n ) {\n throw new Error(\n \"Insufficient permissions to access the inbox, make sure its user profile is publicly readable.\",\n );\n }\n\n const inboxInvite = inboxOwnerProfileRaw.get(\"inboxInvite\");\n\n if (!inboxInvite) {\n throw new Error(\"The user has not set up their inbox\");\n }\n\n const id = await acceptInvite(inboxInvite as InboxInvite, currentAccount);\n\n const messages = await node.load(id);\n\n if (messages === \"unavailable\") {\n throw new Error(\"Inbox not found\");\n }\n\n return new InboxSender<I, O>(currentAccount, inboxOwnerRaw, messages);\n }\n}\n\nasync function acceptInvite(invite: string, account?: Account) {\n account ||= activeAccountContext.get();\n\n const id = invite.slice(0, invite.indexOf(\"/\")) as CoID<MessagesStream>;\n\n const inviteSecret = invite.slice(invite.indexOf(\"/\") + 1) as InviteSecret;\n\n if (!isCoValueId(id) || !inviteSecret.startsWith(\"inviteSecret_\")) {\n throw new Error(\"Invalid inbox ticket\");\n }\n\n if (!account.$jazz.isLocalNodeOwner) {\n throw new Error(\"Account is not controlled\");\n }\n\n await account.$jazz.localNode.acceptInvite(id, inviteSecret);\n\n return id;\n}\n\nfunction getAccountIDfromSessionID(sessionID: SessionID) {\n const until = sessionID.indexOf(\"_session\");\n const accountID = sessionID.slice(0, until);\n\n if (isCoValueId(accountID)) {\n return accountID;\n }\n\n return;\n}\n","export function isCoValueId(id: unknown): id is `co_z${string}` {\n return typeof id === \"string\" && id.startsWith(\"co_z\");\n}\n","import { type OpID, type RawCoPlainText, stringifyOpID } from \"cojson\";\nimport { calcPatch } from \"fast-myers-diff\";\nimport {\n AnonymousJazzAgent,\n CoValue,\n CoValueClass,\n CoValueJazzApi,\n ID,\n Resolved,\n SubscribeListenerOptions,\n SubscribeRestArgs,\n TypeSym,\n parseCoValueCreateOptions,\n} from \"../internal.js\";\nimport {\n inspect,\n loadCoValueWithoutMe,\n parseSubscribeRestArgs,\n subscribeToCoValueWithoutMe,\n subscribeToExistingCoValue,\n} from \"../internal.js\";\nimport { Account } from \"./account.js\";\nimport { getCoValueOwner, Group } from \"./group.js\";\n\nexport type TextPos = OpID;\n\nexport class CoPlainText extends String implements CoValue {\n declare [TypeSym]: \"CoPlainText\";\n\n declare $jazz: CoTextJazzApi<this>;\n\n /** @internal */\n constructor(\n options:\n | { fromRaw: RawCoPlainText }\n | { text: string; owner: Account | Group }\n | undefined,\n ) {\n if (!options) {\n super(\"\"); // Intialise as empty string\n return;\n }\n\n if (\"fromRaw\" in options) {\n super(options.fromRaw.toString());\n const raw = options.fromRaw;\n Object.defineProperties(this, {\n [TypeSym]: { value: \"CoPlainText\", enumerable: false },\n $jazz: {\n value: new CoTextJazzApi(this, raw),\n enumerable: false,\n },\n });\n return;\n }\n\n if (\"text\" in options && \"owner\" in options) {\n super(options.text);\n const raw = options.owner.$jazz.raw.createPlainText(options.text);\n Object.defineProperties(this, {\n [TypeSym]: { value: \"CoPlainText\", enumerable: false },\n $jazz: {\n value: new CoTextJazzApi(this, raw),\n enumerable: false,\n },\n });\n return;\n }\n\n throw new Error(\"Invalid constructor arguments\");\n }\n\n /**\n * Create a new `CoPlainText` with the given text and owner.\n *\n * The owner (a Group or Account) determines access rights to the CoPlainText.\n *\n * The CoPlainText will immediately be persisted and synced to connected peers.\n *\n * @example\n * ```ts\n * const text = CoPlainText.create(\"Hello, world!\", { owner: me });\n * ```\n *\n * @category Creation\n * @deprecated Use `co.plainText(...).create` instead.\n */\n static create<T extends CoPlainText>(\n this: CoValueClass<T>,\n text: string,\n options?: { owner: Account | Group } | Account | Group,\n ) {\n const { owner } = parseCoValueCreateOptions(options);\n return new this({ text, owner });\n }\n\n get length() {\n return this.$jazz.raw.toString().length;\n }\n\n toString() {\n return this.$jazz.raw.toString();\n }\n\n valueOf() {\n return this.$jazz.raw.toString();\n }\n\n toJSON(): string {\n return this.$jazz.raw.toString();\n }\n\n [inspect]() {\n return this.toJSON();\n }\n\n insertBefore(idx: number, text: string) {\n this.$jazz.raw.insertBefore(idx, text);\n }\n\n insertAfter(idx: number, text: string) {\n this.$jazz.raw.insertAfter(idx, text);\n }\n\n deleteRange(range: { from: number; to: number }) {\n this.$jazz.raw.deleteRange(range);\n }\n\n posBefore(idx: number): TextPos | undefined {\n return this.$jazz.raw.mapping.opIDbeforeIdx[idx];\n }\n\n posAfter(idx: number): TextPos | undefined {\n return this.$jazz.raw.mapping.opIDafterIdx[idx];\n }\n\n idxBefore(pos: TextPos): number | undefined {\n return this.$jazz.raw.mapping.idxBeforeOpID[stringifyOpID(pos)];\n }\n\n idxAfter(pos: TextPos): number | undefined {\n return this.$jazz.raw.mapping.idxAfterOpID[stringifyOpID(pos)];\n }\n\n /** @category Internals */\n static fromRaw<V extends CoPlainText>(\n this: CoValueClass<V> & typeof CoPlainText,\n raw: RawCoPlainText,\n ) {\n return new this({ fromRaw: raw });\n }\n\n /**\n * Load a `CoPlainText` with a given ID, as a given account.\n *\n * @category Subscription & Loading\n * @deprecated Use `co.plainText(...).load` instead.\n */\n static load<T extends CoPlainText>(\n this: CoValueClass<T>,\n id: ID<T>,\n options?: { loadAs?: Account | AnonymousJazzAgent },\n ): Promise<T | null> {\n return loadCoValueWithoutMe(this, id, options);\n }\n\n /**\n * Load and subscribe to a `CoPlainText` with a given ID, as a given account.\n *\n * Automatically also subscribes to updates to all referenced/nested CoValues as soon as they are accessed in the listener.\n *\n * Check out the `load` methods on `CoMap`/`CoList`/`CoStream`/`Group`/`Account` to see which depth structures are valid to nest.\n *\n * Returns an unsubscribe function that you should call when you no longer need updates.\n *\n * Also see the `useCoState` hook to reactively subscribe to a CoValue in a React component.\n *\n * @category Subscription & Loading\n * @deprecated Use `co.plainText(...).subscribe` instead.\n */\n static subscribe<T extends CoPlainText>(\n this: CoValueClass<T>,\n id: ID<T>,\n listener: (value: Resolved<T, true>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<T extends CoPlainText>(\n this: CoValueClass<T>,\n id: ID<T>,\n options: Omit<SubscribeListenerOptions<T, true>, \"resolve\">,\n listener: (value: Resolved<T, true>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<T extends CoPlainText>(\n this: CoValueClass<T>,\n id: ID<T>,\n ...args: SubscribeRestArgs<T, true>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToCoValueWithoutMe<T, true>(this, id, options, listener);\n }\n\n /**\n * Allow CoPlainText to behave like a primitive string in most contexts (e.g.,\n * string concatenation, template literals, React rendering, etc.) by implementing\n * Symbol.toPrimitive. This eliminates the need to call .toString() explicitly.\n *\n * The 'hint' parameter indicates the preferred type of conversion:\n * - 'string': prefer string conversion\n * - 'number': prefer number conversion (attempt to parse the text as a number)\n * - 'default': usually treat as string\n */\n [Symbol.toPrimitive](hint: string) {\n if (hint === \"number\") {\n // Not meaningful for text, but required for completeness\n return Number(this.$jazz.raw.toString());\n }\n // For 'string' and 'default', return the string representation\n return this.$jazz.raw.toString();\n }\n}\n\nexport class CoTextJazzApi<T extends CoPlainText> extends CoValueJazzApi<T> {\n constructor(\n private coText: T,\n public raw: RawCoPlainText,\n ) {\n super(coText);\n }\n\n get id(): ID<T> {\n return this.raw.id;\n }\n\n get owner(): Group {\n return getCoValueOwner(this.coText);\n }\n\n /**\n * Apply text, modifying the text in place. Calculates the diff and applies it to the CoValue.\n *\n * @category Mutation\n */\n applyDiff(other: string) {\n const current = this.raw.toString();\n\n // Split both strings into grapheme arrays for proper comparison\n const currentGraphemes = this.raw.toGraphemes(current);\n const otherGraphemes = this.raw.toGraphemes(other);\n\n // Calculate the diff on grapheme arrays\n const patches = [...calcPatch(currentGraphemes, otherGraphemes)];\n\n // Apply patches in reverse order to avoid index shifting issues\n for (const [from, to, insert] of patches.reverse()) {\n if (to > from) {\n this.coText.deleteRange({ from, to });\n }\n if (insert.length > 0) {\n // Join the graphemes back into a string for insertion\n this.coText.insertBefore(from, this.raw.fromGraphemes(insert));\n }\n }\n }\n\n /**\n * Given an already loaded `CoPlainText`, subscribe to updates to the `CoPlainText` and ensure that the specified fields are loaded to the specified depth.\n *\n * Works like `CoPlainText.subscribe()`, but you don't need to pass the ID or the account to load as again.\n *\n * Returns an unsubscribe function that you should call when you no longer need updates.\n *\n * @category Subscription & Loading\n **/\n subscribe<T extends CoPlainText>(\n this: CoTextJazzApi<T>,\n listener: (value: Resolved<T, true>, unsubscribe: () => void) => void,\n ): () => void {\n return subscribeToExistingCoValue(this.coText, {}, listener);\n }\n}\n","import { CoPlainText } from \"./coPlainText.js\";\n\nexport class CoRichText extends CoPlainText {}\n","import { JsonValue, RawCoMap } from \"cojson\";\nimport {\n Account,\n AnonymousJazzAgent,\n CoMapInit_DEPRECATED,\n CoValue,\n CoValueBase,\n CoValueClass,\n CoValueFromRaw,\n CoValueJazzApi,\n Group,\n ID,\n Resolved,\n Simplify,\n SubscribeListenerOptions,\n SubscribeRestArgs,\n loadCoValueWithoutMe,\n parseSubscribeRestArgs,\n subscribeToCoValueWithoutMe,\n} from \"../internal.js\";\n\n/**\n * Extends `SchemaUnion` with a non-abstract constructor.\n */\nexport type SchemaUnionConcreteSubclass<V extends CoValue> =\n typeof SchemaUnion & CoValueClass<V>;\n\nexport type SchemaUnionDiscriminator<V extends CoValue> = (discriminable: {\n get(key: string): JsonValue | undefined;\n}) => CoValueClass<V> & CoValueFromRaw<V>;\n\n/**\n * SchemaUnion allows you to create union types of CoValues that can be discriminated at runtime.\n *\n * @categoryDescription Declaration\n * Declare your union types by extending `SchemaUnion.Of(...)` and passing a discriminator function that determines which concrete type to use based on the raw data.\n *\n * ```ts\n * import { SchemaUnion, CoMap } from \"jazz-tools\";\n *\n * class BaseWidget extends CoMap {\n * type = coField.string;\n * }\n *\n * class ButtonWidget extends BaseWidget {\n * type = coField.literal(\"button\");\n * label = coField.string;\n * }\n *\n * class SliderWidget extends BaseWidget {\n * type = coField.literal(\"slider\");\n * min = coField.number;\n * max = coField.number;\n * }\n *\n * const WidgetUnion = SchemaUnion.Of<BaseWidget>((raw) => {\n * switch (raw.get(\"type\")) {\n * case \"button\": return ButtonWidget;\n * case \"slider\": return SliderWidget;\n * default: throw new Error(\"Unknown widget type\");\n * }\n * });\n * ```\n *\n * @category CoValues\n */\nexport abstract class SchemaUnion extends CoValueBase implements CoValue {\n /**\n * Create a new union type from a discriminator function.\n *\n * The discriminator function receives the raw data and should return the appropriate concrete class to use for that data.\n *\n * When loading a SchemaUnion, the correct subclass will be instantiated based on the discriminator.\n *\n * @param discriminator - Function that determines which concrete type to use\n * @returns A new class that can create/load instances of the union type\n *\n * @example\n * ```ts\n * const WidgetUnion = SchemaUnion.Of<BaseWidget>((raw) => {\n * switch (raw.get(\"type\")) {\n * case \"button\": return ButtonWidget;\n * case \"slider\": return SliderWidget;\n * default: throw new Error(\"Unknown widget type\");\n * }\n * });\n *\n * const widget = await loadCoValue(WidgetUnion, id, me, {});\n *\n * // You can narrow the returned instance to a subclass by using `instanceof`\n * if (widget instanceof ButtonWidget) {\n * console.log(widget.label);\n * } else if (widget instanceof SliderWidget) {\n * console.log(widget.min, widget.max);\n * }\n * ```\n *\n * @category Declaration\n **/\n static Of<V extends CoValue>(\n discriminator: SchemaUnionDiscriminator<V>,\n ): SchemaUnionConcreteSubclass<V> {\n return class SchemaUnionClass extends SchemaUnion {\n declare $jazz: CoValueJazzApi<this>;\n\n static override create<V extends CoValue>(\n this: CoValueClass<V>,\n init: Simplify<CoMapInit_DEPRECATED<V>>,\n owner: Account | Group,\n ): V {\n const ResolvedClass = discriminator(new Map(Object.entries(init)));\n // @ts-expect-error - create is a static method in the CoMap class\n return ResolvedClass.create(init, owner);\n }\n\n static override fromRaw<T extends CoValue>(\n this: CoValueClass<T> & CoValueFromRaw<T>,\n raw: T[\"$jazz\"][\"raw\"],\n ): T {\n const ResolvedClass = discriminator(\n raw as RawCoMap,\n ) as unknown as CoValueClass<T> & CoValueFromRaw<T>;\n return ResolvedClass.fromRaw(raw);\n }\n } as unknown as SchemaUnionConcreteSubclass<V>;\n }\n\n static create<V extends CoValue>(\n this: CoValueClass<V>,\n init: Simplify<CoMapInit_DEPRECATED<V>>,\n owner: Account | Group,\n ): V {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Create an instance from raw data. This is called internally and should not be used directly.\n * Use {@link SchemaUnion.Of} to create a union type instead.\n *\n * @internal\n */\n static fromRaw<V extends CoValue>(\n this: CoValueClass<V>,\n raw: V[\"$jazz\"][\"raw\"],\n ): V {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Load a `SchemaUnion` with a given ID, as a given account.\n *\n * Note: The `resolve` option is not supported for `SchemaUnion`s due to https://github.com/garden-co/jazz/issues/2639\n *\n * @category Subscription & Loading\n */\n static load<M extends SchemaUnion>(\n this: CoValueClass<M>,\n id: ID<M>,\n options?: {\n loadAs?: Account | AnonymousJazzAgent;\n skipRetry?: boolean;\n },\n ): Promise<Resolved<M, true> | null> {\n return loadCoValueWithoutMe(this, id, options);\n }\n\n /**\n * Load and subscribe to a `CoMap` with a given ID, as a given account.\n *\n * Automatically also subscribes to updates to all referenced/nested CoValues as soon as they are accessed in the listener.\n *\n * Returns an unsubscribe function that you should call when you no longer need updates.\n *\n * Also see the `useCoState` hook to reactively subscribe to a CoValue in a React component.\n *\n * Note: The `resolve` option is not supported for `SchemaUnion`s due to https://github.com/garden-co/jazz/issues/2639\n *\n * @category Subscription & Loading\n */\n static subscribe<M extends SchemaUnion>(\n this: CoValueClass<M>,\n id: ID<M>,\n listener: (value: Resolved<M, true>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<M extends SchemaUnion>(\n this: CoValueClass<M>,\n id: ID<M>,\n options: SubscribeListenerOptions<M, true>,\n listener: (value: Resolved<M, true>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<M extends SchemaUnion>(\n this: CoValueClass<M>,\n id: ID<M>,\n ...args: SubscribeRestArgs<M, true>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToCoValueWithoutMe<M, true>(this, id, options, listener);\n }\n}\n","import { LocalNode } from \"cojson\";\nimport { TypeSym } from \"./symbols.js\";\n\nexport class AnonymousJazzAgent {\n [TypeSym] = \"Anonymous\" as const;\n constructor(public node: LocalNode) {}\n}\n","import type { Account } from \"../internal.js\";\n\nclass ActiveAccountContext {\n private activeAccount: Account | null = null;\n private guestMode: boolean = false;\n\n set(account: Account | null) {\n this.activeAccount = account;\n this.guestMode = false;\n }\n\n setGuestMode() {\n this.activeAccount = null;\n this.guestMode = true;\n }\n\n maybeGet() {\n return this.activeAccount;\n }\n\n get() {\n if (!this.activeAccount) {\n if (this.guestMode) {\n throw new Error(\n \"Something that expects a full active account was called in guest mode.\",\n );\n }\n\n throw new Error(\"No active account\");\n }\n\n return this.activeAccount;\n }\n}\n\nexport type { ActiveAccountContext };\n\nexport const activeAccountContext = new ActiveAccountContext();\n","import { type Account } from \"../coValues/account.js\";\nimport type {\n AnonymousJazzAgent,\n CoValue,\n ID,\n RefEncoded,\n} from \"../internal.js\";\nimport {\n accessChildById,\n getSubscriptionScope,\n isRefEncoded,\n} from \"../internal.js\";\n\nexport class Ref<out V extends CoValue> {\n constructor(\n readonly id: ID<V>,\n readonly controlledAccount: Account | AnonymousJazzAgent,\n readonly schema: RefEncoded<V>,\n readonly parent: CoValue,\n ) {\n if (!isRefEncoded(schema)) {\n throw new Error(\"Ref must be constructed with a ref schema\");\n }\n }\n\n async load(): Promise<V | null> {\n const subscriptionScope = getSubscriptionScope(this.parent);\n\n subscriptionScope.subscribeToId(this.id, this.schema);\n\n const node = subscriptionScope.childNodes.get(this.id);\n\n if (!node) {\n return null;\n }\n\n const value = node.value;\n\n if (value?.type === \"loaded\") {\n return value.value as V;\n } else {\n return new Promise((resolve) => {\n const unsubscribe = node.subscribe((value) => {\n if (value?.type === \"loaded\") {\n unsubscribe();\n resolve(value.value as V);\n } else if (value?.type === \"unavailable\") {\n unsubscribe();\n resolve(null);\n } else if (value?.type === \"unauthorized\") {\n unsubscribe();\n resolve(null);\n }\n });\n });\n }\n }\n\n get value(): V | null | undefined {\n return accessChildById(this.parent, this.id, this.schema);\n }\n}\n\nexport function makeRefs<Keys extends string | number>(\n parent: CoValue,\n getIdForKey: (key: Keys) => ID<CoValue> | undefined,\n getKeysWithIds: () => Keys[],\n controlledAccount: Account | AnonymousJazzAgent,\n refSchemaForKey: (key: Keys) => RefEncoded<CoValue>,\n): { [K in Keys]: Ref<CoValue> } & {\n [Symbol.iterator]: () => IterableIterator<Ref<CoValue>>;\n length: number;\n} {\n const refs = {} as { [K in Keys]: Ref<CoValue> } & {\n [Symbol.iterator]: () => IterableIterator<Ref<CoValue>>;\n length: number;\n };\n return new Proxy(refs, {\n get(_target, key) {\n if (key === Symbol.iterator) {\n return function* () {\n for (const key of getKeysWithIds()) {\n yield new Ref(\n getIdForKey(key)!,\n controlledAccount,\n refSchemaForKey(key),\n parent,\n );\n }\n };\n }\n if (typeof key === \"symbol\") return undefined;\n if (key === \"length\") {\n return getKeysWithIds().length;\n }\n const id = getIdForKey(key as Keys);\n if (!id) return undefined;\n return new Ref(\n id as ID<CoValue>,\n controlledAccount,\n refSchemaForKey(key as Keys),\n parent,\n );\n },\n ownKeys() {\n return getKeysWithIds().map((key) => key.toString());\n },\n getOwnPropertyDescriptor(target, key) {\n const id = getIdForKey(key as Keys);\n if (id) {\n return {\n enumerable: true,\n configurable: true,\n writable: true,\n };\n } else {\n return Reflect.getOwnPropertyDescriptor(target, key);\n }\n },\n });\n}\n\nexport type RefIfCoValue<V> = NonNullable<V> extends CoValue\n ? Ref<NonNullable<V>>\n : never;\n","import type { JsonValue, RawCoValue } from \"cojson\";\nimport { CojsonInternalTypes } from \"cojson\";\nimport {\n Account,\n type CoValue,\n type CoValueClass,\n CoValueFromRaw,\n Group,\n ItemsSym,\n SchemaInit,\n isCoValueClass,\n} from \"../internal.js\";\n\n/** @category Schema definition */\nexport const Encoders = {\n Date: {\n encode: (value: Date) => value.toISOString(),\n decode: (value: JsonValue) => new Date(value as string),\n },\n OptionalDate: {\n encode: (value: Date | undefined) => value?.toISOString() || null,\n decode: (value: JsonValue) =>\n value === null ? undefined : new Date(value as string),\n },\n};\n\nconst optional = {\n ref: optionalRef,\n json<T extends CojsonInternalTypes.CoJsonValue<T>>(): T | undefined {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { [SchemaInit]: \"json\" satisfies Schema } as any;\n },\n encoded<T>(arg: OptionalEncoder<T>): T | undefined {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { [SchemaInit]: { encoded: arg } satisfies Schema } as any;\n },\n string: {\n [SchemaInit]: \"json\" satisfies Schema,\n } as unknown as string | undefined,\n number: {\n [SchemaInit]: \"json\" satisfies Schema,\n } as unknown as number | undefined,\n boolean: {\n [SchemaInit]: \"json\" satisfies Schema,\n } as unknown as boolean | undefined,\n null: {\n [SchemaInit]: \"json\" satisfies Schema,\n } as unknown as null | undefined,\n Date: {\n [SchemaInit]: { encoded: Encoders.OptionalDate } satisfies Schema,\n } as unknown as Date | undefined,\n literal<T extends (string | number | boolean)[]>(\n ..._lit: T\n ): T[number] | undefined {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { [SchemaInit]: \"json\" satisfies Schema } as any;\n },\n};\n\n/** @category Schema definition */\nexport const coField = {\n string: {\n [SchemaInit]: \"json\" satisfies Schema,\n } as unknown as string,\n number: {\n [SchemaInit]: \"json\" satisfies Schema,\n } as unknown as number,\n boolean: {\n [SchemaInit]: \"json\" satisfies Schema,\n } as unknown as boolean,\n null: {\n [SchemaInit]: \"json\" satisfies Schema,\n } as unknown as null,\n Date: {\n [SchemaInit]: { encoded: Encoders.Date } satisfies Schema,\n } as unknown as Date,\n literal<T extends (string | number | boolean)[]>(..._lit: T): T[number] {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { [SchemaInit]: \"json\" satisfies Schema } as any;\n },\n json<T extends CojsonInternalTypes.CoJsonValue<T>>(): T {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { [SchemaInit]: \"json\" satisfies Schema } as any;\n },\n encoded<T>(arg: Encoder<T>): T {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { [SchemaInit]: { encoded: arg } satisfies Schema } as any;\n },\n ref,\n items: ItemsSym as ItemsSym,\n optional,\n};\n\nfunction optionalRef<C extends CoValueClass>(\n arg: C | ((raw: InstanceType<C>[\"$jazz\"][\"raw\"]) => C),\n): InstanceType<C> | null | undefined {\n return ref(arg, { optional: true });\n}\n\nfunction ref<C extends CoValueClass>(\n arg: C | ((raw: InstanceType<C>[\"$jazz\"][\"raw\"]) => C),\n options?: never,\n): InstanceType<C> | null;\nfunction ref<C extends CoValueClass>(\n arg: C | ((raw: InstanceType<C>[\"$jazz\"][\"raw\"]) => C),\n options: { optional: true },\n): InstanceType<C> | null | undefined;\nfunction ref<\n C extends CoValueClass,\n Options extends { optional?: boolean } | undefined,\n>(\n arg: C | ((raw: InstanceType<C>[\"$jazz\"][\"raw\"]) => C),\n options?: Options,\n): Options extends { optional: true }\n ? InstanceType<C> | null | undefined\n : InstanceType<C> | null {\n return {\n [SchemaInit]: {\n ref: arg,\n optional: options?.optional || false,\n } satisfies Schema,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any;\n}\n\nexport type JsonEncoded = \"json\";\nexport type EncodedAs<V> = { encoded: Encoder<V> | OptionalEncoder<V> };\nexport type RefEncoded<V extends CoValue> = {\n ref: CoValueClass<V> | ((raw: RawCoValue) => CoValueClass<V>);\n optional: boolean;\n};\n\nexport function isRefEncoded<V extends CoValue>(\n schema: Schema,\n): schema is RefEncoded<V> {\n return (\n typeof schema === \"object\" &&\n \"ref\" in schema &&\n \"optional\" in schema &&\n typeof schema.ref === \"function\"\n );\n}\n\nexport function instantiateRefEncodedFromRaw<V extends CoValue>(\n schema: RefEncoded<V>,\n raw: RawCoValue,\n): V {\n return isCoValueClass<V>(schema.ref)\n ? schema.ref.fromRaw(raw)\n : (schema.ref as (raw: RawCoValue) => CoValueClass<V> & CoValueFromRaw<V>)(\n raw,\n ).fromRaw(raw);\n}\n\n/**\n * Creates a new CoValue of the given ref type, using the provided init values.\n *\n * @param schema - The schema of the CoValue to create.\n * @param init - The init values to use to create the CoValue.\n * @param parentOwner - The owner of the referencing CoValue. Will be used\n * as the parent group of the created CoValue's group\n * @returns The created CoValue.\n */\nexport function instantiateRefEncodedWithInit<V extends CoValue>(\n schema: RefEncoded<V>,\n init: any,\n parentOwner: Group,\n): V {\n if (!isCoValueClass<V>(schema.ref)) {\n throw Error(\n `Cannot automatically create CoValue from value: ${JSON.stringify(init)}. Use the CoValue schema's create() method instead.`,\n );\n }\n const node = parentOwner.$jazz.localNode;\n const rawGroup = node.createGroup();\n const owner = new Group({ fromRaw: rawGroup });\n owner.addMember(parentOwner);\n // @ts-expect-error - create is a static method in all CoValue classes\n return schema.ref.create(init, owner);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Schema = JsonEncoded | RefEncoded<CoValue> | EncodedAs<any>;\n\nexport type SchemaFor<Field> = NonNullable<Field> extends CoValue\n ? RefEncoded<NonNullable<Field>>\n : NonNullable<Field> extends JsonValue\n ? JsonEncoded\n : EncodedAs<NonNullable<Field>>;\n\nexport type Encoder<V> = {\n encode: (value: V) => JsonValue;\n decode: (value: JsonValue) => V;\n};\nexport type OptionalEncoder<V> =\n | Encoder<V>\n | {\n encode: (value: V | undefined) => JsonValue;\n decode: (value: JsonValue) => V | undefined;\n };\n","import { TypeSym, type CoValue } from \"../internal.js\";\n\nexport function applyCoValueMigrations(instance: CoValue) {\n const node = instance.$jazz.raw.core.node;\n\n // @ts-expect-error _migratedCoValues is a custom expando property\n const migratedCoValues = (node._migratedCoValues ??= new Set<string>());\n\n if (\n \"migrate\" in instance &&\n typeof instance.migrate === \"function\" &&\n instance[TypeSym] !== \"Account\" &&\n !migratedCoValues.has(instance.$jazz.id)\n ) {\n // We flag this before the migration to avoid that internal loads trigger the migration again\n migratedCoValues.add(instance.$jazz.id);\n\n const result = instance.migrate?.(instance);\n if (result && \"then\" in result) {\n throw new Error(\"Migration function cannot be async\");\n }\n }\n}\n","import { CoValueCore, LocalNode, RawCoID, RawCoValue } from \"cojson\";\nimport type { Account, Group } from \"../internal.js\";\n\nexport type BranchDefinition = { name: string; owner?: Group | Account };\n\n/**\n * Manages subscriptions to CoValue cores, handling both direct subscriptions\n * and branch-based subscriptions with automatic loading and error handling.\n *\n * It tries to resolve the value immediately if already available in memory.\n */\nexport class CoValueCoreSubscription {\n private _unsubscribe: () => void = () => {};\n private unsubscribed = false;\n\n private branchOwnerId?: RawCoID;\n private branchName?: string;\n private source: CoValueCore;\n private localNode: LocalNode;\n private listener: (value: RawCoValue | \"unavailable\") => void;\n private skipRetry?: boolean;\n\n constructor(\n localNode: LocalNode,\n id: string,\n listener: (value: RawCoValue | \"unavailable\") => void,\n skipRetry?: boolean,\n branch?: BranchDefinition,\n ) {\n this.localNode = localNode;\n this.listener = listener;\n this.skipRetry = skipRetry;\n this.branchName = branch?.name;\n this.branchOwnerId = branch?.owner?.$jazz.raw.id;\n this.source = localNode.getCoValue(id as RawCoID);\n\n this.initializeSubscription();\n }\n\n /**\n * Main entry point for subscription initialization.\n * Determines the subscription strategy based on current availability and branch requirements.\n */\n private initializeSubscription(): void {\n const source = this.source;\n\n // If the CoValue is already available, handle it immediately\n if (source.isAvailable()) {\n this.handleAvailableSource(source);\n return;\n }\n\n // If a specific branch is requested while the source is not available, attempt to checkout that branch\n if (this.branchName) {\n this.handleBranchCheckout();\n return;\n }\n\n // If we don't have a branch requested, load the CoValue\n this.loadCoValue();\n }\n\n /**\n * Handles the case where the CoValue source is immediately available.\n * Either subscribes directly or attempts to get the requested branch.\n */\n private handleAvailableSource(source: CoValueCore): void {\n if (!this.branchName) {\n this.subscribe(source.getCurrentContent());\n return;\n }\n\n // Try to get the specific branch from the available source\n const branch = source.getBranch(this.branchName, this.branchOwnerId);\n\n if (branch.isAvailable()) {\n // Branch is available, subscribe to it\n this.subscribe(branch.getCurrentContent());\n return;\n } else {\n // Branch not available, fall through to checkout logic\n this.handleBranchCheckout();\n }\n }\n\n /**\n * Attempts to checkout a specific branch of the CoValue.\n * This is called when the source isn't available but a branch is requested.\n */\n private handleBranchCheckout(): void {\n this.localNode\n .checkoutBranch(this.source.id, this.branchName!, this.branchOwnerId)\n .then((value) => {\n if (this.unsubscribed) return;\n\n if (value !== \"unavailable\") {\n // Branch checkout successful, subscribe to it\n this.subscribe(value);\n } else {\n // Branch checkout failed, handle the error\n this.handleUnavailableBranch();\n }\n })\n .catch((error) => {\n // Handle unexpected errors during branch checkout\n console.error(error);\n this.emit(\"unavailable\");\n });\n }\n\n /**\n * Handles the case where a branch checkout fails.\n * Determines whether to retry or report unavailability.\n */\n private handleUnavailableBranch(): void {\n const source = this.source;\n if (source.isAvailable()) {\n // This should be impossible - if source is available we can create the branch and it should be available\n throw new Error(\"Branch is unavailable\");\n }\n\n // Source isn't available either, subscribe to state changes and report unavailability\n this.subscribeToUnavailableSource();\n this.emit(\"unavailable\");\n }\n\n /**\n * Loads the CoValue core from the network/storage.\n * This is the fallback strategy when immediate availability fails.\n */\n private loadCoValue(): void {\n this.localNode\n .loadCoValueCore(this.source.id, undefined, this.skipRetry)\n .then((value) => {\n if (this.unsubscribed) return;\n\n if (value.isAvailable()) {\n // Loading successful, subscribe to the loaded value\n this.subscribe(value.getCurrentContent());\n } else {\n // Loading failed, subscribe to state changes and report unavailability\n this.subscribeToUnavailableSource();\n this.emit(\"unavailable\");\n }\n })\n .catch((error) => {\n // Handle unexpected errors during loading\n console.error(error);\n this.emit(\"unavailable\");\n });\n }\n\n /**\n * Subscribes to state changes of an unavailable CoValue source.\n * This allows the subscription to become active when the source becomes available after a first loading attempt.\n */\n private subscribeToUnavailableSource(): void {\n const source = this.source;\n\n const handleStateChange = (\n _: CoValueCore,\n unsubFromStateChange: () => void,\n ) => {\n // We are waiting for the source to become available, it's ok to wait indefinitiely\n // until either this becomes available or we unsubscribe, because we have already\n // emitted an \"unavailable\" event.\n if (!source.isAvailable()) {\n return;\n }\n\n unsubFromStateChange();\n\n if (this.branchName) {\n // Branch was requested, attempt checkout again\n this.handleBranchCheckout();\n } else {\n // No branch requested, subscribe directly and cleanup state subscription\n this.subscribe(source.getCurrentContent());\n }\n };\n\n // Subscribe to state changes and store the unsubscribe function\n this._unsubscribe = source.subscribe(handleStateChange);\n }\n\n /**\n * Subscribes to a specific CoValue and notifies the listener.\n * This is the final step where we actually start receiving updates.\n */\n private subscribe(value: RawCoValue): void {\n if (this.unsubscribed) return;\n\n // Subscribe to the value and store the unsubscribe function\n this._unsubscribe = value.subscribe((value) => {\n this.emit(value);\n });\n }\n\n emit(value: RawCoValue | \"unavailable\"): void {\n if (this.unsubscribed) return;\n\n this.listener(value);\n }\n\n /**\n * Unsubscribes from all active subscriptions and marks the instance as unsubscribed.\n * This prevents any further operations and ensures proper cleanup.\n */\n unsubscribe(): void {\n if (this.unsubscribed) return;\n this.unsubscribed = true;\n this._unsubscribe();\n }\n}\n","import type { CoValue, ID } from \"../internal.js\";\n\nexport class JazzError {\n constructor(\n public id: ID<CoValue> | undefined,\n public type: \"unavailable\" | \"unauthorized\",\n public issues: JazzErrorIssue[],\n ) {}\n\n toString() {\n return this.issues\n .map((issue) => {\n let message = `${issue.message}`;\n\n if (this.id) {\n message += ` from ${this.id}`;\n }\n\n if (issue.path.length > 0) {\n message += ` on path ${issue.path.join(\".\")}`;\n }\n\n return message;\n })\n .join(\"\\n\");\n }\n\n prependPath(item: string) {\n if (this.issues.length === 0) {\n return this;\n }\n\n const issues = this.issues.map((issue) => {\n return {\n ...issue,\n path: [item].concat(issue.path),\n };\n });\n\n return new JazzError(this.id, this.type, issues);\n }\n}\nexport type JazzErrorIssue = {\n code: \"unavailable\" | \"unauthorized\" | \"validationError\";\n message: string;\n params: Record<string, any>;\n path: string[];\n};\n","import { RawAccount, RawCoValue, Role } from \"cojson\";\nimport { RegisteredSchemas } from \"../coValues/registeredSchemas.js\";\nimport {\n CoValue,\n RefEncoded,\n accountOrGroupToGroup,\n instantiateRefEncodedFromRaw,\n} from \"../internal.js\";\nimport { coValuesCache } from \"../lib/cache.js\";\nimport { SubscriptionScope } from \"./SubscriptionScope.js\";\n\nexport function myRoleForRawValue(raw: RawCoValue): Role | undefined {\n const rawOwner = raw.group;\n\n const owner = coValuesCache.get(rawOwner, () =>\n rawOwner instanceof RawAccount\n ? RegisteredSchemas[\"Account\"].fromRaw(rawOwner)\n : RegisteredSchemas[\"Group\"].fromRaw(rawOwner),\n );\n\n return accountOrGroupToGroup(owner).myRole();\n}\n\nexport function createCoValue<D extends CoValue>(\n ref: RefEncoded<D>,\n raw: RawCoValue,\n subscriptionScope: SubscriptionScope<D>,\n) {\n const freshValueInstance = instantiateRefEncodedFromRaw(ref, raw);\n\n Object.defineProperty(freshValueInstance.$jazz, \"_subscriptionScope\", {\n value: subscriptionScope,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n\n return {\n type: \"loaded\" as const,\n value: freshValueInstance,\n id: subscriptionScope.id,\n };\n}\n","import { RawCoValue } from \"cojson\";\nimport { CoValue } from \"../internal.js\";\n\nconst weakMap = new WeakMap<RawCoValue, CoValue>();\n\nexport const coValuesCache = {\n get: <V extends CoValue>(raw: RawCoValue, compute: () => V) => {\n const cached = weakMap.get(raw);\n if (cached) {\n return cached as V;\n }\n const computed = compute();\n weakMap.set(raw, computed);\n return computed;\n },\n};\n","import type { LocalNode, RawCoValue } from \"cojson\";\nimport {\n CoFeed,\n CoList,\n CoMap,\n type CoValue,\n type ID,\n type RefEncoded,\n type RefsToResolve,\n TypeSym,\n instantiateRefEncodedFromRaw,\n isRefEncoded,\n} from \"../internal.js\";\nimport { applyCoValueMigrations } from \"../lib/migration.js\";\nimport { CoValueCoreSubscription } from \"./CoValueCoreSubscription.js\";\nimport { JazzError, type JazzErrorIssue } from \"./JazzError.js\";\nimport type { SubscriptionValue, Unloaded } from \"./types.js\";\nimport { createCoValue, myRoleForRawValue } from \"./utils.js\";\n\nexport class SubscriptionScope<D extends CoValue> {\n childNodes = new Map<string, SubscriptionScope<CoValue>>();\n childValues: Map<string, SubscriptionValue<any, any> | Unloaded> = new Map<\n string,\n SubscriptionValue<D, any>\n >();\n value: SubscriptionValue<D, any> | Unloaded;\n childErrors: Map<string, JazzError> = new Map();\n validationErrors: Map<string, JazzError> = new Map();\n errorFromChildren: JazzError | undefined;\n subscription: CoValueCoreSubscription;\n dirty = false;\n resolve: RefsToResolve<any>;\n idsSubscribed = new Set<string>();\n autoloaded = new Set<string>();\n autoloadedKeys = new Set<string>();\n skipInvalidKeys = new Set<string>();\n totalValidTransactions = 0;\n migrated = false;\n migrating = false;\n\n silenceUpdates = false;\n\n constructor(\n public node: LocalNode,\n resolve: RefsToResolve<D>,\n public id: ID<D>,\n public schema: RefEncoded<D>,\n public skipRetry = false,\n public bestEffortResolution = false,\n ) {\n this.resolve = resolve;\n this.value = { type: \"unloaded\", id };\n\n let lastUpdate: RawCoValue | \"unavailable\" | undefined;\n this.subscription = new CoValueCoreSubscription(\n node,\n id,\n (value) => {\n lastUpdate = value;\n\n if (skipRetry && value === \"unavailable\") {\n this.handleUpdate(value);\n this.destroy();\n return;\n }\n\n // Need all these checks because the migration can trigger new syncronous updates\n //\n // We want to:\n // - Run the migration only once\n // - Skip all the updates until the migration is done\n // - Trigger handleUpdate only with the final value\n if (!this.migrated && value !== \"unavailable\") {\n if (this.migrating) {\n return;\n }\n\n this.migrating = true;\n applyCoValueMigrations(\n instantiateRefEncodedFromRaw(this.schema, value),\n );\n this.migrated = true;\n this.handleUpdate(lastUpdate);\n return;\n }\n\n this.handleUpdate(value);\n },\n skipRetry,\n );\n }\n\n updateValue(value: SubscriptionValue<D, any>) {\n this.value = value;\n\n // Flags that the value has changed and we need to trigger an update\n this.dirty = true;\n }\n\n handleUpdate(update: RawCoValue | \"unavailable\") {\n if (update === \"unavailable\") {\n if (this.value.type === \"unloaded\") {\n this.updateValue(\n new JazzError(this.id, \"unavailable\", [\n {\n code: \"unavailable\",\n message: \"The value is unavailable\",\n params: {\n id: this.id,\n },\n path: [],\n },\n ]),\n );\n }\n this.triggerUpdate();\n return;\n }\n\n const ruleset = update.core.verified.header.ruleset;\n\n // Groups and accounts are accessible by everyone, for the other coValues we use the role to check access\n const hasAccess =\n ruleset.type !== \"ownedByGroup\" ||\n myRoleForRawValue(update) !== undefined;\n\n if (!hasAccess) {\n if (this.value.type !== \"unauthorized\") {\n this.updateValue(\n new JazzError(this.id, \"unauthorized\", [\n {\n code: \"unauthorized\",\n message: `The current user (${this.node.getCurrentAgent().id}) is not authorized to access this value`,\n params: {\n id: this.id,\n },\n path: [],\n },\n ]),\n );\n this.triggerUpdate();\n }\n return;\n }\n\n // When resolving a CoValue with available children, we want to trigger a single update\n // after loading all the children, not one per children\n this.silenceUpdates = true;\n\n if (this.value.type !== \"loaded\") {\n this.updateValue(createCoValue(this.schema, update, this));\n this.loadChildren();\n } else {\n const hasChanged =\n update.totalValidTransactions !== this.totalValidTransactions ||\n // Checking the identity of the raw value makes us cover the cases where the group\n // has been updated and the coValues that don't update the totalValidTransactions value (e.g. FileStream)\n this.value.value.$jazz.raw !== update;\n\n if (this.loadChildren()) {\n this.updateValue(createCoValue(this.schema, update, this));\n } else if (hasChanged) {\n this.updateValue(createCoValue(this.schema, update, this));\n }\n }\n\n this.totalValidTransactions = update.totalValidTransactions;\n\n this.silenceUpdates = false;\n this.triggerUpdate();\n }\n\n computeChildErrors() {\n let issues: JazzErrorIssue[] = [];\n let errorType: JazzError[\"type\"] = \"unavailable\";\n\n if (this.childErrors.size === 0 && this.validationErrors.size === 0) {\n return undefined;\n }\n\n if (this.bestEffortResolution) {\n return undefined;\n }\n\n for (const [key, value] of this.childErrors.entries()) {\n // We don't want to block updates if the error is on an autoloaded value\n if (this.autoloaded.has(key)) {\n continue;\n }\n\n if (this.skipInvalidKeys.has(key)) {\n continue;\n }\n\n errorType = value.type;\n if (value.issues) {\n issues.push(...value.issues);\n }\n }\n\n for (const [key, value] of this.validationErrors.entries()) {\n if (this.skipInvalidKeys.has(key)) {\n continue;\n }\n\n errorType = value.type;\n if (value.issues) {\n issues.push(...value.issues);\n }\n }\n\n if (issues.length) {\n return new JazzError(this.id, errorType, issues);\n }\n\n return undefined;\n }\n\n handleChildUpdate = (\n id: string,\n value: SubscriptionValue<any, any> | Unloaded,\n key?: string,\n ) => {\n if (value.type === \"unloaded\") {\n return;\n }\n\n this.childValues.set(id, value);\n\n if (value.type === \"unavailable\" || value.type === \"unauthorized\") {\n this.childErrors.set(id, value.prependPath(key ?? id));\n\n this.errorFromChildren = this.computeChildErrors();\n } else if (this.errorFromChildren && this.childErrors.has(id)) {\n this.childErrors.delete(id);\n\n this.errorFromChildren = this.computeChildErrors();\n }\n\n if (this.shouldSendUpdates()) {\n if (this.value.type === \"loaded\") {\n // On child updates, we re-create the value instance to make the updates\n // seamless-immutable and so be compatible with React and the React compiler\n this.updateValue(\n createCoValue(this.schema, this.value.value.$jazz.raw, this),\n );\n }\n }\n\n this.triggerUpdate();\n };\n\n shouldSendUpdates() {\n if (this.value.type === \"unloaded\") return false;\n\n // If the value is in error, we send the update regardless of the children statuses\n if (this.value.type !== \"loaded\") return true;\n\n if (this.isStreaming() && !this.isFileStream()) {\n return false;\n }\n\n for (const value of this.childValues.values()) {\n // We don't wait for autoloaded values to be loaded, in order to stream updates\n // on autoloaded lists or records\n if (value.type === \"unloaded\" && !this.autoloaded.has(value.id)) {\n return false;\n }\n }\n\n return true;\n }\n\n getCurrentValue() {\n if (\n this.value.type === \"unauthorized\" ||\n this.value.type === \"unavailable\"\n ) {\n console.error(this.value.toString());\n return null;\n }\n\n if (!this.shouldSendUpdates()) {\n return undefined;\n }\n\n if (this.errorFromChildren) {\n console.error(this.errorFromChildren.toString());\n return null;\n }\n\n if (this.value.type === \"loaded\") {\n return this.value.value;\n }\n\n return undefined;\n }\n\n isStreaming() {\n if (this.value.type !== \"loaded\") {\n return false;\n }\n\n return this.value.value.$jazz.raw.core.verified.isStreaming();\n }\n\n isFileStream() {\n if (this.value.type !== \"loaded\") {\n return false;\n }\n\n return (\n this.value.value.$jazz.raw.core.verified.header.meta?.type === \"binary\"\n );\n }\n\n triggerUpdate() {\n if (!this.shouldSendUpdates()) return;\n if (!this.dirty) return;\n if (this.subscribers.size === 0) return;\n if (this.silenceUpdates) return;\n\n const error = this.errorFromChildren;\n const value = this.value;\n\n if (error) {\n this.subscribers.forEach((listener) => listener(error));\n } else if (value.type !== \"unloaded\") {\n this.subscribers.forEach((listener) => listener(value));\n }\n\n this.dirty = false;\n }\n\n subscribers = new Set<(value: SubscriptionValue<D, any>) => void>();\n subscribe(listener: (value: SubscriptionValue<D, any>) => void) {\n this.subscribers.add(listener);\n\n return () => {\n this.subscribers.delete(listener);\n };\n }\n\n setListener(listener: (value: SubscriptionValue<D, any>) => void) {\n this.subscribers.add(listener);\n this.triggerUpdate();\n }\n\n subscribeToKey(key: string) {\n if (this.resolve === true || !this.resolve) {\n this.resolve = {};\n }\n\n if (!this.resolve.$each && !(key in this.resolve)) {\n const resolve = this.resolve as Record<string, any>;\n\n // Adding the key to the resolve object to resolve the key when calling loadChildren\n resolve[key] = true;\n // Track the keys that are autoloaded to flag any id on that key as autoloaded\n this.autoloadedKeys.add(key);\n }\n\n if (this.value.type !== \"loaded\") {\n return;\n }\n\n const value = this.value.value;\n\n // We don't want to trigger an update when autoloading available children\n // because on userland it looks like nothing has changed since the value\n // is available on the first access\n // This helps alot with correctness when triggering the autoloading while rendering components (on React and Svelte)\n this.silenceUpdates = true;\n\n if (value[TypeSym] === \"CoMap\" || value[TypeSym] === \"Account\") {\n const map = value as CoMap;\n\n this.loadCoMapKey(map, key, true);\n } else if (value[TypeSym] === \"CoList\") {\n const list = value as CoList;\n\n this.loadCoListKey(list, key, true);\n }\n\n this.silenceUpdates = false;\n }\n\n subscribeToId(id: string, descriptor: RefEncoded<any>) {\n if (this.idsSubscribed.has(id) || this.childValues.has(id)) {\n return;\n }\n\n this.idsSubscribed.add(id);\n this.autoloaded.add(id);\n\n // We don't want to trigger an update when autoloading available children\n // because on userland it looks like nothing has changed since the value\n // is available on the first access\n // This helps alot with correctness when triggering the autoloading while rendering components (on React and Svelte)\n this.silenceUpdates = true;\n\n this.childValues.set(id, { type: \"unloaded\", id });\n const child = new SubscriptionScope(\n this.node,\n true,\n id as ID<any>,\n descriptor,\n this.skipRetry,\n this.bestEffortResolution,\n );\n this.childNodes.set(id, child);\n child.setListener((value) => this.handleChildUpdate(id, value));\n\n this.silenceUpdates = false;\n }\n\n loadChildren() {\n const { resolve } = this;\n\n if (this.value.type !== \"loaded\") {\n return false;\n }\n\n const value = this.value.value;\n\n const depth =\n typeof resolve !== \"object\" || resolve === null ? {} : (resolve as any);\n\n let hasChanged = false;\n\n const idsToLoad = new Set<string>(this.idsSubscribed);\n\n const coValueType = value[TypeSym];\n\n if (Object.keys(depth).length > 0) {\n if (\n coValueType === \"CoMap\" ||\n coValueType === \"Account\" ||\n coValueType === \"Group\"\n ) {\n const map = value as CoMap;\n const keys =\n \"$each\" in depth ? map.$jazz.raw.keys() : Object.keys(depth);\n\n for (const key of keys) {\n const id = this.loadCoMapKey(map, key, depth[key] ?? depth.$each);\n\n if (id) {\n idsToLoad.add(id);\n }\n }\n } else if (value[TypeSym] === \"CoList\") {\n const list = value as CoList;\n\n const descriptor = list.$jazz.getItemsDescriptor();\n\n if (descriptor && isRefEncoded(descriptor)) {\n list.$jazz.raw.processNewTransactions();\n const entries = list.$jazz.raw.entries();\n const keys =\n \"$each\" in depth ? Object.keys(entries) : Object.keys(depth);\n\n for (const key of keys) {\n const id = this.loadCoListKey(list, key, depth[key] ?? depth.$each);\n\n if (id) {\n idsToLoad.add(id);\n }\n }\n }\n } else if (value[TypeSym] === \"CoStream\") {\n const stream = value as CoFeed;\n const descriptor = stream.$jazz.getItemsDescriptor();\n\n if (descriptor && isRefEncoded(descriptor)) {\n for (const session of stream.$jazz.raw.sessions()) {\n const values = stream.$jazz.raw.items[session] ?? [];\n\n for (const [i, item] of values.entries()) {\n const key = `${session}/${i}`;\n\n if (!depth.$each && !depth[key]) {\n continue;\n }\n\n const id = item.value as string | undefined;\n\n if (id) {\n idsToLoad.add(id);\n this.loadChildNode(id, depth[key] ?? depth.$each, descriptor);\n this.validationErrors.delete(key);\n } else if (!descriptor.optional) {\n this.validationErrors.set(\n key,\n new JazzError(undefined, \"unavailable\", [\n {\n code: \"validationError\",\n message: `The ref on position ${key} requested on ${stream.constructor.name} is missing`,\n params: {},\n path: [key],\n },\n ]),\n );\n }\n }\n }\n }\n }\n }\n\n this.errorFromChildren = this.computeChildErrors();\n\n // Collect all the deleted ids\n for (const id of this.childNodes.keys()) {\n if (!idsToLoad.has(id)) {\n hasChanged = true;\n const childNode = this.childNodes.get(id);\n\n if (childNode) {\n childNode.destroy();\n }\n\n this.childNodes.delete(id);\n this.childValues.delete(id);\n }\n }\n\n return hasChanged;\n }\n\n loadCoMapKey(map: CoMap, key: string, depth: Record<string, any> | true) {\n if (key === \"$onError\") {\n return undefined;\n }\n\n const id = map.$jazz.raw.get(key) as string | undefined;\n const descriptor = map.$jazz.getDescriptor(key);\n\n if (!descriptor) {\n this.childErrors.set(\n key,\n new JazzError(undefined, \"unavailable\", [\n {\n code: \"validationError\",\n message: `The ref ${key} requested on ${map.constructor.name} is not defined in the schema`,\n params: {},\n path: [key],\n },\n ]),\n );\n return undefined;\n }\n\n if (isRefEncoded(descriptor)) {\n if (id) {\n this.loadChildNode(id, depth, descriptor, key);\n this.validationErrors.delete(key);\n\n return id;\n } else if (!descriptor.optional) {\n this.validationErrors.set(\n key,\n new JazzError(undefined, \"unavailable\", [\n {\n code: \"validationError\",\n message: `The ref ${key} requested on ${map.constructor.name} is missing`,\n params: {},\n path: [key],\n },\n ]),\n );\n }\n }\n\n return undefined;\n }\n\n loadCoListKey(list: CoList, key: string, depth: Record<string, any> | true) {\n const descriptor = list.$jazz.getItemsDescriptor();\n\n if (!descriptor || !isRefEncoded(descriptor)) {\n return undefined;\n }\n\n const entries = list.$jazz.raw.entries();\n const entry = entries[Number(key)];\n\n if (!entry) {\n return undefined;\n }\n\n const id = entry.value as string | undefined;\n\n if (id) {\n this.loadChildNode(id, depth, descriptor, key);\n this.validationErrors.delete(key);\n\n return id;\n } else if (!descriptor.optional) {\n this.validationErrors.set(\n key,\n new JazzError(undefined, \"unavailable\", [\n {\n code: \"validationError\",\n message: `The ref on position ${key} requested on ${list.constructor.name} is missing`,\n params: {},\n path: [key],\n },\n ]),\n );\n }\n\n return undefined;\n }\n\n loadChildNode(\n id: string,\n query: RefsToResolve<any>,\n descriptor: RefEncoded<any>,\n key?: string,\n ) {\n if (this.childValues.has(id)) {\n return;\n }\n\n if (key && this.autoloadedKeys.has(key)) {\n this.autoloaded.add(id);\n }\n\n const skipInvalid = typeof query === \"object\" && query.$onError === null;\n\n if (skipInvalid) {\n if (key) {\n this.skipInvalidKeys.add(key);\n }\n\n this.skipInvalidKeys.add(id);\n }\n\n // Cloning the resolve objects to avoid mutating the original object when tracking autoloaded values\n const resolve =\n typeof query === \"object\" && query !== null ? { ...query } : query;\n\n this.childValues.set(id, { type: \"unloaded\", id });\n const child = new SubscriptionScope(\n this.node,\n resolve,\n id as ID<any>,\n descriptor,\n this.skipRetry,\n this.bestEffortResolution,\n );\n this.childNodes.set(id, child);\n child.setListener((value) => this.handleChildUpdate(id, value, key));\n }\n\n destroy() {\n this.subscription.unsubscribe();\n this.subscribers.clear();\n this.childNodes.forEach((child) => child.destroy());\n }\n}\n","import type { CoValue, CoValueClass, RefEncoded } from \"../internal.js\";\nimport { SubscriptionScope } from \"./SubscriptionScope.js\";\n\nexport function getSubscriptionScope<D extends CoValue>(value: D) {\n const subscriptionScope = value.$jazz._subscriptionScope;\n\n if (subscriptionScope) {\n return subscriptionScope;\n }\n\n const node = value.$jazz.raw.core.node;\n const resolve = true;\n const id = value.$jazz.id;\n\n const newSubscriptionScope = new SubscriptionScope(node, resolve, id, {\n ref: value.constructor as CoValueClass<D>,\n optional: false,\n });\n\n Object.defineProperty(value.$jazz, \"_subscriptionScope\", {\n value: subscriptionScope,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n\n return newSubscriptionScope;\n}\n\n/** Autoload internals */\n\n/**\n * Given a coValue, access a child coValue by key\n *\n * By subscribing to a given key, the subscription will automatically react to the id changes\n * on that key (e.g. deleting the key value will result on unsubscribing from the id)\n */\nexport function accessChildByKey<D extends CoValue>(\n parent: D,\n childId: string,\n key: string,\n) {\n const subscriptionScope = getSubscriptionScope(parent);\n\n if (!subscriptionScope.childValues.has(childId)) {\n subscriptionScope.subscribeToKey(key);\n }\n\n const value = subscriptionScope.childValues.get(childId);\n\n if (value?.type === \"loaded\") {\n return value.value;\n } else {\n return null;\n }\n}\n\n/**\n * Given a coValue, access a child coValue by id\n *\n * By subscribing to a given id, the subscription becomes permanent and will unsubscribe\n * only when the root subscription scope is destroyed.\n *\n * Used for refs that never change (e.g. CoFeed entries, CoMap edits)\n */\nexport function accessChildById<D extends CoValue>(\n parent: D,\n childId: string,\n schema: RefEncoded<CoValue>,\n) {\n const subscriptionScope = getSubscriptionScope(parent);\n\n subscriptionScope.subscribeToId(childId, schema);\n\n const value = subscriptionScope.childValues.get(childId);\n\n if (value?.type === \"loaded\") {\n return value.value;\n } else {\n return null;\n }\n}\n","import {\n AgentSecret,\n CoID,\n CryptoProvider,\n LocalNode,\n Peer,\n RawAccount,\n RawAccountID,\n SessionID,\n StorageAPI,\n} from \"cojson\";\nimport { AuthSecretStorage } from \"../auth/AuthSecretStorage.js\";\nimport { type Account, type AccountClass } from \"../coValues/account.js\";\nimport { RegisteredSchemas } from \"../coValues/registeredSchemas.js\";\nimport {\n CoValueFromRaw,\n type CoreAccountSchema,\n type ID,\n type InstanceOfSchema,\n coValueClassFromCoValueClassOrSchema,\n} from \"../internal.js\";\nimport { AuthCredentials, NewAccountProps } from \"../types.js\";\nimport { activeAccountContext } from \"./activeAccountContext.js\";\nimport { AnonymousJazzAgent } from \"./anonymousJazzAgent.js\";\n\nexport type Credentials = {\n accountID: ID<Account>;\n secret: AgentSecret;\n};\n\ntype SessionProvider = (\n accountID: ID<Account>,\n crypto: CryptoProvider,\n) => Promise<{ sessionID: SessionID; sessionDone: () => void }>;\n\nexport type AuthResult =\n | {\n type: \"existing\";\n username?: string;\n credentials: Credentials;\n saveCredentials?: (credentials: Credentials) => Promise<void>;\n onSuccess: () => void;\n onError: (error: string | Error) => void;\n logOut: () => Promise<void>;\n }\n | {\n type: \"new\";\n creationProps: {\n name: string;\n anonymous?: boolean;\n other?: Record<string, unknown>;\n };\n initialSecret?: AgentSecret;\n saveCredentials: (credentials: Credentials) => Promise<void>;\n onSuccess: () => void;\n onError: (error: string | Error) => void;\n logOut: () => Promise<void>;\n };\n\nexport async function randomSessionProvider(\n accountID: ID<Account>,\n crypto: CryptoProvider,\n) {\n return {\n sessionID: crypto.newRandomSessionID(accountID as unknown as RawAccountID),\n sessionDone: () => {},\n };\n}\n\nexport type JazzContextWithAccount<Acc extends Account> = {\n node: LocalNode;\n account: Acc;\n done: () => void;\n logOut: () => Promise<void>;\n};\n\nexport type JazzContextWithAgent = {\n agent: AnonymousJazzAgent;\n done: () => void;\n logOut: () => Promise<void>;\n};\n\nexport type JazzContext<Acc extends Account> =\n | JazzContextWithAccount<Acc>\n | JazzContextWithAgent;\n\nexport async function createJazzContextFromExistingCredentials<\n S extends\n | (AccountClass<Account> & CoValueFromRaw<Account>)\n | CoreAccountSchema,\n>({\n credentials,\n peersToLoadFrom,\n crypto,\n storage,\n AccountSchema: PropsAccountSchema,\n sessionProvider,\n onLogOut,\n asActiveAccount,\n}: {\n credentials: Credentials;\n peersToLoadFrom: Peer[];\n crypto: CryptoProvider;\n AccountSchema?: S;\n sessionProvider: SessionProvider;\n onLogOut?: () => void;\n storage?: StorageAPI;\n asActiveAccount: boolean;\n}): Promise<JazzContextWithAccount<InstanceOfSchema<S>>> {\n const { sessionID, sessionDone } = await sessionProvider(\n credentials.accountID,\n crypto,\n );\n\n const CurrentAccountSchema =\n PropsAccountSchema ?? (RegisteredSchemas[\"Account\"] as unknown as S);\n\n const AccountClass =\n coValueClassFromCoValueClassOrSchema(CurrentAccountSchema);\n\n const node = await LocalNode.withLoadedAccount({\n accountID: credentials.accountID as unknown as CoID<RawAccount>,\n accountSecret: credentials.secret,\n sessionID: sessionID,\n peersToLoadFrom: peersToLoadFrom,\n crypto: crypto,\n storage,\n migration: async (rawAccount, _node, creationProps) => {\n const account = AccountClass.fromRaw(rawAccount) as InstanceOfSchema<S>;\n if (asActiveAccount) {\n activeAccountContext.set(account);\n }\n\n await account.applyMigration(creationProps);\n },\n });\n\n const account = AccountClass.fromNode(node);\n if (asActiveAccount) {\n activeAccountContext.set(account);\n }\n\n return {\n node,\n account: account as InstanceOfSchema<S>,\n done: () => {\n node.gracefulShutdown();\n sessionDone();\n },\n logOut: async () => {\n node.gracefulShutdown();\n sessionDone();\n await onLogOut?.();\n },\n };\n}\n\nexport async function createJazzContextForNewAccount<\n S extends\n | (AccountClass<Account> & CoValueFromRaw<Account>)\n | CoreAccountSchema,\n>({\n creationProps,\n initialAgentSecret,\n peersToLoadFrom,\n crypto,\n AccountSchema: PropsAccountSchema,\n onLogOut,\n storage,\n}: {\n creationProps: { name: string };\n initialAgentSecret?: AgentSecret;\n peersToLoadFrom: Peer[];\n crypto: CryptoProvider;\n AccountSchema?: S;\n onLogOut?: () => Promise<void>;\n storage?: StorageAPI;\n}): Promise<JazzContextWithAccount<InstanceOfSchema<S>>> {\n const CurrentAccountSchema =\n PropsAccountSchema ?? (RegisteredSchemas[\"Account\"] as unknown as S);\n\n const AccountClass =\n coValueClassFromCoValueClassOrSchema(CurrentAccountSchema);\n\n const { node } = await LocalNode.withNewlyCreatedAccount({\n creationProps,\n peersToLoadFrom,\n crypto,\n initialAgentSecret,\n storage,\n migration: async (rawAccount, _node, creationProps) => {\n const account = AccountClass.fromRaw(rawAccount) as InstanceOfSchema<S>;\n activeAccountContext.set(account);\n\n await account.applyMigration(creationProps);\n },\n });\n\n const account = AccountClass.fromNode(node);\n activeAccountContext.set(account);\n\n return {\n node,\n account: account as InstanceOfSchema<S>,\n done: () => {\n node.gracefulShutdown();\n },\n logOut: async () => {\n node.gracefulShutdown();\n await onLogOut?.();\n },\n };\n}\n\nexport async function createJazzContext<\n S extends\n | (AccountClass<Account> & CoValueFromRaw<Account>)\n | CoreAccountSchema,\n>(options: {\n credentials?: AuthCredentials;\n newAccountProps?: NewAccountProps;\n peersToLoadFrom: Peer[];\n crypto: CryptoProvider;\n defaultProfileName?: string;\n AccountSchema?: S;\n sessionProvider: SessionProvider;\n authSecretStorage: AuthSecretStorage;\n storage?: StorageAPI;\n}) {\n const crypto = options.crypto;\n\n let context: JazzContextWithAccount<InstanceOfSchema<S>>;\n\n const authSecretStorage = options.authSecretStorage;\n\n await authSecretStorage.migrate();\n\n const credentials = options.credentials ?? (await authSecretStorage.get());\n\n if (credentials && !options.newAccountProps) {\n context = await createJazzContextFromExistingCredentials({\n credentials: {\n accountID: credentials.accountID,\n secret: credentials.accountSecret,\n },\n peersToLoadFrom: options.peersToLoadFrom,\n crypto,\n AccountSchema: options.AccountSchema,\n sessionProvider: options.sessionProvider,\n onLogOut: () => {\n authSecretStorage.clearWithoutNotify();\n },\n storage: options.storage,\n asActiveAccount: true,\n });\n } else {\n const secretSeed = options.crypto.newRandomSecretSeed();\n\n const initialAgentSecret =\n options.newAccountProps?.secret ??\n crypto.agentSecretFromSecretSeed(secretSeed);\n\n const creationProps = options.newAccountProps?.creationProps ?? {\n name: options.defaultProfileName ?? \"Anonymous user\",\n };\n\n context = await createJazzContextForNewAccount({\n creationProps,\n initialAgentSecret,\n peersToLoadFrom: options.peersToLoadFrom,\n crypto,\n AccountSchema: options.AccountSchema,\n onLogOut: async () => {\n await authSecretStorage.clearWithoutNotify();\n },\n storage: options.storage,\n });\n\n if (!options.newAccountProps) {\n await authSecretStorage.setWithoutNotify({\n accountID: context.account.$jazz.id,\n secretSeed,\n accountSecret: context.node.getCurrentAgent().agentSecret,\n provider: \"anonymous\",\n });\n }\n }\n\n return {\n ...context,\n authSecretStorage,\n };\n}\n\nexport function createAnonymousJazzContext({\n peersToLoadFrom,\n crypto,\n storage,\n}: {\n peersToLoadFrom: Peer[];\n crypto: CryptoProvider;\n storage?: StorageAPI;\n}): JazzContextWithAgent {\n const agentSecret = crypto.newRandomAgentSecret();\n\n const node = new LocalNode(\n agentSecret,\n crypto.newRandomSessionID(crypto.getAgentID(agentSecret)),\n crypto,\n );\n\n for (const peer of peersToLoadFrom) {\n node.syncManager.addPeer(peer);\n }\n\n if (storage) {\n node.setStorage(storage);\n }\n\n activeAccountContext.setGuestMode();\n\n return {\n agent: new AnonymousJazzAgent(node),\n done: () => {},\n logOut: async () => {},\n };\n}\n","import {\n Account,\n AnonymousJazzAgent,\n InstanceOfSchema,\n InstanceOrPrimitiveOfSchemaCoValuesNullable,\n Resolved,\n SchemaUnion,\n SchemaUnionConcreteSubclass,\n SubscribeListenerOptions,\n coOptionalDefiner,\n} from \"../../../internal.js\";\nimport { z } from \"../zodReExport.js\";\nimport { CoOptionalSchema } from \"./CoOptionalSchema.js\";\nimport { CoreCoValueSchema } from \"./CoValueSchema.js\";\n\nexport interface DiscriminableCoValueSchemaDefinition {\n discriminatorMap: z.core.$ZodDiscriminatedUnionInternals[\"propValues\"];\n}\n\nexport interface DiscriminableCoreCoValueSchema extends CoreCoValueSchema {\n getDefinition: () => DiscriminableCoValueSchemaDefinition;\n}\n\nexport interface CoDiscriminatedUnionSchemaDefinition<\n Options extends DiscriminableCoValueSchemas,\n> extends DiscriminableCoValueSchemaDefinition {\n discriminator: string;\n options: Options;\n}\n\nexport type DiscriminableCoValueSchemas = [\n DiscriminableCoreCoValueSchema,\n ...DiscriminableCoreCoValueSchema[],\n];\n\nexport interface CoreCoDiscriminatedUnionSchema<\n Options extends DiscriminableCoValueSchemas = DiscriminableCoValueSchemas,\n> extends DiscriminableCoreCoValueSchema {\n builtin: \"CoDiscriminatedUnion\";\n getDefinition: () => CoDiscriminatedUnionSchemaDefinition<Options>;\n}\nexport class CoDiscriminatedUnionSchema<\n Options extends DiscriminableCoValueSchemas,\n> implements CoreCoDiscriminatedUnionSchema<Options>\n{\n readonly collaborative = true as const;\n readonly builtin = \"CoDiscriminatedUnion\" as const;\n readonly getDefinition: () => CoDiscriminatedUnionSchemaDefinition<Options>;\n\n constructor(\n coreSchema: CoreCoDiscriminatedUnionSchema<Options>,\n private coValueClass: SchemaUnionConcreteSubclass<\n InstanceOfSchema<Options[number]>\n >,\n ) {\n this.getDefinition = coreSchema.getDefinition;\n }\n\n load(\n id: string,\n options?: {\n loadAs?: Account | AnonymousJazzAgent;\n skipRetry?: boolean;\n },\n ): Promise<Resolved<\n CoDiscriminatedUnionInstanceCoValuesNullable<Options> & SchemaUnion,\n true\n > | null> {\n return this.coValueClass.load(id, options) as any;\n }\n\n subscribe(\n id: string,\n options: SubscribeListenerOptions<\n CoDiscriminatedUnionInstanceCoValuesNullable<Options> & SchemaUnion,\n true\n >,\n listener: (\n value: Resolved<\n CoDiscriminatedUnionInstanceCoValuesNullable<Options> & SchemaUnion,\n true\n >,\n unsubscribe: () => void,\n ) => void,\n ): () => void {\n // @ts-expect-error\n return this.coValueClass.subscribe(id, options, listener);\n }\n\n getCoValueClass(): SchemaUnionConcreteSubclass<\n InstanceOfSchema<Options[number]>\n > {\n return this.coValueClass;\n }\n\n optional(): CoOptionalSchema<this> {\n return coOptionalDefiner(this);\n }\n}\n\nexport function createCoreCoDiscriminatedUnionSchema<\n Options extends DiscriminableCoValueSchemas,\n>(\n discriminator: string,\n schemas: Options,\n): CoreCoDiscriminatedUnionSchema<Options> {\n return {\n collaborative: true as const,\n builtin: \"CoDiscriminatedUnion\" as const,\n getDefinition: () => ({\n discriminator,\n get discriminatorMap() {\n const propValues: DiscriminableCoValueSchemaDefinition[\"discriminatorMap\"] =\n {};\n for (const option of schemas) {\n const dm = option.getDefinition().discriminatorMap;\n if (!dm || Object.keys(dm).length === 0)\n throw new Error(\n `Invalid discriminated union option at index \"${schemas.indexOf(option)}\"`,\n );\n for (const [k, v] of Object.entries(dm)) {\n propValues[k] ??= new Set();\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n return propValues;\n },\n get options() {\n return schemas;\n },\n }),\n };\n}\n\ntype CoDiscriminatedUnionInstanceCoValuesNullable<\n Options extends DiscriminableCoValueSchemas,\n> = NonNullable<InstanceOrPrimitiveOfSchemaCoValuesNullable<Options[number]>>;\n","import { CoValueSchemaFromCoreSchema } from \"../zodSchema.js\";\nimport { CoreCoValueSchema } from \"./CoValueSchema.js\";\n\ntype CoOptionalSchemaDefinition<\n Shape extends CoreCoValueSchema = CoreCoValueSchema,\n> = {\n innerType: Shape;\n};\n\nexport interface CoreCoOptionalSchema<\n Shape extends CoreCoValueSchema = CoreCoValueSchema,\n> extends CoreCoValueSchema {\n builtin: \"CoOptional\";\n innerType: Shape;\n getDefinition: () => CoOptionalSchemaDefinition<Shape>;\n}\n\nexport class CoOptionalSchema<\n Shape extends CoreCoValueSchema = CoreCoValueSchema,\n> implements CoreCoOptionalSchema<Shape>\n{\n readonly collaborative = true as const;\n readonly builtin = \"CoOptional\" as const;\n readonly getDefinition = () => ({\n innerType: this.innerType,\n });\n\n constructor(public readonly innerType: Shape) {}\n\n getCoValueClass(): ReturnType<\n CoValueSchemaFromCoreSchema<Shape>[\"getCoValueClass\"]\n > {\n return (this.innerType as any).getCoValueClass();\n }\n}\n","import {\n Account,\n CoRichText,\n Group,\n coOptionalDefiner,\n} from \"../../../internal.js\";\nimport { AnonymousJazzAgent } from \"../../anonymousJazzAgent.js\";\nimport { CoOptionalSchema } from \"./CoOptionalSchema.js\";\nimport { CoreCoValueSchema } from \"./CoValueSchema.js\";\n\nexport interface CoreRichTextSchema extends CoreCoValueSchema {\n builtin: \"CoRichText\";\n}\n\nexport function createCoreCoRichTextSchema(): CoreRichTextSchema {\n return {\n collaborative: true as const,\n builtin: \"CoRichText\" as const,\n };\n}\n\nexport class RichTextSchema implements CoreRichTextSchema {\n readonly collaborative = true as const;\n readonly builtin = \"CoRichText\" as const;\n\n constructor(private coValueClass: typeof CoRichText) {}\n\n create(text: string, options?: { owner: Group } | Group): CoRichText;\n /** @deprecated Creating CoValues with an Account as owner is deprecated. Use a Group instead. */\n create(\n text: string,\n options?: { owner: Account | Group } | Account | Group,\n ): CoRichText;\n create(\n text: string,\n options?: { owner: Account | Group } | Account | Group,\n ): CoRichText {\n return this.coValueClass.create(text, options);\n }\n\n load(\n id: string,\n options: { loadAs: Account | AnonymousJazzAgent },\n ): Promise<CoRichText | null> {\n return this.coValueClass.load(id, options);\n }\n\n subscribe(\n id: string,\n options: { loadAs: Account | AnonymousJazzAgent },\n listener: (value: CoRichText, unsubscribe: () => void) => void,\n ): () => void;\n subscribe(\n id: string,\n listener: (value: CoRichText, unsubscribe: () => void) => void,\n ): () => void;\n subscribe(...args: [any, ...any[]]) {\n // @ts-expect-error\n return this.coValueClass.subscribe(...args);\n }\n\n getCoValueClass(): typeof CoRichText {\n return this.coValueClass;\n }\n\n optional(): CoOptionalSchema<this> {\n return coOptionalDefiner(this);\n }\n}\n","import {\n type AccountSchema,\n AnyZodOrCoValueSchema,\n BaseAccountShape,\n type CoFeedSchema,\n type CoListSchema,\n type CoMapSchema,\n type CoProfileSchema,\n type CoRecordSchema,\n type DefaultProfileShape,\n type FileStreamSchema,\n ImageDefinition,\n type PlainTextSchema,\n type Simplify,\n createCoreAccountSchema,\n createCoreCoFeedSchema,\n createCoreCoListSchema,\n createCoreCoMapSchema,\n createCoreCoPlainTextSchema,\n createCoreFileStreamSchema,\n hydrateCoreCoValueSchema,\n isAnyCoValueSchema,\n isCoValueClass,\n} from \"../../internal.js\";\nimport { removeGetters } from \"../schemaUtils.js\";\nimport {\n CoDiscriminatedUnionSchema,\n DiscriminableCoValueSchemas,\n createCoreCoDiscriminatedUnionSchema,\n} from \"./schemaTypes/CoDiscriminatedUnionSchema.js\";\nimport { CoOptionalSchema } from \"./schemaTypes/CoOptionalSchema.js\";\nimport { CoreCoValueSchema } from \"./schemaTypes/CoValueSchema.js\";\nimport {\n RichTextSchema,\n createCoreCoRichTextSchema,\n} from \"./schemaTypes/RichTextSchema.js\";\nimport { z } from \"./zodReExport.js\";\n\n/**\n * Checking for the presence of the `_zod` property is the recommended way\n * to determine if a schema is a Zod v4 schema.\n *\n * @see https://zod.dev/library-authors?id=how-to-support-zod-3-and-zod-4-simultaneously\n */\nconst isZodV4Schema = (schema: unknown): schema is z.core.$ZodType => {\n return typeof schema === \"object\" && schema !== null && \"_zod\" in schema;\n};\n\nconst isValidShape = (shape: z.core.$ZodLooseShape) => {\n return Object.values(removeGetters(shape)).every(\n (schema) =>\n isZodV4Schema(schema) ||\n isAnyCoValueSchema(schema) ||\n isCoValueClass(schema),\n );\n};\n\nconst validateCoMapShape = (shape: z.core.$ZodLooseShape) => {\n if (isAnyCoValueSchema(shape as any)) {\n throw new Error(\n \"co.map() expects an object as its argument, not a CoValue schema\",\n );\n } else if (!isValidShape(shape)) {\n throw new Error(\n \"co.map() supports only Zod v4 schemas and CoValue schemas\",\n );\n }\n};\n\nexport const coMapDefiner = <Shape extends z.core.$ZodLooseShape>(\n shape: Shape,\n): CoMapSchema<Shape> => {\n validateCoMapShape(shape);\n const coreSchema = createCoreCoMapSchema(shape);\n return hydrateCoreCoValueSchema(coreSchema);\n};\n\n/**\n * Defines a collaborative account schema for Jazz applications.\n *\n * Creates an account schema that represents a user account with profile and root data.\n * Accounts are the primary way to identify and manage users in Jazz applications.\n *\n * @template Shape - The shape of the account schema extending BaseAccountShape\n * @param shape - The account schema shape. Defaults to a basic profile with name, inbox, and inboxInvite fields, plus an empty root object.\n *\n * @example\n * ```typescript\n * // Basic account with default profile\n * const BasicAccount = co.account();\n *\n * // Custom account with specific profile and root structure\n * const JazzAccount = co.account({\n * profile: co.profile({\n * name: z.string(),\n * avatar: z.optional(z.string()),\n * }),\n * root: co.map({\n * organizations: co.list(Organization),\n * draftOrganization: DraftOrganization,\n * }),\n * }).withMigration(async (account) => {\n * // Migration logic for existing accounts\n * if (!account.$jazz.has(\"profile\")) {\n * const group = Group.create();\n * account.$jazz.set(\"profile\", co.profile().create(\n * { name: getRandomUsername() },\n * group\n * ));\n * group.addMember(\"everyone\", \"reader\");\n * }\n * });\n * ```\n */\nexport const coAccountDefiner = <Shape extends BaseAccountShape>(\n shape: Shape = {\n profile: coMapDefiner({\n name: z.string(),\n inbox: z.optional(z.string()),\n inboxInvite: z.optional(z.string()),\n }),\n root: coMapDefiner({}),\n } as unknown as Shape,\n): AccountSchema<Shape> => {\n const coreSchema = createCoreAccountSchema(shape);\n return hydrateCoreCoValueSchema(coreSchema);\n};\n\nexport const coRecordDefiner = <\n K extends z.core.$ZodString<string>,\n V extends AnyZodOrCoValueSchema,\n>(\n _keyType: K,\n valueType: V,\n): CoRecordSchema<K, V> => {\n return coMapDefiner({}).catchall(valueType) as unknown as CoRecordSchema<\n K,\n V\n >;\n};\n\nexport const coListDefiner = <T extends AnyZodOrCoValueSchema>(\n element: T,\n): CoListSchema<T> => {\n const coreSchema = createCoreCoListSchema(element);\n return hydrateCoreCoValueSchema(coreSchema);\n};\n\nconst validateProfileShape = (shape: z.core.$ZodLooseShape) => {\n if (isAnyCoValueSchema(shape as any)) {\n throw new Error(\n \"co.profile() expects an object as its argument, not a CoValue schema\",\n );\n } else if (!isValidShape(shape)) {\n throw new Error(\n \"co.profile() supports only Zod v4 schemas and CoValue schemas\",\n );\n }\n};\n\nexport const coProfileDefiner = <\n Shape extends z.core.$ZodLooseShape = Simplify<DefaultProfileShape>,\n>(\n shape: Shape & Partial<DefaultProfileShape> = {} as any,\n): CoProfileSchema<Shape> => {\n validateProfileShape(shape);\n const ehnancedShape = Object.assign(shape, {\n name: z.string(),\n inbox: z.optional(z.string()),\n inboxInvite: z.optional(z.string()),\n });\n return coMapDefiner(ehnancedShape) as unknown as CoProfileSchema<Shape>;\n};\n\nexport const coFeedDefiner = <T extends AnyZodOrCoValueSchema>(\n element: T,\n): CoFeedSchema<T> => {\n const coreSchema = createCoreCoFeedSchema(element);\n return hydrateCoreCoValueSchema(coreSchema);\n};\n\nexport const coFileStreamDefiner = (): FileStreamSchema => {\n const coreSchema = createCoreFileStreamSchema();\n return hydrateCoreCoValueSchema(coreSchema);\n};\n\nexport const coPlainTextDefiner = (): PlainTextSchema => {\n const coreSchema = createCoreCoPlainTextSchema();\n return hydrateCoreCoValueSchema(coreSchema);\n};\n\nexport const coRichTextDefiner = (): RichTextSchema => {\n const coreSchema = createCoreCoRichTextSchema();\n return hydrateCoreCoValueSchema(coreSchema);\n};\n\nexport type ImageDefinitionSchema = typeof ImageDefinition;\nexport const coImageDefiner = (): ImageDefinitionSchema => {\n return ImageDefinition;\n};\n\nexport const coOptionalDefiner = <T extends CoreCoValueSchema>(\n schema: T,\n): CoOptionalSchema<T> => {\n return new CoOptionalSchema(schema);\n};\n\nexport const coDiscriminatedUnionDefiner = <\n Options extends DiscriminableCoValueSchemas,\n>(\n discriminator: string,\n schemas: Options,\n): CoDiscriminatedUnionSchema<Options> => {\n const coreSchema = createCoreCoDiscriminatedUnionSchema(\n discriminator,\n schemas,\n );\n return hydrateCoreCoValueSchema(coreSchema);\n};\n","export { Loaded as loaded } from \"./zodSchema.js\";\nexport { Loaded as output } from \"./zodSchema.js\";\nexport { CoMapSchema as Map } from \"./schemaTypes/CoMapSchema.js\";\nexport { CoRecordSchema as Record } from \"./schemaTypes/CoRecordSchema.js\";\nexport { CoListSchema as List } from \"./schemaTypes/CoListSchema.js\";\nexport { CoFeedSchema as Feed } from \"./schemaTypes/CoFeedSchema.js\";\nexport { PlainTextSchema as PlainText } from \"./schemaTypes/PlainTextSchema.js\";\nexport { RichTextSchema as RichText } from \"./schemaTypes/RichTextSchema.js\";\nexport { FileStreamSchema as FileStream } from \"./schemaTypes/FileStreamSchema.js\";\nexport { CoInput as input } from \"./typeConverters/CoFieldSchemaInit.js\";\nexport {\n AccountSchema as Account,\n CoProfileSchema as Profile,\n} from \"./schemaTypes/AccountSchema.js\";\nexport { CoOptionalSchema as Optional } from \"./schemaTypes/CoOptionalSchema.js\";\nexport { CoDiscriminatedUnionSchema as DiscriminatedUnion } from \"./schemaTypes/CoDiscriminatedUnionSchema.js\";\nexport {\n coMapDefiner as map,\n coRecordDefiner as record,\n coListDefiner as list,\n coFeedDefiner as feed,\n coPlainTextDefiner as plainText,\n coRichTextDefiner as richText,\n coFileStreamDefiner as fileStream,\n coImageDefiner as image,\n coAccountDefiner as account,\n coProfileDefiner as profile,\n coOptionalDefiner as optional,\n coDiscriminatedUnionDefiner as discriminatedUnion,\n ImageDefinitionSchema as Image,\n} from \"./zodCo.js\";\n","import { CoValueUniqueness } from \"cojson\";\nimport {\n Account,\n CoMap,\n DiscriminableCoValueSchemaDefinition,\n DiscriminableCoreCoValueSchema,\n Group,\n RefsToResolve,\n RefsToResolveStrict,\n Resolved,\n Simplify,\n SubscribeListenerOptions,\n coMapDefiner,\n coOptionalDefiner,\n hydrateCoreCoValueSchema,\n isAnyCoValueSchema,\n} from \"../../../internal.js\";\nimport { AnonymousJazzAgent } from \"../../anonymousJazzAgent.js\";\nimport { removeGetters } from \"../../schemaUtils.js\";\nimport { CoMapSchemaInit } from \"../typeConverters/CoFieldSchemaInit.js\";\nimport { InstanceOrPrimitiveOfSchema } from \"../typeConverters/InstanceOrPrimitiveOfSchema.js\";\nimport { InstanceOrPrimitiveOfSchemaCoValuesNullable } from \"../typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.js\";\nimport { z } from \"../zodReExport.js\";\nimport { AnyZodOrCoValueSchema, AnyZodSchema } from \"../zodSchema.js\";\nimport { CoOptionalSchema } from \"./CoOptionalSchema.js\";\nimport { CoreCoValueSchema } from \"./CoValueSchema.js\";\n\nexport interface CoMapSchema<\n Shape extends z.core.$ZodLooseShape,\n CatchAll extends AnyZodOrCoValueSchema | unknown = unknown,\n Owner extends Account | Group = Account | Group,\n> extends CoreCoMapSchema<Shape, CatchAll> {\n create(\n init: CoMapSchemaInit<Shape>,\n options?:\n | {\n owner?: Group;\n unique?: CoValueUniqueness[\"uniqueness\"];\n }\n | Group,\n ): CoMapInstanceShape<Shape, CatchAll> & CoMap;\n /** @deprecated Creating CoValues with an Account as owner is deprecated. Use a Group instead. */\n create(\n init: CoMapSchemaInit<Shape>,\n options?:\n | {\n owner?: Owner;\n unique?: CoValueUniqueness[\"uniqueness\"];\n }\n | Owner,\n ): CoMapInstanceShape<Shape, CatchAll> & CoMap;\n\n load<\n const R extends RefsToResolve<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap\n > = true,\n >(\n id: string,\n options?: {\n resolve?: RefsToResolveStrict<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap,\n R\n >;\n loadAs?: Account | AnonymousJazzAgent;\n skipRetry?: boolean;\n },\n ): Promise<Resolved<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap,\n R\n > | null>;\n\n subscribe<\n const R extends RefsToResolve<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap\n > = true,\n >(\n id: string,\n options: SubscribeListenerOptions<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap,\n R\n >,\n listener: (\n value: Resolved<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap,\n R\n >,\n unsubscribe: () => void,\n ) => void,\n ): () => void;\n\n /** @deprecated Use `CoMap.upsertUnique` and `CoMap.loadUnique` instead. */\n findUnique(\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: string,\n as?: Account | Group | AnonymousJazzAgent,\n ): string;\n\n upsertUnique: <\n const R extends RefsToResolve<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap\n > = true,\n >(options: {\n value: Simplify<CoMapSchemaInit<Shape>>;\n unique: CoValueUniqueness[\"uniqueness\"];\n owner: Owner;\n resolve?: RefsToResolveStrict<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap,\n R\n >;\n }) => Promise<Resolved<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap,\n R\n > | null>;\n\n loadUnique<\n const R extends RefsToResolve<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap\n > = true,\n >(\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: string,\n options?: {\n resolve?: RefsToResolveStrict<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap,\n R\n >;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Resolved<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap,\n R\n > | null>;\n\n /**\n * @deprecated Use `co.map().catchall` will be removed in an upcoming version.\n *\n * Use a `co.record` nested inside a `co.map` if you need to store key-value properties.\n *\n * @example\n * ```ts\n * // Instead of:\n * const Image = co.map({\n * original: co.fileStream(),\n * }).catchall(co.fileStream());\n *\n * // Use:\n * const Image = co.map({\n * original: co.fileStream(),\n * resolutions: co.record(z.string(), co.fileStream()),\n * });\n * ```\n */\n catchall<T extends AnyZodOrCoValueSchema>(schema: T): CoMapSchema<Shape, T>;\n\n withMigration(\n migration: (\n value: Resolved<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap,\n true\n >,\n ) => undefined,\n ): CoMapSchema<Shape, CatchAll, Owner>;\n\n getCoValueClass: () => typeof CoMap;\n\n optional(): CoOptionalSchema<this>;\n\n /**\n * Creates a new CoMap schema by picking the specified keys from the original schema.\n *\n * @param keys - The keys to pick from the original schema.\n * @returns A new CoMap schema with the picked keys.\n */\n pick<Keys extends keyof Shape>(\n keys: { [key in Keys]: true },\n ): CoMapSchema<Simplify<Pick<Shape, Keys>>, unknown, Owner>;\n\n /**\n * Creates a new CoMap schema by making all fields optional.\n *\n * @returns A new CoMap schema with all fields optional.\n */\n partial(): CoMapSchema<PartialShape<Shape>, CatchAll, Owner>;\n}\n\nexport function createCoreCoMapSchema<\n Shape extends z.core.$ZodLooseShape,\n CatchAll extends AnyZodOrCoValueSchema | unknown = unknown,\n>(shape: Shape, catchAll?: CatchAll): CoreCoMapSchema<Shape, CatchAll> {\n return {\n collaborative: true as const,\n builtin: \"CoMap\" as const,\n shape,\n catchAll,\n getDefinition: () => ({\n get shape() {\n return shape;\n },\n get catchall() {\n return catchAll;\n },\n get discriminatorMap() {\n const propValues: DiscriminableCoValueSchemaDefinition[\"discriminatorMap\"] =\n {};\n // remove getters to avoid circularity issues. Getters are not used as discriminators\n for (const key in removeGetters(shape)) {\n if (isAnyCoValueSchema(shape[key])) {\n // CoValues cannot be used as discriminators either\n continue;\n }\n const field = shape[key]._zod;\n if (field.values) {\n propValues[key] ??= new Set();\n for (const v of field.values) propValues[key].add(v);\n }\n }\n return propValues;\n },\n }),\n };\n}\n\nexport function enrichCoMapSchema<\n Shape extends z.core.$ZodLooseShape,\n CatchAll extends AnyZodOrCoValueSchema | unknown,\n>(\n schema: CoreCoMapSchema<Shape, CatchAll>,\n coValueClass: typeof CoMap,\n): CoMapSchema<Shape, CatchAll> {\n const coValueSchema = Object.assign(schema, {\n create: (...args: [any, ...any[]]) => {\n return coValueClass.create(...args);\n },\n load: (...args: [any, ...any[]]) => {\n return coValueClass.load(...args);\n },\n subscribe: (...args: [any, ...any[]]) => {\n // @ts-expect-error\n return coValueClass.subscribe(...args);\n },\n findUnique: (...args: [any, ...any[]]) => {\n // @ts-expect-error\n return coValueClass.findUnique(...args);\n },\n upsertUnique: (...args: [any, ...any[]]) => {\n // @ts-expect-error\n return coValueClass.upsertUnique(...args);\n },\n loadUnique: (...args: [any, ...any[]]) => {\n // @ts-expect-error\n return coValueClass.loadUnique(...args);\n },\n catchall: (catchAll: AnyZodOrCoValueSchema) => {\n const schemaWithCatchAll = createCoreCoMapSchema(\n coValueSchema.getDefinition().shape,\n catchAll,\n );\n return hydrateCoreCoValueSchema(schemaWithCatchAll);\n },\n withMigration: (migration: (value: any) => undefined) => {\n // @ts-expect-error TODO check\n coValueClass.prototype.migrate = migration;\n\n return coValueSchema;\n },\n getCoValueClass: () => {\n return coValueClass;\n },\n optional: () => {\n return coOptionalDefiner(coValueSchema);\n },\n pick: <Keys extends keyof Shape>(keys: { [key in Keys]: true }) => {\n const keysSet = new Set(Object.keys(keys));\n const pickedShape: Record<string, AnyZodOrCoValueSchema> = {};\n\n for (const [key, value] of Object.entries(coValueSchema.shape)) {\n if (keysSet.has(key)) {\n pickedShape[key] = value;\n }\n }\n\n return coMapDefiner(pickedShape);\n },\n partial: () => {\n const partialShape: Record<string, AnyZodOrCoValueSchema> = {};\n\n for (const [key, value] of Object.entries(coValueSchema.shape)) {\n if (isAnyCoValueSchema(value)) {\n partialShape[key] = coOptionalDefiner(value);\n } else {\n partialShape[key] = z.optional(coValueSchema.shape[key]);\n }\n }\n\n const partialCoMapSchema = coMapDefiner(partialShape);\n if (coValueSchema.catchAll) {\n return partialCoMapSchema.catchall(\n coValueSchema.catchAll as unknown as AnyZodOrCoValueSchema,\n );\n }\n return partialCoMapSchema;\n },\n }) as unknown as CoMapSchema<Shape, CatchAll>;\n return coValueSchema;\n}\n\nexport interface CoMapSchemaDefinition<\n Shape extends z.core.$ZodLooseShape = z.core.$ZodLooseShape,\n CatchAll extends AnyZodOrCoValueSchema | unknown = unknown,\n> extends DiscriminableCoValueSchemaDefinition {\n shape: Shape;\n catchall?: CatchAll;\n}\n\n// less precise version to avoid circularity issues and allow matching against\nexport interface CoreCoMapSchema<\n Shape extends z.core.$ZodLooseShape = z.core.$ZodLooseShape,\n CatchAll extends AnyZodOrCoValueSchema | unknown = unknown,\n> extends DiscriminableCoreCoValueSchema {\n builtin: \"CoMap\";\n shape: Shape;\n catchAll?: CatchAll;\n getDefinition: () => CoMapSchemaDefinition;\n}\n\nexport type CoMapInstanceShape<\n Shape extends z.core.$ZodLooseShape,\n CatchAll extends AnyZodOrCoValueSchema | unknown = unknown,\n> = {\n readonly [key in keyof Shape]: InstanceOrPrimitiveOfSchema<Shape[key]>;\n} & (CatchAll extends AnyZodOrCoValueSchema\n ? {\n readonly [key: string]: InstanceOrPrimitiveOfSchema<CatchAll>;\n }\n : {});\n\nexport type CoMapInstanceCoValuesNullable<Shape extends z.core.$ZodLooseShape> =\n {\n readonly [key in keyof Shape]: InstanceOrPrimitiveOfSchemaCoValuesNullable<\n Shape[key]\n >;\n };\n\nexport type PartialShape<Shape extends z.core.$ZodLooseShape> = Simplify<{\n -readonly [key in keyof Shape]: Shape[key] extends AnyZodSchema\n ? z.ZodOptional<Shape[key]>\n : Shape[key] extends CoreCoValueSchema\n ? CoOptionalSchema<Shape[key]>\n : never;\n}>;\n","import {\n Account,\n CoList,\n Group,\n ID,\n RefsToResolve,\n RefsToResolveStrict,\n Resolved,\n SubscribeListenerOptions,\n coOptionalDefiner,\n} from \"../../../internal.js\";\nimport { CoValueUniqueness } from \"cojson\";\nimport { AnonymousJazzAgent } from \"../../anonymousJazzAgent.js\";\nimport { CoListSchemaInit } from \"../typeConverters/CoFieldSchemaInit.js\";\nimport { InstanceOrPrimitiveOfSchema } from \"../typeConverters/InstanceOrPrimitiveOfSchema.js\";\nimport { InstanceOrPrimitiveOfSchemaCoValuesNullable } from \"../typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.js\";\nimport { AnyZodOrCoValueSchema } from \"../zodSchema.js\";\nimport { CoOptionalSchema } from \"./CoOptionalSchema.js\";\nimport { CoreCoValueSchema } from \"./CoValueSchema.js\";\n\nexport class CoListSchema<T extends AnyZodOrCoValueSchema>\n implements CoreCoListSchema<T>\n{\n collaborative = true as const;\n builtin = \"CoList\" as const;\n\n constructor(\n public element: T,\n private coValueClass: typeof CoList,\n ) {}\n\n create(\n items: CoListSchemaInit<T>,\n options?:\n | { owner: Group; unique?: CoValueUniqueness[\"uniqueness\"] }\n | Group,\n ): CoListInstance<T>;\n /** @deprecated Creating CoValues with an Account as owner is deprecated. Use a Group instead. */\n create(\n items: CoListSchemaInit<T>,\n options?:\n | { owner: Account | Group; unique?: CoValueUniqueness[\"uniqueness\"] }\n | Account\n | Group,\n ): CoListInstance<T>;\n create(\n items: CoListSchemaInit<T>,\n options?:\n | { owner: Account | Group; unique?: CoValueUniqueness[\"uniqueness\"] }\n | Account\n | Group,\n ): CoListInstance<T> {\n return this.coValueClass.create(items as any, options) as CoListInstance<T>;\n }\n\n load<const R extends RefsToResolve<CoListInstanceCoValuesNullable<T>> = true>(\n id: string,\n options?: {\n resolve?: RefsToResolveStrict<CoListInstanceCoValuesNullable<T>, R>;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Resolved<CoListInstanceCoValuesNullable<T>, R> | null> {\n // @ts-expect-error\n return this.coValueClass.load(id, options);\n }\n\n subscribe<\n const R extends RefsToResolve<CoListInstanceCoValuesNullable<T>> = true,\n >(\n id: string,\n options: SubscribeListenerOptions<CoListInstanceCoValuesNullable<T>, R>,\n listener: (\n value: Resolved<CoListInstanceCoValuesNullable<T>, R>,\n unsubscribe: () => void,\n ) => void,\n ): () => void {\n return this.coValueClass.subscribe(id, options, listener);\n }\n\n getCoValueClass(): typeof CoList {\n return this.coValueClass;\n }\n\n /** @deprecated Use `CoList.upsertUnique` and `CoList.loadUnique` instead. */\n findUnique(\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: ID<Account> | ID<Group>,\n as?: Account | Group | AnonymousJazzAgent,\n ): ID<CoListInstanceCoValuesNullable<T>> {\n return this.coValueClass.findUnique(unique, ownerID, as);\n }\n\n upsertUnique<\n const R extends RefsToResolve<CoListInstanceCoValuesNullable<T>> = true,\n >(options: {\n value: CoListSchemaInit<T>;\n unique: CoValueUniqueness[\"uniqueness\"];\n owner: Account | Group;\n resolve?: RefsToResolveStrict<CoListInstanceCoValuesNullable<T>, R>;\n }): Promise<Resolved<CoListInstanceCoValuesNullable<T>, R> | null> {\n // @ts-expect-error\n return this.coValueClass.upsertUnique(options);\n }\n\n loadUnique<\n const R extends RefsToResolve<CoListInstanceCoValuesNullable<T>> = true,\n >(\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: ID<Account> | ID<Group>,\n options?: {\n resolve?: RefsToResolveStrict<CoListInstanceCoValuesNullable<T>, R>;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Resolved<CoListInstanceCoValuesNullable<T>, R> | null> {\n // @ts-expect-error\n return this.coValueClass.loadUnique(unique, ownerID, options);\n }\n\n optional(): CoOptionalSchema<this> {\n return coOptionalDefiner(this);\n }\n}\n\nexport function createCoreCoListSchema<T extends AnyZodOrCoValueSchema>(\n element: T,\n): CoreCoListSchema<T> {\n return {\n collaborative: true as const,\n builtin: \"CoList\" as const,\n element,\n };\n}\n\n// less precise version to avoid circularity issues and allow matching against\nexport interface CoreCoListSchema<\n T extends AnyZodOrCoValueSchema = AnyZodOrCoValueSchema,\n> extends CoreCoValueSchema {\n builtin: \"CoList\";\n element: T;\n}\n\nexport type CoListInstance<T extends AnyZodOrCoValueSchema> = CoList<\n InstanceOrPrimitiveOfSchema<T>\n>;\n\nexport type CoListInstanceCoValuesNullable<T extends AnyZodOrCoValueSchema> =\n CoList<InstanceOrPrimitiveOfSchemaCoValuesNullable<T>>;\n","import {\n Account,\n AnyZodOrCoValueSchema,\n CoFeed,\n Group,\n RefsToResolve,\n RefsToResolveStrict,\n Resolved,\n SubscribeListenerOptions,\n coOptionalDefiner,\n} from \"../../../internal.js\";\nimport { AnonymousJazzAgent } from \"../../anonymousJazzAgent.js\";\nimport { CoFeedSchemaInit } from \"../typeConverters/CoFieldSchemaInit.js\";\nimport { InstanceOrPrimitiveOfSchema } from \"../typeConverters/InstanceOrPrimitiveOfSchema.js\";\nimport { InstanceOrPrimitiveOfSchemaCoValuesNullable } from \"../typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.js\";\nimport { CoOptionalSchema } from \"./CoOptionalSchema.js\";\nimport { CoreCoValueSchema } from \"./CoValueSchema.js\";\n\nexport class CoFeedSchema<T extends AnyZodOrCoValueSchema>\n implements CoreCoFeedSchema<T>\n{\n collaborative = true as const;\n builtin = \"CoFeed\" as const;\n\n constructor(\n public element: T,\n private coValueClass: typeof CoFeed,\n ) {}\n\n create(\n init: CoFeedSchemaInit<T>,\n options?: { owner: Group } | Group,\n ): CoFeedInstance<T>;\n /** @deprecated Creating CoValues with an Account as owner is deprecated. Use a Group instead. */\n create(\n init: CoFeedSchemaInit<T>,\n options?: { owner: Account | Group } | Account | Group,\n ): CoFeedInstance<T>;\n create(\n init: CoFeedSchemaInit<T>,\n options?: { owner: Account | Group } | Account | Group,\n ): CoFeedInstance<T> {\n return this.coValueClass.create(init as any, options) as CoFeedInstance<T>;\n }\n\n load<const R extends RefsToResolve<CoFeedInstanceCoValuesNullable<T>> = true>(\n id: string,\n options?: {\n resolve?: RefsToResolveStrict<CoFeedInstanceCoValuesNullable<T>, R>;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Resolved<CoFeedInstanceCoValuesNullable<T>, R> | null> {\n // @ts-expect-error\n return this.coValueClass.load(id, options);\n }\n\n subscribe(\n id: string,\n listener: (\n value: Resolved<CoFeedInstanceCoValuesNullable<T>, true>,\n unsubscribe: () => void,\n ) => void,\n ): () => void;\n subscribe<\n const R extends RefsToResolve<CoFeedInstanceCoValuesNullable<T>> = true,\n >(\n id: string,\n options: SubscribeListenerOptions<CoFeedInstanceCoValuesNullable<T>, R>,\n listener: (\n value: Resolved<CoFeedInstanceCoValuesNullable<T>, R>,\n unsubscribe: () => void,\n ) => void,\n ): () => void;\n subscribe(...args: [any, ...any[]]) {\n // @ts-expect-error\n return this.coValueClass.subscribe(...args);\n }\n\n getCoValueClass(): typeof CoFeed {\n return this.coValueClass;\n }\n\n optional(): CoOptionalSchema<this> {\n return coOptionalDefiner(this);\n }\n}\n\nexport function createCoreCoFeedSchema<T extends AnyZodOrCoValueSchema>(\n element: T,\n): CoreCoFeedSchema<T> {\n return {\n collaborative: true as const,\n builtin: \"CoFeed\" as const,\n element,\n };\n}\n\n// less precise version to avoid circularity issues and allow matching against\nexport interface CoreCoFeedSchema<\n T extends AnyZodOrCoValueSchema = AnyZodOrCoValueSchema,\n> extends CoreCoValueSchema {\n builtin: \"CoFeed\";\n element: T;\n}\n\nexport type CoFeedInstance<T extends AnyZodOrCoValueSchema> = CoFeed<\n InstanceOrPrimitiveOfSchema<T>\n>;\n\nexport type CoFeedInstanceCoValuesNullable<T extends AnyZodOrCoValueSchema> =\n CoFeed<InstanceOrPrimitiveOfSchemaCoValuesNullable<T>>;\n","import { RawCoPlainText } from \"cojson\";\nimport {\n Account,\n CoPlainText,\n Group,\n coOptionalDefiner,\n} from \"../../../internal.js\";\nimport { AnonymousJazzAgent } from \"../../anonymousJazzAgent.js\";\nimport { CoOptionalSchema } from \"./CoOptionalSchema.js\";\nimport { CoreCoValueSchema } from \"./CoValueSchema.js\";\n\nexport interface CorePlainTextSchema extends CoreCoValueSchema {\n builtin: \"CoPlainText\";\n}\n\nexport function createCoreCoPlainTextSchema(): CorePlainTextSchema {\n return {\n collaborative: true as const,\n builtin: \"CoPlainText\" as const,\n };\n}\n\nexport class PlainTextSchema implements CorePlainTextSchema {\n readonly collaborative = true as const;\n readonly builtin = \"CoPlainText\" as const;\n\n constructor(private coValueClass: typeof CoPlainText) {}\n\n create(text: string, options?: { owner: Group } | Group): CoPlainText;\n /** @deprecated Creating CoValues with an Account as owner is deprecated. Use a Group instead. */\n create(\n text: string,\n options?: { owner: Account | Group } | Account | Group,\n ): CoPlainText;\n create(\n text: string,\n options?: { owner: Account | Group } | Account | Group,\n ): CoPlainText {\n return this.coValueClass.create(text, options);\n }\n\n load(\n id: string,\n options: { loadAs: Account | AnonymousJazzAgent },\n ): Promise<CoPlainText | null> {\n return this.coValueClass.load(id, options);\n }\n\n subscribe(\n id: string,\n options: { loadAs: Account | AnonymousJazzAgent },\n listener: (value: CoPlainText, unsubscribe: () => void) => void,\n ): () => void;\n subscribe(\n id: string,\n listener: (value: CoPlainText, unsubscribe: () => void) => void,\n ): () => void;\n subscribe(...args: [any, ...any[]]) {\n // @ts-expect-error\n return this.coValueClass.subscribe(...args);\n }\n\n fromRaw(raw: RawCoPlainText): CoPlainText {\n return this.coValueClass.fromRaw(raw);\n }\n\n getCoValueClass(): typeof CoPlainText {\n return this.coValueClass;\n }\n\n optional(): CoOptionalSchema<this> {\n return coOptionalDefiner(this);\n }\n}\n","import {\n Account,\n AnonymousJazzAgent,\n FileStream,\n Group,\n coOptionalDefiner,\n} from \"../../../internal.js\";\nimport { CoOptionalSchema } from \"./CoOptionalSchema.js\";\nimport { CoreCoValueSchema } from \"./CoValueSchema.js\";\n\nexport interface CoreFileStreamSchema extends CoreCoValueSchema {\n builtin: \"FileStream\";\n}\n\nexport function createCoreFileStreamSchema(): CoreFileStreamSchema {\n return {\n collaborative: true as const,\n builtin: \"FileStream\" as const,\n };\n}\n\nexport class FileStreamSchema implements CoreFileStreamSchema {\n readonly collaborative = true as const;\n readonly builtin = \"FileStream\" as const;\n\n constructor(private coValueClass: typeof FileStream) {}\n\n create(options?: { owner: Group } | Group): FileStream;\n /** @deprecated Creating CoValues with an Account as owner is deprecated. Use a Group instead. */\n create(options?: { owner: Account | Group } | Account | Group): FileStream;\n create(options?: { owner: Account | Group } | Account | Group): FileStream {\n return this.coValueClass.create(options);\n }\n\n createFromBlob(\n blob: Blob | File,\n options?:\n | { owner?: Group; onProgress?: (progress: number) => void }\n | Group,\n ): Promise<FileStream>;\n /** @deprecated Creating CoValues with an Account as owner is deprecated. Use a Group instead. */\n createFromBlob(\n blob: Blob | File,\n options?:\n | { owner?: Account | Group; onProgress?: (progress: number) => void }\n | Account\n | Group,\n ): Promise<FileStream>;\n createFromBlob(\n blob: Blob | File,\n options?:\n | {\n owner?: Account | Group;\n onProgress?: (progress: number) => void;\n }\n | Account\n | Group,\n ): Promise<FileStream> {\n return this.coValueClass.createFromBlob(blob, options);\n }\n\n createFromArrayBuffer(\n ...args: Parameters<typeof FileStream.createFromArrayBuffer>\n ) {\n return this.coValueClass.createFromArrayBuffer(...args);\n }\n\n loadAsBlob(\n id: string,\n options?: {\n allowUnfinished?: boolean;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Blob | undefined> {\n return this.coValueClass.loadAsBlob(id, options);\n }\n\n load(\n id: string,\n options: { loadAs: Account | AnonymousJazzAgent },\n ): Promise<FileStream | null> {\n return this.coValueClass.load(id, options);\n }\n\n subscribe(\n id: string,\n options: { loadAs: Account | AnonymousJazzAgent },\n listener: (value: FileStream, unsubscribe: () => void) => void,\n ): () => void;\n subscribe(\n id: string,\n listener: (value: FileStream, unsubscribe: () => void) => void,\n ): () => void;\n subscribe(...args: [any, ...any[]]) {\n // @ts-expect-error\n return this.coValueClass.subscribe(...args);\n }\n\n getCoValueClass(): typeof FileStream {\n return this.coValueClass;\n }\n\n optional(): CoOptionalSchema<this> {\n return coOptionalDefiner(this);\n }\n}\n","import { CryptoProvider } from \"cojson\";\nimport {\n Account,\n AccountCreationProps,\n Group,\n RefsToResolveStrict,\n} from \"../../../internal.js\";\nimport { AnonymousJazzAgent } from \"../../anonymousJazzAgent.js\";\nimport { InstanceOrPrimitiveOfSchema } from \"../typeConverters/InstanceOrPrimitiveOfSchema.js\";\nimport { InstanceOrPrimitiveOfSchemaCoValuesNullable } from \"../typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.js\";\nimport { z } from \"../zodReExport.js\";\nimport { AnyZodOrCoValueSchema, Loaded, ResolveQuery } from \"../zodSchema.js\";\nimport {\n CoMapSchema,\n CoMapSchemaDefinition,\n CoreCoMapSchema,\n createCoreCoMapSchema,\n} from \"./CoMapSchema.js\";\n\nexport type BaseProfileShape = {\n name: z.core.$ZodString<string>;\n inbox?: z.core.$ZodOptional<z.core.$ZodString>;\n inboxInvite?: z.core.$ZodOptional<z.core.$ZodString>;\n};\n\nexport type BaseAccountShape = {\n profile: CoreCoMapSchema<BaseProfileShape>;\n root: CoreCoMapSchema;\n};\n\nexport type DefaultAccountShape = {\n profile: CoMapSchema<BaseProfileShape>;\n root: CoMapSchema<{}>;\n};\n\nexport interface AccountSchema<\n Shape extends BaseAccountShape = DefaultAccountShape,\n> extends CoreAccountSchema<Shape>,\n Omit<\n CoMapSchema<Shape>,\n | \"builtin\"\n | \"getDefinition\"\n | \"create\"\n | \"load\"\n | \"withMigration\"\n | \"getCoValueClass\"\n > {\n builtin: \"Account\";\n\n create: (options: {\n creationProps?: { name: string };\n crypto?: CryptoProvider;\n }) => Promise<AccountInstance<Shape>>;\n\n load: <R extends ResolveQuery<AccountSchema<Shape>>>(\n id: string,\n options?: {\n loadAs?: Account | AnonymousJazzAgent;\n resolve?: RefsToResolveStrict<AccountSchema<Shape>, R>;\n },\n ) => Promise<Loaded<AccountSchema<Shape>, R> | null>;\n\n createAs: (\n as: Account,\n options: {\n creationProps?: { name: string };\n },\n ) => Promise<AccountInstance<Shape>>;\n\n getMe: () => AccountInstanceCoValuesNullable<Shape>;\n\n withMigration(\n migration: (\n account: Loaded<AccountSchema<Shape>>,\n creationProps?: { name: string },\n ) => void,\n ): AccountSchema<Shape>;\n\n getCoValueClass: () => typeof Account;\n}\n\nexport function createCoreAccountSchema<Shape extends BaseAccountShape>(\n shape: Shape,\n): CoreAccountSchema<Shape> {\n return {\n ...createCoreCoMapSchema(shape),\n builtin: \"Account\" as const,\n };\n}\n\nexport function enrichAccountSchema<Shape extends BaseAccountShape>(\n schema: CoreAccountSchema<Shape>,\n coValueClass: typeof Account,\n): AccountSchema<Shape> {\n const enrichedSchema = Object.assign(schema, {\n create: (...args: any[]) => {\n // @ts-expect-error\n return coValueClass.create(...args);\n },\n createAs: (...args: any[]) => {\n // @ts-expect-error\n return coValueClass.createAs(...args);\n },\n getMe: (...args: any[]) => {\n // @ts-expect-error\n return coValueClass.getMe(...args);\n },\n load: (...args: any[]) => {\n // @ts-expect-error\n return coValueClass.load(...args);\n },\n subscribe: (...args: any[]) => {\n // @ts-expect-error\n return coValueClass.subscribe(...args);\n },\n fromRaw: (...args: any[]) => {\n // @ts-expect-error\n return coValueClass.fromRaw(...args);\n },\n withMigration: (\n migration: (\n value: any,\n creationProps?: AccountCreationProps,\n ) => void | Promise<void>,\n ) => {\n (coValueClass.prototype as Account).migrate = async function (\n this,\n creationProps,\n ) {\n await migration(this, creationProps);\n };\n\n return enrichedSchema;\n },\n getCoValueClass: () => {\n return coValueClass;\n },\n }) as unknown as AccountSchema<Shape>;\n return enrichedSchema;\n}\n\nexport type DefaultProfileShape = {\n name: z.core.$ZodString<string>;\n inbox: z.core.$ZodOptional<z.core.$ZodString>;\n inboxInvite: z.core.$ZodOptional<z.core.$ZodString>;\n};\n\nexport type CoProfileSchema<\n Shape extends z.core.$ZodLooseShape = DefaultProfileShape,\n CatchAll extends AnyZodOrCoValueSchema | unknown = unknown,\n> = CoMapSchema<Shape & DefaultProfileShape, CatchAll, Group>;\n\n// less precise version to avoid circularity issues and allow matching against\nexport interface CoreAccountSchema<\n Shape extends z.core.$ZodLooseShape = z.core.$ZodLooseShape,\n> extends Omit<CoreCoMapSchema<Shape>, \"builtin\"> {\n builtin: \"Account\";\n}\n\nexport type AccountInstance<Shape extends z.core.$ZodLooseShape> = {\n readonly [key in keyof Shape]: InstanceOrPrimitiveOfSchema<Shape[key]>;\n} & Account;\n\nexport type AccountInstanceCoValuesNullable<\n Shape extends z.core.$ZodLooseShape,\n> = {\n readonly [key in keyof Shape]: InstanceOrPrimitiveOfSchemaCoValuesNullable<\n Shape[key]\n >;\n} & Account;\n","import {\n AnyZodOrCoValueSchema,\n CoDiscriminatedUnionSchema,\n CoMap,\n CoreCoDiscriminatedUnionSchema,\n CoreCoMapSchema,\n DiscriminableCoValueSchemas,\n DiscriminableCoreCoValueSchema,\n SchemaUnionDiscriminator,\n} from \"../../internal.js\";\nimport {\n hydrateCoreCoValueSchema,\n isAnyCoValueSchema,\n} from \"./runtimeConverters/coValueSchemaTransformation.js\";\nimport { z } from \"./zodReExport.js\";\n\nexport function schemaUnionDiscriminatorFor(\n schema: CoreCoDiscriminatedUnionSchema<DiscriminableCoValueSchemas>,\n) {\n if (isUnionOfCoMapsDeeply(schema)) {\n const definition = schema.getDefinition();\n const { discriminatorMap, discriminator, options } = definition;\n\n const field = discriminatorMap[discriminator];\n if (!field) {\n throw new Error(\n \"co.discriminatedUnion() of collaborative types with non-existent discriminator key is not supported\",\n );\n }\n\n for (const value of field) {\n if (typeof value !== \"string\" && typeof value !== \"number\") {\n throw new Error(\n \"co.discriminatedUnion() of collaborative types with non-string or non-number discriminator value is not supported\",\n );\n }\n }\n\n const availableOptions: DiscriminableCoreCoValueSchema[] = [];\n\n for (const option of options) {\n if (option.builtin === \"CoMap\") {\n availableOptions.push(option);\n } else if (option.builtin === \"CoDiscriminatedUnion\") {\n for (const subOption of (\n option as CoDiscriminatedUnionSchema<any>\n ).getDefinition().options) {\n if (!options.includes(subOption)) {\n options.push(subOption);\n }\n }\n } else {\n throw new Error(\n \"Unsupported zod type in co.discriminatedUnion() of collaborative types\",\n );\n }\n }\n\n const determineSchema: SchemaUnionDiscriminator<CoMap> = (\n discriminable,\n ) => {\n for (const option of availableOptions) {\n let match = true;\n\n for (const key of Object.keys(discriminatorMap)) {\n const discriminatorDef = (option as CoreCoMapSchema).getDefinition()\n .shape[key];\n\n const discriminatorValue = discriminable.get(key);\n\n if (discriminatorValue && typeof discriminatorValue === \"object\") {\n throw new Error(\"Discriminator must be a primitive value\");\n }\n\n if (!discriminatorDef) {\n if (key === discriminator) {\n match = false;\n break;\n } else {\n continue;\n }\n }\n if (discriminatorDef._zod?.def.type !== \"literal\") {\n break;\n }\n\n const literalDef = discriminatorDef._zod\n .def as z.core.$ZodLiteralDef<any>;\n\n if (!Array.from(literalDef.values).includes(discriminatorValue)) {\n match = false;\n break;\n }\n }\n\n if (match) {\n const coValueSchema = hydrateCoreCoValueSchema(option as any);\n return coValueSchema.getCoValueClass() as typeof CoMap;\n }\n }\n\n throw new Error(\n \"co.discriminatedUnion() of collaborative types with no matching discriminator value found\",\n );\n };\n\n return determineSchema;\n } else {\n throw new Error(\n \"co.discriminatedUnion() of non-collaborative types is not supported\",\n );\n }\n}\n\nfunction isUnionOfCoMapsDeeply(\n schema: CoreCoDiscriminatedUnionSchema<DiscriminableCoValueSchemas>,\n): boolean {\n return schema.getDefinition().options.every(isCoMapOrUnionOfCoMapsDeeply);\n}\n\nfunction isCoMapOrUnionOfCoMapsDeeply(\n schema: DiscriminableCoreCoValueSchema,\n): boolean {\n if (schema.builtin === \"CoMap\") {\n return true;\n } else if (schema.builtin === \"CoDiscriminatedUnion\") {\n return (schema as CoDiscriminatedUnionSchema<any>)\n .getDefinition()\n .options.every(isCoMapOrUnionOfCoMapsDeeply);\n } else {\n return false;\n }\n}\n\nexport function isUnionOfPrimitivesDeeply(schema: AnyZodOrCoValueSchema) {\n if (schema instanceof z.core.$ZodUnion) {\n return schema._zod.def.options.every(isUnionOfPrimitivesDeeply);\n } else {\n return !isAnyCoValueSchema(schema);\n }\n}\n\nfunction isCoDiscriminatedUnion(\n def: any,\n): def is CoreCoDiscriminatedUnionSchema<any> {\n return def.builtin === \"CoDiscriminatedUnion\";\n}\n","import { CoValueClass, isCoValueClass } from \"../../../internal.js\";\nimport { coField } from \"../../schema.js\";\nimport { CoreCoValueSchema } from \"../schemaTypes/CoValueSchema.js\";\nimport { isUnionOfPrimitivesDeeply } from \"../unionUtils.js\";\nimport {\n ZodCatch,\n ZodDefault,\n ZodLazy,\n ZodReadonly,\n z,\n} from \"../zodReExport.js\";\nimport { ZodPrimitiveSchema } from \"../zodSchema.js\";\nimport { isCoValueSchema } from \"./coValueSchemaTransformation.js\";\n\n/**\n * Types of objects that can be nested inside CoValue schema containers\n */\nexport type SchemaField =\n // Schemas created with co.map(), co.record(), co.list(), etc.\n | CoreCoValueSchema\n // CoValue classes created with class syntax, or framework-provided classes like Group\n | CoValueClass\n | ZodPrimitiveSchema\n | z.core.$ZodOptional<z.core.$ZodType>\n | z.core.$ZodNullable<z.core.$ZodType>\n | z.core.$ZodUnion<z.core.$ZodType[]>\n | z.core.$ZodDiscriminatedUnion<z.core.$ZodType[]>\n | z.core.$ZodObject<z.core.$ZodLooseShape>\n | z.core.$ZodArray<z.core.$ZodType>\n | z.core.$ZodTuple<z.core.$ZodType[]>\n | z.core.$ZodReadonly<z.core.$ZodType>\n | z.core.$ZodLazy<z.core.$ZodType>\n | z.core.$ZodTemplateLiteral<any>\n | z.core.$ZodLiteral<any>\n | z.core.$ZodCatch<z.core.$ZodType>\n | z.core.$ZodEnum<any>\n | z.core.$ZodDefault<z.core.$ZodType>\n | z.core.$ZodCatch<z.core.$ZodType>;\n\nexport function schemaFieldToCoFieldDef(schema: SchemaField) {\n if (isCoValueClass(schema)) {\n return coField.ref(schema);\n } else if (isCoValueSchema(schema)) {\n if (schema.builtin === \"CoOptional\") {\n return coField.ref(schema.getCoValueClass(), {\n optional: true,\n });\n }\n return coField.ref(schema.getCoValueClass());\n } else {\n if (\"_zod\" in schema) {\n const zodSchemaDef = schema._zod.def;\n if (\n zodSchemaDef.type === \"optional\" ||\n zodSchemaDef.type === \"nullable\"\n ) {\n const inner = zodSchemaDef.innerType as ZodPrimitiveSchema;\n const coFieldDef: any = schemaFieldToCoFieldDef(inner);\n if (\n zodSchemaDef.type === \"nullable\" &&\n coFieldDef === coField.optional.Date\n ) {\n // We do not currently have a way to encode null Date coFields.\n // We only support encoding optional (i.e. Date | undefined) coFields.\n throw new Error(\"Nullable z.date() is not supported\");\n }\n // Primitive coField types support null and undefined as values,\n // so we can just return the inner type here and rely on support\n // for null/undefined at the type level\n return coFieldDef;\n } else if (zodSchemaDef.type === \"string\") {\n return coField.string;\n } else if (zodSchemaDef.type === \"number\") {\n return coField.number;\n } else if (zodSchemaDef.type === \"boolean\") {\n return coField.boolean;\n } else if (zodSchemaDef.type === \"null\") {\n return coField.null;\n } else if (zodSchemaDef.type === \"enum\") {\n return coField.string;\n } else if (zodSchemaDef.type === \"readonly\") {\n return schemaFieldToCoFieldDef(\n (schema as unknown as ZodReadonly).def.innerType as SchemaField,\n );\n } else if (zodSchemaDef.type === \"date\") {\n return coField.optional.Date;\n } else if (zodSchemaDef.type === \"template_literal\") {\n return coField.string;\n } else if (zodSchemaDef.type === \"lazy\") {\n // Mostly to support z.json()\n return schemaFieldToCoFieldDef(\n (schema as unknown as ZodLazy).unwrap() as SchemaField,\n );\n } else if (\n zodSchemaDef.type === \"default\" ||\n zodSchemaDef.type === \"catch\"\n ) {\n console.warn(\n \"z.default()/z.catch() are not supported in collaborative schemas. They will be ignored.\",\n );\n\n return schemaFieldToCoFieldDef(\n (schema as unknown as ZodDefault | ZodCatch).def\n .innerType as SchemaField,\n );\n } else if (zodSchemaDef.type === \"literal\") {\n if (\n zodSchemaDef.values.some((literal) => typeof literal === \"undefined\")\n ) {\n throw new Error(\"z.literal() with undefined is not supported\");\n }\n if (zodSchemaDef.values.some((literal) => literal === null)) {\n throw new Error(\"z.literal() with null is not supported\");\n }\n if (\n zodSchemaDef.values.some((literal) => typeof literal === \"bigint\")\n ) {\n throw new Error(\"z.literal() with bigint is not supported\");\n }\n return coField.literal(\n ...(zodSchemaDef.values as Exclude<\n (typeof zodSchemaDef.values)[number],\n undefined | null | bigint\n >[]),\n );\n } else if (\n zodSchemaDef.type === \"object\" ||\n zodSchemaDef.type === \"array\" ||\n zodSchemaDef.type === \"tuple\"\n ) {\n return coField.json();\n } else if (zodSchemaDef.type === \"union\") {\n if (isUnionOfPrimitivesDeeply(schema)) {\n return coField.json();\n } else {\n throw new Error(\n \"z.union()/z.discriminatedUnion() of collaborative types is not supported. Use co.discriminatedUnion() instead.\",\n );\n }\n } else {\n throw new Error(\n `Unsupported zod type: ${(schema._zod?.def as any)?.type || JSON.stringify(schema)}`,\n );\n }\n } else {\n throw new Error(`Unsupported zod type: ${schema}`);\n }\n }\n}\n","import { RawCoList, RawCoMap } from \"cojson\";\nimport {\n Account,\n CoDiscriminatedUnionSchema,\n CoFeed,\n CoFeedSchema,\n CoList,\n CoListSchema,\n CoMap,\n CoPlainText,\n CoRichText,\n CoValueClass,\n FileStream,\n FileStreamSchema,\n PlainTextSchema,\n SchemaUnion,\n enrichAccountSchema,\n enrichCoMapSchema,\n isCoValueClass,\n} from \"../../../internal.js\";\nimport { coField } from \"../../schema.js\";\n\nimport { CoreCoValueSchema } from \"../schemaTypes/CoValueSchema.js\";\nimport { RichTextSchema } from \"../schemaTypes/RichTextSchema.js\";\nimport { schemaUnionDiscriminatorFor } from \"../unionUtils.js\";\nimport {\n AnyCoreCoValueSchema,\n AnyZodOrCoValueSchema,\n CoValueClassFromAnySchema,\n CoValueClassOrSchema,\n CoValueSchemaFromCoreSchema,\n} from \"../zodSchema.js\";\nimport {\n SchemaField,\n schemaFieldToCoFieldDef,\n} from \"./schemaFieldToCoFieldDef.js\";\n\n// Note: if you're editing this function, edit the `isAnyCoValueSchema`\n// function in `zodReExport.ts` as well\nexport function isAnyCoValueSchema(\n schema: unknown,\n): schema is AnyCoreCoValueSchema {\n return (\n typeof schema === \"object\" &&\n schema !== null &&\n \"collaborative\" in schema &&\n schema.collaborative === true\n );\n}\n\nexport function isCoValueSchema(\n schema: AnyZodOrCoValueSchema | CoValueClass,\n): schema is CoValueSchemaFromCoreSchema<AnyCoreCoValueSchema> {\n return isAnyCoValueSchema(schema) && \"getCoValueClass\" in schema;\n}\n\n/**\n * Convert a \"core\" CoValue schema into a CoValue schema.\n * See {@link CoreCoValueSchema} for more information.\n *\n * @returns The CoValue schema matching the provided CoreCoValueSchema\n */\nexport function hydrateCoreCoValueSchema<S extends AnyCoreCoValueSchema>(\n schema: S,\n): CoValueSchemaFromCoreSchema<S> {\n if (isCoValueSchema(schema)) {\n // If the schema is already a CoValue schema, return it as is\n return schema as any;\n }\n\n if (schema.builtin === \"CoOptional\") {\n throw new Error(\n `co.optional() of collaborative types is not supported as top-level schema: ${JSON.stringify(schema)}`,\n );\n } else if (schema.builtin === \"CoMap\" || schema.builtin === \"Account\") {\n const def = schema.getDefinition();\n const ClassToExtend = schema.builtin === \"Account\" ? Account : CoMap;\n\n const coValueClass = class ZCoMap extends ClassToExtend {\n constructor(options: { fromRaw: RawCoMap } | undefined) {\n super(options);\n for (const [fieldName, fieldType] of Object.entries(def.shape)) {\n (this as any)[fieldName] = schemaFieldToCoFieldDef(\n fieldType as SchemaField,\n );\n }\n if (def.catchall) {\n (this as any)[coField.items] = schemaFieldToCoFieldDef(\n def.catchall as SchemaField,\n );\n }\n }\n };\n\n const coValueSchema =\n ClassToExtend === Account\n ? enrichAccountSchema(schema as any, coValueClass as any)\n : enrichCoMapSchema(schema as any, coValueClass as any);\n\n return coValueSchema as unknown as CoValueSchemaFromCoreSchema<S>;\n } else if (schema.builtin === \"CoList\") {\n const element = schema.element;\n const coValueClass = class ZCoList extends CoList {\n constructor(options: { fromRaw: RawCoList } | undefined) {\n super(options);\n (this as any)[coField.items] = schemaFieldToCoFieldDef(\n element as SchemaField,\n );\n }\n };\n\n const coValueSchema = new CoListSchema(element, coValueClass as any);\n\n return coValueSchema as unknown as CoValueSchemaFromCoreSchema<S>;\n } else if (schema.builtin === \"CoFeed\") {\n const coValueClass = CoFeed.Of(\n schemaFieldToCoFieldDef(schema.element as SchemaField),\n );\n const coValueSchema = new CoFeedSchema(schema.element, coValueClass);\n return coValueSchema as unknown as CoValueSchemaFromCoreSchema<S>;\n } else if (schema.builtin === \"FileStream\") {\n const coValueClass = FileStream;\n return new FileStreamSchema(coValueClass) as CoValueSchemaFromCoreSchema<S>;\n } else if (schema.builtin === \"CoPlainText\") {\n const coValueClass = CoPlainText;\n return new PlainTextSchema(coValueClass) as CoValueSchemaFromCoreSchema<S>;\n } else if (schema.builtin === \"CoRichText\") {\n const coValueClass = CoRichText;\n return new RichTextSchema(coValueClass) as CoValueSchemaFromCoreSchema<S>;\n } else if (schema.builtin === \"CoDiscriminatedUnion\") {\n const coValueClass = SchemaUnion.Of(schemaUnionDiscriminatorFor(schema));\n const coValueSchema = new CoDiscriminatedUnionSchema(schema, coValueClass);\n return coValueSchema as CoValueSchemaFromCoreSchema<S>;\n } else {\n const notReachable: never = schema;\n throw new Error(\n `Unsupported zod CoValue type for top-level schema: ${JSON.stringify(notReachable, undefined, 2)}`,\n );\n }\n}\n\n/**\n * Convert a CoValue class or a CoValue schema into a CoValue class.\n *\n * This function bridges the gap between CoValue classes created with the class syntax,\n * and CoValue classes created with our `co.` definers.\n *\n * @param schema A CoValue class or a CoValue schema\n * @returns The same CoValue class, or a CoValue class that matches the provided schema\n */\nexport function coValueClassFromCoValueClassOrSchema<\n S extends CoValueClassOrSchema,\n>(schema: S): CoValueClassFromAnySchema<S> {\n if (isCoValueClass(schema)) {\n return schema as any;\n } else if (isCoValueSchema(schema)) {\n return schema.getCoValueClass() as any;\n }\n\n throw new Error(`Unsupported schema: ${JSON.stringify(schema)}`);\n}\n","import { z } from \"../../implementation/zodSchema/zodReExport.js\";\nimport { Loaded, coFileStreamDefiner, coMapDefiner } from \"../../internal.js\";\n\n// avoiding circularity by using the standalone definers instead of `co`\nconst ImageDefinitionBase = coMapDefiner({\n original: coFileStreamDefiner(),\n originalSize: z.tuple([z.number(), z.number()]),\n placeholderDataURL: z.string().optional(),\n progressive: z.boolean(),\n}).catchall(coFileStreamDefiner());\n\n/** @category Media */\nexport const ImageDefinition = ImageDefinitionBase;\nexport type ImageDefinition = Loaded<typeof ImageDefinition>;\n","import { AgentSecret, LocalNode, cojsonInternals } from \"cojson\";\nimport { PureJSCrypto } from \"cojson/dist/crypto/PureJSCrypto\";\nimport { AuthSecretStorage } from \"../auth/AuthSecretStorage.js\";\nimport { InMemoryKVStore } from \"../auth/InMemoryKVStore.js\";\nimport { KvStore, KvStoreContext } from \"../auth/KvStoreContext.js\";\nimport { Account } from \"../coValues/account.js\";\nimport { AuthCredentials } from \"../types.js\";\nimport { JazzContextType } from \"../types.js\";\nimport { AnonymousJazzAgent } from \"./anonymousJazzAgent.js\";\nimport { createAnonymousJazzContext } from \"./createContext.js\";\nimport { InstanceOfSchema } from \"./zodSchema/typeConverters/InstanceOfSchema.js\";\n\nexport type JazzContextManagerAuthProps = {\n credentials?: AuthCredentials;\n newAccountProps?: { secret: AgentSecret; creationProps: { name: string } };\n};\n\nexport type JazzContextManagerBaseProps<Acc extends Account> = {\n onAnonymousAccountDiscarded?: (anonymousAccount: Acc) => Promise<void>;\n onLogOut?: () => void | Promise<unknown>;\n logOutReplacement?: () => void | Promise<unknown>;\n};\n\ntype PlatformSpecificAuthContext<Acc extends Account> = {\n me: Acc;\n node: LocalNode;\n logOut: () => Promise<void>;\n done: () => void;\n};\n\ntype PlatformSpecificGuestContext = {\n guest: AnonymousJazzAgent;\n node: LocalNode;\n logOut: () => Promise<void>;\n done: () => void;\n};\n\ntype PlatformSpecificContext<Acc extends Account> =\n | PlatformSpecificAuthContext<Acc>\n | PlatformSpecificGuestContext;\n\nfunction getAnonymousFallback() {\n const context = createAnonymousJazzContext({\n peersToLoadFrom: [],\n crypto: new PureJSCrypto(),\n });\n\n return {\n guest: context.agent,\n node: context.agent.node,\n done: () => {},\n logOut: async () => {},\n isAuthenticated: false,\n authenticate: async () => {},\n register: async () => {\n throw new Error(\"Not implemented\");\n },\n } satisfies JazzContextType<InstanceOfSchema<any>>;\n}\n\nexport class JazzContextManager<\n Acc extends Account,\n P extends JazzContextManagerBaseProps<Acc>,\n> {\n protected value: JazzContextType<Acc> | undefined;\n protected context: PlatformSpecificContext<Acc> | undefined;\n protected props: P | undefined;\n protected authSecretStorage = new AuthSecretStorage();\n protected keepContextOpen = false;\n contextPromise: Promise<void> | undefined;\n\n constructor(opts?: {\n useAnonymousFallback?: boolean;\n }) {\n KvStoreContext.getInstance().initialize(this.getKvStore());\n\n if (opts?.useAnonymousFallback) {\n this.value = getAnonymousFallback();\n }\n }\n\n getKvStore(): KvStore {\n return new InMemoryKVStore();\n }\n\n async createContext(props: P, authProps?: JazzContextManagerAuthProps) {\n // We need to store the props here to block the double effect execution\n // on React. Otherwise when calling propsChanged this.props is undefined.\n this.props = props;\n\n // Avoid race condition between the previous context and the new one\n const { promise, resolve } = createResolvablePromise<void>();\n\n const prevPromise = this.contextPromise;\n this.contextPromise = promise;\n\n await prevPromise;\n\n try {\n const result = await this.getNewContext(props, authProps);\n await this.updateContext(props, result, authProps);\n\n resolve();\n } catch (error) {\n resolve();\n throw error;\n }\n }\n\n async getNewContext(\n props: P,\n authProps?: JazzContextManagerAuthProps,\n ): Promise<PlatformSpecificContext<Acc>> {\n props;\n authProps;\n throw new Error(\"Not implemented\");\n }\n\n async updateContext(\n props: P,\n context: PlatformSpecificContext<Acc>,\n authProps?: JazzContextManagerAuthProps,\n ) {\n // When keepContextOpen we don't want to close the previous context\n // because we might need to handle the onAnonymousAccountDiscarded callback\n if (!this.keepContextOpen) {\n this.context?.done();\n }\n\n this.context = context;\n this.props = props;\n this.value = {\n ...context,\n node: context.node,\n authenticate: this.authenticate,\n register: this.register,\n logOut: this.logOut,\n };\n\n if (authProps?.credentials) {\n this.authSecretStorage.emitUpdate(authProps.credentials);\n } else {\n this.authSecretStorage.emitUpdate(await this.authSecretStorage.get());\n }\n\n this.notify();\n }\n\n propsChanged(props: P) {\n props;\n throw new Error(\"Not implemented\");\n }\n\n getCurrentValue() {\n return this.value;\n }\n\n setCurrentValue(value: JazzContextType<Acc>) {\n this.value = value;\n }\n\n getAuthSecretStorage() {\n return this.authSecretStorage;\n }\n\n logOut = async () => {\n if (!this.context || !this.props) {\n return;\n }\n\n await this.props.onLogOut?.();\n\n if (this.props.logOutReplacement) {\n await this.props.logOutReplacement();\n } else {\n await this.context.logOut();\n return this.createContext(this.props);\n }\n };\n\n done = () => {\n if (!this.context) {\n return;\n }\n\n this.context.done();\n };\n\n shouldMigrateAnonymousAccount = async () => {\n if (!this.props?.onAnonymousAccountDiscarded) {\n return false;\n }\n\n const prevCredentials = await this.authSecretStorage.get();\n const wasAnonymous =\n this.authSecretStorage.getIsAuthenticated(prevCredentials) === false;\n\n return wasAnonymous;\n };\n\n /**\n * Authenticates the user with the given credentials\n */\n authenticate = async (credentials: AuthCredentials) => {\n if (!this.props) {\n throw new Error(\"Props required\");\n }\n\n const prevContext = this.context;\n const migratingAnonymousAccount =\n await this.shouldMigrateAnonymousAccount();\n\n this.keepContextOpen = migratingAnonymousAccount;\n await this.createContext(this.props, { credentials }).finally(() => {\n this.keepContextOpen = false;\n });\n\n if (migratingAnonymousAccount) {\n await this.handleAnonymousAccountMigration(prevContext);\n }\n };\n\n register = async (\n accountSecret: AgentSecret,\n creationProps: { name: string },\n ) => {\n if (!this.props) {\n throw new Error(\"Props required\");\n }\n\n const prevContext = this.context;\n const migratingAnonymousAccount =\n await this.shouldMigrateAnonymousAccount();\n\n this.keepContextOpen = migratingAnonymousAccount;\n await this.createContext(this.props, {\n newAccountProps: {\n secret: accountSecret,\n creationProps,\n },\n }).finally(() => {\n this.keepContextOpen = false;\n });\n\n if (migratingAnonymousAccount) {\n await this.handleAnonymousAccountMigration(prevContext);\n }\n\n if (this.context && \"me\" in this.context) {\n return this.context.me.$jazz.id;\n }\n\n throw new Error(\"The registration hasn't created a new account\");\n };\n\n private async handleAnonymousAccountMigration(\n prevContext: PlatformSpecificContext<Acc> | undefined,\n ) {\n if (!this.props) {\n throw new Error(\"Props required\");\n }\n\n const currentContext = this.context;\n\n if (\n prevContext &&\n currentContext &&\n \"me\" in prevContext &&\n \"me\" in currentContext\n ) {\n // Using a direct connection to make coValue transfer almost synchronous\n const [prevAccountAsPeer, currentAccountAsPeer] =\n cojsonInternals.connectedPeers(\n prevContext.me.$jazz.id,\n currentContext.me.$jazz.id,\n {\n peer1role: \"client\",\n peer2role: \"server\",\n },\n );\n\n // Closing storage on the prevContext to avoid conflicting transactions and getting stuck on waitForAllCoValuesSync\n // The storage is reachable through currentContext using the connectedPeers\n prevContext.node.removeStorage();\n\n currentContext.node.syncManager.addPeer(prevAccountAsPeer);\n prevContext.node.syncManager.addPeer(currentAccountAsPeer);\n\n try {\n await this.props.onAnonymousAccountDiscarded?.(prevContext.me);\n await prevContext.me.$jazz.waitForAllCoValuesSync();\n } catch (error) {\n console.error(\"Error onAnonymousAccountDiscarded\", error);\n }\n\n prevAccountAsPeer.outgoing.close();\n currentAccountAsPeer.outgoing.close();\n }\n\n prevContext?.done();\n }\n\n listeners = new Set<() => void>();\n subscribe = (callback: () => void) => {\n this.listeners.add(callback);\n\n return () => {\n this.listeners.delete(callback);\n };\n };\n\n notify() {\n for (const listener of this.listeners) {\n listener();\n }\n }\n}\n\nfunction createResolvablePromise<T>() {\n let resolve!: (value: T) => void;\n\n const promise = new Promise<T>((res) => {\n resolve = res;\n });\n\n return { promise, resolve };\n}\n","export interface KvStore {\n get(key: string): Promise<string | null>;\n set(key: string, value: string): Promise<void>;\n delete(key: string): Promise<void>;\n clearAll(): Promise<void>;\n}\n\nexport class KvStoreContext {\n private static instance: KvStoreContext;\n private storageInstance: KvStore | null = null;\n\n private constructor() {}\n\n public static getInstance(): KvStoreContext {\n if (!KvStoreContext.instance) {\n KvStoreContext.instance = new KvStoreContext();\n }\n return KvStoreContext.instance;\n }\n\n public isInitialized(): boolean {\n return this.storageInstance !== null;\n }\n\n public initialize(store: KvStore): void {\n if (!this.storageInstance) {\n this.storageInstance = store;\n }\n }\n\n public getStorage(): KvStore {\n if (!this.storageInstance) {\n throw new Error(\"Storage instance is not initialized.\");\n }\n return this.storageInstance;\n }\n}\n\nexport default KvStoreContext;\n","import { AgentSecret } from \"cojson\";\nimport type { Account } from \"../coValues/account.js\";\nimport type { ID } from \"../internal.js\";\nimport { AuthCredentials } from \"../types.js\";\nimport KvStoreContext from \"./KvStoreContext.js\";\n\nconst STORAGE_KEY = \"jazz-logged-in-secret\";\n\nexport type AuthSetPayload = {\n accountID: ID<Account>;\n secretSeed?: Uint8Array;\n accountSecret: AgentSecret;\n provider:\n | \"anonymous\"\n | \"clerk\"\n | \"betterauth\"\n | \"demo\"\n | \"passkey\"\n | \"passphrase\"\n | string;\n};\n\nexport class AuthSecretStorage {\n private listeners: Set<(isAuthenticated: boolean) => void>;\n public isAuthenticated: boolean;\n\n constructor() {\n this.listeners = new Set();\n this.isAuthenticated = false;\n }\n\n async migrate() {\n const kvStore = KvStoreContext.getInstance().getStorage();\n\n if (!(await kvStore.get(STORAGE_KEY))) {\n const demoAuthSecret = await kvStore.get(\"demo-auth-logged-in-secret\");\n if (demoAuthSecret) {\n const parsed = JSON.parse(demoAuthSecret);\n await kvStore.set(\n STORAGE_KEY,\n JSON.stringify({\n accountID: parsed.accountID,\n accountSecret: parsed.accountSecret,\n provider: \"demo\",\n }),\n );\n await kvStore.delete(\"demo-auth-logged-in-secret\");\n }\n\n const clerkAuthSecret = await kvStore.get(\"jazz-clerk-auth\");\n if (clerkAuthSecret) {\n const parsed = JSON.parse(clerkAuthSecret);\n await kvStore.set(\n STORAGE_KEY,\n JSON.stringify({\n accountID: parsed.accountID,\n accountSecret: parsed.secret,\n provider: \"clerk\",\n }),\n );\n await kvStore.delete(\"jazz-clerk-auth\");\n }\n }\n\n const value = await kvStore.get(STORAGE_KEY);\n\n if (value) {\n const parsed = JSON.parse(value);\n\n if (\"secret\" in parsed) {\n await kvStore.set(\n STORAGE_KEY,\n JSON.stringify({\n accountID: parsed.accountID,\n secretSeed: parsed.secretSeed,\n accountSecret: parsed.secret,\n provider: parsed.provider,\n }),\n );\n }\n }\n }\n\n async get(): Promise<AuthCredentials | null> {\n const kvStore = KvStoreContext.getInstance().getStorage();\n const data = await kvStore.get(STORAGE_KEY);\n\n if (!data) return null;\n\n const parsed = JSON.parse(data);\n\n if (!parsed.accountID || !parsed.accountSecret) {\n throw new Error(\"Invalid auth secret storage data\");\n }\n\n return {\n accountID: parsed.accountID,\n secretSeed: parsed.secretSeed\n ? new Uint8Array(parsed.secretSeed)\n : undefined,\n accountSecret: parsed.accountSecret,\n provider: parsed.provider,\n };\n }\n\n async setWithoutNotify(payload: AuthSetPayload) {\n const kvStore = KvStoreContext.getInstance().getStorage();\n await kvStore.set(\n STORAGE_KEY,\n JSON.stringify({\n accountID: payload.accountID,\n secretSeed: payload.secretSeed\n ? Array.from(payload.secretSeed)\n : undefined,\n accountSecret: payload.accountSecret,\n provider: payload.provider,\n }),\n );\n }\n\n async set(payload: AuthSetPayload) {\n this.setWithoutNotify(payload);\n this.emitUpdate(payload);\n }\n\n getIsAuthenticated(data: AuthCredentials | null): boolean {\n if (!data) return false;\n return data.provider !== \"anonymous\";\n }\n\n onUpdate(handler: (isAuthenticated: boolean) => void) {\n this.listeners.add(handler);\n return () => {\n this.listeners.delete(handler);\n };\n }\n\n emitUpdate(data: AuthCredentials | null) {\n const isAuthenticated = this.getIsAuthenticated(data);\n\n if (this.isAuthenticated === isAuthenticated) return;\n\n this.isAuthenticated = isAuthenticated;\n for (const listener of this.listeners) {\n listener(this.isAuthenticated);\n }\n }\n\n async clearWithoutNotify() {\n const kvStore = KvStoreContext.getInstance().getStorage();\n await kvStore.delete(STORAGE_KEY);\n }\n\n async clear() {\n await this.clearWithoutNotify();\n this.emitUpdate(null);\n }\n}\n","import { KvStore } from \"./KvStoreContext.js\";\n\nexport class InMemoryKVStore implements KvStore {\n private store: Record<string, string> = {};\n\n async get(key: string) {\n const data = this.store[key];\n\n if (!data) return null;\n\n return data;\n }\n\n async set(key: string, value: string) {\n this.store[key] = value;\n }\n\n async delete(key: string) {\n delete this.store[key];\n }\n\n async clearAll() {\n this.store = {};\n }\n}\n","/* istanbul ignore file -- @preserve */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ItemsSym, TypeSym } from \"./symbols.js\";\n\n(globalThis as any).devtoolsFormatters = [\n {\n header: (object: any) => {\n if (object[TypeSym] === \"CoMap\") {\n return [\"div\", {}, [\"span\", {}, object.constructor.name]];\n } else if (object[TypeSym] === \"CoList\") {\n return [\n \"div\",\n {},\n [\"span\", {}, object.constructor.name + \"(\" + object.length + \") \"],\n ];\n } else if (object[TypeSym] === \"Account\") {\n return [\n \"div\",\n {},\n [\n \"span\",\n {},\n object.constructor.name +\n \"(\" +\n object.$jazz.refs.profile.value?.name +\n (object.isMe ? \" ME\" : \"\") +\n \")\",\n ],\n ];\n } else {\n return null;\n }\n },\n hasBody: function () {\n return true;\n },\n body: function (object: any) {\n if (object[TypeSym] === \"CoMap\" || object[TypeSym] === \"Account\") {\n return [\n \"div\",\n { style: \"margin-left: 15px\" },\n [\"div\", \"id: \", [\"object\", { object: object.id }]],\n ...Object.entries(object).map(([k, v]) => [\n \"div\",\n { style: \"white-space: nowrap;\" },\n [\"span\", { style: \"font-weight: bold; opacity: 0.6\" }, k, \": \"],\n [\"object\", { object: v }],\n ...(typeof object._schema[k] === \"function\"\n ? v === null\n ? [\n [\n \"span\",\n { style: \"opacity: 0.5\" },\n ` (pending ${object._schema[k].name} `,\n [\"object\", { object: object.$jazz.refs[k] }],\n \")\",\n ],\n ]\n : []\n : []),\n ]),\n ];\n } else if (object[TypeSym] === \"CoList\") {\n return [\n \"div\",\n { style: \"margin-left: 15px\" },\n [\"div\", \"id: \", [\"object\", { object: object.id }]],\n ...(object as any[]).map((v, i) => [\n \"div\",\n { style: \"white-space: nowrap;\" },\n [\"span\", { style: \"font-weight: bold; opacity: 0.6\" }, i, \": \"],\n [\"object\", { object: v }],\n ...(typeof object._schema[ItemsSym] === \"function\"\n ? v === null\n ? [\n [\n \"span\",\n { style: \"opacity: 0.5\" },\n ` (pending ${object._schema[ItemsSym].name} `,\n [\"object\", { object: object.$jazz.refs[i] }],\n \")\",\n ],\n ]\n : []\n : []),\n ]),\n ];\n }\n },\n },\n];\n","import {\n type CoValueUniqueness,\n type CojsonInternalTypes,\n type RawCoValue,\n} from \"cojson\";\nimport { AvailableCoValueCore } from \"cojson/dist/coValueCore/coValueCore.js\";\nimport {\n Account,\n AnonymousJazzAgent,\n CoValueClassOrSchema,\n type Group,\n Loaded,\n RefsToResolve,\n RefsToResolveStrict,\n RegisteredSchemas,\n ResolveQuery,\n ResolveQueryStrict,\n Resolved,\n SubscriptionScope,\n type SubscriptionValue,\n TypeSym,\n activeAccountContext,\n coValueClassFromCoValueClassOrSchema,\n inspect,\n} from \"../internal.js\";\n\n/** @category Abstract interfaces */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface CoValueClass<Value extends CoValue = CoValue> {\n /** @ignore */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new (...args: any[]): Value;\n}\n\nexport interface CoValueFromRaw<V extends CoValue> {\n fromRaw(raw: V[\"$jazz\"][\"raw\"]): V;\n}\n\n/** @category Abstract interfaces */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface CoValue {\n /** @category Type Helpers */\n [TypeSym]: string;\n\n $jazz: {\n /** @category Content */\n readonly id: ID<CoValue>;\n /** @category Collaboration */\n owner?: Group;\n /** @internal */\n readonly loadedAs: Account | AnonymousJazzAgent;\n /** @category Internals */\n raw: RawCoValue;\n /** @internal */\n _subscriptionScope?: SubscriptionScope<CoValue>;\n };\n\n /** @category Stringifying & Inspection */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n toJSON(key?: string, seenAbove?: ID<CoValue>[]): any[] | object | string;\n /** @category Stringifying & Inspection */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [inspect](): any;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isCoValue(value: any): value is CoValue {\n return value && value[TypeSym] !== undefined;\n}\n\nexport function isCoValueClass<V extends CoValue>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any,\n): value is CoValueClass<V> & CoValueFromRaw<V> {\n return typeof value === \"function\" && value.fromRaw !== undefined;\n}\n\n/**\n * IDs are unique identifiers for `CoValue`s.\n * Can be used with a type argument to refer to a specific `CoValue` type.\n *\n * @example\n *\n * ```ts\n * type AccountID = ID<Account>;\n * ```\n *\n * @category CoValues\n */\nexport type ID<T> = string;\n\nexport function loadCoValueWithoutMe<\n V extends CoValue,\n const R extends RefsToResolve<V>,\n>(\n cls: CoValueClass<V>,\n id: ID<CoValue>,\n options?: {\n resolve?: RefsToResolveStrict<V, R>;\n loadAs?: Account | AnonymousJazzAgent;\n skipRetry?: boolean;\n },\n): Promise<Resolved<V, R> | null> {\n return loadCoValue(cls, id, {\n ...options,\n loadAs: options?.loadAs ?? activeAccountContext.get(),\n });\n}\n\nexport function loadCoValue<\n V extends CoValue,\n const R extends RefsToResolve<V>,\n>(\n cls: CoValueClass<V>,\n id: ID<CoValue>,\n options: {\n resolve?: RefsToResolveStrict<V, R>;\n loadAs: Account | AnonymousJazzAgent;\n skipRetry?: boolean;\n },\n): Promise<Resolved<V, R> | null> {\n return new Promise((resolve) => {\n subscribeToCoValue<V, R>(\n cls,\n id,\n {\n resolve: options.resolve,\n loadAs: options.loadAs,\n syncResolution: true,\n skipRetry: options.skipRetry,\n onUnavailable: () => {\n resolve(null);\n },\n onUnauthorized: () => {\n resolve(null);\n },\n },\n (value, unsubscribe) => {\n resolve(value);\n unsubscribe();\n },\n );\n });\n}\n\nexport async function ensureCoValueLoaded<\n V extends CoValue,\n const R extends RefsToResolve<V>,\n>(\n existing: V,\n options?: { resolve?: RefsToResolveStrict<V, R> } | undefined,\n): Promise<Resolved<V, R>> {\n const response = await loadCoValue(\n existing.constructor as CoValueClass<V>,\n existing.$jazz.id,\n {\n loadAs: existing.$jazz.loadedAs,\n resolve: options?.resolve,\n },\n );\n\n if (!response) {\n throw new Error(\"Failed to deeply load CoValue \" + existing.$jazz.id);\n }\n\n return response;\n}\n\ntype SubscribeListener<V extends CoValue, R extends RefsToResolve<V>> = (\n value: Resolved<V, R>,\n unsubscribe: () => void,\n) => void;\n\nexport type SubscribeListenerOptions<\n V extends CoValue,\n R extends RefsToResolve<V>,\n> = {\n resolve?: RefsToResolveStrict<V, R>;\n loadAs?: Account | AnonymousJazzAgent;\n onUnauthorized?: () => void;\n onUnavailable?: () => void;\n};\n\nexport type SubscribeRestArgs<V extends CoValue, R extends RefsToResolve<V>> =\n | [options: SubscribeListenerOptions<V, R>, listener: SubscribeListener<V, R>]\n | [listener: SubscribeListener<V, R>];\n\nexport function parseSubscribeRestArgs<\n V extends CoValue,\n R extends RefsToResolve<V>,\n>(\n args: SubscribeRestArgs<V, R>,\n): {\n options: SubscribeListenerOptions<V, R>;\n listener: SubscribeListener<V, R>;\n} {\n if (args.length === 2) {\n if (\n typeof args[0] === \"object\" &&\n args[0] &&\n typeof args[1] === \"function\"\n ) {\n return {\n options: {\n resolve: args[0].resolve,\n loadAs: args[0].loadAs,\n onUnauthorized: args[0].onUnauthorized,\n onUnavailable: args[0].onUnavailable,\n },\n listener: args[1],\n };\n } else {\n throw new Error(\"Invalid arguments\");\n }\n } else {\n if (typeof args[0] === \"function\") {\n return { options: {}, listener: args[0] };\n } else {\n throw new Error(\"Invalid arguments\");\n }\n }\n}\n\nexport function subscribeToCoValueWithoutMe<\n V extends CoValue,\n const R extends RefsToResolve<V>,\n>(\n cls: CoValueClass<V>,\n id: ID<CoValue>,\n options: SubscribeListenerOptions<V, R>,\n listener: SubscribeListener<V, R>,\n) {\n return subscribeToCoValue(\n cls,\n id,\n {\n ...options,\n loadAs: options.loadAs ?? activeAccountContext.get(),\n },\n listener,\n );\n}\n\nexport function subscribeToCoValue<\n V extends CoValue,\n const R extends RefsToResolve<V>,\n>(\n cls: CoValueClass<V>,\n id: ID<CoValue>,\n options: {\n resolve?: RefsToResolveStrict<V, R>;\n loadAs: Account | AnonymousJazzAgent;\n onUnavailable?: () => void;\n onUnauthorized?: () => void;\n syncResolution?: boolean;\n skipRetry?: boolean;\n },\n listener: SubscribeListener<V, R>,\n): () => void {\n const loadAs = options.loadAs ?? activeAccountContext.get();\n const node = \"node\" in loadAs ? loadAs.node : loadAs.$jazz.localNode;\n\n const resolve = options.resolve ?? true;\n\n let unsubscribed = false;\n\n const rootNode = new SubscriptionScope<V>(\n node,\n resolve,\n id as ID<V>,\n {\n ref: cls,\n optional: false,\n },\n options.skipRetry,\n );\n\n const handleUpdate = (value: SubscriptionValue<V, any>) => {\n if (unsubscribed) return;\n\n if (value.type === \"unavailable\") {\n options.onUnavailable?.();\n\n console.error(value.toString());\n } else if (value.type === \"unauthorized\") {\n options.onUnauthorized?.();\n\n console.error(value.toString());\n } else if (value.type === \"loaded\") {\n listener(value.value as Resolved<V, R>, unsubscribe);\n }\n };\n\n let shouldDefer = !options.syncResolution;\n\n rootNode.setListener((value) => {\n if (shouldDefer) {\n shouldDefer = false;\n Promise.resolve().then(() => {\n handleUpdate(value);\n });\n } else {\n handleUpdate(value);\n }\n });\n\n function unsubscribe() {\n unsubscribed = true;\n rootNode.destroy();\n }\n\n return unsubscribe;\n}\n\nexport function subscribeToExistingCoValue<\n V extends CoValue,\n const R extends RefsToResolve<V>,\n>(\n existing: V,\n options:\n | {\n resolve?: RefsToResolveStrict<V, R>;\n onUnavailable?: () => void;\n onUnauthorized?: () => void;\n }\n | undefined,\n listener: SubscribeListener<V, R>,\n): () => void {\n return subscribeToCoValue(\n existing.constructor as CoValueClass<V>,\n existing.$jazz.id,\n {\n loadAs: existing.$jazz.loadedAs,\n resolve: options?.resolve,\n onUnavailable: options?.onUnavailable,\n onUnauthorized: options?.onUnauthorized,\n },\n listener,\n );\n}\n\nexport function isAccountInstance(instance: unknown): instance is Account {\n if (typeof instance !== \"object\" || instance === null) {\n return false;\n }\n\n return TypeSym in instance && instance[TypeSym] === \"Account\";\n}\n\nexport function isAnonymousAgentInstance(\n instance: unknown,\n): instance is AnonymousJazzAgent {\n if (typeof instance !== \"object\" || instance === null) {\n return false;\n }\n\n return TypeSym in instance && instance[TypeSym] === \"Anonymous\";\n}\n\nexport function parseCoValueCreateOptions(\n options:\n | {\n owner?: Account | Group;\n unique?: CoValueUniqueness[\"uniqueness\"];\n }\n | Account\n | Group\n | undefined,\n): {\n owner: Group;\n uniqueness?: CoValueUniqueness;\n} {\n const Group = RegisteredSchemas[\"Group\"];\n\n if (!options) {\n return { owner: Group.create(), uniqueness: undefined };\n }\n\n if (TypeSym in options) {\n if (options[TypeSym] === \"Account\") {\n return { owner: accountOrGroupToGroup(options), uniqueness: undefined };\n } else if (options[TypeSym] === \"Group\") {\n return { owner: options, uniqueness: undefined };\n }\n }\n\n const uniqueness = options.unique\n ? { uniqueness: options.unique }\n : undefined;\n\n const opts = {\n owner: options.owner\n ? accountOrGroupToGroup(options.owner)\n : Group.create(),\n uniqueness,\n };\n return opts;\n}\n\nexport function accountOrGroupToGroup(accountOrGroup: Account | Group): Group {\n if (accountOrGroup[TypeSym] === \"Group\") {\n return accountOrGroup;\n }\n return RegisteredSchemas[\"Group\"].fromRaw(accountOrGroup.$jazz.raw);\n}\n\nexport function parseGroupCreateOptions(\n options:\n | {\n owner?: Account;\n }\n | Account\n | undefined,\n) {\n if (!options) {\n return { owner: activeAccountContext.get() };\n }\n\n return TypeSym in options && isAccountInstance(options)\n ? { owner: options }\n : { owner: options.owner ?? activeAccountContext.get() };\n}\n\n/**\n * Deeply export a CoValue to a content piece.\n *\n * @param cls - The class of the CoValue to export.\n * @param id - The ID of the CoValue to export.\n * @param options - The options for the export.\n * @returns The content pieces that were exported.\n *\n * @example\n * ```ts\n * const Address = co.map({\n * street: z.string(),\n * city: z.string(),\n * });\n *\n * const Person = co.map({\n * name: z.string(),\n * address: Address,\n * });\n *\n * const group = Group.create();\n * const address = Address.create(\n * { street: \"123 Main St\", city: \"New York\" },\n * group,\n * );\n * const person = Person.create({ name: \"John\", address }, group);\n * group.addMember(\"everyone\", \"reader\");\n *\n * // Export with nested references resolved, values can be serialized to JSON\n * const exportedWithResolve = await exportCoValue(Person, person.id, {\n * resolve: { address: true },\n * });\n *\n * // In another client or session\n * // Load the exported content pieces into the node, they will be persisted\n * importContentPieces(exportedWithResolve);\n *\n * // Now the person can be loaded from the node, even offline\n * const person = await loadCoValue(Person, person.id, {\n * resolve: { address: true },\n * });\n * ```\n */\nexport async function exportCoValue<\n S extends CoValueClassOrSchema,\n const R extends ResolveQuery<S>,\n>(\n cls: S,\n id: ID<CoValue>,\n options: {\n resolve?: ResolveQueryStrict<S, R>;\n loadAs: Account | AnonymousJazzAgent;\n skipRetry?: boolean;\n bestEffortResolution?: boolean;\n },\n) {\n const loadAs = options.loadAs ?? activeAccountContext.get();\n const node = \"node\" in loadAs ? loadAs.node : loadAs.$jazz.localNode;\n\n const resolve = options.resolve ?? true;\n\n const rootNode = new SubscriptionScope<CoValue>(\n node,\n resolve as any,\n id,\n {\n ref: coValueClassFromCoValueClassOrSchema(cls),\n optional: false,\n },\n options.skipRetry,\n options.bestEffortResolution,\n );\n\n const value = await new Promise<Loaded<S, R> | null>((resolve) => {\n rootNode.setListener((value) => {\n if (value.type === \"unavailable\") {\n resolve(null);\n console.error(value.toString());\n } else if (value.type === \"unauthorized\") {\n resolve(null);\n console.error(value.toString());\n } else if (value.type === \"loaded\") {\n resolve(value.value as Loaded<S, R>);\n }\n\n rootNode.destroy();\n });\n });\n\n if (!value) {\n return null;\n }\n\n const valuesExported = new Set<string>();\n const contentPieces: CojsonInternalTypes.NewContentMessage[] = [];\n\n loadContentPiecesFromSubscription(rootNode, valuesExported, contentPieces);\n\n return contentPieces;\n}\n\nfunction loadContentPiecesFromSubscription(\n subscription: SubscriptionScope<any>,\n valuesExported: Set<string>,\n contentPieces: CojsonInternalTypes.NewContentMessage[],\n) {\n if (valuesExported.has(subscription.id)) {\n return;\n }\n\n valuesExported.add(subscription.id);\n\n const core = subscription.getCurrentValue()?.$jazz.raw\n .core as AvailableCoValueCore;\n\n if (core) {\n loadContentPiecesFromCoValue(core, valuesExported, contentPieces);\n }\n\n for (const child of subscription.childNodes.values()) {\n loadContentPiecesFromSubscription(child, valuesExported, contentPieces);\n }\n}\n\nfunction loadContentPiecesFromCoValue(\n core: AvailableCoValueCore,\n valuesExported: Set<string>,\n contentPieces: CojsonInternalTypes.NewContentMessage[],\n) {\n for (const dependency of core.getDependedOnCoValues()) {\n if (valuesExported.has(dependency)) {\n continue;\n }\n\n const depCoValue = core.node.getCoValue(dependency);\n\n if (depCoValue.isAvailable()) {\n valuesExported.add(dependency);\n loadContentPiecesFromCoValue(depCoValue, valuesExported, contentPieces);\n }\n }\n\n const pieces = core.verified.newContentSince(undefined) ?? [];\n\n for (const piece of pieces) {\n contentPieces.push(piece);\n }\n}\n\n/**\n * Import content pieces into the node.\n *\n * @param contentPieces - The content pieces to import.\n * @param loadAs - The account to load the content pieces as.\n */\nexport function importContentPieces(\n contentPieces: CojsonInternalTypes.NewContentMessage[],\n loadAs?: Account | AnonymousJazzAgent,\n) {\n const account = loadAs ?? Account.getMe();\n const node = \"node\" in account ? account.node : account.$jazz.localNode;\n\n for (const piece of contentPieces) {\n node.syncManager.handleNewContent(piece, \"import\");\n }\n}\n"],"mappings":"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","names":["enum","enum","ref","_a","rawEdit","cojsonInternals","_a","cojsonInternals","cojsonInternals","_a","rawEntry","cojsonInternals","base64","cojsonInternals","LocalNode","cojsonInternals","LocalNode","cojsonInternals","ref","Group","RawAccount","RawAccount","Schema","error","message","calcPatch","calcPatch","value","key","optional","Group","value","RawAccount","RawAccount","ref","LocalNode","LocalNode","account","creationProps","isAnyCoValueSchema","isAnyCoValueSchema","isAnyCoValueSchema","literal","isAnyCoValueSchema","cojsonInternals","cojsonInternals","object","Group","resolve","value","core"]}
|
1
|
+
{"version":3,"sources":["../src/tools/implementation/zodSchema/zodReExport.ts","../src/tools/implementation/schemaUtils.ts","../src/tools/coValues/CoValueBase.ts","../src/tools/implementation/inspect.ts","../src/tools/implementation/symbols.ts","../src/tools/coValues/registeredSchemas.ts","../src/tools/coValues/coMap.ts","../src/tools/coValues/coList.ts","../src/tools/coValues/coFeed.ts","../src/tools/coValues/account.ts","../src/tools/coValues/group.ts","../src/tools/coValues/profile.ts","../src/tools/coValues/inbox.ts","../src/tools/lib/id.ts","../src/tools/coValues/coPlainText.ts","../src/tools/coValues/coRichText.ts","../src/tools/coValues/schemaUnion.ts","../src/tools/implementation/anonymousJazzAgent.ts","../src/tools/implementation/activeAccountContext.ts","../src/tools/implementation/refs.ts","../src/tools/implementation/schema.ts","../src/tools/lib/migration.ts","../src/tools/subscribe/CoValueCoreSubscription.ts","../src/tools/subscribe/JazzError.ts","../src/tools/subscribe/utils.ts","../src/tools/lib/cache.ts","../src/tools/subscribe/SubscriptionScope.ts","../src/tools/subscribe/index.ts","../src/tools/implementation/createContext.ts","../src/tools/implementation/zodSchema/schemaTypes/CoDiscriminatedUnionSchema.ts","../src/tools/implementation/zodSchema/schemaTypes/CoOptionalSchema.ts","../src/tools/implementation/zodSchema/schemaTypes/RichTextSchema.ts","../src/tools/implementation/zodSchema/zodCo.ts","../src/tools/implementation/zodSchema/coExport.ts","../src/tools/implementation/zodSchema/schemaTypes/CoMapSchema.ts","../src/tools/implementation/zodSchema/schemaTypes/CoListSchema.ts","../src/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.ts","../src/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.ts","../src/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.ts","../src/tools/implementation/zodSchema/schemaTypes/AccountSchema.ts","../src/tools/implementation/zodSchema/unionUtils.ts","../src/tools/implementation/zodSchema/runtimeConverters/schemaFieldToCoFieldDef.ts","../src/tools/implementation/zodSchema/runtimeConverters/coValueSchemaTransformation.ts","../src/tools/coValues/extensions/imageDef.ts","../src/tools/implementation/ContextManager.ts","../src/tools/auth/KvStoreContext.ts","../src/tools/auth/AuthSecretStorage.ts","../src/tools/auth/InMemoryKVStore.ts","../src/tools/implementation/devtoolsFormatters.ts","../src/tools/coValues/interfaces.ts"],"sourcesContent":["import {\n ZodObject,\n core,\n object as zodObject,\n strictObject as zodStrictObject,\n} from \"zod/v4\";\nimport { removeGetters } from \"../schemaUtils.js\";\nexport {\n string,\n number,\n boolean,\n templateLiteral,\n json,\n date,\n emoji,\n base64,\n base64url,\n nanoid,\n cuid,\n cuid2,\n ulid,\n ipv4,\n ipv6,\n email,\n url,\n uuid,\n literal,\n enum,\n cidrv4,\n cidrv6,\n iso,\n int32,\n union,\n discriminatedUnion,\n // record,\n // intersection,\n int,\n optional,\n array,\n tuple,\n type ZodOptional,\n type ZodReadonly,\n type ZodLazy,\n type ZodDefault,\n type ZodCatch,\n type output as infer,\n type ZodDiscriminatedUnion,\n z,\n} from \"zod/v4\";\n\nexport function object<\n T extends core.$ZodLooseShape = Partial<Record<never, core.SomeType>>,\n>(\n shape?: T,\n params?: string | core.$ZodObjectParams,\n): ZodObject<T, core.$strip> {\n rejectCoValueSchemas(\n shape,\n \"z.object() does not support collaborative types as values. Use co.map() instead\",\n );\n return zodObject(shape, params);\n}\n\nexport function strictObject<T extends core.$ZodLooseShape>(\n shape: T,\n params?: string | core.$ZodObjectParams,\n): ZodObject<T, core.$strict> {\n rejectCoValueSchemas(\n shape,\n \"z.strictObject() does not support collaborative types as values. Use co.map() instead\",\n );\n return zodStrictObject(shape, params);\n}\n\nfunction rejectCoValueSchemas(\n shape: core.$ZodLooseShape | undefined,\n errorMessage: string,\n) {\n if (containsCoValueSchema(shape)) {\n throw Error(errorMessage);\n }\n}\n\nfunction containsCoValueSchema(shape?: core.$ZodLooseShape): boolean {\n // Remove getters to avoid circularity issues accessing schemas that may not be defined yet\n return Object.values(removeGetters(shape ?? {})).some(isAnyCoValueSchema);\n}\n\n// Note: if you're editing this function, edit the `isAnyCoValueSchema`\n// function in `zodSchemaToCoSchema.ts` as well\nfunction isAnyCoValueSchema(schema: unknown): boolean {\n return (\n typeof schema === \"object\" &&\n schema !== null &&\n \"collaborative\" in schema &&\n schema.collaborative === true\n );\n}\n","/**\n * Remove getters from an object\n *\n * @param obj - The object to remove getters from.\n * @returns A new object with the getters removed.\n */\nexport function removeGetters<T extends object>(obj: T): Partial<T> {\n const result: any = {};\n\n for (const key of Object.keys(obj)) {\n const descriptor = Object.getOwnPropertyDescriptor(obj, key);\n if (!descriptor?.get) {\n result[key] = (obj as any)[key];\n }\n }\n\n return result;\n}\n","import { ControlledAccount, LocalNode, type RawCoValue } from \"cojson\";\nimport { CoreCoValueSchema } from \"../implementation/zodSchema/schemaTypes/CoValueSchema.js\";\nimport {\n AnonymousJazzAgent,\n CoValue,\n CoValueClass,\n CoValueFromRaw,\n ID,\n RegisteredSchemas,\n coValueClassFromCoValueClassOrSchema,\n coValuesCache,\n inspect,\n} from \"../internal.js\";\nimport {\n CoValueClassOrSchema,\n Group,\n InstanceOfSchemaCoValuesNullable,\n TypeSym,\n} from \"../internal.js\";\n\n/** @internal */\nexport abstract class CoValueBase implements CoValue {\n declare [TypeSym]: string;\n\n declare abstract $jazz: CoValueJazzApi<this>;\n\n /** @category Internals */\n static fromRaw<V extends CoValue>(this: CoValueClass<V>, raw: RawCoValue): V {\n return new this({ fromRaw: raw });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n toJSON(): object | any[] | string {\n return {\n id: this.$jazz.id,\n type: this[TypeSym],\n error: \"unknown CoValue class\",\n };\n }\n\n [inspect]() {\n return this.toJSON();\n }\n}\n\nexport abstract class CoValueJazzApi<V extends CoValue> {\n /** @category Internals */\n declare _instanceID: string;\n\n constructor(private coValue: V) {\n Object.defineProperty(this, \"_instanceID\", {\n value: `instance-${Math.random().toString(36).slice(2)}`,\n enumerable: false,\n });\n }\n\n abstract get id(): ID<V>;\n abstract get raw(): RawCoValue;\n abstract get owner(): Group | undefined;\n\n /** @internal */\n get localNode(): LocalNode {\n return this.raw.core.node;\n }\n\n /** @private */\n get loadedAs() {\n const agent = this.localNode.getCurrentAgent();\n\n if (agent instanceof ControlledAccount) {\n return coValuesCache.get(agent.account, () =>\n coValueClassFromCoValueClassOrSchema(\n RegisteredSchemas[\"Account\"],\n ).fromRaw(agent.account),\n );\n }\n\n return new AnonymousJazzAgent(this.localNode);\n }\n\n /**\n * The timestamp of the creation time of the CoValue\n *\n * @category Content\n */\n get createdAt(): number {\n const createdAt = this.raw.core.verified.header.meta?.createdAt;\n\n if (typeof createdAt === \"string\") {\n return new Date(createdAt).getTime();\n }\n\n return this.raw.core.earliestTxMadeAt;\n }\n\n /**\n * The timestamp of the last updated time of the CoValue\n *\n * Returns the creation time if there are no updates.\n *\n * @category Content\n */\n get lastUpdatedAt(): number {\n const value = this.raw.core.latestTxMadeAt;\n\n if (value === 0) {\n return this.createdAt;\n }\n\n return value;\n }\n}\n","export const inspect = Symbol.for(\"nodejs.util.inspect.custom\");\nexport type inspect = typeof inspect;\n","export type JazzToolsSymbol = SchemaInit | ItemsSym | MembersSym;\n\nexport const SchemaInit = \"$SchemaInit$\";\nexport type SchemaInit = typeof SchemaInit;\n\nexport const ItemsSym = \"$items$\";\nexport type ItemsSym = typeof ItemsSym;\n\nexport const MembersSym = \"$members$\";\nexport type MembersSym = typeof MembersSym;\n\nexport const TypeSym = \"$type$\";\nexport type TypeSym = typeof TypeSym;\n","import type { Account, CoMap, Group } from \"../internal.js\";\n\n/**\n * Regisering schemas into this Record to avoid circular dependencies.\n */\nexport const RegisteredSchemas = {} as {\n Account: typeof Account;\n Group: typeof Group;\n CoMap: typeof CoMap;\n};\n","import {\n AgentID,\n type CoValueUniqueness,\n CojsonInternalTypes,\n type JsonValue,\n RawAccountID,\n RawCoID,\n type RawCoMap,\n cojsonInternals,\n} from \"cojson\";\nimport {\n AnonymousJazzAgent,\n CoFieldInit,\n CoValue,\n CoValueClass,\n getCoValueOwner,\n Group,\n ID,\n PartialOnUndefined,\n RefEncoded,\n RefIfCoValue,\n RefsToResolve,\n RefsToResolveStrict,\n Resolved,\n Schema,\n Simplify,\n SubscribeListenerOptions,\n SubscribeRestArgs,\n TypeSym,\n} from \"../internal.js\";\nimport {\n Account,\n CoValueBase,\n CoValueJazzApi,\n ItemsSym,\n Ref,\n RegisteredSchemas,\n SchemaInit,\n accessChildById,\n accessChildByKey,\n activeAccountContext,\n ensureCoValueLoaded,\n inspect,\n instantiateRefEncodedWithInit,\n isRefEncoded,\n loadCoValueWithoutMe,\n makeRefs,\n parseCoValueCreateOptions,\n parseSubscribeRestArgs,\n subscribeToCoValueWithoutMe,\n subscribeToExistingCoValue,\n} from \"../internal.js\";\n\ntype CoMapEdit<V> = {\n value?: V;\n ref?: RefIfCoValue<V>;\n by: Account | null;\n madeAt: Date;\n key?: string;\n};\n\ntype LastAndAllCoMapEdits<V> = CoMapEdit<V> & { all: CoMapEdit<V>[] };\n\ntype CoMapEdits<M extends CoMap> = {\n [Key in CoKeys<M>]?: LastAndAllCoMapEdits<M[Key]>;\n};\n\ntype CoMapFieldSchema = {\n [key: string]: Schema;\n} & { [ItemsSym]?: Schema };\n\n/**\n * CoMaps are collaborative versions of plain objects, mapping string-like keys to values.\n *\n * @categoryDescription Declaration\n * Declare your own CoMap schemas by subclassing `CoMap` and assigning field schemas with `co`.\n *\n * Optional `coField.ref(...)` fields must be marked with `{ optional: true }`.\n *\n * ```ts\n * import { coField, CoMap } from \"jazz-tools\";\n *\n * class Person extends CoMap {\n * name = coField.string;\n * age = coField.number;\n * pet = coField.ref(Animal);\n * car = coField.ref(Car, { optional: true });\n * }\n * ```\n *\n * @categoryDescription Content\n * You can access properties you declare on a `CoMap` (using `co`) as if they were normal properties on a plain object, using dot notation, `Object.keys()`, etc.\n *\n * ```ts\n * person.name;\n * person[\"age\"];\n * person.age = 42;\n * person.pet?.name;\n * Object.keys(person);\n * // => [\"name\", \"age\", \"pet\"]\n * ```\n *\n * @category CoValues\n * */\nexport class CoMap extends CoValueBase implements CoValue {\n /** @category Type Helpers */\n declare [TypeSym]: \"CoMap\";\n static {\n this.prototype[TypeSym] = \"CoMap\";\n }\n\n /**\n * Jazz methods for CoMaps are inside this property.\n *\n * This allows CoMaps to be used as plain objects while still having\n * access to Jazz methods, and also doesn't limit which key names can be\n * used inside CoMaps.\n */\n declare $jazz: CoMapJazzApi<this>;\n\n /** @internal */\n static _schema: CoMapFieldSchema;\n\n /** @internal */\n constructor(options: { fromRaw: RawCoMap } | undefined) {\n super();\n\n const proxy = new Proxy(this, CoMapProxyHandler as ProxyHandler<this>);\n\n if (options) {\n if (\"fromRaw\" in options) {\n Object.defineProperties(this, {\n $jazz: {\n value: new CoMapJazzApi(proxy, () => options.fromRaw),\n enumerable: false,\n },\n });\n } else {\n throw new Error(\"Invalid CoMap constructor arguments\");\n }\n }\n\n return proxy;\n }\n\n /**\n * Create a new CoMap with the given initial values and owner.\n *\n * The owner (a Group or Account) determines access rights to the CoMap.\n *\n * The CoMap will immediately be persisted and synced to connected peers.\n *\n * @example\n * ```ts\n * const person = Person.create({\n * name: \"Alice\",\n * age: 42,\n * pet: cat,\n * }, { owner: friendGroup });\n * ```\n *\n * @category Creation\n *\n * @deprecated Use `co.map(...).create`.\n **/\n static create<M extends CoMap>(\n this: CoValueClass<M>,\n init: Simplify<CoMapInit_DEPRECATED<M>>,\n options?:\n | {\n owner?: Account | Group;\n unique?: CoValueUniqueness[\"uniqueness\"];\n }\n | Account\n | Group,\n ) {\n const instance = new this();\n\n return CoMap._createCoMap(instance, init, options);\n }\n\n /**\n * Return a JSON representation of the `CoMap`\n * @category Content\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n toJSON(_key?: string, processedValues?: ID<CoValue>[]): any {\n const result = {\n $jazz: { id: this.$jazz.id },\n } as Record<string, any>;\n\n for (const key of this.$jazz.raw.keys()) {\n const tKey = key as CoKeys<this>;\n const descriptor = this.$jazz.getDescriptor(tKey);\n\n if (!descriptor) {\n continue;\n }\n\n if (descriptor == \"json\" || \"encoded\" in descriptor) {\n result[key] = this.$jazz.raw.get(key);\n } else if (isRefEncoded(descriptor)) {\n const id = this.$jazz.raw.get(key) as ID<CoValue>;\n\n if (processedValues?.includes(id) || id === this.$jazz.id) {\n result[key] = { _circular: id };\n continue;\n }\n\n const ref = this[tKey];\n\n if (\n ref &&\n typeof ref === \"object\" &&\n \"toJSON\" in ref &&\n typeof ref.toJSON === \"function\"\n ) {\n const jsonedRef = ref.toJSON(tKey, [\n ...(processedValues || []),\n this.$jazz.id,\n ]);\n result[key] = jsonedRef;\n }\n } else {\n result[key] = undefined;\n }\n }\n\n return result;\n }\n\n [inspect]() {\n return this.toJSON();\n }\n\n /**\n * @internal\n */\n static _createCoMap<M extends CoMap>(\n instance: M,\n init: Simplify<CoMapInit_DEPRECATED<M>>,\n options?:\n | {\n owner?: Account | Group;\n unique?: CoValueUniqueness[\"uniqueness\"];\n }\n | Account\n | Group,\n ): M {\n const { owner, uniqueness } = parseCoValueCreateOptions(options);\n\n Object.defineProperties(instance, {\n $jazz: {\n value: new CoMapJazzApi(instance, () => raw),\n enumerable: false,\n },\n });\n\n const raw = CoMap.rawFromInit(instance, init, owner, uniqueness);\n\n return instance;\n }\n\n /**\n * Create a new `RawCoMap` from an initialization object\n * @internal\n */\n static rawFromInit<M extends CoMap, Fields extends object>(\n instance: M,\n init: Simplify<CoMapInit_DEPRECATED<Fields>> | undefined,\n owner: Group,\n uniqueness?: CoValueUniqueness,\n ) {\n const rawOwner = owner.$jazz.raw;\n\n const rawInit = {} as {\n [key in keyof Fields]: JsonValue | undefined;\n };\n\n if (init)\n for (const key of Object.keys(init) as (keyof Fields)[]) {\n const initValue = init[key as keyof typeof init];\n\n const descriptor = instance.$jazz.getDescriptor(key as string);\n\n if (!descriptor) {\n continue;\n }\n\n if (descriptor === \"json\") {\n rawInit[key] = initValue as JsonValue;\n } else if (isRefEncoded(descriptor)) {\n if (initValue != null) {\n let refId = (initValue as unknown as CoValue).$jazz?.id;\n if (!refId) {\n const coValue = instantiateRefEncodedWithInit(\n descriptor,\n initValue,\n owner,\n );\n refId = coValue.$jazz.id;\n }\n rawInit[key] = refId;\n }\n } else if (\"encoded\" in descriptor) {\n rawInit[key] = descriptor.encoded.encode(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n initValue as any,\n );\n }\n }\n\n return rawOwner.createMap(rawInit, null, \"private\", uniqueness);\n }\n\n /**\n * Declare a Record-like CoMap schema, by extending `CoMap.Record(...)` and passing the value schema using `co`. Keys are always `string`.\n *\n * @example\n * ```ts\n * import { coField, CoMap } from \"jazz-tools\";\n *\n * class ColorToFruitMap extends CoMap.Record(\n * coField.ref(Fruit)\n * ) {}\n *\n * // assume we have map: ColorToFruitMap\n * // and strawberry: Fruit\n * map[\"red\"] = strawberry;\n * ```\n *\n * @category Declaration\n */\n static Record<Value>(value: Value) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\n class RecordLikeCoMap extends CoMap {\n [ItemsSym] = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\n interface RecordLikeCoMap extends Record<string, Value> {}\n\n return RecordLikeCoMap;\n }\n\n /**\n * Load a `CoMap` with a given ID, as a given account.\n *\n * `depth` specifies which (if any) fields that reference other CoValues to load as well before resolving.\n * The `DeeplyLoaded` return type guarantees that corresponding referenced CoValues are loaded to the specified depth.\n *\n * You can pass `[]` or `{}` for shallowly loading only this CoMap, or `{ fieldA: depthA, fieldB: depthB }` for recursively loading referenced CoValues.\n *\n * Check out the `load` methods on `CoMap`/`CoList`/`CoFeed`/`Group`/`Account` to see which depth structures are valid to nest.\n *\n * @example\n * ```ts\n * const person = await Person.load(\n * \"co_zdsMhHtfG6VNKt7RqPUPvUtN2Ax\",\n * { pet: {} }\n * );\n * ```\n *\n * @category Subscription & Loading\n *\n * @deprecated Use `co.map(...).load` instead.\n */\n static load<M extends CoMap, const R extends RefsToResolve<M> = true>(\n this: CoValueClass<M>,\n id: ID<M>,\n options?: {\n resolve?: RefsToResolveStrict<M, R>;\n loadAs?: Account | AnonymousJazzAgent;\n skipRetry?: boolean;\n },\n ): Promise<Resolved<M, R> | null> {\n return loadCoValueWithoutMe(this, id, options);\n }\n\n /**\n * Load and subscribe to a `CoMap` with a given ID, as a given account.\n *\n * Automatically also subscribes to updates to all referenced/nested CoValues as soon as they are accessed in the listener.\n *\n * `depth` specifies which (if any) fields that reference other CoValues to load as well before calling `listener` for the first time.\n * The `DeeplyLoaded` return type guarantees that corresponding referenced CoValues are loaded to the specified depth.\n *\n * You can pass `[]` or `{}` for shallowly loading only this CoMap, or `{ fieldA: depthA, fieldB: depthB }` for recursively loading referenced CoValues.\n *\n * Check out the `load` methods on `CoMap`/`CoList`/`CoFeed`/`Group`/`Account` to see which depth structures are valid to nest.\n *\n * Returns an unsubscribe function that you should call when you no longer need updates.\n *\n * Also see the `useCoState` hook to reactively subscribe to a CoValue in a React component.\n *\n * @example\n * ```ts\n * const unsub = Person.subscribe(\n * \"co_zdsMhHtfG6VNKt7RqPUPvUtN2Ax\",\n * { pet: {} },\n * (person) => console.log(person)\n * );\n * ```\n *\n * @category Subscription & Loading\n *\n * @deprecated Use `co.map(...).subscribe` instead.\n */\n static subscribe<M extends CoMap, const R extends RefsToResolve<M> = true>(\n this: CoValueClass<M>,\n id: ID<M>,\n listener: (value: Resolved<M, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<M extends CoMap, const R extends RefsToResolve<M> = true>(\n this: CoValueClass<M>,\n id: ID<M>,\n options: SubscribeListenerOptions<M, R>,\n listener: (value: Resolved<M, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<M extends CoMap, const R extends RefsToResolve<M>>(\n this: CoValueClass<M>,\n id: ID<M>,\n ...args: SubscribeRestArgs<M, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToCoValueWithoutMe<M, R>(this, id, options, listener);\n }\n\n /** @deprecated Use `CoMap.upsertUnique` and `CoMap.loadUnique` instead. */\n static findUnique<M extends CoMap>(\n this: CoValueClass<M>,\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: ID<Account> | ID<Group>,\n as?: Account | Group | AnonymousJazzAgent,\n ) {\n return CoMap._findUnique(unique, ownerID, as);\n }\n\n /** @internal */\n static _findUnique<M extends CoMap>(\n this: CoValueClass<M>,\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: ID<Account> | ID<Group>,\n as?: Account | Group | AnonymousJazzAgent,\n ) {\n as ||= activeAccountContext.get();\n\n const header = {\n type: \"comap\" as const,\n ruleset: {\n type: \"ownedByGroup\" as const,\n group: ownerID as RawCoID,\n },\n meta: null,\n uniqueness: unique,\n };\n const crypto =\n as[TypeSym] === \"Anonymous\" ? as.node.crypto : as.$jazz.localNode.crypto;\n return cojsonInternals.idforHeader(header, crypto) as ID<M>;\n }\n\n /**\n * Given some data, updates an existing CoMap or initialises a new one if none exists.\n *\n * Note: This method respects resolve options, and thus can return `null` if the references cannot be resolved.\n *\n * @example\n * ```ts\n * const activeEvent = await Event.upsertUnique(\n * sourceData.identifier,\n * workspace.id,\n * {\n * title: sourceData.title,\n * identifier: sourceData.identifier,\n * external_id: sourceData._id,\n * },\n * workspace\n * );\n * ```\n *\n * @param options The options for creating or loading the CoMap. This includes the intended state of the CoMap, its unique identifier, its owner, and the references to resolve.\n * @returns Either an existing & modified CoMap, or a new initialised CoMap if none exists.\n * @category Subscription & Loading\n *\n * @deprecated Use `co.map(...).upsertUnique` instead.\n */\n static async upsertUnique<\n M extends CoMap,\n const R extends RefsToResolve<M> = true,\n >(\n this: CoValueClass<M>,\n options: {\n value: Simplify<CoMapInit_DEPRECATED<M>>;\n unique: CoValueUniqueness[\"uniqueness\"];\n owner: Account | Group;\n resolve?: RefsToResolveStrict<M, R>;\n },\n ): Promise<Resolved<M, R> | null> {\n const mapId = CoMap._findUnique(\n options.unique,\n options.owner.$jazz.id,\n options.owner.$jazz.loadedAs,\n );\n let map: Resolved<M, R> | null = await loadCoValueWithoutMe(this, mapId, {\n ...options,\n loadAs: options.owner.$jazz.loadedAs,\n skipRetry: true,\n });\n if (!map) {\n const instance = new this();\n map = CoMap._createCoMap(instance, options.value, {\n owner: options.owner,\n unique: options.unique,\n }) as Resolved<M, R>;\n } else {\n (map as M).$jazz.applyDiff(\n options.value as unknown as Partial<CoMapInit<M>>,\n );\n }\n\n return await loadCoValueWithoutMe(this, mapId, {\n ...options,\n loadAs: options.owner.$jazz.loadedAs,\n skipRetry: true,\n });\n }\n\n /**\n * Loads a CoMap by its unique identifier and owner's ID.\n * @param unique The unique identifier of the CoMap to load.\n * @param ownerID The ID of the owner of the CoMap.\n * @param options Additional options for loading the CoMap.\n * @returns The loaded CoMap, or null if unavailable.\n *\n * @deprecated Use `co.map(...).loadUnique` instead.\n */\n static loadUnique<M extends CoMap, const R extends RefsToResolve<M> = true>(\n this: CoValueClass<M>,\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: ID<Account> | ID<Group>,\n options?: {\n resolve?: RefsToResolveStrict<M, R>;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Resolved<M, R> | null> {\n return loadCoValueWithoutMe(\n this,\n CoMap._findUnique(unique, ownerID, options?.loadAs),\n { ...options, skipRetry: true },\n );\n }\n}\n\n/**\n * Contains CoMap Jazz methods that are part of the {@link CoMap.$jazz`} property.\n */\nclass CoMapJazzApi<M extends CoMap> extends CoValueJazzApi<M> {\n constructor(\n private coMap: M,\n private getRaw: () => RawCoMap,\n ) {\n super(coMap);\n }\n\n /**\n * The ID of this `CoMap`\n * @category Content\n */\n get id(): ID<M> {\n return this.raw.id;\n }\n\n get owner(): Group {\n return getCoValueOwner(this.coMap);\n }\n\n /**\n * Check if a key is defined in the CoMap.\n *\n * This check does not load the referenced value or validate permissions.\n *\n * @param key The key to check\n * @returns True if the key is defined, false otherwise\n * @category Content\n */\n has(key: CoKeys<M>): boolean {\n const entry = this.raw.getRaw(key);\n return entry?.change !== undefined && entry.change.op !== \"del\";\n }\n\n /**\n * Set a value on the CoMap\n *\n * @param key The key to set\n * @param value The value to set\n *\n * @category Content\n */\n set<K extends CoKeys<M>>(key: K, value: CoFieldInit<M[K]>): void {\n const descriptor = this.getDescriptor(key as string);\n\n if (!descriptor) {\n throw Error(`Cannot set unknown key ${key}`);\n }\n\n let refId = (value as CoValue)?.$jazz?.id;\n if (descriptor === \"json\") {\n this.raw.set(key, value as JsonValue | undefined);\n } else if (\"encoded\" in descriptor) {\n this.raw.set(key, descriptor.encoded.encode(value));\n } else if (isRefEncoded(descriptor)) {\n if (value === undefined) {\n if (!descriptor.optional) {\n throw Error(`Cannot set required reference ${key} to undefined`);\n }\n this.raw.set(key, null);\n } else {\n if (!refId) {\n const coValue = instantiateRefEncodedWithInit(\n descriptor,\n value,\n this.owner,\n );\n refId = coValue.$jazz.id;\n }\n this.raw.set(key, refId);\n }\n }\n }\n\n /**\n * Delete a value from a CoMap.\n *\n * For record-like CoMaps (created with `co.record`), any string key can be deleted.\n * For struct-like CoMaps (created with `co.map`), only optional properties can be deleted.\n *\n * @param key The key to delete\n *\n * @category Content\n */\n delete(\n key: OptionalCoKeys<M> | (string extends keyof M ? string : never),\n ): void {\n this.raw.delete(key);\n }\n\n /**\n * Modify the `CoMap` to match another map.\n *\n * The new values are assigned to the CoMap, overwriting existing values\n * when the property already exists.\n *\n * @param newValues - The new values to apply to the CoMap. For collaborative values,\n * both CoValues and JSON values are supported.\n * @returns The modified CoMap.\n *\n * @category Content\n */\n applyDiff(newValues: Partial<CoMapInit<M>>): M {\n for (const key in newValues) {\n if (Object.prototype.hasOwnProperty.call(newValues, key)) {\n const tKey = key as keyof typeof newValues & keyof this;\n const descriptor = this.getDescriptor(key);\n\n if (!descriptor) continue;\n\n const newValue = newValues[tKey];\n const currentValue = this.coMap[tKey];\n\n if (descriptor === \"json\" || \"encoded\" in descriptor) {\n if (currentValue !== newValue) {\n this.set(tKey as any, newValue as CoFieldInit<M[keyof M]>);\n }\n } else if (isRefEncoded(descriptor)) {\n const currentId = (currentValue as CoValue | undefined)?.$jazz.id;\n let newId = (newValue as CoValue | undefined)?.$jazz?.id;\n if (currentId !== newId) {\n this.set(tKey as any, newValue as CoFieldInit<M[keyof M]>);\n }\n }\n }\n }\n return this.coMap;\n }\n\n /**\n * Given an already loaded `CoMap`, ensure that the specified fields are loaded to the specified depth.\n *\n * Works like `CoMap.load()`, but you don't need to pass the ID or the account to load as again.\n *\n * @category Subscription & Loading\n */\n ensureLoaded<Map extends CoMap, const R extends RefsToResolve<Map>>(\n this: CoMapJazzApi<Map>,\n options: {\n resolve: RefsToResolveStrict<Map, R>;\n },\n ): Promise<Resolved<Map, R>> {\n return ensureCoValueLoaded(this.coMap, options);\n }\n\n /**\n * Given an already loaded `CoMap`, subscribe to updates to the `CoMap` and ensure that the specified fields are loaded to the specified depth.\n *\n * Works like `CoMap.subscribe()`, but you don't need to pass the ID or the account to load as again.\n *\n * Returns an unsubscribe function that you should call when you no longer need updates.\n *\n * @category Subscription & Loading\n **/\n subscribe<Map extends CoMap, const R extends RefsToResolve<Map> = true>(\n this: CoMapJazzApi<Map>,\n listener: (value: Resolved<Map, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<Map extends CoMap, const R extends RefsToResolve<Map> = true>(\n this: CoMapJazzApi<Map>,\n options: { resolve?: RefsToResolveStrict<Map, R> },\n listener: (value: Resolved<Map, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<Map extends CoMap, const R extends RefsToResolve<Map>>(\n this: CoMapJazzApi<Map>,\n ...args: SubscribeRestArgs<Map, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToExistingCoValue(this.coMap, options, listener);\n }\n\n /**\n * Wait for the `CoMap` to be uploaded to the other peers.\n *\n * @category Subscription & Loading\n */\n async waitForSync(options?: { timeout?: number }): Promise<void> {\n await this.raw.core.waitForSync(options);\n }\n\n /**\n * Get the descriptor for a given key\n * @internal\n */\n getDescriptor(key: string): Schema | undefined {\n return this.schema?.[key] || this.schema?.[ItemsSym];\n }\n\n /**\n * If property `prop` is a `coField.ref(...)`, you can use `coMap.$jazz.refs.prop` to access\n * the `Ref` instead of the potentially loaded/null value.\n *\n * This allows you to always get the ID or load the value manually.\n *\n * @example\n * ```ts\n * person.$jazz.refs.pet.id; // => ID<Animal>\n * person.$jazz.refs.pet.value;\n * // => Animal | null\n * const pet = await person.$jazz.refs.pet.load();\n * ```\n *\n * @category Content\n **/\n get refs(): Simplify<\n {\n [Key in CoKeys<M> as NonNullable<M[Key]> extends CoValue\n ? Key\n : never]?: RefIfCoValue<M[Key]>;\n } & {\n [Key in CoKeys<M> as M[Key] extends undefined\n ? never\n : M[Key] extends CoValue\n ? Key\n : never]: RefIfCoValue<M[Key]>;\n }\n > {\n return makeRefs<CoKeys<this>>(\n this.coMap,\n (key) => this.raw.get(key as string) as unknown as ID<CoValue>,\n () => {\n const keys = this.raw.keys().filter((key) => {\n const descriptor = this.getDescriptor(key as string);\n return (\n descriptor && descriptor !== \"json\" && isRefEncoded(descriptor)\n );\n }) as CoKeys<this>[];\n\n return keys;\n },\n this.loadedAs,\n (key) => this.getDescriptor(key as string) as RefEncoded<CoValue>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) as any;\n }\n\n /**\n * Get the edits made to the CoMap.\n *\n * @category Collaboration\n */\n getEdits(): CoMapEdits<M> {\n const map = this.coMap;\n return new Proxy(\n {},\n {\n get(_target, key) {\n const rawEdit = map.$jazz.raw.lastEditAt(key as string);\n if (!rawEdit) return undefined;\n\n const descriptor = map.$jazz.getDescriptor(key as string);\n\n if (!descriptor) return undefined;\n\n return {\n ...getEditFromRaw(map, rawEdit, descriptor, key as string),\n get all() {\n return [...map.$jazz.raw.editsAt(key as string)].map((rawEdit) =>\n getEditFromRaw(map, rawEdit, descriptor, key as string),\n );\n },\n };\n },\n ownKeys(_target) {\n return map.$jazz.raw.keys();\n },\n getOwnPropertyDescriptor(target, key) {\n return {\n value: Reflect.get(target, key),\n writable: false,\n enumerable: true,\n configurable: true,\n };\n },\n },\n );\n }\n\n /** @internal */\n override get raw() {\n return this.getRaw();\n }\n\n /** @internal */\n get schema(): CoMapFieldSchema {\n return (this.coMap.constructor as typeof CoMap)._schema;\n }\n}\n\nexport type CoKeys<Map extends object> = Exclude<\n keyof Map & string,\n keyof CoMap\n>;\n\n/**\n * Extract keys of properties that are required\n */\nexport type RequiredCoKeys<Map extends object> = {\n [K in CoKeys<Map>]: undefined extends Map[K] ? never : K;\n}[CoKeys<Map>];\n\n/**\n * Extract keys of properties that can be undefined\n */\nexport type OptionalCoKeys<Map extends object> = {\n [K in CoKeys<Map>]: undefined extends Map[K] ? K : never;\n}[CoKeys<Map>];\n\n/**\n * Force required ref fields to be non nullable\n *\n * Considering that:\n * - Optional refs are typed as coField<InstanceType<CoValueClass> | null | undefined>\n * - Required refs are typed as coField<InstanceType<CoValueClass> | null>\n *\n * This type works in two steps:\n * - Remove the null from both types\n * - Then we check if the input type accepts undefined, if positive we put the null union back\n *\n * So the optional refs stays unchanged while we safely remove the null union\n * from required refs\n *\n * This way required refs can be marked as required in the CoMapInit while\n * staying a nullable property for value access.\n *\n * Example:\n *\n * const map = MyCoMap.create({\n * requiredRef: NestedMap.create({}) // null is not valid here\n * })\n *\n * map.requiredRef // this value is still nullable\n */\ntype ForceRequiredRef<V> = V extends InstanceType<CoValueClass> | null\n ? NonNullable<V>\n : V extends InstanceType<CoValueClass> | undefined\n ? V | null\n : V;\n\nexport type CoMapInit_DEPRECATED<Map extends object> = PartialOnUndefined<{\n [Key in CoKeys<Map>]: ForceRequiredRef<Map[Key]>;\n}>;\n\nexport type CoMapInit<Map extends object> = {\n [K in RequiredCoKeys<Map>]: CoFieldInit<Map[K]>;\n} & {\n [K in OptionalCoKeys<Map>]?: CoFieldInit<Map[K]> | undefined;\n};\n\n// TODO: cache handlers per descriptor for performance?\nconst CoMapProxyHandler: ProxyHandler<CoMap> = {\n get(target, key, receiver) {\n if (key === \"_schema\") {\n return Reflect.get(target, key);\n } else if (key in target) {\n return Reflect.get(target, key, receiver);\n } else {\n if (typeof key !== \"string\") {\n return undefined;\n }\n\n const descriptor = target.$jazz.getDescriptor(key as string);\n\n if (!descriptor) {\n return undefined;\n }\n\n const raw = target.$jazz.raw.get(key);\n\n if (descriptor === \"json\") {\n return raw;\n } else if (\"encoded\" in descriptor) {\n return raw === undefined ? undefined : descriptor.encoded.decode(raw);\n } else if (isRefEncoded(descriptor)) {\n return raw === undefined || raw === null\n ? undefined\n : accessChildByKey(target, raw as string, key);\n }\n }\n },\n set(target, key, value, receiver) {\n if (\n typeof key === \"string\" &&\n typeof value === \"object\" &&\n value !== null &&\n SchemaInit in value\n ) {\n (target.constructor as typeof CoMap)._schema ||= {};\n (target.constructor as typeof CoMap)._schema[key] = value[SchemaInit];\n return true;\n }\n\n const descriptor = target.$jazz.getDescriptor(key as string);\n\n if (!descriptor) return false;\n\n if (typeof key === \"string\") {\n throw Error(\"Cannot update a CoMap directly. Use `$jazz.set` instead.\");\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n },\n defineProperty(target, key, attributes) {\n if (\n \"value\" in attributes &&\n typeof attributes.value === \"object\" &&\n SchemaInit in attributes.value\n ) {\n (target.constructor as typeof CoMap)._schema ||= {};\n (target.constructor as typeof CoMap)._schema[key as string] =\n attributes.value[SchemaInit];\n return true;\n } else {\n return Reflect.defineProperty(target, key, attributes);\n }\n },\n ownKeys(target) {\n const keys = Reflect.ownKeys(target).filter((k) => k !== ItemsSym);\n\n for (const key of target.$jazz.raw.keys()) {\n if (!keys.includes(key)) {\n keys.push(key);\n }\n }\n\n return keys;\n },\n getOwnPropertyDescriptor(target, key) {\n if (key in target) {\n return Reflect.getOwnPropertyDescriptor(target, key);\n } else {\n const descriptor = target.$jazz.getDescriptor(key as string);\n\n if (descriptor || key in target.$jazz.raw.latest) {\n return {\n enumerable: true,\n configurable: true,\n writable: true,\n };\n }\n }\n },\n has(target, key) {\n // The `has` trap can be called when defining properties during CoMap creation\n // when using the class-based syntax. In that case, $jazz may not yet be initialized,\n // as it's defined afterwards in the create method.\n const descriptor = target.$jazz?.getDescriptor(key as string);\n\n if (target.$jazz?.raw && typeof key === \"string\" && descriptor) {\n return target.$jazz.raw.get(key) !== undefined;\n } else {\n return Reflect.has(target, key);\n }\n },\n deleteProperty(target, key) {\n const descriptor = target.$jazz.getDescriptor(key as string);\n\n if (typeof key === \"string\" && descriptor) {\n throw Error(\n \"Cannot delete a CoMap property directly. Use `$jazz.delete` instead.\",\n );\n } else {\n return Reflect.deleteProperty(target, key);\n }\n },\n};\n\nRegisteredSchemas[\"CoMap\"] = CoMap;\n\n/** @internal */\nfunction getEditFromRaw(\n target: CoMap,\n rawEdit: {\n by: RawAccountID | AgentID;\n tx: CojsonInternalTypes.TransactionID;\n at: Date;\n value?: JsonValue | undefined;\n },\n descriptor: Schema,\n key: string,\n) {\n return {\n value:\n descriptor === \"json\"\n ? rawEdit.value\n : \"encoded\" in descriptor\n ? rawEdit.value === null || rawEdit.value === undefined\n ? rawEdit.value\n : descriptor.encoded.decode(rawEdit.value)\n : accessChildById(target, rawEdit.value as string, descriptor),\n ref:\n descriptor !== \"json\" && isRefEncoded(descriptor)\n ? new Ref(\n rawEdit.value as ID<CoValue>,\n target.$jazz.loadedAs,\n descriptor,\n target,\n )\n : undefined,\n get by() {\n return (\n rawEdit.by &&\n accessChildById(target, rawEdit.by, {\n ref: Account,\n optional: false,\n })\n );\n },\n madeAt: rawEdit.at,\n key,\n };\n}\n","import type { CoValueUniqueness, JsonValue, RawCoID, RawCoList } from \"cojson\";\nimport { cojsonInternals } from \"cojson\";\nimport { calcPatch } from \"fast-myers-diff\";\nimport {\n Account,\n CoFieldInit,\n CoValue,\n CoValueClass,\n CoValueJazzApi,\n getCoValueOwner,\n Group,\n ID,\n RefEncoded,\n RefsToResolve,\n RefsToResolveStrict,\n Resolved,\n Schema,\n SchemaFor,\n SubscribeListenerOptions,\n SubscribeRestArgs,\n TypeSym,\n} from \"../internal.js\";\nimport {\n AnonymousJazzAgent,\n ItemsSym,\n Ref,\n SchemaInit,\n accessChildByKey,\n activeAccountContext,\n coField,\n ensureCoValueLoaded,\n inspect,\n instantiateRefEncodedWithInit,\n isRefEncoded,\n loadCoValueWithoutMe,\n makeRefs,\n parseCoValueCreateOptions,\n parseSubscribeRestArgs,\n subscribeToCoValueWithoutMe,\n subscribeToExistingCoValue,\n} from \"../internal.js\";\n\n/**\n * CoLists are collaborative versions of plain arrays.\n *\n * @categoryDescription Content\n * You can access items on a `CoList` as if they were normal items on a plain array, using `[]` notation, etc.\n *\n * All readonly array methods are available on `CoList`. You can also use the `.$jazz` API to mutate the CoList.\n *\n * ```ts\n * const colorList = ColorList.create([\"red\", \"green\", \"blue\"]);\n * ```\n *\n * ```ts\n * colorList[0];\n * colorList.$jazz.set(3, \"yellow\");\n * colorList.$jazz.push(\"Kawazaki Green\");\n * colorList.$jazz.splice(1, 1);\n * ```\n *\n * @category CoValues\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class CoList<out Item = any>\n extends Array<Item>\n implements ReadonlyArray<Item>, CoValue\n{\n declare $jazz: CoListJazzApi<this>;\n\n /**\n * Declare a `CoList` by subclassing `CoList.Of(...)` and passing the item schema using `co`.\n *\n * @example\n * ```ts\n * class ColorList extends CoList.Of(\n * coField.string\n * ) {}\n * class AnimalList extends CoList.Of(\n * coField.ref(Animal)\n * ) {}\n * ```\n *\n * @category Declaration\n */\n static Of<Item>(item: Item): typeof CoList<Item> {\n // TODO: cache superclass for item class\n return class CoListOf extends CoList<Item> {\n [coField.items] = item;\n };\n }\n\n /**\n * @ignore\n * @deprecated Use UPPERCASE `CoList.Of` instead! */\n static of(..._args: never): never {\n throw new Error(\"Can't use Array.of with CoLists\");\n }\n\n /** @category Type Helpers */\n declare [TypeSym]: \"CoList\";\n static {\n this.prototype[TypeSym] = \"CoList\";\n }\n\n /** @internal This is only a marker type and doesn't exist at runtime */\n [ItemsSym]!: Item;\n /** @internal */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static _schema: any;\n\n static get [Symbol.species]() {\n return Array;\n }\n\n constructor(options: { fromRaw: RawCoList } | undefined) {\n super();\n\n const proxy = new Proxy(this, CoListProxyHandler as ProxyHandler<this>);\n\n if (options && \"fromRaw\" in options) {\n Object.defineProperties(this, {\n $jazz: {\n value: new CoListJazzApi(proxy, () => options.fromRaw),\n enumerable: false,\n },\n });\n }\n\n return proxy;\n }\n\n /**\n * Create a new CoList with the given initial values and owner.\n *\n * The owner (a Group or Account) determines access rights to the CoMap.\n *\n * The CoList will immediately be persisted and synced to connected peers.\n *\n * @example\n * ```ts\n * const colours = ColorList.create(\n * [\"red\", \"green\", \"blue\"],\n * { owner: me }\n * );\n * const animals = AnimalList.create(\n * [cat, dog, fish],\n * { owner: me }\n * );\n * ```\n *\n * @category Creation\n * @deprecated Use `co.list(...).create` instead.\n **/\n static create<L extends CoList>(\n this: CoValueClass<L>,\n items: L[number][],\n options?:\n | {\n owner: Account | Group;\n unique?: CoValueUniqueness[\"uniqueness\"];\n }\n | Account\n | Group,\n ) {\n const { owner, uniqueness } = parseCoValueCreateOptions(options);\n const instance = new this();\n\n Object.defineProperties(instance, {\n $jazz: {\n value: new CoListJazzApi(instance, () => raw),\n enumerable: false,\n },\n });\n\n const raw = owner.$jazz.raw.createList(\n toRawItems(items, instance.$jazz.schema[ItemsSym], owner),\n null,\n \"private\",\n uniqueness,\n );\n\n return instance;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n toJSON(_key?: string, seenAbove?: ID<CoValue>[]): any[] {\n const itemDescriptor = this.$jazz.schema[ItemsSym] as Schema;\n if (itemDescriptor === \"json\") {\n return this.$jazz.raw.asArray();\n } else if (\"encoded\" in itemDescriptor) {\n return this.$jazz.raw\n .asArray()\n .map((e) => itemDescriptor.encoded.encode(e));\n } else if (isRefEncoded(itemDescriptor)) {\n return this.map((item, idx) =>\n seenAbove?.includes((item as CoValue)?.$jazz.id)\n ? { _circular: (item as CoValue).$jazz.id }\n : (item as unknown as CoValue)?.toJSON(idx + \"\", [\n ...(seenAbove || []),\n this.$jazz.id,\n ]),\n );\n } else {\n return [];\n }\n }\n\n [inspect]() {\n return this.toJSON();\n }\n\n /** @category Internals */\n static fromRaw<V extends CoList>(\n this: CoValueClass<V> & typeof CoList,\n raw: RawCoList,\n ) {\n return new this({ fromRaw: raw });\n }\n\n /** @internal */\n static schema<V extends CoList>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: { new (...args: any): V } & typeof CoList,\n def: { [ItemsSym]: V[\"$jazz\"][\"schema\"][ItemsSym] },\n ) {\n this._schema ||= {};\n Object.assign(this._schema, def);\n }\n\n /**\n * Load a `CoList` with a given ID, as a given account.\n *\n * `depth` specifies if item CoValue references should be loaded as well before resolving.\n * The `DeeplyLoaded` return type guarantees that corresponding referenced CoValues are loaded to the specified depth.\n *\n * You can pass `[]` or for shallowly loading only this CoList, or `[itemDepth]` for recursively loading referenced CoValues.\n *\n * Check out the `load` methods on `CoMap`/`CoList`/`CoFeed`/`Group`/`Account` to see which depth structures are valid to nest.\n *\n * @example\n * ```ts\n * const animalsWithVets =\n * await ListOfAnimals.load(\n * \"co_zdsMhHtfG6VNKt7RqPUPvUtN2Ax\",\n * me,\n * [{ vet: {} }]\n * );\n * ```\n *\n * @category Subscription & Loading\n * @deprecated Use `co.list(...).load` instead.\n */\n static load<L extends CoList, const R extends RefsToResolve<L> = true>(\n this: CoValueClass<L>,\n id: ID<L>,\n options?: {\n resolve?: RefsToResolveStrict<L, R>;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Resolved<L, R> | null> {\n return loadCoValueWithoutMe(this, id, options);\n }\n\n /**\n * Load and subscribe to a `CoList` with a given ID, as a given account.\n *\n * Automatically also subscribes to updates to all referenced/nested CoValues as soon as they are accessed in the listener.\n *\n * `depth` specifies if item CoValue references should be loaded as well before calling `listener` for the first time.\n * The `DeeplyLoaded` return type guarantees that corresponding referenced CoValues are loaded to the specified depth.\n *\n * You can pass `[]` or for shallowly loading only this CoList, or `[itemDepth]` for recursively loading referenced CoValues.\n *\n * Check out the `load` methods on `CoMap`/`CoList`/`CoFeed`/`Group`/`Account` to see which depth structures are valid to nest.\n *\n * Returns an unsubscribe function that you should call when you no longer need updates.\n *\n * Also see the `useCoState` hook to reactively subscribe to a CoValue in a React component.\n *\n * @example\n * ```ts\n * const unsub = ListOfAnimals.subscribe(\n * \"co_zdsMhHtfG6VNKt7RqPUPvUtN2Ax\",\n * me,\n * { vet: {} },\n * (animalsWithVets) => console.log(animalsWithVets)\n * );\n * ```\n *\n * @category Subscription & Loading\n * @deprecated Use `co.list(...).subscribe` instead.\n */\n static subscribe<L extends CoList, const R extends RefsToResolve<L> = true>(\n this: CoValueClass<L>,\n id: ID<L>,\n listener: (value: Resolved<L, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<L extends CoList, const R extends RefsToResolve<L> = true>(\n this: CoValueClass<L>,\n id: ID<L>,\n options: SubscribeListenerOptions<L, R>,\n listener: (value: Resolved<L, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<L extends CoList, const R extends RefsToResolve<L>>(\n this: CoValueClass<L>,\n id: ID<L>,\n ...args: SubscribeRestArgs<L, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToCoValueWithoutMe<L, R>(this, id, options, listener);\n }\n\n /** @deprecated Use `CoList.upsertUnique` and `CoList.loadUnique` instead. */\n static findUnique<L extends CoList>(\n this: CoValueClass<L>,\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: ID<Account> | ID<Group>,\n as?: Account | Group | AnonymousJazzAgent,\n ) {\n return CoList._findUnique(unique, ownerID, as);\n }\n\n /** @internal */\n static _findUnique<L extends CoList>(\n this: CoValueClass<L>,\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: ID<Account> | ID<Group>,\n as?: Account | Group | AnonymousJazzAgent,\n ) {\n as ||= activeAccountContext.get();\n\n const header = {\n type: \"colist\" as const,\n ruleset: {\n type: \"ownedByGroup\" as const,\n group: ownerID as RawCoID,\n },\n meta: null,\n uniqueness: unique,\n };\n const crypto =\n as[TypeSym] === \"Anonymous\" ? as.node.crypto : as.$jazz.localNode.crypto;\n return cojsonInternals.idforHeader(header, crypto) as ID<L>;\n }\n\n /**\n * Given some data, updates an existing CoList or initialises a new one if none exists.\n *\n * Note: This method respects resolve options, and thus can return `null` if the references cannot be resolved.\n *\n * @example\n * ```ts\n * const activeItems = await ItemList.upsertUnique(\n * {\n * value: [item1, item2, item3],\n * unique: sourceData.identifier,\n * owner: workspace,\n * }\n * );\n * ```\n *\n * @param options The options for creating or loading the CoList. This includes the intended state of the CoList, its unique identifier, its owner, and the references to resolve.\n * @returns Either an existing & modified CoList, or a new initialised CoList if none exists.\n * @category Subscription & Loading\n */\n static async upsertUnique<\n L extends CoList,\n const R extends RefsToResolve<L> = true,\n >(\n this: CoValueClass<L>,\n options: {\n value: L[number][];\n unique: CoValueUniqueness[\"uniqueness\"];\n owner: Account | Group;\n resolve?: RefsToResolveStrict<L, R>;\n },\n ): Promise<Resolved<L, R> | null> {\n const listId = CoList._findUnique(\n options.unique,\n options.owner.$jazz.id,\n options.owner.$jazz.loadedAs,\n );\n let list: Resolved<L, R> | null = await loadCoValueWithoutMe(this, listId, {\n ...options,\n loadAs: options.owner.$jazz.loadedAs,\n skipRetry: true,\n });\n if (!list) {\n list = (this as any).create(options.value, {\n owner: options.owner,\n unique: options.unique,\n }) as Resolved<L, R>;\n } else {\n (list as L).$jazz.applyDiff(options.value);\n }\n\n return await loadCoValueWithoutMe(this, listId, {\n ...options,\n loadAs: options.owner.$jazz.loadedAs,\n skipRetry: true,\n });\n }\n\n /**\n * Loads a CoList by its unique identifier and owner's ID.\n * @param unique The unique identifier of the CoList to load.\n * @param ownerID The ID of the owner of the CoList.\n * @param options Additional options for loading the CoList.\n * @returns The loaded CoList, or null if unavailable.\n */\n static loadUnique<L extends CoList, const R extends RefsToResolve<L> = true>(\n this: CoValueClass<L>,\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: ID<Account> | ID<Group>,\n options?: {\n resolve?: RefsToResolveStrict<L, R>;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Resolved<L, R> | null> {\n return loadCoValueWithoutMe(\n this,\n CoList._findUnique(unique, ownerID, options?.loadAs),\n { ...options, skipRetry: true },\n );\n }\n\n // Override mutation methods defined on Array, as CoLists aren't meant to be mutated directly\n /**\n * @deprecated Use `.$jazz.push` instead.\n */\n override push(...items: never): never {\n throw new Error(\n \"Cannot mutate a CoList directly. Use `.$jazz.push` instead.\",\n );\n }\n /**\n * @deprecated Use `.$jazz.unshift` instead.\n */\n override unshift(...items: never): number {\n throw new Error(\n \"Cannot mutate a CoList directly. Use `.$jazz.unshift` instead.\",\n );\n }\n /**\n * @deprecated Use `.$jazz.pop` instead.\n */\n // @ts-expect-error\n override pop(value: never): never {\n throw new Error(\n \"Cannot mutate a CoList directly. Use `.$jazz.pop` instead.\",\n );\n }\n /**\n * @deprecated Use `.$jazz.shift` instead.\n */\n // @ts-expect-error\n override shift(value: never): never {\n throw new Error(\n \"Cannot mutate a CoList directly. Use `.$jazz.shift` instead.\",\n );\n }\n /**\n * @deprecated Use `.$jazz.splice` instead.\n */\n override splice(start: never, deleteCount: never, ...items: never): never {\n throw new Error(\n \"Cannot mutate a CoList directly. Use `.$jazz.splice` instead.\",\n );\n }\n /**\n * @deprecated Use `.$jazz.set` instead.\n */\n override copyWithin(target: never, start: never, end: never): never {\n throw new Error(\n \"Cannot mutate a CoList directly. Use `.$jazz.set` instead.\",\n );\n }\n /**\n * @deprecated Use `.$jazz.set` instead.\n */\n override fill(value: never, start?: never, end?: never): never {\n throw new Error(\n \"Cannot mutate a CoList directly. Use `.$jazz.set` instead.\",\n );\n }\n /**\n * @deprecated Use `.toReversed` if you want a reversed copy, or `.$jazz.set` to mutate the CoList.\n */\n // @ts-expect-error\n override reverse(value: never): never {\n throw new Error(\n \"Cannot mutate a CoList directly. Use `.toReversed` if you want a reversed copy, or `.$jazz.set` to mutate the CoList.\",\n );\n }\n /**\n * @deprecated Use `.toSorted()` if you want a sorted copy, or `.$jazz.set` to mutate the CoList.\n */\n override sort(compareFn?: never): never {\n throw new Error(\n \"Cannot mutate a CoList directly. Use `.toSorted` if you want a sorted copy, or `.$jazz.set` to mutate the CoList.\",\n );\n }\n}\n\n/** @internal */\ntype CoListItem<L> = L extends CoList<unknown> ? L[number] : never;\n\nexport class CoListJazzApi<L extends CoList> extends CoValueJazzApi<L> {\n constructor(\n private coList: L,\n private getRaw: () => RawCoList,\n ) {\n super(coList);\n }\n\n /**\n * The ID of this `CoList`\n * @category Content\n */\n get id(): ID<L> {\n return this.raw.id;\n }\n\n /** @category Collaboration */\n get owner(): Group {\n return getCoValueOwner(this.coList);\n }\n\n set(index: number, value: CoFieldInit<CoListItem<L>>): void {\n const itemDescriptor = this.schema[ItemsSym];\n const rawValue = toRawItems([value], itemDescriptor, this.owner)[0]!;\n if (rawValue === null && !itemDescriptor.optional) {\n throw new Error(`Cannot set required reference ${index} to undefined`);\n }\n this.raw.replace(index, rawValue);\n }\n\n /**\n * Appends new elements to the end of an array, and returns the new length of the array.\n * @param items New elements to add to the array.\n *\n * @category Content\n */\n push(...items: CoFieldInit<CoListItem<L>>[]): number {\n this.raw.appendItems(\n toRawItems(items, this.schema[ItemsSym], this.owner),\n undefined,\n \"private\",\n );\n\n return this.raw.entries().length;\n }\n\n /**\n * Inserts new elements at the start of an array, and returns the new length of the array.\n * @param items Elements to insert at the start of the array.\n *\n * @category Content\n */\n unshift(...items: CoFieldInit<CoListItem<L>>[]): number {\n for (const item of toRawItems(\n items as CoFieldInit<CoListItem<L>>[],\n this.schema[ItemsSym],\n this.owner,\n )) {\n this.raw.prepend(item);\n }\n\n return this.raw.entries().length;\n }\n\n /**\n * Removes the last element from an array and returns it.\n * If the array is empty, undefined is returned and the array is not modified.\n *\n * @category Content\n */\n pop(): CoListItem<L> | undefined {\n const last = this.coList[this.coList.length - 1];\n\n this.raw.delete(this.coList.length - 1);\n\n return last;\n }\n\n /**\n * Removes the first element from an array and returns it.\n * If the array is empty, undefined is returned and the array is not modified.\n *\n * @category Content\n */\n shift(): CoListItem<L> | undefined {\n const first = this.coList[0];\n\n this.raw.delete(0);\n\n return first;\n }\n\n /**\n * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.\n * @param start The zero-based location in the array from which to start removing elements.\n * @param deleteCount The number of elements to remove.\n * @param items Elements to insert into the array in place of the deleted elements.\n * @returns An array containing the elements that were deleted.\n *\n * @category Content\n */\n splice(\n start: number,\n deleteCount: number,\n ...items: CoFieldInit<CoListItem<L>>[]\n ): CoListItem<L>[] {\n const deleted = this.coList.slice(start, start + deleteCount);\n\n for (\n let idxToDelete = start + deleteCount - 1;\n idxToDelete >= start;\n idxToDelete--\n ) {\n this.raw.delete(idxToDelete);\n }\n\n const rawItems = toRawItems(\n items as CoListItem<L>[],\n this.schema[ItemsSym],\n this.owner,\n );\n\n // If there are no items to insert, return the deleted items\n if (rawItems.length === 0) {\n return deleted;\n }\n\n // Fast path for single item insertion\n if (rawItems.length === 1) {\n const item = rawItems[0];\n if (item === undefined) return deleted;\n if (start === 0) {\n this.raw.prepend(item);\n } else {\n this.raw.append(item, Math.max(start - 1, 0));\n }\n return deleted;\n }\n\n // Handle multiple items\n if (start === 0) {\n // Iterate in reverse order without creating a new array\n for (let i = rawItems.length - 1; i >= 0; i--) {\n const item = rawItems[i];\n if (item === undefined) continue;\n this.raw.prepend(item);\n }\n } else {\n let appendAfter = Math.max(start - 1, 0);\n for (const item of rawItems) {\n if (item === undefined) continue;\n this.raw.append(item, appendAfter);\n appendAfter++;\n }\n }\n\n return deleted;\n }\n\n /**\n * Removes the elements at the specified indices from the array.\n * @param indices The indices of the elements to remove.\n * @returns The removed elements.\n *\n * @category Content\n */\n remove(...indices: number[]): CoListItem<L>[];\n /**\n * Removes the elements matching the predicate from the array.\n * @param predicate The predicate to match the elements to remove.\n * @returns The removed elements.\n *\n * @category Content\n */\n remove(\n predicate: (item: CoListItem<L>, index: number, coList: L) => boolean,\n ): CoListItem<L>[];\n remove(\n ...args: (\n | number\n | ((item: CoListItem<L>, index: number, coList: L) => boolean)\n )[]\n ): CoListItem<L>[] {\n const predicate = args[0] instanceof Function ? args[0] : undefined;\n let indices: number[] = [];\n if (predicate) {\n for (let i = 0; i < this.coList.length; i++) {\n if (predicate(this.coList[i], i, this.coList)) {\n indices.push(i);\n }\n }\n } else {\n indices = (args as number[])\n .filter((index) => index >= 0 && index < this.coList.length)\n .sort((a, b) => a - b);\n }\n const deletedItems = indices.map((index) => this.coList[index]);\n for (const index of indices.reverse()) {\n this.raw.delete(index);\n }\n return deletedItems;\n }\n\n /**\n * Retains only the elements matching the predicate from the array.\n * @param predicate The predicate to match the elements to retain.\n * @returns The removed elements.\n *\n * @category Content\n */\n retain(\n predicate: (item: CoListItem<L>, index: number, coList: L) => boolean,\n ): CoListItem<L>[] {\n return this.remove((...args) => !predicate(...args));\n }\n\n /**\n * Modify the `CoList` to match another list, where the changes are managed internally.\n *\n * Changes are detected using `Object.is` for non-collaborative values and `$jazz.id` for collaborative values.\n *\n * @param result - The resolved list of items. For collaborative values, both CoValues and JSON values are supported.\n * @returns The modified CoList.\n *\n * @category Content\n */\n applyDiff(result: CoFieldInit<CoListItem<L>>[]): L {\n const current = this.raw.asArray() as CoFieldInit<CoListItem<L>>[];\n const comparator = isRefEncoded(this.schema[ItemsSym])\n ? (aIdx: number, bIdx: number) => {\n const oldCoValueId = (current[aIdx] as CoValue)?.$jazz?.id;\n const newCoValueId = (result[bIdx] as CoValue)?.$jazz?.id;\n const isSame =\n !!oldCoValueId && !!newCoValueId && oldCoValueId === newCoValueId;\n return isSame;\n }\n : undefined;\n\n const patches = [...calcPatch(current, result, comparator)];\n for (const [from, to, insert] of patches.reverse()) {\n this.splice(from, to - from, ...insert);\n }\n return this.coList;\n }\n\n /**\n * Given an already loaded `CoList`, ensure that items are loaded to the specified depth.\n *\n * Works like `CoList.load()`, but you don't need to pass the ID or the account to load as again.\n *\n * @category Subscription & Loading\n */\n ensureLoaded<L extends CoList, const R extends RefsToResolve<L>>(\n this: CoListJazzApi<L>,\n options: { resolve: RefsToResolveStrict<L, R> },\n ): Promise<Resolved<L, R>> {\n return ensureCoValueLoaded(this.coList, options);\n }\n\n /**\n * Given an already loaded `CoList`, subscribe to updates to the `CoList` and ensure that items are loaded to the specified depth.\n *\n * Works like `CoList.subscribe()`, but you don't need to pass the ID or the account to load as again.\n *\n * Returns an unsubscribe function that you should call when you no longer need updates.\n *\n * @category Subscription & Loading\n **/\n subscribe<L extends CoList, const R extends RefsToResolve<L> = true>(\n this: CoListJazzApi<L>,\n listener: (value: Resolved<L, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<L extends CoList, const R extends RefsToResolve<L> = true>(\n this: CoListJazzApi<L>,\n options: { resolve?: RefsToResolveStrict<L, R> },\n listener: (value: Resolved<L, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<L extends CoList, const R extends RefsToResolve<L>>(\n this: CoListJazzApi<L>,\n ...args: SubscribeRestArgs<L, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToExistingCoValue(this.coList, options, listener);\n }\n\n /**\n * Wait for the `CoList` to be uploaded to the other peers.\n *\n * @category Subscription & Loading\n */\n async waitForSync(options?: { timeout?: number }): Promise<void> {\n await this.raw.core.waitForSync(options);\n }\n\n /**\n * Get the descriptor for the items in the `CoList`\n * @internal\n */\n getItemsDescriptor(): Schema | undefined {\n return this.schema[ItemsSym];\n }\n\n /**\n * If a `CoList`'s items are a `coField.ref(...)`, you can use `coList.$jazz.refs[i]` to access\n * the `Ref` instead of the potentially loaded/null value.\n *\n * This allows you to always get the ID or load the value manually.\n *\n * @example\n * ```ts\n * animals.$jazz.refs[0].id; // => ID<Animal>\n * animals.$jazz.refs[0].value;\n * // => Animal | null\n * const animal = await animals.$jazz.refs[0].load();\n * ```\n *\n * @category Content\n **/\n get refs(): {\n [idx: number]: Exclude<CoListItem<L>, null> extends CoValue\n ? Ref<Exclude<CoListItem<L>, null>>\n : never;\n } & {\n length: number;\n [Symbol.iterator](): IterableIterator<\n Exclude<CoListItem<L>, null> extends CoValue\n ? Ref<Exclude<CoListItem<L>, null>>\n : never\n >;\n } {\n return makeRefs<number>(\n this.coList,\n (idx) => this.raw.get(idx) as unknown as ID<CoValue>,\n () => Array.from({ length: this.raw.entries().length }, (_, idx) => idx),\n this.loadedAs,\n (_idx) => this.schema[ItemsSym] as RefEncoded<CoValue>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) as any;\n }\n\n /**\n * Get the edits made to the CoList.\n *\n * @category Collaboration\n */\n getEdits(): {\n [idx: number]: {\n value?: CoListItem<L>;\n ref?: CoListItem<L> extends CoValue ? Ref<CoListItem<L>> : never;\n by: Account | null;\n madeAt: Date;\n };\n } {\n throw new Error(\"Not implemented\");\n }\n\n /** @internal */\n get raw(): RawCoList {\n return this.getRaw();\n }\n\n /** @internal */\n get schema(): {\n [ItemsSym]: SchemaFor<CoListItem<L>> | any;\n } {\n return (this.coList.constructor as typeof CoList)._schema;\n }\n}\n\n/**\n * Convert an array of items to a raw array of items.\n * @param items - The array of items to convert.\n * @param itemDescriptor - The descriptor of the items.\n * @param owner - The owner of the CoList.\n * @returns The raw array of items.\n */\nfunction toRawItems<Item>(\n items: Item[],\n itemDescriptor: Schema,\n owner: Group,\n): JsonValue[] {\n let rawItems: JsonValue[] = [];\n if (itemDescriptor === \"json\") {\n rawItems = items as JsonValue[];\n } else if (\"encoded\" in itemDescriptor) {\n rawItems = items?.map((e) => itemDescriptor.encoded.encode(e));\n } else if (isRefEncoded(itemDescriptor)) {\n rawItems = items?.map((value) => {\n if (value == null) {\n return null;\n }\n let refId = (value as unknown as CoValue).$jazz?.id;\n if (!refId) {\n const coValue = instantiateRefEncodedWithInit(\n itemDescriptor,\n value,\n owner,\n );\n refId = coValue.$jazz.id;\n }\n return refId;\n });\n } else {\n throw new Error(\"Invalid element descriptor\");\n }\n return rawItems;\n}\n\nconst CoListProxyHandler: ProxyHandler<CoList> = {\n get(target, key, receiver) {\n if (typeof key === \"string\" && !isNaN(+key)) {\n const itemDescriptor = target.$jazz.schema[ItemsSym] as Schema;\n const rawValue = target.$jazz.raw.get(Number(key));\n if (itemDescriptor === \"json\") {\n return rawValue;\n } else if (\"encoded\" in itemDescriptor) {\n return rawValue === undefined\n ? undefined\n : itemDescriptor.encoded.decode(rawValue);\n } else if (isRefEncoded(itemDescriptor)) {\n return rawValue === undefined || rawValue === null\n ? undefined\n : accessChildByKey(target, rawValue as string, key);\n }\n } else if (key === \"length\") {\n return target.$jazz.raw.entries().length;\n } else {\n return Reflect.get(target, key, receiver);\n }\n },\n set(target, key, value, receiver) {\n if (key === ItemsSym && typeof value === \"object\" && SchemaInit in value) {\n (target.constructor as typeof CoList)._schema ||= {};\n (target.constructor as typeof CoList)._schema[ItemsSym] =\n value[SchemaInit];\n return true;\n }\n if (typeof key === \"string\" && !isNaN(+key)) {\n throw Error(\"Cannot update a CoList directly. Use `$jazz.set` instead.\");\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n },\n defineProperty(target, key, descriptor) {\n if (\n descriptor.value &&\n key === ItemsSym &&\n typeof descriptor.value === \"object\" &&\n SchemaInit in descriptor.value\n ) {\n (target.constructor as typeof CoList)._schema ||= {};\n (target.constructor as typeof CoList)._schema[ItemsSym] =\n descriptor.value[SchemaInit];\n return true;\n } else {\n return Reflect.defineProperty(target, key, descriptor);\n }\n },\n has(target, key) {\n if (typeof key === \"string\" && !isNaN(+key)) {\n return Number(key) < target.$jazz.raw.entries().length;\n } else {\n return Reflect.has(target, key);\n }\n },\n ownKeys(target) {\n const keys = Reflect.ownKeys(target);\n // Add numeric indices for all entries in the list\n const indexKeys = target.$jazz.raw.entries().map((_entry, i) => String(i));\n keys.push(...indexKeys);\n return keys;\n },\n getOwnPropertyDescriptor(target, key) {\n if (key === TypeSym) {\n // Make TypeSym non-enumerable so it doesn't show up in Object.keys()\n return {\n enumerable: false,\n configurable: true,\n writable: false,\n value: target[TypeSym],\n };\n } else if (key in target) {\n return Reflect.getOwnPropertyDescriptor(target, key);\n } else if (typeof key === \"string\" && !isNaN(+key)) {\n const index = Number(key);\n if (index >= 0 && index < target.$jazz.raw.entries().length) {\n return {\n enumerable: true,\n configurable: true,\n writable: true,\n };\n }\n } else if (key === \"length\") {\n return {\n enumerable: false,\n configurable: false,\n writable: false,\n };\n }\n },\n};\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport type {\n AgentID,\n BinaryStreamInfo,\n CojsonInternalTypes,\n JsonValue,\n RawAccountID,\n RawBinaryCoStream,\n RawCoStream,\n SessionID,\n} from \"cojson\";\nimport { cojsonInternals } from \"cojson\";\nimport {\n AnonymousJazzAgent,\n CoFieldInit,\n CoValue,\n CoValueClass,\n getCoValueOwner,\n Group,\n ID,\n RefsToResolve,\n RefsToResolveStrict,\n Resolved,\n Schema,\n SchemaFor,\n SubscribeListenerOptions,\n SubscribeRestArgs,\n TypeSym,\n} from \"../internal.js\";\nimport {\n Account,\n CoValueBase,\n CoValueJazzApi,\n ItemsSym,\n Ref,\n SchemaInit,\n accessChildById,\n coField,\n ensureCoValueLoaded,\n inspect,\n instantiateRefEncodedWithInit,\n isRefEncoded,\n loadCoValueWithoutMe,\n parseCoValueCreateOptions,\n parseSubscribeRestArgs,\n subscribeToCoValueWithoutMe,\n subscribeToExistingCoValue,\n} from \"../internal.js\";\n\n/** @deprecated Use CoFeedEntry instead */\nexport type CoStreamEntry<Item> = CoFeedEntry<Item>;\n\nexport type CoFeedEntry<Item> = SingleCoFeedEntry<Item> & {\n all: IterableIterator<SingleCoFeedEntry<Item>>;\n};\n\n/** @deprecated Use SingleCoFeedEntry instead */\nexport type SingleCoStreamEntry<Item> = SingleCoFeedEntry<Item>;\n\nexport type SingleCoFeedEntry<Item> = {\n value: NonNullable<Item> extends CoValue ? NonNullable<Item> | null : Item;\n ref: NonNullable<Item> extends CoValue ? Ref<NonNullable<Item>> : never;\n by: Account | null;\n madeAt: Date;\n tx: CojsonInternalTypes.TransactionID;\n};\n\n/** @deprecated Use CoFeed instead */\nexport { CoFeed as CoStream };\n\n/**\n * CoFeeds are collaborative logs of data.\n *\n * @categoryDescription Content\n * They are similar to `CoList`s, but with a few key differences:\n * - They are append-only\n * - They consist of several internal append-only logs, one per account session (tab, device, app instance, etc.)\n * - They expose those as a per-account aggregated view (default) or a precise per-session view\n *\n * ```ts\n * favDog.push(\"Poodle\");\n * favDog.push(\"Schnowzer\");\n * ```\n *\n * @category CoValues\n */\nexport class CoFeed<out Item = any> extends CoValueBase implements CoValue {\n declare $jazz: CoFeedJazzApi<this>;\n\n /**\n * Declare a `CoFeed` by subclassing `CoFeed.Of(...)` and passing the item schema using a `co` primitive or a `coField.ref`.\n *\n * @example\n * ```ts\n * class ColorFeed extends CoFeed.Of(coField.string) {}\n * class AnimalFeed extends CoFeed.Of(coField.ref(Animal)) {}\n * ```\n *\n * @category Declaration\n */\n static Of<Item>(item: Item): typeof CoFeed<Item> {\n const cls = class CoFeedOf extends CoFeed<Item> {\n [coField.items] = item;\n };\n\n cls._schema ||= {};\n cls._schema[ItemsSym] = (item as any)[SchemaInit];\n\n return cls;\n }\n\n /** @category Type Helpers */\n declare [TypeSym]: \"CoStream\";\n static {\n this.prototype[TypeSym] = \"CoStream\";\n }\n\n /** @internal This is only a marker type and doesn't exist at runtime */\n [ItemsSym]!: Item;\n /** @internal */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static _schema: any;\n\n /**\n * The current account's view of this `CoFeed`\n * @category Content\n */\n get byMe(): CoFeedEntry<Item> | undefined {\n if (this.$jazz.loadedAs[TypeSym] === \"Account\") {\n return this.perAccount[this.$jazz.loadedAs.$jazz.id];\n } else {\n return undefined;\n }\n }\n\n /**\n * The per-account view of this `CoFeed`\n *\n * @example\n * ```ts\n * // Access entries directly by account ID\n * const aliceEntries = feed[aliceAccount.id];\n * console.log(aliceEntries.value); // Latest value from Alice\n *\n * // Iterate through all accounts' entries\n * for (const [accountId, entries] of Object.entries(feed)) {\n * console.log(`Latest entry from ${accountId}:`, entries.value);\n *\n * // Access all entries from this account\n * for (const entry of entries.all) {\n * console.log(`Entry made at ${entry.madeAt}:`, entry.value);\n * }\n * }\n * ```\n *\n * @category Content\n */\n get perAccount(): {\n [key: ID<Account>]: CoFeedEntry<Item>;\n } {\n return new Proxy({}, CoStreamPerAccountProxyHandler(this)) as any;\n }\n\n /**\n * The per-session view of this `CoFeed`\n * @category Content\n */\n get perSession(): {\n [key: SessionID]: CoFeedEntry<Item>;\n } {\n return new Proxy(\n {},\n CoStreamPerSessionProxyHandler(this, this) as any,\n ) as any;\n }\n\n /**\n * The current session's view of this `CoFeed`\n *\n * This is a shortcut for `this.perSession` where the session ID is the current session ID.\n *\n * @category Content\n */\n get inCurrentSession(): CoFeedEntry<Item> | undefined {\n if (this.$jazz.loadedAs[TypeSym] === \"Account\") {\n return this.perSession[this.$jazz.loadedAs.$jazz.sessionID!];\n } else {\n return undefined;\n }\n }\n\n /** @internal */\n constructor(options: { fromRaw: RawCoStream }) {\n super();\n\n Object.defineProperties(this, {\n $jazz: {\n value: new CoFeedJazzApi(this, options.fromRaw),\n enumerable: false,\n },\n });\n\n return this;\n }\n\n /**\n * Create a new `CoFeed`\n * @category Creation\n * @deprecated Use `co.feed(...).create` instead.\n */\n static create<S extends CoFeed>(\n this: CoValueClass<S>,\n init: S extends CoFeed<infer Item> ? Item[] : never,\n options?: { owner: Account | Group } | Account | Group,\n ) {\n const { owner } = parseCoValueCreateOptions(options);\n const raw = owner.$jazz.raw.createStream();\n const instance = new this({ fromRaw: raw });\n\n if (init) {\n instance.$jazz.push(...init);\n }\n return instance;\n }\n\n /**\n * Get a JSON representation of the `CoFeed`\n * @category\n */\n toJSON(): {\n $jazz: { id: string };\n [key: string]: unknown;\n in: { [key: string]: unknown };\n } {\n const itemDescriptor = this.$jazz.schema[ItemsSym] as Schema;\n const mapper =\n itemDescriptor === \"json\"\n ? (v: unknown) => v\n : \"encoded\" in itemDescriptor\n ? itemDescriptor.encoded.encode\n : (v: unknown) => v && (v as CoValue).$jazz.id;\n\n return {\n $jazz: { id: this.$jazz.id },\n ...Object.fromEntries(\n Object.entries(this).map(([account, entry]) => [\n account,\n mapper(entry.value),\n ]),\n ),\n in: Object.fromEntries(\n Object.entries(this.perSession).map(([session, entry]) => [\n session,\n mapper(entry.value),\n ]),\n ),\n };\n }\n\n /** @internal */\n [inspect](): {\n $jazz: { id: string };\n [key: string]: unknown;\n in: { [key: string]: unknown };\n } {\n return this.toJSON();\n }\n\n /** @internal */\n static schema<V extends CoFeed>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: { new (...args: any): V } & typeof CoFeed,\n def: { [ItemsSym]: V[\"$jazz\"][\"schema\"][ItemsSym] },\n ) {\n this._schema ||= {};\n Object.assign(this._schema, def);\n }\n\n /**\n * Load a `CoFeed`\n * @category Subscription & Loading\n * @deprecated Use `co.feed(...).load` instead.\n */\n static load<F extends CoFeed, const R extends RefsToResolve<F> = true>(\n this: CoValueClass<F>,\n id: ID<F>,\n options: {\n resolve?: RefsToResolveStrict<F, R>;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Resolved<F, R> | null> {\n return loadCoValueWithoutMe(this, id, options);\n }\n\n /**\n * Subscribe to a `CoFeed`, when you have an ID but don't have a `CoFeed` instance yet\n * @category Subscription & Loading\n * @deprecated Use `co.feed(...).subscribe` instead.\n */\n static subscribe<F extends CoFeed, const R extends RefsToResolve<F> = true>(\n this: CoValueClass<F>,\n id: ID<F>,\n listener: (value: Resolved<F, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<F extends CoFeed, const R extends RefsToResolve<F> = true>(\n this: CoValueClass<F>,\n id: ID<F>,\n options: SubscribeListenerOptions<F, R>,\n listener: (value: Resolved<F, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<F extends CoFeed, const R extends RefsToResolve<F>>(\n this: CoValueClass<F>,\n id: ID<F>,\n ...args: SubscribeRestArgs<F, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToCoValueWithoutMe<F, R>(this, id, options, listener);\n }\n}\n\n/** @internal */\ntype CoFeedItem<L> = L extends CoFeed<infer Item> ? Item : never;\n\nexport class CoFeedJazzApi<F extends CoFeed> extends CoValueJazzApi<F> {\n constructor(\n private coFeed: F,\n public raw: RawCoStream,\n ) {\n super(coFeed);\n }\n\n /**\n * The ID of this `CoFeed`\n * @category Content\n */\n get id(): ID<F> {\n return this.raw.id;\n }\n\n get owner(): Group {\n return getCoValueOwner(this.coFeed);\n }\n\n /**\n * Push items to this `CoFeed`\n *\n * Items are appended to the current session's log. Each session (tab, device, app instance)\n * maintains its own append-only log, which is then aggregated into the per-account view.\n *\n * @example\n * ```ts\n * // Adds items to current session's log\n * feed.$jazz.push(\"item1\", \"item2\");\n *\n * // View items from current session\n * console.log(feed.inCurrentSession);\n *\n * // View aggregated items from all sessions for current account\n * console.log(feed.byMe);\n * ```\n *\n * @category Content\n */\n push(...items: CoFieldInit<CoFeedItem<F>>[]): void {\n for (const item of items) {\n this.pushItem(item);\n }\n }\n\n private pushItem(item: CoFieldInit<CoFeedItem<F>>) {\n const itemDescriptor = this.schema[ItemsSym] as Schema;\n\n if (itemDescriptor === \"json\") {\n this.raw.push(item as JsonValue);\n } else if (\"encoded\" in itemDescriptor) {\n this.raw.push(itemDescriptor.encoded.encode(item));\n } else if (isRefEncoded(itemDescriptor)) {\n let refId = (item as unknown as CoValue).$jazz?.id;\n if (!refId) {\n const coValue = instantiateRefEncodedWithInit(\n itemDescriptor,\n item,\n this.owner,\n );\n refId = coValue.$jazz.id;\n }\n this.raw.push(refId);\n }\n }\n\n /**\n * Ensure a `CoFeed` is loaded to the specified depth\n *\n * @returns A new instance of the same CoFeed that's loaded to the specified depth\n * @category Subscription & Loading\n */\n ensureLoaded<F extends CoFeed, const R extends RefsToResolve<F>>(\n this: CoFeedJazzApi<F>,\n options?: { resolve?: RefsToResolveStrict<F, R> },\n ): Promise<Resolved<F, R>> {\n return ensureCoValueLoaded(this.coFeed, options);\n }\n\n /**\n * An instance method to subscribe to an existing `CoFeed`\n *\n * No need to provide an ID or Account since they're already part of the instance.\n * @category Subscription & Loading\n */\n subscribe<F extends CoFeed, const R extends RefsToResolve<F>>(\n this: CoFeedJazzApi<F>,\n listener: (value: Resolved<F, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<F extends CoFeed, const R extends RefsToResolve<F>>(\n this: CoFeedJazzApi<F>,\n options: { resolve?: RefsToResolveStrict<F, R> },\n listener: (value: Resolved<F, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<F extends CoFeed, const R extends RefsToResolve<F>>(\n this: CoFeedJazzApi<F>,\n ...args: SubscribeRestArgs<F, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToExistingCoValue(this.coFeed, options, listener);\n }\n\n /**\n * Wait for the `CoFeed` to be uploaded to the other peers.\n *\n * @category Subscription & Loading\n */\n waitForSync(options?: { timeout?: number }) {\n return this.raw.core.waitForSync(options);\n }\n\n /**\n * Get the descriptor for the items in the `CoFeed`\n * @internal\n */\n getItemsDescriptor(): Schema | undefined {\n return this.schema[ItemsSym];\n }\n\n /** @internal */\n get schema(): {\n [ItemsSym]: SchemaFor<CoFeedItem<F>> | any;\n } {\n return (this.coFeed.constructor as typeof CoFeed)._schema;\n }\n}\n\n/**\n * Converts a raw stream entry into a formatted CoFeed entry with proper typing and accessors.\n * @internal\n */\nfunction entryFromRawEntry<Item>(\n accessFrom: CoValue,\n rawEntry: {\n by: RawAccountID | AgentID;\n tx: CojsonInternalTypes.TransactionID;\n at: Date;\n value: JsonValue;\n },\n loadedAs: Account | AnonymousJazzAgent,\n accountID: ID<Account> | undefined,\n itemField: Schema,\n): Omit<CoFeedEntry<Item>, \"all\"> {\n return {\n get value(): NonNullable<Item> extends CoValue\n ? (CoValue & Item) | null\n : Item {\n if (itemField === \"json\") {\n return rawEntry.value as NonNullable<Item> extends CoValue\n ? (CoValue & Item) | null\n : Item;\n } else if (\"encoded\" in itemField) {\n return itemField.encoded.decode(rawEntry.value);\n } else if (isRefEncoded(itemField)) {\n return accessChildById(\n accessFrom,\n rawEntry.value as string,\n itemField,\n ) as NonNullable<Item> extends CoValue ? (CoValue & Item) | null : Item;\n } else {\n throw new Error(\"Invalid item field schema\");\n }\n },\n get ref(): NonNullable<Item> extends CoValue\n ? Ref<NonNullable<Item>>\n : never {\n if (itemField !== \"json\" && isRefEncoded(itemField)) {\n const rawId = rawEntry.value;\n return new Ref(\n rawId as unknown as ID<CoValue>,\n loadedAs,\n itemField,\n accessFrom,\n ) as NonNullable<Item> extends CoValue ? Ref<NonNullable<Item>> : never;\n } else {\n return undefined as never;\n }\n },\n get by() {\n return (\n accountID &&\n accessChildById(accessFrom, accountID, {\n ref: Account,\n optional: false,\n })\n );\n },\n madeAt: rawEntry.at,\n tx: rawEntry.tx,\n };\n}\n\n/**\n * The proxy handler for `CoFeed` instances\n * @internal\n */\nexport const CoStreamPerAccountProxyHandler = (\n innerTarget: CoFeed,\n): ProxyHandler<{}> => ({\n get(_target, key, receiver) {\n if (typeof key === \"string\" && key.startsWith(\"co_\")) {\n const rawEntry = innerTarget.$jazz.raw.lastItemBy(key as RawAccountID);\n\n if (!rawEntry) return;\n const entry = entryFromRawEntry(\n receiver,\n rawEntry,\n innerTarget.$jazz.loadedAs,\n key as unknown as ID<Account>,\n innerTarget.$jazz.schema[ItemsSym],\n );\n\n Object.defineProperty(entry, \"all\", {\n get: () => {\n const allRawEntries = innerTarget.$jazz.raw.itemsBy(\n key as RawAccountID,\n );\n return (function* () {\n while (true) {\n const rawEntry = allRawEntries.next();\n if (rawEntry.done) return;\n yield entryFromRawEntry(\n receiver,\n rawEntry.value,\n innerTarget.$jazz.loadedAs,\n key as unknown as ID<Account>,\n innerTarget.$jazz.schema[ItemsSym],\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n })() satisfies IterableIterator<SingleCoFeedEntry<any>>;\n },\n });\n\n return entry;\n } else {\n return Reflect.get(innerTarget, key, receiver);\n }\n },\n ownKeys(_target) {\n return Array.from(innerTarget.$jazz.raw.accounts());\n },\n getOwnPropertyDescriptor(_target, key) {\n if (typeof key === \"string\" && key.startsWith(\"co_\")) {\n return {\n configurable: true,\n enumerable: true,\n writable: false,\n };\n } else {\n return Reflect.getOwnPropertyDescriptor(innerTarget, key);\n }\n },\n});\n\n/**\n * The proxy handler for the per-session view of a `CoFeed`\n * @internal\n */\nconst CoStreamPerSessionProxyHandler = (\n innerTarget: CoFeed,\n accessFrom: CoFeed,\n): ProxyHandler<Record<string, never>> => ({\n get(_target, key, receiver) {\n if (typeof key === \"string\" && key.includes(\"session\")) {\n const sessionID = key as SessionID;\n const rawEntry = innerTarget.$jazz.raw.lastItemIn(sessionID);\n\n if (!rawEntry) return;\n const by = cojsonInternals.accountOrAgentIDfromSessionID(sessionID);\n\n const entry = entryFromRawEntry(\n accessFrom,\n rawEntry,\n innerTarget.$jazz.loadedAs,\n cojsonInternals.isAccountID(by)\n ? (by as unknown as ID<Account>)\n : undefined,\n innerTarget.$jazz.schema[ItemsSym],\n );\n\n Object.defineProperty(entry, \"all\", {\n get: () => {\n const allRawEntries = innerTarget.$jazz.raw.itemsIn(sessionID);\n return (function* () {\n while (true) {\n const rawEntry = allRawEntries.next();\n if (rawEntry.done) return;\n yield entryFromRawEntry(\n accessFrom,\n rawEntry.value,\n innerTarget.$jazz.loadedAs,\n cojsonInternals.isAccountID(by)\n ? (by as unknown as ID<Account>)\n : undefined,\n innerTarget.$jazz.schema[ItemsSym],\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n })() satisfies IterableIterator<SingleCoFeedEntry<any>>;\n },\n });\n\n return entry;\n } else {\n return Reflect.get(innerTarget, key, receiver);\n }\n },\n ownKeys() {\n return innerTarget.$jazz.raw.sessions();\n },\n getOwnPropertyDescriptor(target, key) {\n if (typeof key === \"string\" && key.startsWith(\"co_\")) {\n return {\n configurable: true,\n enumerable: true,\n writable: false,\n };\n } else {\n return Reflect.getOwnPropertyDescriptor(target, key);\n }\n },\n});\n\n/** @deprecated Use FileStream instead */\nexport { FileStream as BinaryCoStream };\n\n/**\n * FileStreams are `CoFeed`s that contain binary data, collaborative versions of `Blob`s.\n *\n * @categoryDescription Declaration\n * `FileStream` can be referenced in schemas.\n *\n * ```ts\n * import { coField, FileStream } from \"jazz-tools\";\n *\n * class MyCoMap extends CoMap {\n * file = coField.ref(FileStream);\n * }\n * ```\n *\n * @category CoValues\n */\nexport class FileStream extends CoValueBase implements CoValue {\n declare $jazz: FileStreamJazzApi<this>;\n\n /** @category Type Helpers */\n declare [TypeSym]: \"BinaryCoStream\";\n\n constructor(\n options:\n | {\n owner: Account | Group;\n }\n | {\n fromRaw: RawBinaryCoStream;\n },\n ) {\n super();\n\n let raw: RawBinaryCoStream;\n\n if (\"fromRaw\" in options) {\n raw = options.fromRaw;\n } else {\n const rawOwner = options.owner.$jazz.raw;\n raw = rawOwner.createBinaryStream();\n }\n\n Object.defineProperties(this, {\n [TypeSym]: { value: \"BinaryCoStream\", enumerable: false },\n $jazz: {\n value: new FileStreamJazzApi(this, raw),\n enumerable: false,\n },\n });\n }\n\n /**\n * Create a new empty `FileStream` instance.\n *\n * @param options - Configuration options for the new FileStream\n * @param options.owner - The Account or Group that will own this FileStream and control access rights\n *\n * @example\n * ```typescript\n * // Create owned by an account\n * const stream = FileStream.create({ owner: myAccount });\n *\n * // Create owned by a group\n * const stream = FileStream.create({ owner: teamGroup });\n *\n * // Create with implicit owner\n * const stream = FileStream.create(myAccount);\n * ```\n *\n * @remarks\n * For uploading an existing file or blob, use {@link FileStream.createFromBlob} instead.\n *\n * @category Creation\n * @deprecated Use `co.fileStream(...).create` instead.\n */\n static create<S extends FileStream>(\n this: CoValueClass<S>,\n options?: { owner?: Account | Group } | Account | Group,\n ) {\n return new this(parseCoValueCreateOptions(options));\n }\n\n getMetadata(): BinaryStreamInfo | undefined {\n return this.$jazz.raw.getBinaryStreamInfo();\n }\n\n getChunks(options?: {\n allowUnfinished?: boolean;\n }):\n | (BinaryStreamInfo & { chunks: Uint8Array[]; finished: boolean })\n | undefined {\n return this.$jazz.raw.getBinaryChunks(options?.allowUnfinished);\n }\n\n isBinaryStreamEnded(): boolean {\n return this.$jazz.raw.isBinaryStreamEnded();\n }\n\n start(options: BinaryStreamInfo): void {\n this.$jazz.raw.startBinaryStream(options);\n }\n\n push(data: Uint8Array): void {\n this.$jazz.raw.pushBinaryStreamChunk(data);\n }\n\n end(): void {\n this.$jazz.raw.endBinaryStream();\n }\n\n toBlob(options?: { allowUnfinished?: boolean }): Blob | undefined {\n const chunks = this.getChunks({\n allowUnfinished: options?.allowUnfinished,\n });\n\n if (!chunks) {\n return undefined;\n }\n\n // @ts-ignore\n return new Blob(chunks.chunks, { type: chunks.mimeType });\n }\n\n /**\n * Load a `FileStream` as a `Blob`\n *\n * @category Content\n * @deprecated Use `co.fileStream(...).loadAsBlob` instead.\n */\n static async loadAsBlob(\n id: ID<FileStream>,\n options?: {\n allowUnfinished?: boolean;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Blob | undefined> {\n let stream = await this.load(id, options);\n\n return stream?.toBlob({\n allowUnfinished: options?.allowUnfinished,\n });\n }\n\n static async loadAsBase64(\n id: ID<FileStream>,\n options?: {\n allowUnfinished?: boolean;\n loadAs?: Account | AnonymousJazzAgent;\n dataURL?: boolean;\n },\n ): Promise<string | undefined> {\n const stream = await this.load(id, options);\n\n return stream?.asBase64(options);\n }\n\n asBase64(options?: {\n allowUnfinished?: boolean;\n dataURL?: boolean;\n }): string | undefined {\n const chunks = this.getChunks(options);\n\n if (!chunks) return undefined;\n\n const output = [];\n\n for (const chunk of chunks.chunks) {\n for (const byte of chunk) {\n output.push(String.fromCharCode(byte));\n }\n }\n\n const base64 = btoa(output.join(\"\"));\n\n if (options?.dataURL) {\n return `data:${chunks.mimeType};base64,${base64}`;\n }\n\n return base64;\n }\n\n /**\n * Create a `FileStream` from a `Blob` or `File`\n *\n * @example\n * ```ts\n * import { coField, FileStream } from \"jazz-tools\";\n *\n * const fileStream = await FileStream.createFromBlob(file, {owner: group})\n * ```\n * @category Content\n * @deprecated Use `co.fileStream(...).createFromBlob` instead.\n */\n static async createFromBlob(\n blob: Blob | File,\n options?:\n | {\n owner?: Account | Group;\n onProgress?: (progress: number) => void;\n }\n | Account\n | Group,\n ): Promise<FileStream> {\n const arrayBuffer = await blob.arrayBuffer();\n return this.createFromArrayBuffer(\n arrayBuffer,\n blob.type,\n blob instanceof File ? blob.name : undefined,\n options,\n );\n }\n\n /**\n * Create a `FileStream` from a `Blob` or `File`\n *\n * @example\n * ```ts\n * import { coField, FileStream } from \"jazz-tools\";\n *\n * const fileStream = await FileStream.createFromBlob(file, {owner: group})\n * ```\n * @category Content\n * @deprecated Use `co.fileStream(...).createFromArrayBuffer` instead.\n */\n static async createFromArrayBuffer(\n arrayBuffer: ArrayBuffer,\n mimeType: string,\n fileName: string | undefined,\n options?:\n | {\n owner?: Account | Group;\n onProgress?: (progress: number) => void;\n }\n | Account\n | Group,\n ): Promise<FileStream> {\n const stream = this.create(options);\n const onProgress =\n options && \"onProgress\" in options ? options.onProgress : undefined;\n\n const start = Date.now();\n\n const data = new Uint8Array(arrayBuffer);\n stream.start({\n mimeType,\n totalSizeBytes: arrayBuffer.byteLength,\n fileName,\n });\n const chunkSize =\n cojsonInternals.TRANSACTION_CONFIG.MAX_RECOMMENDED_TX_SIZE;\n\n let lastProgressUpdate = Date.now();\n\n for (let idx = 0; idx < data.length; idx += chunkSize) {\n stream.push(data.slice(idx, idx + chunkSize));\n\n if (Date.now() - lastProgressUpdate > 100) {\n onProgress?.(idx / data.length);\n lastProgressUpdate = Date.now();\n }\n\n await new Promise((resolve) => setTimeout(resolve, 0));\n }\n stream.end();\n const end = Date.now();\n\n console.debug(\n \"Finished creating binary stream in\",\n (end - start) / 1000,\n \"s - Throughput in MB/s\",\n (1000 * (arrayBuffer.byteLength / (end - start))) / (1024 * 1024),\n );\n onProgress?.(1);\n\n return stream;\n }\n\n /**\n * Get a JSON representation of the `FileStream`\n * @category Content\n */\n toJSON(): {\n $jazz: { id: string };\n mimeType?: string;\n totalSizeBytes?: number;\n fileName?: string;\n chunks?: Uint8Array[];\n finished?: boolean;\n } {\n return {\n $jazz: { id: this.$jazz.id },\n ...this.getChunks(),\n };\n }\n\n /** @internal */\n [inspect]() {\n return this.toJSON();\n }\n\n /**\n * Load a `FileStream`\n * @category Subscription & Loading\n * @deprecated Use `co.fileStream(...).load` instead.\n */\n static async load<C extends FileStream>(\n this: CoValueClass<C>,\n id: ID<C>,\n options?: {\n loadAs?: Account | AnonymousJazzAgent;\n allowUnfinished?: boolean;\n },\n ): Promise<FileStream | null> {\n const stream = await loadCoValueWithoutMe(this, id, options);\n\n /**\n * If the user hasn't requested an incomplete blob and the\n * stream isn't complete wait for the stream download before progressing\n */\n if (!options?.allowUnfinished && !stream?.isBinaryStreamEnded()) {\n return new Promise<FileStream>((resolve) => {\n subscribeToCoValueWithoutMe(\n this,\n id,\n options || {},\n (value, unsubscribe) => {\n if (value.isBinaryStreamEnded()) {\n unsubscribe();\n resolve(value);\n }\n },\n );\n });\n }\n\n return stream;\n }\n\n /**\n * Subscribe to a `FileStream`, when you have an ID but don't have a `FileStream` instance yet\n * @category Subscription & Loading\n * @deprecated Use `co.fileStream(...).subscribe` instead.\n */\n static subscribe<F extends FileStream, const R extends RefsToResolve<F>>(\n this: CoValueClass<F>,\n id: ID<F>,\n listener: (value: Resolved<F, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<F extends FileStream, const R extends RefsToResolve<F>>(\n this: CoValueClass<F>,\n id: ID<F>,\n options: SubscribeListenerOptions<F, R>,\n listener: (value: Resolved<F, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<F extends FileStream, const R extends RefsToResolve<F>>(\n this: CoValueClass<F>,\n id: ID<F>,\n ...args: SubscribeRestArgs<F, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToCoValueWithoutMe<F, R>(this, id, options, listener);\n }\n}\n\nexport class FileStreamJazzApi<F extends FileStream> extends CoValueJazzApi<F> {\n constructor(\n private fileStream: F,\n public raw: RawBinaryCoStream,\n ) {\n super(fileStream);\n }\n\n /**\n * The ID of this `FileStream`\n * @category Content\n */\n get id(): ID<F> {\n return this.raw.id;\n }\n\n get owner(): Group {\n return getCoValueOwner(this.fileStream);\n }\n\n /**\n * An instance method to subscribe to an existing `FileStream`\n * @category Subscription & Loading\n */\n subscribe<B extends FileStream>(\n this: FileStreamJazzApi<B>,\n listener: (value: Resolved<B, true>) => void,\n ): () => void {\n return subscribeToExistingCoValue(this.fileStream, {}, listener);\n }\n\n /**\n * Wait for the `FileStream` to be uploaded to the other peers.\n *\n * @category Subscription & Loading\n */\n waitForSync(options?: { timeout?: number }) {\n return this.raw.core.waitForSync(options);\n }\n}\n","import {\n AgentSecret,\n CoID,\n ControlledAccount as RawControlledAccount,\n CryptoProvider,\n Everyone,\n InviteSecret,\n LocalNode,\n Peer,\n RawAccount,\n RawCoMap,\n RawCoValue,\n SessionID,\n cojsonInternals,\n} from \"cojson\";\nimport {\n AnonymousJazzAgent,\n CoFieldInit,\n type CoMap,\n type CoValue,\n CoValueBase,\n CoValueClass,\n CoValueClassOrSchema,\n CoValueJazzApi,\n Group,\n ID,\n InstanceOrPrimitiveOfSchema,\n Profile,\n Ref,\n type RefEncoded,\n RefIfCoValue,\n RefsToResolve,\n RefsToResolveStrict,\n RegisteredSchemas,\n Resolved,\n SchemaInit,\n SubscribeListenerOptions,\n SubscribeRestArgs,\n TypeSym,\n accessChildByKey,\n accountOrGroupToGroup,\n activeAccountContext,\n coValueClassFromCoValueClassOrSchema,\n coValuesCache,\n createInboxRoot,\n ensureCoValueLoaded,\n inspect,\n instantiateRefEncodedWithInit,\n loadCoValue,\n loadCoValueWithoutMe,\n parseSubscribeRestArgs,\n subscribeToCoValueWithoutMe,\n subscribeToExistingCoValue,\n} from \"../internal.js\";\n\nexport type AccountCreationProps = {\n name: string;\n onboarding?: boolean;\n};\n\n/** @category Identity & Permissions */\nexport class Account extends CoValueBase implements CoValue {\n declare [TypeSym]: \"Account\";\n\n /**\n * Jazz methods for Accounts are inside this property.\n *\n * This allows Accounts to be used as plain objects while still having\n * access to Jazz methods.\n */\n declare $jazz: AccountJazzApi<this>;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static _schema: any = {\n profile: {\n ref: () => Profile,\n optional: false,\n } satisfies RefEncoded<Profile>,\n root: {\n ref: () => RegisteredSchemas[\"CoMap\"],\n optional: true,\n } satisfies RefEncoded<CoMap>,\n };\n\n declare readonly profile: Profile | null;\n declare readonly root: CoMap | null;\n\n constructor(options: { fromRaw: RawAccount }) {\n super();\n if (!(\"fromRaw\" in options)) {\n throw new Error(\"Can only construct account from raw or with .create()\");\n }\n\n const proxy = new Proxy(\n this,\n AccountAndGroupProxyHandler as ProxyHandler<this>,\n );\n\n Object.defineProperties(this, {\n [TypeSym]: { value: \"Account\", enumerable: false },\n $jazz: {\n value: new AccountJazzApi(proxy, options.fromRaw),\n enumerable: false,\n },\n });\n\n return proxy;\n }\n\n /**\n * Whether this account is the currently active account.\n */\n get isMe(): boolean {\n return activeAccountContext.get().$jazz.id === this.$jazz.id;\n }\n\n /**\n * Accept an invite to a `CoValue` or `Group`.\n *\n * @param valueID The ID of the `CoValue` or `Group` to accept the invite to.\n * @param inviteSecret The secret of the invite to accept.\n * @param coValueClass The class of the `CoValue` or `Group` to accept the invite to.\n * @returns The loaded `CoValue` or `Group`.\n */\n async acceptInvite<S extends CoValueClassOrSchema>(\n valueID: string,\n inviteSecret: InviteSecret,\n coValueClass: S,\n ): Promise<Resolved<InstanceOrPrimitiveOfSchema<S>, true> | null> {\n if (!this.$jazz.isLocalNodeOwner) {\n throw new Error(\"Only a controlled account can accept invites\");\n }\n\n await this.$jazz.localNode.acceptInvite(\n valueID as unknown as CoID<RawCoValue>,\n inviteSecret,\n );\n\n return loadCoValue(\n coValueClassFromCoValueClassOrSchema(coValueClass),\n valueID,\n {\n loadAs: this,\n },\n ) as Resolved<InstanceOrPrimitiveOfSchema<S>, true> | null;\n }\n\n getRoleOf(member: Everyone | ID<Account> | \"me\"): \"admin\" | undefined {\n if (member === \"me\") {\n return this.isMe ? \"admin\" : undefined;\n }\n\n if (member === this.$jazz.id) {\n return \"admin\";\n }\n\n return undefined;\n }\n\n canRead(value: CoValue): boolean {\n const valueOwner = value.$jazz.owner;\n if (!valueOwner) {\n // Groups and Accounts are public\n return true;\n }\n const role = valueOwner.getRoleOf(this.$jazz.id);\n\n return (\n role === \"admin\" ||\n role === \"writer\" ||\n role === \"reader\" ||\n role === \"writeOnly\"\n );\n }\n\n canWrite(value: CoValue): boolean {\n const valueOwner = value.$jazz.owner;\n if (!valueOwner) {\n if (value[TypeSym] === \"Group\") {\n const roleInGroup = (value as Group).getRoleOf(this.$jazz.id);\n return roleInGroup === \"admin\" || roleInGroup === \"writer\";\n }\n if (value[TypeSym] === \"Account\") {\n return value.$jazz.id === this.$jazz.id;\n }\n return false;\n }\n const role = valueOwner.getRoleOf(this.$jazz.id);\n\n return role === \"admin\" || role === \"writer\" || role === \"writeOnly\";\n }\n\n canAdmin(value: CoValue): boolean {\n const valueOwner = value.$jazz.owner;\n if (!valueOwner) {\n if (value[TypeSym] === \"Group\") {\n const roleInGroup = (value as Group).getRoleOf(this.$jazz.id);\n return roleInGroup === \"admin\";\n }\n if (value[TypeSym] === \"Account\") {\n return value.$jazz.id === this.$jazz.id;\n }\n return false;\n }\n return valueOwner.getRoleOf(this.$jazz.id) === \"admin\";\n }\n\n /** @private */\n static async create<A extends Account>(\n this: CoValueClass<A> & typeof Account,\n options: {\n creationProps: { name: string };\n initialAgentSecret?: AgentSecret;\n peersToLoadFrom?: Peer[];\n crypto: CryptoProvider;\n },\n ): Promise<A> {\n const { node } = await LocalNode.withNewlyCreatedAccount({\n ...options,\n migration: async (rawAccount, _node, creationProps) => {\n const account = new this({\n fromRaw: rawAccount,\n }) as A;\n\n await account.applyMigration?.(creationProps);\n },\n });\n\n return this.fromNode(node) as A;\n }\n\n static getMe<A extends Account>(this: CoValueClass<A> & typeof Account) {\n return activeAccountContext.get() as A;\n }\n\n /**\n * @deprecated Use `co.account(...).createAs` instead.\n */\n static async createAs<A extends Account>(\n this: CoValueClass<A> & typeof Account,\n as: Account,\n options: {\n creationProps: { name: string };\n },\n ) {\n // TODO: is there a cleaner way to do this?\n const connectedPeers = cojsonInternals.connectedPeers(\n \"creatingAccount\",\n \"createdAccount\",\n { peer1role: \"server\", peer2role: \"client\" },\n );\n\n as.$jazz.localNode.syncManager.addPeer(connectedPeers[1]);\n\n const account = await this.create<A>({\n creationProps: options.creationProps,\n crypto: as.$jazz.localNode.crypto,\n peersToLoadFrom: [connectedPeers[0]],\n });\n\n await account.$jazz.waitForAllCoValuesSync();\n\n return account;\n }\n\n static fromNode<A extends Account>(\n this: CoValueClass<A>,\n node: LocalNode,\n ): A {\n return new this({\n fromRaw: node.expectCurrentAccount(\"jazz-tools/Account.fromNode\"),\n }) as A;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n toJSON(): object | any[] {\n return {\n $jazz: { id: this.$jazz.id },\n };\n }\n\n [inspect]() {\n return this.toJSON();\n }\n\n async applyMigration(creationProps?: AccountCreationProps) {\n await this.migrate(creationProps);\n\n // if the user has not defined a profile themselves, we create one\n if (this.profile === undefined && creationProps) {\n const profileGroup = RegisteredSchemas[\"Group\"].create({ owner: this });\n\n this.$jazz.set(\n \"profile\",\n Profile.create({ name: creationProps.name }, profileGroup) as any,\n );\n profileGroup.addMember(\"everyone\", \"reader\");\n }\n\n const profile = this.$jazz.localNode\n .expectCoValueLoaded(this.$jazz.raw.get(\"profile\")!)\n .getCurrentContent() as RawCoMap;\n\n if (!profile.get(\"inbox\")) {\n const inboxRoot = createInboxRoot(this);\n profile.set(\"inbox\", inboxRoot.id);\n profile.set(\"inboxInvite\", inboxRoot.inviteLink);\n }\n }\n\n // Placeholder method for subclasses to override\n migrate(creationProps?: AccountCreationProps) {\n creationProps; // To avoid unused parameter warning\n }\n\n /**\n * Load an `Account`\n * @category Subscription & Loading\n * @deprecated Use `co.account(...).load` instead.\n */\n static load<A extends Account, const R extends RefsToResolve<A> = true>(\n this: CoValueClass<A>,\n id: ID<A>,\n options?: {\n resolve?: RefsToResolveStrict<A, R>;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Resolved<A, R> | null> {\n return loadCoValueWithoutMe(this, id, options);\n }\n\n /**\n * Subscribe to an `Account`, when you have an ID but don't have an `Account` instance yet\n * @category Subscription & Loading\n * @deprecated Use `co.account(...).subscribe` instead.\n */\n static subscribe<A extends Account, const R extends RefsToResolve<A> = true>(\n this: CoValueClass<A>,\n id: ID<A>,\n listener: (value: Resolved<A, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<A extends Account, const R extends RefsToResolve<A> = true>(\n this: CoValueClass<A>,\n id: ID<A>,\n options: SubscribeListenerOptions<A, R>,\n listener: (value: Resolved<A, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<A extends Account, const R extends RefsToResolve<A>>(\n this: CoValueClass<A>,\n id: ID<A>,\n ...args: SubscribeRestArgs<A, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToCoValueWithoutMe<A, R>(this, id, options, listener);\n }\n}\n\nclass AccountJazzApi<A extends Account> extends CoValueJazzApi<A> {\n /**\n * Whether this account is the owner of the local node.\n *\n * @internal\n */\n isLocalNodeOwner: boolean;\n /** @internal */\n sessionID: SessionID | undefined;\n\n constructor(\n private account: A,\n public raw: RawAccount,\n ) {\n super(account);\n this.isLocalNodeOwner = this.raw.id === this.localNode.getCurrentAgent().id;\n if (this.isLocalNodeOwner) {\n this.sessionID = this.localNode.currentSessionID;\n }\n }\n\n /**\n * The ID of this `Account`\n * @category Content\n */\n get id(): ID<A> {\n return this.raw.id;\n }\n\n /**\n * Accounts have no owner. They can be accessed by everyone.\n */\n get owner(): undefined {\n return undefined;\n }\n\n /**\n * Set the value of a key in the account.\n *\n * @param key The key to set.\n * @param value The value to set.\n *\n * @category Content\n */\n set<K extends \"root\" | \"profile\">(\n key: K,\n value: CoFieldInit<NonNullable<A[K]>>,\n ) {\n if (value) {\n let refId = (value as unknown as CoValue).$jazz?.id as\n | CoID<RawCoMap>\n | undefined;\n if (!refId) {\n const descriptor = this.schema[key];\n const coValue = instantiateRefEncodedWithInit(\n descriptor,\n value,\n accountOrGroupToGroup(this.account),\n );\n refId = coValue.$jazz.id as CoID<RawCoMap>;\n }\n this.raw.set(key, refId, \"trusting\");\n }\n }\n\n has(key: \"root\" | \"profile\"): boolean {\n const entry = this.raw.getRaw(key);\n return entry?.change !== undefined && entry.change.op !== \"del\";\n }\n\n /**\n * Get the descriptor for a given key\n * @internal\n */\n getDescriptor(key: string) {\n if (key === \"profile\") {\n return this.schema.profile;\n } else if (key === \"root\") {\n return this.schema.root;\n }\n\n return undefined;\n }\n\n /**\n * If property `prop` is a `coField.ref(...)`, you can use `account.$jazz.refs.prop` to access\n * the `Ref` instead of the potentially loaded/null value.\n *\n * This allows you to always get the ID or load the value manually.\n *\n * @category Content\n */\n get refs(): {\n profile: RefIfCoValue<Profile> | undefined;\n root: RefIfCoValue<CoMap> | undefined;\n } {\n const profileID = this.raw.get(\"profile\") as unknown as\n | ID<NonNullable<(typeof this.account)[\"profile\"]>>\n | undefined;\n const rootID = this.raw.get(\"root\") as unknown as\n | ID<NonNullable<(typeof this.account)[\"root\"]>>\n | undefined;\n\n return {\n profile: profileID\n ? (new Ref(\n profileID,\n this.loadedAs,\n this.schema.profile as RefEncoded<\n NonNullable<(typeof this.account)[\"profile\"]> & CoValue\n >,\n this.account,\n ) as unknown as RefIfCoValue<(typeof this.account)[\"profile\"]>)\n : undefined,\n root: rootID\n ? (new Ref(\n rootID,\n this.loadedAs,\n this.schema.root as RefEncoded<\n NonNullable<(typeof this.account)[\"root\"]> & CoValue\n >,\n this.account,\n ) as unknown as RefIfCoValue<(typeof this.account)[\"root\"]>)\n : undefined,\n };\n }\n\n /** @category Subscription & Loading */\n ensureLoaded<A extends Account, const R extends RefsToResolve<A>>(\n this: AccountJazzApi<A>,\n options: {\n resolve: RefsToResolveStrict<A, R>;\n },\n ): Promise<Resolved<A, R>> {\n return ensureCoValueLoaded(this.account as unknown as A, options);\n }\n\n /** @category Subscription & Loading */\n subscribe<A extends Account, const R extends RefsToResolve<A>>(\n this: AccountJazzApi<A>,\n listener: (value: Resolved<A, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<A extends Account, const R extends RefsToResolve<A>>(\n this: AccountJazzApi<A>,\n options: { resolve?: RefsToResolveStrict<A, R> },\n listener: (value: Resolved<A, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<A extends Account, const R extends RefsToResolve<A>>(\n this: AccountJazzApi<A>,\n ...args: SubscribeRestArgs<A, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToExistingCoValue(this.account, options, listener);\n }\n\n /**\n * Wait for the `Account` to be uploaded to the other peers.\n *\n * @category Subscription & Loading\n */\n waitForSync(options?: { timeout?: number }) {\n return this.raw.core.waitForSync(options);\n }\n\n /**\n * Wait for all the available `CoValues` to be uploaded to the other peers.\n *\n * @category Subscription & Loading\n */\n waitForAllCoValuesSync(options?: { timeout?: number }) {\n return this.localNode.syncManager.waitForAllCoValuesSync(options?.timeout);\n }\n\n /** @internal */\n get schema(): {\n profile: RefEncoded<Profile>;\n root: RefEncoded<CoMap>;\n } {\n return (this.account.constructor as typeof Account)._schema;\n }\n\n get loadedAs(): Account | AnonymousJazzAgent {\n if (this.isLocalNodeOwner) return this.account;\n\n const agent = this.localNode.getCurrentAgent();\n\n if (agent instanceof RawControlledAccount) {\n return coValuesCache.get(agent.account, () =>\n Account.fromRaw(agent.account),\n );\n }\n\n return new AnonymousJazzAgent(this.localNode);\n }\n}\n\nexport const AccountAndGroupProxyHandler: ProxyHandler<Account | Group> = {\n get(target, key, receiver) {\n if (key === \"profile\" || key === \"root\") {\n const id = target.$jazz.raw.get(key);\n\n if (id) {\n return accessChildByKey(target, id, key);\n } else {\n return undefined;\n }\n } else {\n return Reflect.get(target, key, receiver);\n }\n },\n set(target, key, value, receiver) {\n if (\n target instanceof Account &&\n (key === \"profile\" || key === \"root\") &&\n typeof value === \"object\" &&\n SchemaInit in value\n ) {\n (target.constructor as typeof Account)._schema ||= {};\n (target.constructor as typeof Account)._schema[key] = value[SchemaInit];\n return true;\n } else if (\n target instanceof Account &&\n (key === \"profile\" || key === \"root\")\n ) {\n if (value) {\n target.$jazz.set(key, value);\n }\n\n return true;\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n },\n defineProperty(target, key, descriptor) {\n if (\n (key === \"profile\" || key === \"root\") &&\n typeof descriptor.value === \"object\" &&\n SchemaInit in descriptor.value\n ) {\n (target.constructor as typeof Account)._schema ||= {};\n (target.constructor as typeof Account)._schema[key] =\n descriptor.value[SchemaInit];\n return true;\n } else {\n return Reflect.defineProperty(target, key, descriptor);\n }\n },\n};\n\nexport type ControlledAccount = Account & {\n $jazz: {\n raw: RawAccount;\n isLocalNodeOwner: true;\n sessionID: SessionID;\n };\n};\n\n/** @category Identity & Permissions */\nexport function isControlledAccount(\n account: Account,\n): account is ControlledAccount {\n return account.$jazz.isLocalNodeOwner;\n}\n\nexport type AccountClass<Acc extends Account> = CoValueClass<Acc> & {\n fromNode: (typeof Account)[\"fromNode\"];\n};\n\nRegisteredSchemas[\"Account\"] = Account;\n","import type {\n AccountRole,\n AgentID,\n Everyone,\n RawAccountID,\n RawGroup,\n Role,\n} from \"cojson\";\nimport {\n CoValue,\n CoValueClass,\n ID,\n RefEncoded,\n RefsToResolve,\n RefsToResolveStrict,\n Resolved,\n SubscribeListenerOptions,\n SubscribeRestArgs,\n TypeSym,\n} from \"../internal.js\";\nimport {\n Account,\n AccountAndGroupProxyHandler,\n CoValueBase,\n CoValueJazzApi,\n Ref,\n RegisteredSchemas,\n accessChildById,\n activeAccountContext,\n ensureCoValueLoaded,\n isControlledAccount,\n loadCoValueWithoutMe,\n parseGroupCreateOptions,\n parseSubscribeRestArgs,\n subscribeToCoValueWithoutMe,\n subscribeToExistingCoValue,\n} from \"../internal.js\";\n\ntype GroupMember = {\n id: string;\n role: AccountRole;\n ref: Ref<Account>;\n account: Account;\n};\n\n/** @category Identity & Permissions */\nexport class Group extends CoValueBase implements CoValue {\n declare [TypeSym]: \"Group\";\n static {\n this.prototype[TypeSym] = \"Group\";\n }\n declare $jazz: GroupJazzApi<this>;\n\n /** @deprecated Don't use constructor directly, use .create */\n constructor(options: { fromRaw: RawGroup } | { owner: Account }) {\n super();\n let raw: RawGroup;\n\n if (options && \"fromRaw\" in options) {\n raw = options.fromRaw;\n } else {\n const initOwner = options.owner;\n if (!initOwner) throw new Error(\"No owner provided\");\n if (initOwner[TypeSym] === \"Account\" && isControlledAccount(initOwner)) {\n const rawOwner = initOwner.$jazz.raw;\n raw = rawOwner.core.node.createGroup();\n } else {\n throw new Error(\"Can only construct group as a controlled account\");\n }\n }\n\n const proxy = new Proxy(\n this,\n AccountAndGroupProxyHandler as ProxyHandler<this>,\n );\n\n Object.defineProperties(this, {\n $jazz: {\n value: new GroupJazzApi(proxy, raw),\n enumerable: false,\n },\n });\n\n return proxy;\n }\n\n static create<G extends Group>(\n this: CoValueClass<G>,\n options?: { owner: Account } | Account,\n ) {\n return new this(parseGroupCreateOptions(options));\n }\n\n myRole(): Role | undefined {\n return this.$jazz.raw.myRole();\n }\n\n addMember(member: Everyone, role: \"writer\" | \"reader\" | \"writeOnly\"): void;\n addMember(member: Account, role: AccountRole): void;\n /** @category Identity & Permissions\n * Gives members of a parent group membership in this group.\n * @param member The group that will gain access to this group.\n * @param role The role all members of the parent group should have in this group.\n */\n addMember(\n member: Group,\n role?: \"reader\" | \"writer\" | \"admin\" | \"inherit\",\n ): void;\n addMember(member: Group | Account, role: \"reader\" | \"writer\" | \"admin\"): void;\n addMember(\n member: Group | Everyone | Account,\n role?: AccountRole | \"inherit\",\n ) {\n if (member !== \"everyone\" && member[TypeSym] === \"Group\") {\n if (role === \"writeOnly\")\n throw new Error(\"Cannot add group as member with write-only role\");\n this.$jazz.raw.extend(member.$jazz.raw, role);\n } else if (role !== undefined && role !== \"inherit\") {\n this.$jazz.raw.addMember(\n member === \"everyone\" ? member : member.$jazz.raw,\n role,\n );\n }\n }\n\n removeMember(member: Everyone | Account): void;\n /** @category Identity & Permissions\n * Revokes membership from members a parent group.\n * @param member The group that will lose access to this group.\n */\n removeMember(member: Group): void;\n removeMember(member: Group | Everyone | Account) {\n if (member !== \"everyone\" && member[TypeSym] === \"Group\") {\n this.$jazz.raw.revokeExtend(member.$jazz.raw);\n } else {\n return this.$jazz.raw.removeMember(\n member === \"everyone\" ? member : member.$jazz.raw,\n );\n }\n }\n\n private getMembersFromKeys(\n accountIDs: Iterable<RawAccountID | AgentID>,\n ): GroupMember[] {\n const members = [];\n\n const refEncodedAccountSchema = {\n ref: () => Account,\n optional: false,\n } satisfies RefEncoded<Account>;\n\n for (const accountID of accountIDs) {\n if (!isAccountID(accountID)) continue;\n\n const role = this.$jazz.raw.roleOf(accountID);\n\n if (\n role === \"admin\" ||\n role === \"writer\" ||\n role === \"reader\" ||\n role === \"writeOnly\"\n ) {\n const ref = new Ref<Account>(\n accountID,\n this.$jazz.loadedAs,\n refEncodedAccountSchema,\n this,\n );\n\n const group = this;\n\n members.push({\n id: accountID as unknown as ID<Account>,\n role,\n ref,\n get account() {\n // Accounts values are non-nullable because are loaded as dependencies\n return accessChildById(group, accountID, refEncodedAccountSchema);\n },\n });\n }\n }\n\n return members;\n }\n\n /**\n * Returns all members of the group, including inherited members from parent\n * groups.\n *\n * If you need only the direct members of the group, use\n * {@link getDirectMembers} instead.\n *\n * @returns The members of the group.\n */\n get members(): GroupMember[] {\n return this.getMembersFromKeys(this.$jazz.raw.getAllMemberKeysSet());\n }\n\n /**\n * Returns the direct members of the group.\n *\n * If you need all members of the group, including inherited members from\n * parent groups, use {@link Group.members|members} instead.\n * @returns The direct members of the group.\n */\n getDirectMembers(): GroupMember[] {\n return this.getMembersFromKeys(this.$jazz.raw.getMemberKeys());\n }\n\n getRoleOf(member: Everyone | ID<Account> | \"me\"): Role | undefined {\n const accountId =\n member === \"me\"\n ? (activeAccountContext.get().$jazz.id as RawAccountID)\n : member === \"everyone\"\n ? member\n : (member as RawAccountID);\n return this.$jazz.raw.roleOf(accountId);\n }\n\n /**\n * Make the group public, so that everyone can read it.\n * Alias for `addMember(\"everyone\", role)`.\n *\n * @param role - Optional: the role to grant to everyone. Defaults to \"reader\".\n * @returns The group itself.\n */\n makePublic(role: \"reader\" | \"writer\" = \"reader\"): this {\n this.addMember(\"everyone\", role);\n return this;\n }\n\n getParentGroups(): Array<Group> {\n return this.$jazz.raw\n .getParentGroups()\n .map((group) => Group.fromRaw(group));\n }\n\n /** @category Identity & Permissions\n * Gives members of a parent group membership in this group.\n * @deprecated Use `addMember` instead.\n * @param parent The group that will gain access to this group.\n * @param roleMapping The role all members of the parent group should have in this group.\n * @returns This group.\n */\n extend(\n parent: Group,\n roleMapping?: \"reader\" | \"writer\" | \"admin\" | \"inherit\",\n ): this {\n this.$jazz.raw.extend(parent.$jazz.raw, roleMapping);\n return this;\n }\n\n /** @category Identity & Permissions\n * Revokes membership from members a parent group.\n * @deprecated Use `removeMember` instead.\n * @param parent The group that will lose access to this group.\n * @returns This group.\n */\n async revokeExtend(parent: Group): Promise<this> {\n await this.$jazz.raw.revokeExtend(parent.$jazz.raw);\n return this;\n }\n\n /** @category Subscription & Loading */\n static load<G extends Group, const R extends RefsToResolve<G>>(\n this: CoValueClass<G>,\n id: ID<G>,\n options?: { resolve?: RefsToResolveStrict<G, R>; loadAs?: Account },\n ): Promise<Resolved<G, R> | null> {\n return loadCoValueWithoutMe(this, id, options);\n }\n\n /** @category Subscription & Loading */\n static subscribe<G extends Group, const R extends RefsToResolve<G>>(\n this: CoValueClass<G>,\n id: ID<G>,\n listener: (value: Resolved<G, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<G extends Group, const R extends RefsToResolve<G>>(\n this: CoValueClass<G>,\n id: ID<G>,\n options: SubscribeListenerOptions<G, R>,\n listener: (value: Resolved<G, R>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<G extends Group, const R extends RefsToResolve<G>>(\n this: CoValueClass<G>,\n id: ID<G>,\n ...args: SubscribeRestArgs<G, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToCoValueWithoutMe<G, R>(this, id, options, listener);\n }\n}\n\nexport class GroupJazzApi<G extends Group> extends CoValueJazzApi<G> {\n constructor(\n private group: G,\n public raw: RawGroup,\n ) {\n super(group);\n }\n\n /**\n * The ID of this `Group`\n * @category Content\n */\n get id(): ID<G> {\n return this.raw.id;\n }\n\n /**\n * Groups have no owner. They can be accessed by everyone.\n */\n get owner(): undefined {\n return undefined;\n }\n\n /** @category Subscription & Loading */\n ensureLoaded<G extends Group, const R extends RefsToResolve<G>>(\n this: GroupJazzApi<G>,\n options?: { resolve?: RefsToResolveStrict<G, R> },\n ): Promise<Resolved<G, R>> {\n return ensureCoValueLoaded(this.group, options);\n }\n\n /** @category Subscription & Loading */\n subscribe<G extends Group, const R extends RefsToResolve<G>>(\n this: GroupJazzApi<G>,\n listener: (value: Resolved<G, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<G extends Group, const R extends RefsToResolve<G>>(\n this: GroupJazzApi<G>,\n options: { resolve?: RefsToResolveStrict<G, R> },\n listener: (value: Resolved<G, R>, unsubscribe: () => void) => void,\n ): () => void;\n subscribe<G extends Group, const R extends RefsToResolve<G>>(\n this: GroupJazzApi<G>,\n ...args: SubscribeRestArgs<G, R>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToExistingCoValue(this.group, options, listener);\n }\n\n /**\n * Wait for the `Group` to be uploaded to the other peers.\n *\n * @category Subscription & Loading\n */\n waitForSync(options?: { timeout?: number }) {\n return this.raw.core.waitForSync(options);\n }\n}\n\nRegisteredSchemas[\"Group\"] = Group;\n\nexport function isAccountID(id: RawAccountID | AgentID): id is RawAccountID {\n return id.startsWith(\"co_\");\n}\n\nexport function getCoValueOwner(coValue: CoValue): Group {\n const group = accessChildById(coValue, coValue.$jazz.raw.group.id, {\n ref: RegisteredSchemas[\"Group\"],\n optional: false,\n });\n if (!group) {\n throw new Error(\"CoValue has no owner\");\n }\n return group;\n}\n","import {\n Account,\n CoMap,\n CoMapInit_DEPRECATED,\n CoValueClass,\n Group,\n Simplify,\n TypeSym,\n coField,\n} from \"../internal.js\";\n\n/** @category Identity & Permissions */\nexport class Profile extends CoMap {\n readonly name = coField.string;\n readonly inbox? = coField.optional.string;\n readonly inboxInvite? = coField.optional.string;\n\n /**\n * Creates a new profile with the given initial values and owner.\n *\n * The owner (a Group) determines access rights to the Profile.\n *\n * @category Creation\n * @deprecated Use `co.profile(...).create` instead.\n */\n static override create<M extends CoMap>(\n this: CoValueClass<M>,\n init: Simplify<CoMapInit_DEPRECATED<M>>,\n options?:\n | {\n owner: Group;\n }\n | Group,\n ) {\n const owner =\n options !== undefined && \"owner\" in options ? options.owner : options;\n\n // We add some guardrails to ensure that the owner of a profile is a group\n if ((owner as Group | Account | undefined)?.[TypeSym] === \"Account\") {\n throw new Error(\"Profiles should be owned by a group\");\n }\n\n return super.create<M>(init, options);\n }\n}\n","import {\n CoID,\n CoValueCore,\n InviteSecret,\n RawAccount,\n RawCoMap,\n SessionID,\n} from \"cojson\";\nimport { type AvailableCoValueCore, type RawCoStream } from \"cojson\";\nimport {\n type Account,\n CoValue,\n CoValueClassOrSchema,\n ID,\n InstanceOfSchema,\n activeAccountContext,\n coValueClassFromCoValueClassOrSchema,\n loadCoValue,\n} from \"../internal.js\";\nimport { isCoValueId } from \"../lib/id.js\";\n\nexport type InboxInvite = `${CoID<MessagesStream>}/${InviteSecret}`;\ntype TxKey = `${SessionID}/${number}`;\n\ntype MessagesStream = RawCoStream<CoID<InboxMessage<CoValue, any>>>;\ntype FailedMessagesStreamItem = {\n errors: string[];\n value: CoID<InboxMessage<CoValue, any>>;\n};\ntype FailedMessagesStream = RawCoStream<FailedMessagesStreamItem>;\ntype TxKeyStream = RawCoStream<TxKey>;\nexport type InboxRoot = RawCoMap<{\n messages: CoID<MessagesStream>;\n processed: CoID<TxKeyStream>;\n failed: CoID<FailedMessagesStream>;\n inviteLink: InboxInvite;\n}>;\n\nexport function createInboxRoot(account: Account) {\n if (!account.$jazz.isLocalNodeOwner) {\n throw new Error(\"Account is not controlled\");\n }\n\n const rawAccount = account.$jazz.raw;\n\n const group = rawAccount.core.node.createGroup();\n const messagesFeed = group.createStream<MessagesStream>();\n\n const inboxRoot = rawAccount.createMap<InboxRoot>();\n const processedFeed = rawAccount.createStream<TxKeyStream>();\n const failedFeed = rawAccount.createStream<FailedMessagesStream>();\n\n const inviteLink =\n `${messagesFeed.id}/${group.createInvite(\"writeOnly\")}` as const;\n\n inboxRoot.set(\"messages\", messagesFeed.id);\n inboxRoot.set(\"processed\", processedFeed.id);\n inboxRoot.set(\"failed\", failedFeed.id);\n\n return {\n id: inboxRoot.id,\n inviteLink,\n };\n}\n\n/**\n * An abstraction on top of CoStream to get the new items in a performant way.\n */\nclass IncrementalFeed {\n constructor(private feed: AvailableCoValueCore) {}\n\n private sessions = {};\n getNewItems() {\n const items = this.feed.getValidTransactions({\n ignorePrivateTransactions: false,\n from: this.sessions,\n });\n\n this.sessions = this.feed.knownState().sessions;\n\n return items;\n }\n}\n\ntype InboxMessage<I extends CoValue, O extends CoValue | undefined> = RawCoMap<{\n payload: ID<I>;\n result: ID<O> | undefined;\n processed: boolean;\n error: string | undefined;\n}>;\n\nasync function createInboxMessage<\n I extends CoValue,\n O extends CoValue | undefined,\n>(payload: I, inboxOwner: RawAccount) {\n const group = payload.$jazz.raw.group;\n\n if (group instanceof RawAccount) {\n throw new Error(\"Inbox messages should be owned by a group\");\n }\n\n group.addMember(inboxOwner, \"writer\");\n\n const message = group.createMap<InboxMessage<I, O>>({\n payload: payload.$jazz.id,\n result: undefined,\n processed: false,\n error: undefined,\n });\n\n await payload.$jazz.raw.core.waitForSync();\n await message.core.waitForSync();\n\n return message;\n}\n\nclass MessageQueue {\n private queue: Array<{\n txKey: TxKey;\n messageId: CoID<InboxMessage<CoValue, any>>;\n }> = [];\n private processing = new Set<TxKey>();\n private concurrencyLimit: number;\n private activeCount = 0;\n\n constructor(\n concurrencyLimit: number = 10,\n private processMessage: (\n txKey: TxKey,\n messageId: CoID<InboxMessage<CoValue, any>>,\n ) => Promise<void>,\n private handleError: (\n txKey: TxKey,\n messageId: CoID<InboxMessage<CoValue, any>>,\n error: Error,\n ) => void,\n ) {\n this.concurrencyLimit = concurrencyLimit;\n }\n\n enqueue(txKey: TxKey, messageId: CoID<InboxMessage<CoValue, any>>) {\n this.queue.push({ txKey, messageId });\n this.processNext();\n }\n\n private async processNext() {\n if (this.activeCount >= this.concurrencyLimit || this.queue.length === 0) {\n return;\n }\n\n const { txKey, messageId } = this.queue.shift()!;\n\n if (this.processing.has(txKey)) {\n this.processNext();\n return;\n }\n\n this.processing.add(txKey);\n this.activeCount++;\n\n try {\n await this.processMessage(txKey, messageId);\n } catch (error) {\n this.handleError(txKey, messageId, error as Error);\n } finally {\n this.processing.delete(txKey);\n this.activeCount--;\n this.processNext();\n }\n }\n}\n\nexport class Inbox {\n account: Account;\n messages: MessagesStream;\n processed: TxKeyStream;\n failed: FailedMessagesStream;\n root: InboxRoot;\n\n private constructor(\n account: Account,\n root: InboxRoot,\n messages: MessagesStream,\n processed: TxKeyStream,\n failed: FailedMessagesStream,\n ) {\n this.account = account;\n this.root = root;\n this.messages = messages;\n this.processed = processed;\n this.failed = failed;\n }\n\n subscribe<M extends CoValueClassOrSchema, O extends CoValue | undefined>(\n Schema: M,\n callback: (\n message: InstanceOfSchema<M>,\n senderAccountID: ID<Account>,\n ) => Promise<O | undefined | void>,\n options?: { concurrencyLimit?: number },\n ) {\n const processed = new Set<`${SessionID}/${number}`>();\n const node = this.account.$jazz.localNode;\n\n // Create queue instance inside subscribe function\n const concurrencyLimit = options?.concurrencyLimit ?? 10;\n\n const processedFeed = new IncrementalFeed(this.processed.core);\n\n // Track the already processed messages, triggered immediately so we know the messages processed in the previous sessions\n this.processed.subscribe(() => {\n for (const { changes } of processedFeed.getNewItems()) {\n processed.add(changes[0] as TxKey);\n }\n });\n\n const { account } = this;\n\n const messagesFeed = new IncrementalFeed(this.messages.core);\n\n // Set up the message processing handler for the queue\n const processMessage = async (\n txKey: TxKey,\n messageId: CoID<InboxMessage<CoValue, any>>,\n ) => {\n const message = await node.load(messageId);\n if (message === \"unavailable\") {\n throw new Error(`Inbox: message ${messageId} is unavailable`);\n }\n\n const value = await loadCoValue(\n coValueClassFromCoValueClassOrSchema(Schema),\n message.get(\"payload\")!,\n {\n loadAs: account,\n },\n );\n\n if (!value) {\n throw new Error(\n `Inbox: Unable to load the payload of message ${messageId}`,\n );\n }\n\n const accountID = getAccountIDfromSessionID(\n txKey.split(\"/\")[0] as SessionID,\n );\n if (!accountID) {\n throw new Error(`Inbox: Unknown account for message ${messageId}`);\n }\n\n const result = await callback(value as InstanceOfSchema<M>, accountID);\n\n const inboxMessage = node\n .expectCoValueLoaded(messageId)\n .getCurrentContent() as RawCoMap;\n\n if (result) {\n inboxMessage.set(\"result\", result.$jazz.id);\n }\n\n inboxMessage.set(\"processed\", true);\n this.processed.push(txKey);\n };\n\n const handleError = (\n txKey: TxKey,\n messageId: CoID<InboxMessage<CoValue, any>>,\n error: Error,\n ) => {\n console.error(error);\n\n const stringifiedError = String(error);\n\n this.processed.push(txKey);\n this.failed.push({ errors: [stringifiedError], value: messageId });\n\n try {\n const inboxMessage = node\n .expectCoValueLoaded(messageId)\n .getCurrentContent() as RawCoMap;\n\n inboxMessage.set(\"error\", stringifiedError);\n inboxMessage.set(\"processed\", true);\n } catch (error) {}\n };\n\n const messageQueue = new MessageQueue(\n concurrencyLimit,\n processMessage,\n handleError,\n );\n\n const handleNewMessages = () => {\n for (const tx of messagesFeed.getNewItems()) {\n const accountID = getAccountIDfromSessionID(tx.txID.sessionID);\n\n if (!accountID) {\n console.warn(\n \"Received message from unknown account\",\n tx.txID.sessionID,\n );\n continue;\n }\n\n const id = tx.changes[0] as CoID<InboxMessage<CoValue, any>>;\n\n if (!isCoValueId(id)) {\n continue;\n }\n\n const txKey = `${tx.txID.sessionID}/${tx.txID.txIndex}` as const;\n\n if (processed.has(txKey)) {\n continue;\n }\n\n // Enqueue the message for processing\n messageQueue.enqueue(txKey, id);\n }\n };\n\n const unsubscribe = this.messages.subscribe(handleNewMessages);\n\n return () => {\n unsubscribe();\n };\n }\n\n static async load(account: Account) {\n const profile = account.profile;\n\n if (!profile) {\n throw new Error(\"Account profile should already be loaded\");\n }\n\n if (!profile.inbox) {\n throw new Error(\"The account has not set up their inbox\");\n }\n\n const node = account.$jazz.localNode;\n\n const root = await node.load(profile.inbox as CoID<InboxRoot>);\n\n if (root === \"unavailable\") {\n throw new Error(\"Inbox not found\");\n }\n\n const [messages, processed, failed] = await Promise.all([\n node.load(root.get(\"messages\")!),\n node.load(root.get(\"processed\")!),\n node.load(root.get(\"failed\")!),\n ]);\n\n if (\n messages === \"unavailable\" ||\n processed === \"unavailable\" ||\n failed === \"unavailable\"\n ) {\n throw new Error(\"Inbox not found\");\n }\n\n await processed.core.waitForFullStreaming();\n\n return new Inbox(account, root, messages, processed, failed);\n }\n}\n\nexport class InboxSender<I extends CoValue, O extends CoValue | undefined> {\n currentAccount: Account;\n owner: RawAccount;\n messages: MessagesStream;\n\n private constructor(\n currentAccount: Account,\n owner: RawAccount,\n messages: MessagesStream,\n ) {\n this.currentAccount = currentAccount;\n this.owner = owner;\n this.messages = messages;\n }\n\n getOwnerAccount() {\n return this.owner;\n }\n\n async sendMessage(\n message: I,\n ): Promise<O extends CoValue ? ID<O> : undefined> {\n const inboxMessage = await createInboxMessage<I, O>(message, this.owner);\n\n this.messages.push(inboxMessage.id);\n\n return new Promise((resolve, reject) => {\n inboxMessage.subscribe((message) => {\n if (message.get(\"processed\")) {\n const error = message.get(\"error\");\n if (error) {\n reject(new Error(error));\n } else {\n resolve(\n message.get(\"result\") as O extends CoValue ? ID<O> : undefined,\n );\n }\n }\n });\n });\n }\n\n static async load<\n I extends CoValue,\n O extends CoValue | undefined = undefined,\n >(inboxOwnerID: ID<Account>, currentAccount?: Account) {\n currentAccount ||= activeAccountContext.get();\n\n const node = currentAccount.$jazz.localNode;\n\n const inboxOwnerRaw = await node.load(\n inboxOwnerID as unknown as CoID<RawAccount>,\n );\n\n if (inboxOwnerRaw === \"unavailable\") {\n throw new Error(\"Failed to load the inbox owner\");\n }\n\n const inboxOwnerProfileRaw = await node.load(inboxOwnerRaw.get(\"profile\")!);\n\n if (inboxOwnerProfileRaw === \"unavailable\") {\n throw new Error(\"Failed to load the inbox owner profile\");\n }\n\n if (\n inboxOwnerProfileRaw.group.roleOf(currentAccount.$jazz.raw.id) !==\n \"reader\" &&\n inboxOwnerProfileRaw.group.roleOf(currentAccount.$jazz.raw.id) !==\n \"writer\" &&\n inboxOwnerProfileRaw.group.roleOf(currentAccount.$jazz.raw.id) !== \"admin\"\n ) {\n throw new Error(\n \"Insufficient permissions to access the inbox, make sure its user profile is publicly readable.\",\n );\n }\n\n const inboxInvite = inboxOwnerProfileRaw.get(\"inboxInvite\");\n\n if (!inboxInvite) {\n throw new Error(\"The user has not set up their inbox\");\n }\n\n const id = await acceptInvite(inboxInvite as InboxInvite, currentAccount);\n\n const messages = await node.load(id);\n\n if (messages === \"unavailable\") {\n throw new Error(\"Inbox not found\");\n }\n\n return new InboxSender<I, O>(currentAccount, inboxOwnerRaw, messages);\n }\n}\n\nasync function acceptInvite(invite: string, account?: Account) {\n account ||= activeAccountContext.get();\n\n const id = invite.slice(0, invite.indexOf(\"/\")) as CoID<MessagesStream>;\n\n const inviteSecret = invite.slice(invite.indexOf(\"/\") + 1) as InviteSecret;\n\n if (!isCoValueId(id) || !inviteSecret.startsWith(\"inviteSecret_\")) {\n throw new Error(\"Invalid inbox ticket\");\n }\n\n if (!account.$jazz.isLocalNodeOwner) {\n throw new Error(\"Account is not controlled\");\n }\n\n await account.$jazz.localNode.acceptInvite(id, inviteSecret);\n\n return id;\n}\n\nfunction getAccountIDfromSessionID(sessionID: SessionID) {\n const until = sessionID.indexOf(\"_session\");\n const accountID = sessionID.slice(0, until);\n\n if (isCoValueId(accountID)) {\n return accountID;\n }\n\n return;\n}\n","export function isCoValueId(id: unknown): id is `co_z${string}` {\n return typeof id === \"string\" && id.startsWith(\"co_z\");\n}\n","import { type OpID, type RawCoPlainText, stringifyOpID } from \"cojson\";\nimport { calcPatch } from \"fast-myers-diff\";\nimport {\n AnonymousJazzAgent,\n CoValue,\n CoValueClass,\n CoValueJazzApi,\n ID,\n Resolved,\n SubscribeListenerOptions,\n SubscribeRestArgs,\n TypeSym,\n parseCoValueCreateOptions,\n} from \"../internal.js\";\nimport {\n inspect,\n loadCoValueWithoutMe,\n parseSubscribeRestArgs,\n subscribeToCoValueWithoutMe,\n subscribeToExistingCoValue,\n} from \"../internal.js\";\nimport { Account } from \"./account.js\";\nimport { getCoValueOwner, Group } from \"./group.js\";\n\nexport type TextPos = OpID;\n\nexport class CoPlainText extends String implements CoValue {\n declare [TypeSym]: \"CoPlainText\";\n\n declare $jazz: CoTextJazzApi<this>;\n\n /** @internal */\n constructor(\n options:\n | { fromRaw: RawCoPlainText }\n | { text: string; owner: Account | Group }\n | undefined,\n ) {\n if (!options) {\n super(\"\"); // Intialise as empty string\n return;\n }\n\n if (\"fromRaw\" in options) {\n super(options.fromRaw.toString());\n const raw = options.fromRaw;\n Object.defineProperties(this, {\n [TypeSym]: { value: \"CoPlainText\", enumerable: false },\n $jazz: {\n value: new CoTextJazzApi(this, raw),\n enumerable: false,\n },\n });\n return;\n }\n\n if (\"text\" in options && \"owner\" in options) {\n super(options.text);\n const raw = options.owner.$jazz.raw.createPlainText(options.text);\n Object.defineProperties(this, {\n [TypeSym]: { value: \"CoPlainText\", enumerable: false },\n $jazz: {\n value: new CoTextJazzApi(this, raw),\n enumerable: false,\n },\n });\n return;\n }\n\n throw new Error(\"Invalid constructor arguments\");\n }\n\n /**\n * Create a new `CoPlainText` with the given text and owner.\n *\n * The owner (a Group or Account) determines access rights to the CoPlainText.\n *\n * The CoPlainText will immediately be persisted and synced to connected peers.\n *\n * @example\n * ```ts\n * const text = CoPlainText.create(\"Hello, world!\", { owner: me });\n * ```\n *\n * @category Creation\n * @deprecated Use `co.plainText(...).create` instead.\n */\n static create<T extends CoPlainText>(\n this: CoValueClass<T>,\n text: string,\n options?: { owner: Account | Group } | Account | Group,\n ) {\n const { owner } = parseCoValueCreateOptions(options);\n return new this({ text, owner });\n }\n\n get length() {\n return this.$jazz.raw.toString().length;\n }\n\n toString() {\n return this.$jazz.raw.toString();\n }\n\n valueOf() {\n return this.$jazz.raw.toString();\n }\n\n toJSON(): string {\n return this.$jazz.raw.toString();\n }\n\n [inspect]() {\n return this.toJSON();\n }\n\n insertBefore(idx: number, text: string) {\n this.$jazz.raw.insertBefore(idx, text);\n }\n\n insertAfter(idx: number, text: string) {\n this.$jazz.raw.insertAfter(idx, text);\n }\n\n deleteRange(range: { from: number; to: number }) {\n this.$jazz.raw.deleteRange(range);\n }\n\n posBefore(idx: number): TextPos | undefined {\n return this.$jazz.raw.mapping.opIDbeforeIdx[idx];\n }\n\n posAfter(idx: number): TextPos | undefined {\n return this.$jazz.raw.mapping.opIDafterIdx[idx];\n }\n\n idxBefore(pos: TextPos): number | undefined {\n return this.$jazz.raw.mapping.idxBeforeOpID[stringifyOpID(pos)];\n }\n\n idxAfter(pos: TextPos): number | undefined {\n return this.$jazz.raw.mapping.idxAfterOpID[stringifyOpID(pos)];\n }\n\n /** @category Internals */\n static fromRaw<V extends CoPlainText>(\n this: CoValueClass<V> & typeof CoPlainText,\n raw: RawCoPlainText,\n ) {\n return new this({ fromRaw: raw });\n }\n\n /**\n * Load a `CoPlainText` with a given ID, as a given account.\n *\n * @category Subscription & Loading\n * @deprecated Use `co.plainText(...).load` instead.\n */\n static load<T extends CoPlainText>(\n this: CoValueClass<T>,\n id: ID<T>,\n options?: { loadAs?: Account | AnonymousJazzAgent },\n ): Promise<T | null> {\n return loadCoValueWithoutMe(this, id, options);\n }\n\n /**\n * Load and subscribe to a `CoPlainText` with a given ID, as a given account.\n *\n * Automatically also subscribes to updates to all referenced/nested CoValues as soon as they are accessed in the listener.\n *\n * Check out the `load` methods on `CoMap`/`CoList`/`CoStream`/`Group`/`Account` to see which depth structures are valid to nest.\n *\n * Returns an unsubscribe function that you should call when you no longer need updates.\n *\n * Also see the `useCoState` hook to reactively subscribe to a CoValue in a React component.\n *\n * @category Subscription & Loading\n * @deprecated Use `co.plainText(...).subscribe` instead.\n */\n static subscribe<T extends CoPlainText>(\n this: CoValueClass<T>,\n id: ID<T>,\n listener: (value: Resolved<T, true>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<T extends CoPlainText>(\n this: CoValueClass<T>,\n id: ID<T>,\n options: Omit<SubscribeListenerOptions<T, true>, \"resolve\">,\n listener: (value: Resolved<T, true>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<T extends CoPlainText>(\n this: CoValueClass<T>,\n id: ID<T>,\n ...args: SubscribeRestArgs<T, true>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToCoValueWithoutMe<T, true>(this, id, options, listener);\n }\n\n /**\n * Allow CoPlainText to behave like a primitive string in most contexts (e.g.,\n * string concatenation, template literals, React rendering, etc.) by implementing\n * Symbol.toPrimitive. This eliminates the need to call .toString() explicitly.\n *\n * The 'hint' parameter indicates the preferred type of conversion:\n * - 'string': prefer string conversion\n * - 'number': prefer number conversion (attempt to parse the text as a number)\n * - 'default': usually treat as string\n */\n [Symbol.toPrimitive](hint: string) {\n if (hint === \"number\") {\n // Not meaningful for text, but required for completeness\n return Number(this.$jazz.raw.toString());\n }\n // For 'string' and 'default', return the string representation\n return this.$jazz.raw.toString();\n }\n}\n\nexport class CoTextJazzApi<T extends CoPlainText> extends CoValueJazzApi<T> {\n constructor(\n private coText: T,\n public raw: RawCoPlainText,\n ) {\n super(coText);\n }\n\n get id(): ID<T> {\n return this.raw.id;\n }\n\n get owner(): Group {\n return getCoValueOwner(this.coText);\n }\n\n /**\n * Apply text, modifying the text in place. Calculates the diff and applies it to the CoValue.\n *\n * @category Mutation\n */\n applyDiff(other: string) {\n const current = this.raw.toString();\n\n // Split both strings into grapheme arrays for proper comparison\n const currentGraphemes = this.raw.toGraphemes(current);\n const otherGraphemes = this.raw.toGraphemes(other);\n\n // Calculate the diff on grapheme arrays\n const patches = [...calcPatch(currentGraphemes, otherGraphemes)];\n\n // Apply patches in reverse order to avoid index shifting issues\n for (const [from, to, insert] of patches.reverse()) {\n if (to > from) {\n this.coText.deleteRange({ from, to });\n }\n if (insert.length > 0) {\n // Join the graphemes back into a string for insertion\n this.coText.insertBefore(from, this.raw.fromGraphemes(insert));\n }\n }\n }\n\n /**\n * Given an already loaded `CoPlainText`, subscribe to updates to the `CoPlainText` and ensure that the specified fields are loaded to the specified depth.\n *\n * Works like `CoPlainText.subscribe()`, but you don't need to pass the ID or the account to load as again.\n *\n * Returns an unsubscribe function that you should call when you no longer need updates.\n *\n * @category Subscription & Loading\n **/\n subscribe<T extends CoPlainText>(\n this: CoTextJazzApi<T>,\n listener: (value: Resolved<T, true>, unsubscribe: () => void) => void,\n ): () => void {\n return subscribeToExistingCoValue(this.coText, {}, listener);\n }\n}\n","import { CoPlainText } from \"./coPlainText.js\";\n\nexport class CoRichText extends CoPlainText {}\n","import { JsonValue, RawCoMap } from \"cojson\";\nimport {\n Account,\n AnonymousJazzAgent,\n CoMapInit_DEPRECATED,\n CoValue,\n CoValueBase,\n CoValueClass,\n CoValueFromRaw,\n CoValueJazzApi,\n Group,\n ID,\n Resolved,\n Simplify,\n SubscribeListenerOptions,\n SubscribeRestArgs,\n loadCoValueWithoutMe,\n parseSubscribeRestArgs,\n subscribeToCoValueWithoutMe,\n} from \"../internal.js\";\n\n/**\n * Extends `SchemaUnion` with a non-abstract constructor.\n */\nexport type SchemaUnionConcreteSubclass<V extends CoValue> =\n typeof SchemaUnion & CoValueClass<V>;\n\nexport type SchemaUnionDiscriminator<V extends CoValue> = (discriminable: {\n get(key: string): JsonValue | undefined;\n}) => CoValueClass<V> & CoValueFromRaw<V>;\n\n/**\n * SchemaUnion allows you to create union types of CoValues that can be discriminated at runtime.\n *\n * @categoryDescription Declaration\n * Declare your union types by extending `SchemaUnion.Of(...)` and passing a discriminator function that determines which concrete type to use based on the raw data.\n *\n * ```ts\n * import { SchemaUnion, CoMap } from \"jazz-tools\";\n *\n * class BaseWidget extends CoMap {\n * type = coField.string;\n * }\n *\n * class ButtonWidget extends BaseWidget {\n * type = coField.literal(\"button\");\n * label = coField.string;\n * }\n *\n * class SliderWidget extends BaseWidget {\n * type = coField.literal(\"slider\");\n * min = coField.number;\n * max = coField.number;\n * }\n *\n * const WidgetUnion = SchemaUnion.Of<BaseWidget>((raw) => {\n * switch (raw.get(\"type\")) {\n * case \"button\": return ButtonWidget;\n * case \"slider\": return SliderWidget;\n * default: throw new Error(\"Unknown widget type\");\n * }\n * });\n * ```\n *\n * @category CoValues\n */\nexport abstract class SchemaUnion extends CoValueBase implements CoValue {\n /**\n * Create a new union type from a discriminator function.\n *\n * The discriminator function receives the raw data and should return the appropriate concrete class to use for that data.\n *\n * When loading a SchemaUnion, the correct subclass will be instantiated based on the discriminator.\n *\n * @param discriminator - Function that determines which concrete type to use\n * @returns A new class that can create/load instances of the union type\n *\n * @example\n * ```ts\n * const WidgetUnion = SchemaUnion.Of<BaseWidget>((raw) => {\n * switch (raw.get(\"type\")) {\n * case \"button\": return ButtonWidget;\n * case \"slider\": return SliderWidget;\n * default: throw new Error(\"Unknown widget type\");\n * }\n * });\n *\n * const widget = await loadCoValue(WidgetUnion, id, me, {});\n *\n * // You can narrow the returned instance to a subclass by using `instanceof`\n * if (widget instanceof ButtonWidget) {\n * console.log(widget.label);\n * } else if (widget instanceof SliderWidget) {\n * console.log(widget.min, widget.max);\n * }\n * ```\n *\n * @category Declaration\n **/\n static Of<V extends CoValue>(\n discriminator: SchemaUnionDiscriminator<V>,\n ): SchemaUnionConcreteSubclass<V> {\n return class SchemaUnionClass extends SchemaUnion {\n declare $jazz: CoValueJazzApi<this>;\n\n static override create<V extends CoValue>(\n this: CoValueClass<V>,\n init: Simplify<CoMapInit_DEPRECATED<V>>,\n owner: Account | Group,\n ): V {\n const ResolvedClass = discriminator(new Map(Object.entries(init)));\n // @ts-expect-error - create is a static method in the CoMap class\n return ResolvedClass.create(init, owner);\n }\n\n static override fromRaw<T extends CoValue>(\n this: CoValueClass<T> & CoValueFromRaw<T>,\n raw: T[\"$jazz\"][\"raw\"],\n ): T {\n const ResolvedClass = discriminator(\n raw as RawCoMap,\n ) as unknown as CoValueClass<T> & CoValueFromRaw<T>;\n return ResolvedClass.fromRaw(raw);\n }\n } as unknown as SchemaUnionConcreteSubclass<V>;\n }\n\n static create<V extends CoValue>(\n this: CoValueClass<V>,\n init: Simplify<CoMapInit_DEPRECATED<V>>,\n owner: Account | Group,\n ): V {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Create an instance from raw data. This is called internally and should not be used directly.\n * Use {@link SchemaUnion.Of} to create a union type instead.\n *\n * @internal\n */\n static fromRaw<V extends CoValue>(\n this: CoValueClass<V>,\n raw: V[\"$jazz\"][\"raw\"],\n ): V {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Load a `SchemaUnion` with a given ID, as a given account.\n *\n * Note: The `resolve` option is not supported for `SchemaUnion`s due to https://github.com/garden-co/jazz/issues/2639\n *\n * @category Subscription & Loading\n */\n static load<M extends SchemaUnion>(\n this: CoValueClass<M>,\n id: ID<M>,\n options?: {\n loadAs?: Account | AnonymousJazzAgent;\n skipRetry?: boolean;\n },\n ): Promise<Resolved<M, true> | null> {\n return loadCoValueWithoutMe(this, id, options);\n }\n\n /**\n * Load and subscribe to a `CoMap` with a given ID, as a given account.\n *\n * Automatically also subscribes to updates to all referenced/nested CoValues as soon as they are accessed in the listener.\n *\n * Returns an unsubscribe function that you should call when you no longer need updates.\n *\n * Also see the `useCoState` hook to reactively subscribe to a CoValue in a React component.\n *\n * Note: The `resolve` option is not supported for `SchemaUnion`s due to https://github.com/garden-co/jazz/issues/2639\n *\n * @category Subscription & Loading\n */\n static subscribe<M extends SchemaUnion>(\n this: CoValueClass<M>,\n id: ID<M>,\n listener: (value: Resolved<M, true>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<M extends SchemaUnion>(\n this: CoValueClass<M>,\n id: ID<M>,\n options: SubscribeListenerOptions<M, true>,\n listener: (value: Resolved<M, true>, unsubscribe: () => void) => void,\n ): () => void;\n static subscribe<M extends SchemaUnion>(\n this: CoValueClass<M>,\n id: ID<M>,\n ...args: SubscribeRestArgs<M, true>\n ): () => void {\n const { options, listener } = parseSubscribeRestArgs(args);\n return subscribeToCoValueWithoutMe<M, true>(this, id, options, listener);\n }\n}\n","import { LocalNode } from \"cojson\";\nimport { TypeSym } from \"./symbols.js\";\n\nexport class AnonymousJazzAgent {\n [TypeSym] = \"Anonymous\" as const;\n constructor(public node: LocalNode) {}\n}\n","import type { Account } from \"../internal.js\";\n\nclass ActiveAccountContext {\n private activeAccount: Account | null = null;\n private guestMode: boolean = false;\n\n set(account: Account | null) {\n this.activeAccount = account;\n this.guestMode = false;\n }\n\n setGuestMode() {\n this.activeAccount = null;\n this.guestMode = true;\n }\n\n maybeGet() {\n return this.activeAccount;\n }\n\n get() {\n if (!this.activeAccount) {\n if (this.guestMode) {\n throw new Error(\n \"Something that expects a full active account was called in guest mode.\",\n );\n }\n\n throw new Error(\"No active account\");\n }\n\n return this.activeAccount;\n }\n}\n\nexport type { ActiveAccountContext };\n\nexport const activeAccountContext = new ActiveAccountContext();\n","import { type Account } from \"../coValues/account.js\";\nimport type {\n AnonymousJazzAgent,\n CoValue,\n ID,\n RefEncoded,\n} from \"../internal.js\";\nimport {\n accessChildById,\n getSubscriptionScope,\n isRefEncoded,\n} from \"../internal.js\";\n\nexport class Ref<out V extends CoValue> {\n constructor(\n readonly id: ID<V>,\n readonly controlledAccount: Account | AnonymousJazzAgent,\n readonly schema: RefEncoded<V>,\n readonly parent: CoValue,\n ) {\n if (!isRefEncoded(schema)) {\n throw new Error(\"Ref must be constructed with a ref schema\");\n }\n }\n\n async load(): Promise<V | null> {\n const subscriptionScope = getSubscriptionScope(this.parent);\n\n subscriptionScope.subscribeToId(this.id, this.schema);\n\n const node = subscriptionScope.childNodes.get(this.id);\n\n if (!node) {\n return null;\n }\n\n const value = node.value;\n\n if (value?.type === \"loaded\") {\n return value.value as V;\n } else {\n return new Promise((resolve) => {\n const unsubscribe = node.subscribe((value) => {\n if (value?.type === \"loaded\") {\n unsubscribe();\n resolve(value.value as V);\n } else if (value?.type === \"unavailable\") {\n unsubscribe();\n resolve(null);\n } else if (value?.type === \"unauthorized\") {\n unsubscribe();\n resolve(null);\n }\n });\n });\n }\n }\n\n get value(): V | null | undefined {\n return accessChildById(this.parent, this.id, this.schema);\n }\n}\n\nexport function makeRefs<Keys extends string | number>(\n parent: CoValue,\n getIdForKey: (key: Keys) => ID<CoValue> | undefined,\n getKeysWithIds: () => Keys[],\n controlledAccount: Account | AnonymousJazzAgent,\n refSchemaForKey: (key: Keys) => RefEncoded<CoValue>,\n): { [K in Keys]: Ref<CoValue> } & {\n [Symbol.iterator]: () => IterableIterator<Ref<CoValue>>;\n length: number;\n} {\n const refs = {} as { [K in Keys]: Ref<CoValue> } & {\n [Symbol.iterator]: () => IterableIterator<Ref<CoValue>>;\n length: number;\n };\n return new Proxy(refs, {\n get(_target, key) {\n if (key === Symbol.iterator) {\n return function* () {\n for (const key of getKeysWithIds()) {\n yield new Ref(\n getIdForKey(key)!,\n controlledAccount,\n refSchemaForKey(key),\n parent,\n );\n }\n };\n }\n if (typeof key === \"symbol\") return undefined;\n if (key === \"length\") {\n return getKeysWithIds().length;\n }\n const id = getIdForKey(key as Keys);\n if (!id) return undefined;\n return new Ref(\n id as ID<CoValue>,\n controlledAccount,\n refSchemaForKey(key as Keys),\n parent,\n );\n },\n ownKeys() {\n return getKeysWithIds().map((key) => key.toString());\n },\n getOwnPropertyDescriptor(target, key) {\n const id = getIdForKey(key as Keys);\n if (id) {\n return {\n enumerable: true,\n configurable: true,\n writable: true,\n };\n } else {\n return Reflect.getOwnPropertyDescriptor(target, key);\n }\n },\n });\n}\n\nexport type RefIfCoValue<V> = NonNullable<V> extends CoValue\n ? Ref<NonNullable<V>>\n : never;\n","import type { JsonValue, RawCoValue } from \"cojson\";\nimport { CojsonInternalTypes } from \"cojson\";\nimport {\n Account,\n type CoValue,\n type CoValueClass,\n CoValueFromRaw,\n Group,\n ItemsSym,\n SchemaInit,\n isCoValueClass,\n} from \"../internal.js\";\n\n/** @category Schema definition */\nexport const Encoders = {\n Date: {\n encode: (value: Date) => value.toISOString(),\n decode: (value: JsonValue) => new Date(value as string),\n },\n OptionalDate: {\n encode: (value: Date | undefined) => value?.toISOString() || null,\n decode: (value: JsonValue) =>\n value === null ? undefined : new Date(value as string),\n },\n};\n\nconst optional = {\n ref: optionalRef,\n json<T extends CojsonInternalTypes.CoJsonValue<T>>(): T | undefined {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { [SchemaInit]: \"json\" satisfies Schema } as any;\n },\n encoded<T>(arg: OptionalEncoder<T>): T | undefined {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { [SchemaInit]: { encoded: arg } satisfies Schema } as any;\n },\n string: {\n [SchemaInit]: \"json\" satisfies Schema,\n } as unknown as string | undefined,\n number: {\n [SchemaInit]: \"json\" satisfies Schema,\n } as unknown as number | undefined,\n boolean: {\n [SchemaInit]: \"json\" satisfies Schema,\n } as unknown as boolean | undefined,\n null: {\n [SchemaInit]: \"json\" satisfies Schema,\n } as unknown as null | undefined,\n Date: {\n [SchemaInit]: { encoded: Encoders.OptionalDate } satisfies Schema,\n } as unknown as Date | undefined,\n literal<T extends (string | number | boolean)[]>(\n ..._lit: T\n ): T[number] | undefined {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { [SchemaInit]: \"json\" satisfies Schema } as any;\n },\n};\n\n/** @category Schema definition */\nexport const coField = {\n string: {\n [SchemaInit]: \"json\" satisfies Schema,\n } as unknown as string,\n number: {\n [SchemaInit]: \"json\" satisfies Schema,\n } as unknown as number,\n boolean: {\n [SchemaInit]: \"json\" satisfies Schema,\n } as unknown as boolean,\n null: {\n [SchemaInit]: \"json\" satisfies Schema,\n } as unknown as null,\n Date: {\n [SchemaInit]: { encoded: Encoders.Date } satisfies Schema,\n } as unknown as Date,\n literal<T extends (string | number | boolean)[]>(..._lit: T): T[number] {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { [SchemaInit]: \"json\" satisfies Schema } as any;\n },\n json<T extends CojsonInternalTypes.CoJsonValue<T>>(): T {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { [SchemaInit]: \"json\" satisfies Schema } as any;\n },\n encoded<T>(arg: Encoder<T>): T {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { [SchemaInit]: { encoded: arg } satisfies Schema } as any;\n },\n ref,\n items: ItemsSym as ItemsSym,\n optional,\n};\n\nfunction optionalRef<C extends CoValueClass>(\n arg: C | ((raw: InstanceType<C>[\"$jazz\"][\"raw\"]) => C),\n): InstanceType<C> | null | undefined {\n return ref(arg, { optional: true });\n}\n\nfunction ref<C extends CoValueClass>(\n arg: C | ((raw: InstanceType<C>[\"$jazz\"][\"raw\"]) => C),\n options?: never,\n): InstanceType<C> | null;\nfunction ref<C extends CoValueClass>(\n arg: C | ((raw: InstanceType<C>[\"$jazz\"][\"raw\"]) => C),\n options: { optional: true },\n): InstanceType<C> | null | undefined;\nfunction ref<\n C extends CoValueClass,\n Options extends { optional?: boolean } | undefined,\n>(\n arg: C | ((raw: InstanceType<C>[\"$jazz\"][\"raw\"]) => C),\n options?: Options,\n): Options extends { optional: true }\n ? InstanceType<C> | null | undefined\n : InstanceType<C> | null {\n return {\n [SchemaInit]: {\n ref: arg,\n optional: options?.optional || false,\n } satisfies Schema,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any;\n}\n\nexport type JsonEncoded = \"json\";\nexport type EncodedAs<V> = { encoded: Encoder<V> | OptionalEncoder<V> };\nexport type RefEncoded<V extends CoValue> = {\n ref: CoValueClass<V> | ((raw: RawCoValue) => CoValueClass<V>);\n optional: boolean;\n};\n\nexport function isRefEncoded<V extends CoValue>(\n schema: Schema,\n): schema is RefEncoded<V> {\n return (\n typeof schema === \"object\" &&\n \"ref\" in schema &&\n \"optional\" in schema &&\n typeof schema.ref === \"function\"\n );\n}\n\nexport function instantiateRefEncodedFromRaw<V extends CoValue>(\n schema: RefEncoded<V>,\n raw: RawCoValue,\n): V {\n return isCoValueClass<V>(schema.ref)\n ? schema.ref.fromRaw(raw)\n : (schema.ref as (raw: RawCoValue) => CoValueClass<V> & CoValueFromRaw<V>)(\n raw,\n ).fromRaw(raw);\n}\n\n/**\n * Creates a new CoValue of the given ref type, using the provided init values.\n *\n * @param schema - The schema of the CoValue to create.\n * @param init - The init values to use to create the CoValue.\n * @param parentOwner - The owner of the referencing CoValue. Will be used\n * as the parent group of the created CoValue's group\n * @returns The created CoValue.\n */\nexport function instantiateRefEncodedWithInit<V extends CoValue>(\n schema: RefEncoded<V>,\n init: any,\n parentOwner: Group,\n): V {\n if (!isCoValueClass<V>(schema.ref)) {\n throw Error(\n `Cannot automatically create CoValue from value: ${JSON.stringify(init)}. Use the CoValue schema's create() method instead.`,\n );\n }\n const node = parentOwner.$jazz.localNode;\n const rawGroup = node.createGroup();\n const owner = new Group({ fromRaw: rawGroup });\n owner.addMember(parentOwner);\n // @ts-expect-error - create is a static method in all CoValue classes\n return schema.ref.create(init, owner);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Schema = JsonEncoded | RefEncoded<CoValue> | EncodedAs<any>;\n\nexport type SchemaFor<Field> = NonNullable<Field> extends CoValue\n ? RefEncoded<NonNullable<Field>>\n : NonNullable<Field> extends JsonValue\n ? JsonEncoded\n : EncodedAs<NonNullable<Field>>;\n\nexport type Encoder<V> = {\n encode: (value: V) => JsonValue;\n decode: (value: JsonValue) => V;\n};\nexport type OptionalEncoder<V> =\n | Encoder<V>\n | {\n encode: (value: V | undefined) => JsonValue;\n decode: (value: JsonValue) => V | undefined;\n };\n","import { TypeSym, type CoValue } from \"../internal.js\";\n\nexport function applyCoValueMigrations(instance: CoValue) {\n const node = instance.$jazz.raw.core.node;\n\n // @ts-expect-error _migratedCoValues is a custom expando property\n const migratedCoValues = (node._migratedCoValues ??= new Set<string>());\n\n if (\n \"migrate\" in instance &&\n typeof instance.migrate === \"function\" &&\n instance[TypeSym] !== \"Account\" &&\n !migratedCoValues.has(instance.$jazz.id)\n ) {\n // We flag this before the migration to avoid that internal loads trigger the migration again\n migratedCoValues.add(instance.$jazz.id);\n\n const result = instance.migrate?.(instance);\n if (result && \"then\" in result) {\n throw new Error(\"Migration function cannot be async\");\n }\n }\n}\n","import { CoValueCore, LocalNode, RawCoID, RawCoValue } from \"cojson\";\nimport type { Account, Group } from \"../internal.js\";\n\nexport type BranchDefinition = { name: string; owner?: Group | Account };\n\n/**\n * Manages subscriptions to CoValue cores, handling both direct subscriptions\n * and branch-based subscriptions with automatic loading and error handling.\n *\n * It tries to resolve the value immediately if already available in memory.\n */\nexport class CoValueCoreSubscription {\n private _unsubscribe: () => void = () => {};\n private unsubscribed = false;\n\n private branchOwnerId?: RawCoID;\n private branchName?: string;\n private source: CoValueCore;\n private localNode: LocalNode;\n private listener: (value: RawCoValue | \"unavailable\") => void;\n private skipRetry?: boolean;\n\n constructor(\n localNode: LocalNode,\n id: string,\n listener: (value: RawCoValue | \"unavailable\") => void,\n skipRetry?: boolean,\n branch?: BranchDefinition,\n ) {\n this.localNode = localNode;\n this.listener = listener;\n this.skipRetry = skipRetry;\n this.branchName = branch?.name;\n this.branchOwnerId = branch?.owner?.$jazz.raw.id;\n this.source = localNode.getCoValue(id as RawCoID);\n\n this.initializeSubscription();\n }\n\n /**\n * Main entry point for subscription initialization.\n * Determines the subscription strategy based on current availability and branch requirements.\n */\n private initializeSubscription(): void {\n const source = this.source;\n\n // If the CoValue is already available, handle it immediately\n if (source.isAvailable()) {\n this.handleAvailableSource(source);\n return;\n }\n\n // If a specific branch is requested while the source is not available, attempt to checkout that branch\n if (this.branchName) {\n this.handleBranchCheckout();\n return;\n }\n\n // If we don't have a branch requested, load the CoValue\n this.loadCoValue();\n }\n\n /**\n * Handles the case where the CoValue source is immediately available.\n * Either subscribes directly or attempts to get the requested branch.\n */\n private handleAvailableSource(source: CoValueCore): void {\n if (!this.branchName) {\n this.subscribe(source.getCurrentContent());\n return;\n }\n\n // Try to get the specific branch from the available source\n const branch = source.getBranch(this.branchName, this.branchOwnerId);\n\n if (branch.isAvailable()) {\n // Branch is available, subscribe to it\n this.subscribe(branch.getCurrentContent());\n return;\n } else {\n // Branch not available, fall through to checkout logic\n this.handleBranchCheckout();\n }\n }\n\n /**\n * Attempts to checkout a specific branch of the CoValue.\n * This is called when the source isn't available but a branch is requested.\n */\n private handleBranchCheckout(): void {\n this.localNode\n .checkoutBranch(this.source.id, this.branchName!, this.branchOwnerId)\n .then((value) => {\n if (this.unsubscribed) return;\n\n if (value !== \"unavailable\") {\n // Branch checkout successful, subscribe to it\n this.subscribe(value);\n } else {\n // Branch checkout failed, handle the error\n this.handleUnavailableBranch();\n }\n })\n .catch((error) => {\n // Handle unexpected errors during branch checkout\n console.error(error);\n this.emit(\"unavailable\");\n });\n }\n\n /**\n * Handles the case where a branch checkout fails.\n * Determines whether to retry or report unavailability.\n */\n private handleUnavailableBranch(): void {\n const source = this.source;\n if (source.isAvailable()) {\n // This should be impossible - if source is available we can create the branch and it should be available\n throw new Error(\"Branch is unavailable\");\n }\n\n // Source isn't available either, subscribe to state changes and report unavailability\n this.subscribeToUnavailableSource();\n this.emit(\"unavailable\");\n }\n\n /**\n * Loads the CoValue core from the network/storage.\n * This is the fallback strategy when immediate availability fails.\n */\n private loadCoValue(): void {\n this.localNode\n .loadCoValueCore(this.source.id, undefined, this.skipRetry)\n .then((value) => {\n if (this.unsubscribed) return;\n\n if (value.isAvailable()) {\n // Loading successful, subscribe to the loaded value\n this.subscribe(value.getCurrentContent());\n } else {\n // Loading failed, subscribe to state changes and report unavailability\n this.subscribeToUnavailableSource();\n this.emit(\"unavailable\");\n }\n })\n .catch((error) => {\n // Handle unexpected errors during loading\n console.error(error);\n this.emit(\"unavailable\");\n });\n }\n\n /**\n * Subscribes to state changes of an unavailable CoValue source.\n * This allows the subscription to become active when the source becomes available after a first loading attempt.\n */\n private subscribeToUnavailableSource(): void {\n const source = this.source;\n\n const handleStateChange = (\n _: CoValueCore,\n unsubFromStateChange: () => void,\n ) => {\n // We are waiting for the source to become available, it's ok to wait indefinitiely\n // until either this becomes available or we unsubscribe, because we have already\n // emitted an \"unavailable\" event.\n if (!source.isAvailable()) {\n return;\n }\n\n unsubFromStateChange();\n\n if (this.branchName) {\n // Branch was requested, attempt checkout again\n this.handleBranchCheckout();\n } else {\n // No branch requested, subscribe directly and cleanup state subscription\n this.subscribe(source.getCurrentContent());\n }\n };\n\n // Subscribe to state changes and store the unsubscribe function\n this._unsubscribe = source.subscribe(handleStateChange);\n }\n\n /**\n * Subscribes to a specific CoValue and notifies the listener.\n * This is the final step where we actually start receiving updates.\n */\n private subscribe(value: RawCoValue): void {\n if (this.unsubscribed) return;\n\n // Subscribe to the value and store the unsubscribe function\n this._unsubscribe = value.subscribe((value) => {\n this.emit(value);\n });\n }\n\n emit(value: RawCoValue | \"unavailable\"): void {\n if (this.unsubscribed) return;\n\n this.listener(value);\n }\n\n /**\n * Unsubscribes from all active subscriptions and marks the instance as unsubscribed.\n * This prevents any further operations and ensures proper cleanup.\n */\n unsubscribe(): void {\n if (this.unsubscribed) return;\n this.unsubscribed = true;\n this._unsubscribe();\n }\n}\n","import type { CoValue, ID } from \"../internal.js\";\n\nexport class JazzError {\n constructor(\n public id: ID<CoValue> | undefined,\n public type: \"unavailable\" | \"unauthorized\",\n public issues: JazzErrorIssue[],\n ) {}\n\n toString() {\n return this.issues\n .map((issue) => {\n let message = `${issue.message}`;\n\n if (this.id) {\n message += ` from ${this.id}`;\n }\n\n if (issue.path.length > 0) {\n message += ` on path ${issue.path.join(\".\")}`;\n }\n\n return message;\n })\n .join(\"\\n\");\n }\n\n prependPath(item: string) {\n if (this.issues.length === 0) {\n return this;\n }\n\n const issues = this.issues.map((issue) => {\n return {\n ...issue,\n path: [item].concat(issue.path),\n };\n });\n\n return new JazzError(this.id, this.type, issues);\n }\n}\nexport type JazzErrorIssue = {\n code: \"unavailable\" | \"unauthorized\" | \"validationError\";\n message: string;\n params: Record<string, any>;\n path: string[];\n};\n","import { RawAccount, RawCoValue, Role } from \"cojson\";\nimport { RegisteredSchemas } from \"../coValues/registeredSchemas.js\";\nimport {\n CoValue,\n RefEncoded,\n accountOrGroupToGroup,\n instantiateRefEncodedFromRaw,\n} from \"../internal.js\";\nimport { coValuesCache } from \"../lib/cache.js\";\nimport { SubscriptionScope } from \"./SubscriptionScope.js\";\n\nexport function myRoleForRawValue(raw: RawCoValue): Role | undefined {\n const rawOwner = raw.group;\n\n const owner = coValuesCache.get(rawOwner, () =>\n rawOwner instanceof RawAccount\n ? RegisteredSchemas[\"Account\"].fromRaw(rawOwner)\n : RegisteredSchemas[\"Group\"].fromRaw(rawOwner),\n );\n\n return accountOrGroupToGroup(owner).myRole();\n}\n\nexport function createCoValue<D extends CoValue>(\n ref: RefEncoded<D>,\n raw: RawCoValue,\n subscriptionScope: SubscriptionScope<D>,\n) {\n const freshValueInstance = instantiateRefEncodedFromRaw(ref, raw);\n\n Object.defineProperty(freshValueInstance.$jazz, \"_subscriptionScope\", {\n value: subscriptionScope,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n\n return {\n type: \"loaded\" as const,\n value: freshValueInstance,\n id: subscriptionScope.id,\n };\n}\n","import { RawCoValue } from \"cojson\";\nimport { CoValue } from \"../internal.js\";\n\nconst weakMap = new WeakMap<RawCoValue, CoValue>();\n\nexport const coValuesCache = {\n get: <V extends CoValue>(raw: RawCoValue, compute: () => V) => {\n const cached = weakMap.get(raw);\n if (cached) {\n return cached as V;\n }\n const computed = compute();\n weakMap.set(raw, computed);\n return computed;\n },\n};\n","import type { LocalNode, RawCoValue } from \"cojson\";\nimport {\n CoFeed,\n CoList,\n CoMap,\n type CoValue,\n type ID,\n type RefEncoded,\n type RefsToResolve,\n TypeSym,\n instantiateRefEncodedFromRaw,\n isRefEncoded,\n} from \"../internal.js\";\nimport { applyCoValueMigrations } from \"../lib/migration.js\";\nimport { CoValueCoreSubscription } from \"./CoValueCoreSubscription.js\";\nimport { JazzError, type JazzErrorIssue } from \"./JazzError.js\";\nimport type { SubscriptionValue, Unloaded } from \"./types.js\";\nimport { createCoValue, myRoleForRawValue } from \"./utils.js\";\n\nexport class SubscriptionScope<D extends CoValue> {\n childNodes = new Map<string, SubscriptionScope<CoValue>>();\n childValues: Map<string, SubscriptionValue<any, any> | Unloaded> = new Map<\n string,\n SubscriptionValue<D, any>\n >();\n value: SubscriptionValue<D, any> | Unloaded;\n childErrors: Map<string, JazzError> = new Map();\n validationErrors: Map<string, JazzError> = new Map();\n errorFromChildren: JazzError | undefined;\n subscription: CoValueCoreSubscription;\n dirty = false;\n resolve: RefsToResolve<any>;\n idsSubscribed = new Set<string>();\n autoloaded = new Set<string>();\n autoloadedKeys = new Set<string>();\n skipInvalidKeys = new Set<string>();\n totalValidTransactions = 0;\n migrated = false;\n migrating = false;\n\n silenceUpdates = false;\n\n constructor(\n public node: LocalNode,\n resolve: RefsToResolve<D>,\n public id: ID<D>,\n public schema: RefEncoded<D>,\n public skipRetry = false,\n public bestEffortResolution = false,\n ) {\n this.resolve = resolve;\n this.value = { type: \"unloaded\", id };\n\n let lastUpdate: RawCoValue | \"unavailable\" | undefined;\n this.subscription = new CoValueCoreSubscription(\n node,\n id,\n (value) => {\n lastUpdate = value;\n\n if (skipRetry && value === \"unavailable\") {\n this.handleUpdate(value);\n this.destroy();\n return;\n }\n\n // Need all these checks because the migration can trigger new syncronous updates\n //\n // We want to:\n // - Run the migration only once\n // - Skip all the updates until the migration is done\n // - Trigger handleUpdate only with the final value\n if (!this.migrated && value !== \"unavailable\") {\n if (this.migrating) {\n return;\n }\n\n this.migrating = true;\n applyCoValueMigrations(\n instantiateRefEncodedFromRaw(this.schema, value),\n );\n this.migrated = true;\n this.handleUpdate(lastUpdate);\n return;\n }\n\n this.handleUpdate(value);\n },\n skipRetry,\n );\n }\n\n updateValue(value: SubscriptionValue<D, any>) {\n this.value = value;\n\n // Flags that the value has changed and we need to trigger an update\n this.dirty = true;\n }\n\n handleUpdate(update: RawCoValue | \"unavailable\") {\n if (update === \"unavailable\") {\n if (this.value.type === \"unloaded\") {\n this.updateValue(\n new JazzError(this.id, \"unavailable\", [\n {\n code: \"unavailable\",\n message: \"The value is unavailable\",\n params: {\n id: this.id,\n },\n path: [],\n },\n ]),\n );\n }\n this.triggerUpdate();\n return;\n }\n\n const ruleset = update.core.verified.header.ruleset;\n\n // Groups and accounts are accessible by everyone, for the other coValues we use the role to check access\n const hasAccess =\n ruleset.type !== \"ownedByGroup\" ||\n myRoleForRawValue(update) !== undefined;\n\n if (!hasAccess) {\n if (this.value.type !== \"unauthorized\") {\n this.updateValue(\n new JazzError(this.id, \"unauthorized\", [\n {\n code: \"unauthorized\",\n message: `The current user (${this.node.getCurrentAgent().id}) is not authorized to access this value`,\n params: {\n id: this.id,\n },\n path: [],\n },\n ]),\n );\n this.triggerUpdate();\n }\n return;\n }\n\n // When resolving a CoValue with available children, we want to trigger a single update\n // after loading all the children, not one per children\n this.silenceUpdates = true;\n\n if (this.value.type !== \"loaded\") {\n this.updateValue(createCoValue(this.schema, update, this));\n this.loadChildren();\n } else {\n const hasChanged =\n update.totalValidTransactions !== this.totalValidTransactions ||\n // Checking the identity of the raw value makes us cover the cases where the group\n // has been updated and the coValues that don't update the totalValidTransactions value (e.g. FileStream)\n this.value.value.$jazz.raw !== update;\n\n if (this.loadChildren()) {\n this.updateValue(createCoValue(this.schema, update, this));\n } else if (hasChanged) {\n this.updateValue(createCoValue(this.schema, update, this));\n }\n }\n\n this.totalValidTransactions = update.totalValidTransactions;\n\n this.silenceUpdates = false;\n this.triggerUpdate();\n }\n\n computeChildErrors() {\n let issues: JazzErrorIssue[] = [];\n let errorType: JazzError[\"type\"] = \"unavailable\";\n\n if (this.childErrors.size === 0 && this.validationErrors.size === 0) {\n return undefined;\n }\n\n if (this.bestEffortResolution) {\n return undefined;\n }\n\n for (const [key, value] of this.childErrors.entries()) {\n // We don't want to block updates if the error is on an autoloaded value\n if (this.autoloaded.has(key)) {\n continue;\n }\n\n if (this.skipInvalidKeys.has(key)) {\n continue;\n }\n\n errorType = value.type;\n if (value.issues) {\n issues.push(...value.issues);\n }\n }\n\n for (const [key, value] of this.validationErrors.entries()) {\n if (this.skipInvalidKeys.has(key)) {\n continue;\n }\n\n errorType = value.type;\n if (value.issues) {\n issues.push(...value.issues);\n }\n }\n\n if (issues.length) {\n return new JazzError(this.id, errorType, issues);\n }\n\n return undefined;\n }\n\n handleChildUpdate = (\n id: string,\n value: SubscriptionValue<any, any> | Unloaded,\n key?: string,\n ) => {\n if (value.type === \"unloaded\") {\n return;\n }\n\n this.childValues.set(id, value);\n\n if (value.type === \"unavailable\" || value.type === \"unauthorized\") {\n this.childErrors.set(id, value.prependPath(key ?? id));\n\n this.errorFromChildren = this.computeChildErrors();\n } else if (this.errorFromChildren && this.childErrors.has(id)) {\n this.childErrors.delete(id);\n\n this.errorFromChildren = this.computeChildErrors();\n }\n\n if (this.shouldSendUpdates()) {\n if (this.value.type === \"loaded\") {\n // On child updates, we re-create the value instance to make the updates\n // seamless-immutable and so be compatible with React and the React compiler\n this.updateValue(\n createCoValue(this.schema, this.value.value.$jazz.raw, this),\n );\n }\n }\n\n this.triggerUpdate();\n };\n\n shouldSendUpdates() {\n if (this.value.type === \"unloaded\") return false;\n\n // If the value is in error, we send the update regardless of the children statuses\n if (this.value.type !== \"loaded\") return true;\n\n if (this.isStreaming() && !this.isFileStream()) {\n return false;\n }\n\n for (const value of this.childValues.values()) {\n // We don't wait for autoloaded values to be loaded, in order to stream updates\n // on autoloaded lists or records\n if (value.type === \"unloaded\" && !this.autoloaded.has(value.id)) {\n return false;\n }\n }\n\n return true;\n }\n\n getCurrentValue() {\n if (\n this.value.type === \"unauthorized\" ||\n this.value.type === \"unavailable\"\n ) {\n console.error(this.value.toString());\n return null;\n }\n\n if (!this.shouldSendUpdates()) {\n return undefined;\n }\n\n if (this.errorFromChildren) {\n console.error(this.errorFromChildren.toString());\n return null;\n }\n\n if (this.value.type === \"loaded\") {\n return this.value.value;\n }\n\n return undefined;\n }\n\n isStreaming() {\n if (this.value.type !== \"loaded\") {\n return false;\n }\n\n return this.value.value.$jazz.raw.core.verified.isStreaming();\n }\n\n isFileStream() {\n if (this.value.type !== \"loaded\") {\n return false;\n }\n\n return (\n this.value.value.$jazz.raw.core.verified.header.meta?.type === \"binary\"\n );\n }\n\n triggerUpdate() {\n if (!this.shouldSendUpdates()) return;\n if (!this.dirty) return;\n if (this.subscribers.size === 0) return;\n if (this.silenceUpdates) return;\n\n const error = this.errorFromChildren;\n const value = this.value;\n\n if (error) {\n this.subscribers.forEach((listener) => listener(error));\n } else if (value.type !== \"unloaded\") {\n this.subscribers.forEach((listener) => listener(value));\n }\n\n this.dirty = false;\n }\n\n subscribers = new Set<(value: SubscriptionValue<D, any>) => void>();\n subscribe(listener: (value: SubscriptionValue<D, any>) => void) {\n this.subscribers.add(listener);\n\n return () => {\n this.subscribers.delete(listener);\n };\n }\n\n setListener(listener: (value: SubscriptionValue<D, any>) => void) {\n this.subscribers.add(listener);\n this.triggerUpdate();\n }\n\n subscribeToKey(key: string) {\n if (this.resolve === true || !this.resolve) {\n this.resolve = {};\n }\n\n if (!this.resolve.$each && !(key in this.resolve)) {\n const resolve = this.resolve as Record<string, any>;\n\n // Adding the key to the resolve object to resolve the key when calling loadChildren\n resolve[key] = true;\n // Track the keys that are autoloaded to flag any id on that key as autoloaded\n this.autoloadedKeys.add(key);\n }\n\n if (this.value.type !== \"loaded\") {\n return;\n }\n\n const value = this.value.value;\n\n // We don't want to trigger an update when autoloading available children\n // because on userland it looks like nothing has changed since the value\n // is available on the first access\n // This helps alot with correctness when triggering the autoloading while rendering components (on React and Svelte)\n this.silenceUpdates = true;\n\n if (value[TypeSym] === \"CoMap\" || value[TypeSym] === \"Account\") {\n const map = value as CoMap;\n\n this.loadCoMapKey(map, key, true);\n } else if (value[TypeSym] === \"CoList\") {\n const list = value as CoList;\n\n this.loadCoListKey(list, key, true);\n }\n\n this.silenceUpdates = false;\n }\n\n subscribeToId(id: string, descriptor: RefEncoded<any>) {\n if (this.idsSubscribed.has(id) || this.childValues.has(id)) {\n return;\n }\n\n this.idsSubscribed.add(id);\n this.autoloaded.add(id);\n\n // We don't want to trigger an update when autoloading available children\n // because on userland it looks like nothing has changed since the value\n // is available on the first access\n // This helps alot with correctness when triggering the autoloading while rendering components (on React and Svelte)\n this.silenceUpdates = true;\n\n this.childValues.set(id, { type: \"unloaded\", id });\n const child = new SubscriptionScope(\n this.node,\n true,\n id as ID<any>,\n descriptor,\n this.skipRetry,\n this.bestEffortResolution,\n );\n this.childNodes.set(id, child);\n child.setListener((value) => this.handleChildUpdate(id, value));\n\n this.silenceUpdates = false;\n }\n\n loadChildren() {\n const { resolve } = this;\n\n if (this.value.type !== \"loaded\") {\n return false;\n }\n\n const value = this.value.value;\n\n const depth =\n typeof resolve !== \"object\" || resolve === null ? {} : (resolve as any);\n\n let hasChanged = false;\n\n const idsToLoad = new Set<string>(this.idsSubscribed);\n\n const coValueType = value[TypeSym];\n\n if (Object.keys(depth).length > 0) {\n if (\n coValueType === \"CoMap\" ||\n coValueType === \"Account\" ||\n coValueType === \"Group\"\n ) {\n const map = value as CoMap;\n const keys =\n \"$each\" in depth ? map.$jazz.raw.keys() : Object.keys(depth);\n\n for (const key of keys) {\n const id = this.loadCoMapKey(map, key, depth[key] ?? depth.$each);\n\n if (id) {\n idsToLoad.add(id);\n }\n }\n } else if (value[TypeSym] === \"CoList\") {\n const list = value as CoList;\n\n const descriptor = list.$jazz.getItemsDescriptor();\n\n if (descriptor && isRefEncoded(descriptor)) {\n list.$jazz.raw.processNewTransactions();\n const entries = list.$jazz.raw.entries();\n const keys =\n \"$each\" in depth ? Object.keys(entries) : Object.keys(depth);\n\n for (const key of keys) {\n const id = this.loadCoListKey(list, key, depth[key] ?? depth.$each);\n\n if (id) {\n idsToLoad.add(id);\n }\n }\n }\n } else if (value[TypeSym] === \"CoStream\") {\n const stream = value as CoFeed;\n const descriptor = stream.$jazz.getItemsDescriptor();\n\n if (descriptor && isRefEncoded(descriptor)) {\n for (const session of stream.$jazz.raw.sessions()) {\n const values = stream.$jazz.raw.items[session] ?? [];\n\n for (const [i, item] of values.entries()) {\n const key = `${session}/${i}`;\n\n if (!depth.$each && !depth[key]) {\n continue;\n }\n\n const id = item.value as string | undefined;\n\n if (id) {\n idsToLoad.add(id);\n this.loadChildNode(id, depth[key] ?? depth.$each, descriptor);\n this.validationErrors.delete(key);\n } else if (!descriptor.optional) {\n this.validationErrors.set(\n key,\n new JazzError(undefined, \"unavailable\", [\n {\n code: \"validationError\",\n message: `The ref on position ${key} requested on ${stream.constructor.name} is missing`,\n params: {},\n path: [key],\n },\n ]),\n );\n }\n }\n }\n }\n }\n }\n\n this.errorFromChildren = this.computeChildErrors();\n\n // Collect all the deleted ids\n for (const id of this.childNodes.keys()) {\n if (!idsToLoad.has(id)) {\n hasChanged = true;\n const childNode = this.childNodes.get(id);\n\n if (childNode) {\n childNode.destroy();\n }\n\n this.childNodes.delete(id);\n this.childValues.delete(id);\n }\n }\n\n return hasChanged;\n }\n\n loadCoMapKey(map: CoMap, key: string, depth: Record<string, any> | true) {\n if (key === \"$onError\") {\n return undefined;\n }\n\n const id = map.$jazz.raw.get(key) as string | undefined;\n const descriptor = map.$jazz.getDescriptor(key);\n\n if (!descriptor) {\n this.childErrors.set(\n key,\n new JazzError(undefined, \"unavailable\", [\n {\n code: \"validationError\",\n message: `The ref ${key} requested on ${map.constructor.name} is not defined in the schema`,\n params: {},\n path: [key],\n },\n ]),\n );\n return undefined;\n }\n\n if (isRefEncoded(descriptor)) {\n if (id) {\n this.loadChildNode(id, depth, descriptor, key);\n this.validationErrors.delete(key);\n\n return id;\n } else if (!descriptor.optional) {\n this.validationErrors.set(\n key,\n new JazzError(undefined, \"unavailable\", [\n {\n code: \"validationError\",\n message: `The ref ${key} requested on ${map.constructor.name} is missing`,\n params: {},\n path: [key],\n },\n ]),\n );\n }\n }\n\n return undefined;\n }\n\n loadCoListKey(list: CoList, key: string, depth: Record<string, any> | true) {\n const descriptor = list.$jazz.getItemsDescriptor();\n\n if (!descriptor || !isRefEncoded(descriptor)) {\n return undefined;\n }\n\n const entries = list.$jazz.raw.entries();\n const entry = entries[Number(key)];\n\n if (!entry) {\n return undefined;\n }\n\n const id = entry.value as string | undefined;\n\n if (id) {\n this.loadChildNode(id, depth, descriptor, key);\n this.validationErrors.delete(key);\n\n return id;\n } else if (!descriptor.optional) {\n this.validationErrors.set(\n key,\n new JazzError(undefined, \"unavailable\", [\n {\n code: \"validationError\",\n message: `The ref on position ${key} requested on ${list.constructor.name} is missing`,\n params: {},\n path: [key],\n },\n ]),\n );\n }\n\n return undefined;\n }\n\n loadChildNode(\n id: string,\n query: RefsToResolve<any>,\n descriptor: RefEncoded<any>,\n key?: string,\n ) {\n if (this.childValues.has(id)) {\n return;\n }\n\n if (key && this.autoloadedKeys.has(key)) {\n this.autoloaded.add(id);\n }\n\n const skipInvalid = typeof query === \"object\" && query.$onError === null;\n\n if (skipInvalid) {\n if (key) {\n this.skipInvalidKeys.add(key);\n }\n\n this.skipInvalidKeys.add(id);\n }\n\n // Cloning the resolve objects to avoid mutating the original object when tracking autoloaded values\n const resolve =\n typeof query === \"object\" && query !== null ? { ...query } : query;\n\n this.childValues.set(id, { type: \"unloaded\", id });\n const child = new SubscriptionScope(\n this.node,\n resolve,\n id as ID<any>,\n descriptor,\n this.skipRetry,\n this.bestEffortResolution,\n );\n this.childNodes.set(id, child);\n child.setListener((value) => this.handleChildUpdate(id, value, key));\n }\n\n destroy() {\n this.subscription.unsubscribe();\n this.subscribers.clear();\n this.childNodes.forEach((child) => child.destroy());\n }\n}\n","import type { CoValue, CoValueClass, RefEncoded } from \"../internal.js\";\nimport { SubscriptionScope } from \"./SubscriptionScope.js\";\n\nexport function getSubscriptionScope<D extends CoValue>(value: D) {\n const subscriptionScope = value.$jazz._subscriptionScope;\n\n if (subscriptionScope) {\n return subscriptionScope;\n }\n\n const node = value.$jazz.raw.core.node;\n const resolve = true;\n const id = value.$jazz.id;\n\n const newSubscriptionScope = new SubscriptionScope(node, resolve, id, {\n ref: value.constructor as CoValueClass<D>,\n optional: false,\n });\n\n Object.defineProperty(value.$jazz, \"_subscriptionScope\", {\n value: subscriptionScope,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n\n return newSubscriptionScope;\n}\n\n/** Autoload internals */\n\n/**\n * Given a coValue, access a child coValue by key\n *\n * By subscribing to a given key, the subscription will automatically react to the id changes\n * on that key (e.g. deleting the key value will result on unsubscribing from the id)\n */\nexport function accessChildByKey<D extends CoValue>(\n parent: D,\n childId: string,\n key: string,\n) {\n const subscriptionScope = getSubscriptionScope(parent);\n\n if (!subscriptionScope.childValues.has(childId)) {\n subscriptionScope.subscribeToKey(key);\n }\n\n const value = subscriptionScope.childValues.get(childId);\n\n if (value?.type === \"loaded\") {\n return value.value;\n } else {\n return null;\n }\n}\n\n/**\n * Given a coValue, access a child coValue by id\n *\n * By subscribing to a given id, the subscription becomes permanent and will unsubscribe\n * only when the root subscription scope is destroyed.\n *\n * Used for refs that never change (e.g. CoFeed entries, CoMap edits)\n */\nexport function accessChildById<D extends CoValue>(\n parent: D,\n childId: string,\n schema: RefEncoded<CoValue>,\n) {\n const subscriptionScope = getSubscriptionScope(parent);\n\n subscriptionScope.subscribeToId(childId, schema);\n\n const value = subscriptionScope.childValues.get(childId);\n\n if (value?.type === \"loaded\") {\n return value.value;\n } else {\n return null;\n }\n}\n","import {\n AgentSecret,\n CoID,\n CryptoProvider,\n LocalNode,\n Peer,\n RawAccount,\n RawAccountID,\n SessionID,\n StorageAPI,\n} from \"cojson\";\nimport { AuthSecretStorage } from \"../auth/AuthSecretStorage.js\";\nimport { type Account, type AccountClass } from \"../coValues/account.js\";\nimport { RegisteredSchemas } from \"../coValues/registeredSchemas.js\";\nimport {\n CoValueFromRaw,\n type CoreAccountSchema,\n type ID,\n type InstanceOfSchema,\n coValueClassFromCoValueClassOrSchema,\n} from \"../internal.js\";\nimport { AuthCredentials, NewAccountProps } from \"../types.js\";\nimport { activeAccountContext } from \"./activeAccountContext.js\";\nimport { AnonymousJazzAgent } from \"./anonymousJazzAgent.js\";\n\nexport type Credentials = {\n accountID: ID<Account>;\n secret: AgentSecret;\n};\n\ntype SessionProvider = (\n accountID: ID<Account>,\n crypto: CryptoProvider,\n) => Promise<{ sessionID: SessionID; sessionDone: () => void }>;\n\nexport type AuthResult =\n | {\n type: \"existing\";\n username?: string;\n credentials: Credentials;\n saveCredentials?: (credentials: Credentials) => Promise<void>;\n onSuccess: () => void;\n onError: (error: string | Error) => void;\n logOut: () => Promise<void>;\n }\n | {\n type: \"new\";\n creationProps: {\n name: string;\n anonymous?: boolean;\n other?: Record<string, unknown>;\n };\n initialSecret?: AgentSecret;\n saveCredentials: (credentials: Credentials) => Promise<void>;\n onSuccess: () => void;\n onError: (error: string | Error) => void;\n logOut: () => Promise<void>;\n };\n\nexport async function randomSessionProvider(\n accountID: ID<Account>,\n crypto: CryptoProvider,\n) {\n return {\n sessionID: crypto.newRandomSessionID(accountID as unknown as RawAccountID),\n sessionDone: () => {},\n };\n}\n\nexport type JazzContextWithAccount<Acc extends Account> = {\n node: LocalNode;\n account: Acc;\n done: () => void;\n logOut: () => Promise<void>;\n};\n\nexport type JazzContextWithAgent = {\n agent: AnonymousJazzAgent;\n done: () => void;\n logOut: () => Promise<void>;\n};\n\nexport type JazzContext<Acc extends Account> =\n | JazzContextWithAccount<Acc>\n | JazzContextWithAgent;\n\nexport async function createJazzContextFromExistingCredentials<\n S extends\n | (AccountClass<Account> & CoValueFromRaw<Account>)\n | CoreAccountSchema,\n>({\n credentials,\n peersToLoadFrom,\n crypto,\n storage,\n AccountSchema: PropsAccountSchema,\n sessionProvider,\n onLogOut,\n asActiveAccount,\n}: {\n credentials: Credentials;\n peersToLoadFrom: Peer[];\n crypto: CryptoProvider;\n AccountSchema?: S;\n sessionProvider: SessionProvider;\n onLogOut?: () => void;\n storage?: StorageAPI;\n asActiveAccount: boolean;\n}): Promise<JazzContextWithAccount<InstanceOfSchema<S>>> {\n const { sessionID, sessionDone } = await sessionProvider(\n credentials.accountID,\n crypto,\n );\n\n const CurrentAccountSchema =\n PropsAccountSchema ?? (RegisteredSchemas[\"Account\"] as unknown as S);\n\n const AccountClass =\n coValueClassFromCoValueClassOrSchema(CurrentAccountSchema);\n\n const node = await LocalNode.withLoadedAccount({\n accountID: credentials.accountID as unknown as CoID<RawAccount>,\n accountSecret: credentials.secret,\n sessionID: sessionID,\n peersToLoadFrom: peersToLoadFrom,\n crypto: crypto,\n storage,\n migration: async (rawAccount, _node, creationProps) => {\n const account = AccountClass.fromRaw(rawAccount) as InstanceOfSchema<S>;\n if (asActiveAccount) {\n activeAccountContext.set(account);\n }\n\n await account.applyMigration(creationProps);\n },\n });\n\n const account = AccountClass.fromNode(node);\n if (asActiveAccount) {\n activeAccountContext.set(account);\n }\n\n return {\n node,\n account: account as InstanceOfSchema<S>,\n done: () => {\n node.gracefulShutdown();\n sessionDone();\n },\n logOut: async () => {\n node.gracefulShutdown();\n sessionDone();\n await onLogOut?.();\n },\n };\n}\n\nexport async function createJazzContextForNewAccount<\n S extends\n | (AccountClass<Account> & CoValueFromRaw<Account>)\n | CoreAccountSchema,\n>({\n creationProps,\n initialAgentSecret,\n peersToLoadFrom,\n crypto,\n AccountSchema: PropsAccountSchema,\n onLogOut,\n storage,\n}: {\n creationProps: { name: string };\n initialAgentSecret?: AgentSecret;\n peersToLoadFrom: Peer[];\n crypto: CryptoProvider;\n AccountSchema?: S;\n onLogOut?: () => Promise<void>;\n storage?: StorageAPI;\n}): Promise<JazzContextWithAccount<InstanceOfSchema<S>>> {\n const CurrentAccountSchema =\n PropsAccountSchema ?? (RegisteredSchemas[\"Account\"] as unknown as S);\n\n const AccountClass =\n coValueClassFromCoValueClassOrSchema(CurrentAccountSchema);\n\n const { node } = await LocalNode.withNewlyCreatedAccount({\n creationProps,\n peersToLoadFrom,\n crypto,\n initialAgentSecret,\n storage,\n migration: async (rawAccount, _node, creationProps) => {\n const account = AccountClass.fromRaw(rawAccount) as InstanceOfSchema<S>;\n activeAccountContext.set(account);\n\n await account.applyMigration(creationProps);\n },\n });\n\n const account = AccountClass.fromNode(node);\n activeAccountContext.set(account);\n\n return {\n node,\n account: account as InstanceOfSchema<S>,\n done: () => {\n node.gracefulShutdown();\n },\n logOut: async () => {\n node.gracefulShutdown();\n await onLogOut?.();\n },\n };\n}\n\nexport async function createJazzContext<\n S extends\n | (AccountClass<Account> & CoValueFromRaw<Account>)\n | CoreAccountSchema,\n>(options: {\n credentials?: AuthCredentials;\n newAccountProps?: NewAccountProps;\n peersToLoadFrom: Peer[];\n crypto: CryptoProvider;\n defaultProfileName?: string;\n AccountSchema?: S;\n sessionProvider: SessionProvider;\n authSecretStorage: AuthSecretStorage;\n storage?: StorageAPI;\n}) {\n const crypto = options.crypto;\n\n let context: JazzContextWithAccount<InstanceOfSchema<S>>;\n\n const authSecretStorage = options.authSecretStorage;\n\n await authSecretStorage.migrate();\n\n const credentials = options.credentials ?? (await authSecretStorage.get());\n\n if (credentials && !options.newAccountProps) {\n context = await createJazzContextFromExistingCredentials({\n credentials: {\n accountID: credentials.accountID,\n secret: credentials.accountSecret,\n },\n peersToLoadFrom: options.peersToLoadFrom,\n crypto,\n AccountSchema: options.AccountSchema,\n sessionProvider: options.sessionProvider,\n onLogOut: () => {\n authSecretStorage.clearWithoutNotify();\n },\n storage: options.storage,\n asActiveAccount: true,\n });\n } else {\n const secretSeed = options.crypto.newRandomSecretSeed();\n\n const initialAgentSecret =\n options.newAccountProps?.secret ??\n crypto.agentSecretFromSecretSeed(secretSeed);\n\n const creationProps = options.newAccountProps?.creationProps ?? {\n name: options.defaultProfileName ?? \"Anonymous user\",\n };\n\n context = await createJazzContextForNewAccount({\n creationProps,\n initialAgentSecret,\n peersToLoadFrom: options.peersToLoadFrom,\n crypto,\n AccountSchema: options.AccountSchema,\n onLogOut: async () => {\n await authSecretStorage.clearWithoutNotify();\n },\n storage: options.storage,\n });\n\n if (!options.newAccountProps) {\n await authSecretStorage.setWithoutNotify({\n accountID: context.account.$jazz.id,\n secretSeed,\n accountSecret: context.node.getCurrentAgent().agentSecret,\n provider: \"anonymous\",\n });\n }\n }\n\n return {\n ...context,\n authSecretStorage,\n };\n}\n\nexport function createAnonymousJazzContext({\n peersToLoadFrom,\n crypto,\n storage,\n}: {\n peersToLoadFrom: Peer[];\n crypto: CryptoProvider;\n storage?: StorageAPI;\n}): JazzContextWithAgent {\n const agentSecret = crypto.newRandomAgentSecret();\n\n const node = new LocalNode(\n agentSecret,\n crypto.newRandomSessionID(crypto.getAgentID(agentSecret)),\n crypto,\n );\n\n for (const peer of peersToLoadFrom) {\n node.syncManager.addPeer(peer);\n }\n\n if (storage) {\n node.setStorage(storage);\n }\n\n activeAccountContext.setGuestMode();\n\n return {\n agent: new AnonymousJazzAgent(node),\n done: () => {},\n logOut: async () => {},\n };\n}\n","import {\n Account,\n AnonymousJazzAgent,\n InstanceOfSchema,\n InstanceOrPrimitiveOfSchemaCoValuesNullable,\n Resolved,\n SchemaUnion,\n SchemaUnionConcreteSubclass,\n SubscribeListenerOptions,\n coOptionalDefiner,\n} from \"../../../internal.js\";\nimport { z } from \"../zodReExport.js\";\nimport { CoOptionalSchema } from \"./CoOptionalSchema.js\";\nimport { CoreCoValueSchema } from \"./CoValueSchema.js\";\n\nexport interface DiscriminableCoValueSchemaDefinition {\n discriminatorMap: z.core.$ZodDiscriminatedUnionInternals[\"propValues\"];\n}\n\nexport interface DiscriminableCoreCoValueSchema extends CoreCoValueSchema {\n getDefinition: () => DiscriminableCoValueSchemaDefinition;\n}\n\nexport interface CoDiscriminatedUnionSchemaDefinition<\n Options extends DiscriminableCoValueSchemas,\n> extends DiscriminableCoValueSchemaDefinition {\n discriminator: string;\n options: Options;\n}\n\nexport type DiscriminableCoValueSchemas = [\n DiscriminableCoreCoValueSchema,\n ...DiscriminableCoreCoValueSchema[],\n];\n\nexport interface CoreCoDiscriminatedUnionSchema<\n Options extends DiscriminableCoValueSchemas = DiscriminableCoValueSchemas,\n> extends DiscriminableCoreCoValueSchema {\n builtin: \"CoDiscriminatedUnion\";\n getDefinition: () => CoDiscriminatedUnionSchemaDefinition<Options>;\n}\nexport class CoDiscriminatedUnionSchema<\n Options extends DiscriminableCoValueSchemas,\n> implements CoreCoDiscriminatedUnionSchema<Options>\n{\n readonly collaborative = true as const;\n readonly builtin = \"CoDiscriminatedUnion\" as const;\n readonly getDefinition: () => CoDiscriminatedUnionSchemaDefinition<Options>;\n\n constructor(\n coreSchema: CoreCoDiscriminatedUnionSchema<Options>,\n private coValueClass: SchemaUnionConcreteSubclass<\n InstanceOfSchema<Options[number]>\n >,\n ) {\n this.getDefinition = coreSchema.getDefinition;\n }\n\n load(\n id: string,\n options?: {\n loadAs?: Account | AnonymousJazzAgent;\n skipRetry?: boolean;\n },\n ): Promise<Resolved<\n CoDiscriminatedUnionInstanceCoValuesNullable<Options> & SchemaUnion,\n true\n > | null> {\n return this.coValueClass.load(id, options) as any;\n }\n\n subscribe(\n id: string,\n options: SubscribeListenerOptions<\n CoDiscriminatedUnionInstanceCoValuesNullable<Options> & SchemaUnion,\n true\n >,\n listener: (\n value: Resolved<\n CoDiscriminatedUnionInstanceCoValuesNullable<Options> & SchemaUnion,\n true\n >,\n unsubscribe: () => void,\n ) => void,\n ): () => void {\n // @ts-expect-error\n return this.coValueClass.subscribe(id, options, listener);\n }\n\n getCoValueClass(): SchemaUnionConcreteSubclass<\n InstanceOfSchema<Options[number]>\n > {\n return this.coValueClass;\n }\n\n optional(): CoOptionalSchema<this> {\n return coOptionalDefiner(this);\n }\n}\n\nexport function createCoreCoDiscriminatedUnionSchema<\n Options extends DiscriminableCoValueSchemas,\n>(\n discriminator: string,\n schemas: Options,\n): CoreCoDiscriminatedUnionSchema<Options> {\n return {\n collaborative: true as const,\n builtin: \"CoDiscriminatedUnion\" as const,\n getDefinition: () => ({\n discriminator,\n get discriminatorMap() {\n const propValues: DiscriminableCoValueSchemaDefinition[\"discriminatorMap\"] =\n {};\n for (const option of schemas) {\n const dm = option.getDefinition().discriminatorMap;\n if (!dm || Object.keys(dm).length === 0)\n throw new Error(\n `Invalid discriminated union option at index \"${schemas.indexOf(option)}\"`,\n );\n for (const [k, v] of Object.entries(dm)) {\n propValues[k] ??= new Set();\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n return propValues;\n },\n get options() {\n return schemas;\n },\n }),\n };\n}\n\ntype CoDiscriminatedUnionInstanceCoValuesNullable<\n Options extends DiscriminableCoValueSchemas,\n> = NonNullable<InstanceOrPrimitiveOfSchemaCoValuesNullable<Options[number]>>;\n","import { CoValueSchemaFromCoreSchema } from \"../zodSchema.js\";\nimport { CoreCoValueSchema } from \"./CoValueSchema.js\";\n\ntype CoOptionalSchemaDefinition<\n Shape extends CoreCoValueSchema = CoreCoValueSchema,\n> = {\n innerType: Shape;\n};\n\nexport interface CoreCoOptionalSchema<\n Shape extends CoreCoValueSchema = CoreCoValueSchema,\n> extends CoreCoValueSchema {\n builtin: \"CoOptional\";\n innerType: Shape;\n getDefinition: () => CoOptionalSchemaDefinition<Shape>;\n}\n\nexport class CoOptionalSchema<\n Shape extends CoreCoValueSchema = CoreCoValueSchema,\n> implements CoreCoOptionalSchema<Shape>\n{\n readonly collaborative = true as const;\n readonly builtin = \"CoOptional\" as const;\n readonly getDefinition = () => ({\n innerType: this.innerType,\n });\n\n constructor(public readonly innerType: Shape) {}\n\n getCoValueClass(): ReturnType<\n CoValueSchemaFromCoreSchema<Shape>[\"getCoValueClass\"]\n > {\n return (this.innerType as any).getCoValueClass();\n }\n}\n","import {\n Account,\n CoRichText,\n Group,\n coOptionalDefiner,\n} from \"../../../internal.js\";\nimport { AnonymousJazzAgent } from \"../../anonymousJazzAgent.js\";\nimport { CoOptionalSchema } from \"./CoOptionalSchema.js\";\nimport { CoreCoValueSchema } from \"./CoValueSchema.js\";\n\nexport interface CoreRichTextSchema extends CoreCoValueSchema {\n builtin: \"CoRichText\";\n}\n\nexport function createCoreCoRichTextSchema(): CoreRichTextSchema {\n return {\n collaborative: true as const,\n builtin: \"CoRichText\" as const,\n };\n}\n\nexport class RichTextSchema implements CoreRichTextSchema {\n readonly collaborative = true as const;\n readonly builtin = \"CoRichText\" as const;\n\n constructor(private coValueClass: typeof CoRichText) {}\n\n create(text: string, options?: { owner: Group } | Group): CoRichText;\n /** @deprecated Creating CoValues with an Account as owner is deprecated. Use a Group instead. */\n create(\n text: string,\n options?: { owner: Account | Group } | Account | Group,\n ): CoRichText;\n create(\n text: string,\n options?: { owner: Account | Group } | Account | Group,\n ): CoRichText {\n return this.coValueClass.create(text, options);\n }\n\n load(\n id: string,\n options: { loadAs: Account | AnonymousJazzAgent },\n ): Promise<CoRichText | null> {\n return this.coValueClass.load(id, options);\n }\n\n subscribe(\n id: string,\n options: { loadAs: Account | AnonymousJazzAgent },\n listener: (value: CoRichText, unsubscribe: () => void) => void,\n ): () => void;\n subscribe(\n id: string,\n listener: (value: CoRichText, unsubscribe: () => void) => void,\n ): () => void;\n subscribe(...args: [any, ...any[]]) {\n // @ts-expect-error\n return this.coValueClass.subscribe(...args);\n }\n\n getCoValueClass(): typeof CoRichText {\n return this.coValueClass;\n }\n\n optional(): CoOptionalSchema<this> {\n return coOptionalDefiner(this);\n }\n}\n","import {\n type AccountSchema,\n AnyZodOrCoValueSchema,\n BaseAccountShape,\n type CoFeedSchema,\n type CoListSchema,\n type CoMapSchema,\n type CoProfileSchema,\n type CoRecordSchema,\n type DefaultProfileShape,\n type FileStreamSchema,\n ImageDefinition,\n type PlainTextSchema,\n type Simplify,\n createCoreAccountSchema,\n createCoreCoFeedSchema,\n createCoreCoListSchema,\n createCoreCoMapSchema,\n createCoreCoPlainTextSchema,\n createCoreFileStreamSchema,\n hydrateCoreCoValueSchema,\n isAnyCoValueSchema,\n isCoValueClass,\n} from \"../../internal.js\";\nimport { removeGetters } from \"../schemaUtils.js\";\nimport {\n CoDiscriminatedUnionSchema,\n DiscriminableCoValueSchemas,\n createCoreCoDiscriminatedUnionSchema,\n} from \"./schemaTypes/CoDiscriminatedUnionSchema.js\";\nimport { CoOptionalSchema } from \"./schemaTypes/CoOptionalSchema.js\";\nimport { CoreCoValueSchema } from \"./schemaTypes/CoValueSchema.js\";\nimport {\n RichTextSchema,\n createCoreCoRichTextSchema,\n} from \"./schemaTypes/RichTextSchema.js\";\nimport { z } from \"./zodReExport.js\";\n\n/**\n * Checking for the presence of the `_zod` property is the recommended way\n * to determine if a schema is a Zod v4 schema.\n *\n * @see https://zod.dev/library-authors?id=how-to-support-zod-3-and-zod-4-simultaneously\n */\nconst isZodV4Schema = (schema: unknown): schema is z.core.$ZodType => {\n return typeof schema === \"object\" && schema !== null && \"_zod\" in schema;\n};\n\nconst isValidShape = (shape: z.core.$ZodLooseShape) => {\n return Object.values(removeGetters(shape)).every(\n (schema) =>\n isZodV4Schema(schema) ||\n isAnyCoValueSchema(schema) ||\n isCoValueClass(schema),\n );\n};\n\nconst validateCoMapShape = (shape: z.core.$ZodLooseShape) => {\n if (isAnyCoValueSchema(shape as any)) {\n throw new Error(\n \"co.map() expects an object as its argument, not a CoValue schema\",\n );\n } else if (!isValidShape(shape)) {\n throw new Error(\n \"co.map() supports only Zod v4 schemas and CoValue schemas\",\n );\n }\n};\n\nexport const coMapDefiner = <Shape extends z.core.$ZodLooseShape>(\n shape: Shape,\n): CoMapSchema<Shape> => {\n validateCoMapShape(shape);\n const coreSchema = createCoreCoMapSchema(shape);\n return hydrateCoreCoValueSchema(coreSchema);\n};\n\n/**\n * Defines a collaborative account schema for Jazz applications.\n *\n * Creates an account schema that represents a user account with profile and root data.\n * Accounts are the primary way to identify and manage users in Jazz applications.\n *\n * @template Shape - The shape of the account schema extending BaseAccountShape\n * @param shape - The account schema shape. Defaults to a basic profile with name, inbox, and inboxInvite fields, plus an empty root object.\n *\n * @example\n * ```typescript\n * // Basic account with default profile\n * const BasicAccount = co.account();\n *\n * // Custom account with specific profile and root structure\n * const JazzAccount = co.account({\n * profile: co.profile({\n * name: z.string(),\n * avatar: z.optional(z.string()),\n * }),\n * root: co.map({\n * organizations: co.list(Organization),\n * draftOrganization: DraftOrganization,\n * }),\n * }).withMigration(async (account) => {\n * // Migration logic for existing accounts\n * if (!account.$jazz.has(\"profile\")) {\n * const group = Group.create();\n * account.$jazz.set(\"profile\", co.profile().create(\n * { name: getRandomUsername() },\n * group\n * ));\n * group.addMember(\"everyone\", \"reader\");\n * }\n * });\n * ```\n */\nexport const coAccountDefiner = <Shape extends BaseAccountShape>(\n shape: Shape = {\n profile: coMapDefiner({\n name: z.string(),\n inbox: z.optional(z.string()),\n inboxInvite: z.optional(z.string()),\n }),\n root: coMapDefiner({}),\n } as unknown as Shape,\n): AccountSchema<Shape> => {\n const coreSchema = createCoreAccountSchema(shape);\n return hydrateCoreCoValueSchema(coreSchema);\n};\n\nexport const coRecordDefiner = <\n K extends z.core.$ZodString<string>,\n V extends AnyZodOrCoValueSchema,\n>(\n _keyType: K,\n valueType: V,\n): CoRecordSchema<K, V> => {\n return coMapDefiner({}).catchall(valueType) as unknown as CoRecordSchema<\n K,\n V\n >;\n};\n\nexport const coListDefiner = <T extends AnyZodOrCoValueSchema>(\n element: T,\n): CoListSchema<T> => {\n const coreSchema = createCoreCoListSchema(element);\n return hydrateCoreCoValueSchema(coreSchema);\n};\n\nconst validateProfileShape = (shape: z.core.$ZodLooseShape) => {\n if (isAnyCoValueSchema(shape as any)) {\n throw new Error(\n \"co.profile() expects an object as its argument, not a CoValue schema\",\n );\n } else if (!isValidShape(shape)) {\n throw new Error(\n \"co.profile() supports only Zod v4 schemas and CoValue schemas\",\n );\n }\n};\n\nexport const coProfileDefiner = <\n Shape extends z.core.$ZodLooseShape = Simplify<DefaultProfileShape>,\n>(\n shape: Shape & Partial<DefaultProfileShape> = {} as any,\n): CoProfileSchema<Shape> => {\n validateProfileShape(shape);\n const ehnancedShape = Object.assign(shape, {\n name: z.string(),\n inbox: z.optional(z.string()),\n inboxInvite: z.optional(z.string()),\n });\n return coMapDefiner(ehnancedShape) as unknown as CoProfileSchema<Shape>;\n};\n\nexport const coFeedDefiner = <T extends AnyZodOrCoValueSchema>(\n element: T,\n): CoFeedSchema<T> => {\n const coreSchema = createCoreCoFeedSchema(element);\n return hydrateCoreCoValueSchema(coreSchema);\n};\n\nexport const coFileStreamDefiner = (): FileStreamSchema => {\n const coreSchema = createCoreFileStreamSchema();\n return hydrateCoreCoValueSchema(coreSchema);\n};\n\nexport const coPlainTextDefiner = (): PlainTextSchema => {\n const coreSchema = createCoreCoPlainTextSchema();\n return hydrateCoreCoValueSchema(coreSchema);\n};\n\nexport const coRichTextDefiner = (): RichTextSchema => {\n const coreSchema = createCoreCoRichTextSchema();\n return hydrateCoreCoValueSchema(coreSchema);\n};\n\nexport type ImageDefinitionSchema = typeof ImageDefinition;\nexport const coImageDefiner = (): ImageDefinitionSchema => {\n return ImageDefinition;\n};\n\nexport const coOptionalDefiner = <T extends CoreCoValueSchema>(\n schema: T,\n): CoOptionalSchema<T> => {\n return new CoOptionalSchema(schema);\n};\n\nexport const coDiscriminatedUnionDefiner = <\n Options extends DiscriminableCoValueSchemas,\n>(\n discriminator: string,\n schemas: Options,\n): CoDiscriminatedUnionSchema<Options> => {\n const coreSchema = createCoreCoDiscriminatedUnionSchema(\n discriminator,\n schemas,\n );\n return hydrateCoreCoValueSchema(coreSchema);\n};\n","export { Loaded as loaded } from \"./zodSchema.js\";\nexport { Loaded as output } from \"./zodSchema.js\";\nexport { CoMapSchema as Map } from \"./schemaTypes/CoMapSchema.js\";\nexport { CoRecordSchema as Record } from \"./schemaTypes/CoRecordSchema.js\";\nexport { CoListSchema as List } from \"./schemaTypes/CoListSchema.js\";\nexport { CoFeedSchema as Feed } from \"./schemaTypes/CoFeedSchema.js\";\nexport { PlainTextSchema as PlainText } from \"./schemaTypes/PlainTextSchema.js\";\nexport { RichTextSchema as RichText } from \"./schemaTypes/RichTextSchema.js\";\nexport { FileStreamSchema as FileStream } from \"./schemaTypes/FileStreamSchema.js\";\nexport { CoInput as input } from \"./typeConverters/CoFieldSchemaInit.js\";\nexport {\n AccountSchema as Account,\n CoProfileSchema as Profile,\n} from \"./schemaTypes/AccountSchema.js\";\nexport { CoOptionalSchema as Optional } from \"./schemaTypes/CoOptionalSchema.js\";\nexport { CoDiscriminatedUnionSchema as DiscriminatedUnion } from \"./schemaTypes/CoDiscriminatedUnionSchema.js\";\nexport {\n coMapDefiner as map,\n coRecordDefiner as record,\n coListDefiner as list,\n coFeedDefiner as feed,\n coPlainTextDefiner as plainText,\n coRichTextDefiner as richText,\n coFileStreamDefiner as fileStream,\n coImageDefiner as image,\n coAccountDefiner as account,\n coProfileDefiner as profile,\n coOptionalDefiner as optional,\n coDiscriminatedUnionDefiner as discriminatedUnion,\n ImageDefinitionSchema as Image,\n} from \"./zodCo.js\";\n","import { CoValueUniqueness } from \"cojson\";\nimport {\n Account,\n CoMap,\n DiscriminableCoValueSchemaDefinition,\n DiscriminableCoreCoValueSchema,\n Group,\n RefsToResolve,\n RefsToResolveStrict,\n Resolved,\n Simplify,\n SubscribeListenerOptions,\n coMapDefiner,\n coOptionalDefiner,\n hydrateCoreCoValueSchema,\n isAnyCoValueSchema,\n} from \"../../../internal.js\";\nimport { AnonymousJazzAgent } from \"../../anonymousJazzAgent.js\";\nimport { removeGetters } from \"../../schemaUtils.js\";\nimport { CoMapSchemaInit } from \"../typeConverters/CoFieldSchemaInit.js\";\nimport { InstanceOrPrimitiveOfSchema } from \"../typeConverters/InstanceOrPrimitiveOfSchema.js\";\nimport { InstanceOrPrimitiveOfSchemaCoValuesNullable } from \"../typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.js\";\nimport { z } from \"../zodReExport.js\";\nimport { AnyZodOrCoValueSchema, AnyZodSchema } from \"../zodSchema.js\";\nimport { CoOptionalSchema } from \"./CoOptionalSchema.js\";\nimport { CoreCoValueSchema } from \"./CoValueSchema.js\";\n\nexport interface CoMapSchema<\n Shape extends z.core.$ZodLooseShape,\n CatchAll extends AnyZodOrCoValueSchema | unknown = unknown,\n Owner extends Account | Group = Account | Group,\n> extends CoreCoMapSchema<Shape, CatchAll> {\n create(\n init: CoMapSchemaInit<Shape>,\n options?:\n | {\n owner?: Group;\n unique?: CoValueUniqueness[\"uniqueness\"];\n }\n | Group,\n ): CoMapInstanceShape<Shape, CatchAll> & CoMap;\n /** @deprecated Creating CoValues with an Account as owner is deprecated. Use a Group instead. */\n create(\n init: CoMapSchemaInit<Shape>,\n options?:\n | {\n owner?: Owner;\n unique?: CoValueUniqueness[\"uniqueness\"];\n }\n | Owner,\n ): CoMapInstanceShape<Shape, CatchAll> & CoMap;\n\n load<\n const R extends RefsToResolve<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap\n > = true,\n >(\n id: string,\n options?: {\n resolve?: RefsToResolveStrict<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap,\n R\n >;\n loadAs?: Account | AnonymousJazzAgent;\n skipRetry?: boolean;\n },\n ): Promise<Resolved<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap,\n R\n > | null>;\n\n subscribe<\n const R extends RefsToResolve<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap\n > = true,\n >(\n id: string,\n options: SubscribeListenerOptions<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap,\n R\n >,\n listener: (\n value: Resolved<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap,\n R\n >,\n unsubscribe: () => void,\n ) => void,\n ): () => void;\n\n /** @deprecated Use `CoMap.upsertUnique` and `CoMap.loadUnique` instead. */\n findUnique(\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: string,\n as?: Account | Group | AnonymousJazzAgent,\n ): string;\n\n upsertUnique: <\n const R extends RefsToResolve<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap\n > = true,\n >(options: {\n value: Simplify<CoMapSchemaInit<Shape>>;\n unique: CoValueUniqueness[\"uniqueness\"];\n owner: Owner;\n resolve?: RefsToResolveStrict<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap,\n R\n >;\n }) => Promise<Resolved<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap,\n R\n > | null>;\n\n loadUnique<\n const R extends RefsToResolve<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap\n > = true,\n >(\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: string,\n options?: {\n resolve?: RefsToResolveStrict<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap,\n R\n >;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Resolved<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap,\n R\n > | null>;\n\n /**\n * @deprecated Use `co.map().catchall` will be removed in an upcoming version.\n *\n * Use a `co.record` nested inside a `co.map` if you need to store key-value properties.\n *\n * @example\n * ```ts\n * // Instead of:\n * const Image = co.map({\n * original: co.fileStream(),\n * }).catchall(co.fileStream());\n *\n * // Use:\n * const Image = co.map({\n * original: co.fileStream(),\n * resolutions: co.record(z.string(), co.fileStream()),\n * });\n * ```\n */\n catchall<T extends AnyZodOrCoValueSchema>(schema: T): CoMapSchema<Shape, T>;\n\n withMigration(\n migration: (\n value: Resolved<\n Simplify<CoMapInstanceCoValuesNullable<Shape>> & CoMap,\n true\n >,\n ) => undefined,\n ): CoMapSchema<Shape, CatchAll, Owner>;\n\n getCoValueClass: () => typeof CoMap;\n\n optional(): CoOptionalSchema<this>;\n\n /**\n * Creates a new CoMap schema by picking the specified keys from the original schema.\n *\n * @param keys - The keys to pick from the original schema.\n * @returns A new CoMap schema with the picked keys.\n */\n pick<Keys extends keyof Shape>(\n keys: { [key in Keys]: true },\n ): CoMapSchema<Simplify<Pick<Shape, Keys>>, unknown, Owner>;\n\n /**\n * Creates a new CoMap schema by making all fields optional.\n *\n * @returns A new CoMap schema with all fields optional.\n */\n partial<Keys extends keyof Shape = keyof Shape>(\n keys?: { [key in Keys]: true },\n ): CoMapSchema<PartialShape<Shape, Keys>, CatchAll, Owner>;\n}\n\nexport function createCoreCoMapSchema<\n Shape extends z.core.$ZodLooseShape,\n CatchAll extends AnyZodOrCoValueSchema | unknown = unknown,\n>(shape: Shape, catchAll?: CatchAll): CoreCoMapSchema<Shape, CatchAll> {\n return {\n collaborative: true as const,\n builtin: \"CoMap\" as const,\n shape,\n catchAll,\n getDefinition: () => ({\n get shape() {\n return shape;\n },\n get catchall() {\n return catchAll;\n },\n get discriminatorMap() {\n const propValues: DiscriminableCoValueSchemaDefinition[\"discriminatorMap\"] =\n {};\n // remove getters to avoid circularity issues. Getters are not used as discriminators\n for (const key in removeGetters(shape)) {\n if (isAnyCoValueSchema(shape[key])) {\n // CoValues cannot be used as discriminators either\n continue;\n }\n const field = shape[key]._zod;\n if (field.values) {\n propValues[key] ??= new Set();\n for (const v of field.values) propValues[key].add(v);\n }\n }\n return propValues;\n },\n }),\n };\n}\n\nexport function enrichCoMapSchema<\n Shape extends z.core.$ZodLooseShape,\n CatchAll extends AnyZodOrCoValueSchema | unknown,\n>(\n schema: CoreCoMapSchema<Shape, CatchAll>,\n coValueClass: typeof CoMap,\n): CoMapSchema<Shape, CatchAll> {\n const coValueSchema = Object.assign(schema, {\n create: (...args: [any, ...any[]]) => {\n return coValueClass.create(...args);\n },\n load: (...args: [any, ...any[]]) => {\n return coValueClass.load(...args);\n },\n subscribe: (...args: [any, ...any[]]) => {\n // @ts-expect-error\n return coValueClass.subscribe(...args);\n },\n findUnique: (...args: [any, ...any[]]) => {\n // @ts-expect-error\n return coValueClass.findUnique(...args);\n },\n upsertUnique: (...args: [any, ...any[]]) => {\n // @ts-expect-error\n return coValueClass.upsertUnique(...args);\n },\n loadUnique: (...args: [any, ...any[]]) => {\n // @ts-expect-error\n return coValueClass.loadUnique(...args);\n },\n catchall: (catchAll: AnyZodOrCoValueSchema) => {\n const schemaWithCatchAll = createCoreCoMapSchema(\n coValueSchema.getDefinition().shape,\n catchAll,\n );\n return hydrateCoreCoValueSchema(schemaWithCatchAll);\n },\n withMigration: (migration: (value: any) => undefined) => {\n // @ts-expect-error TODO check\n coValueClass.prototype.migrate = migration;\n\n return coValueSchema;\n },\n getCoValueClass: () => {\n return coValueClass;\n },\n optional: () => {\n return coOptionalDefiner(coValueSchema);\n },\n pick: <Keys extends keyof Shape>(keys: { [key in Keys]: true }) => {\n const keysSet = new Set(Object.keys(keys));\n const pickedShape: Record<string, AnyZodOrCoValueSchema> = {};\n\n for (const [key, value] of Object.entries(coValueSchema.shape)) {\n if (keysSet.has(key)) {\n pickedShape[key] = value;\n }\n }\n\n return coMapDefiner(pickedShape);\n },\n partial: <Keys extends keyof Shape = keyof Shape>(\n keys?: { [key in Keys]: true },\n ) => {\n const partialShape: Record<string, AnyZodOrCoValueSchema> = {};\n\n for (const [key, value] of Object.entries(coValueSchema.shape)) {\n if (keys && !keys[key as Keys]) {\n partialShape[key] = value;\n continue;\n }\n\n if (isAnyCoValueSchema(value)) {\n partialShape[key] = coOptionalDefiner(value);\n } else {\n partialShape[key] = z.optional(coValueSchema.shape[key]);\n }\n }\n\n const partialCoMapSchema = coMapDefiner(partialShape);\n if (coValueSchema.catchAll) {\n return partialCoMapSchema.catchall(\n coValueSchema.catchAll as unknown as AnyZodOrCoValueSchema,\n );\n }\n return partialCoMapSchema;\n },\n }) as unknown as CoMapSchema<Shape, CatchAll>;\n return coValueSchema;\n}\n\nexport interface CoMapSchemaDefinition<\n Shape extends z.core.$ZodLooseShape = z.core.$ZodLooseShape,\n CatchAll extends AnyZodOrCoValueSchema | unknown = unknown,\n> extends DiscriminableCoValueSchemaDefinition {\n shape: Shape;\n catchall?: CatchAll;\n}\n\n// less precise version to avoid circularity issues and allow matching against\nexport interface CoreCoMapSchema<\n Shape extends z.core.$ZodLooseShape = z.core.$ZodLooseShape,\n CatchAll extends AnyZodOrCoValueSchema | unknown = unknown,\n> extends DiscriminableCoreCoValueSchema {\n builtin: \"CoMap\";\n shape: Shape;\n catchAll?: CatchAll;\n getDefinition: () => CoMapSchemaDefinition;\n}\n\nexport type CoMapInstanceShape<\n Shape extends z.core.$ZodLooseShape,\n CatchAll extends AnyZodOrCoValueSchema | unknown = unknown,\n> = {\n readonly [key in keyof Shape]: InstanceOrPrimitiveOfSchema<Shape[key]>;\n} & (CatchAll extends AnyZodOrCoValueSchema\n ? {\n readonly [key: string]: InstanceOrPrimitiveOfSchema<CatchAll>;\n }\n : {});\n\nexport type CoMapInstanceCoValuesNullable<Shape extends z.core.$ZodLooseShape> =\n {\n readonly [key in keyof Shape]: InstanceOrPrimitiveOfSchemaCoValuesNullable<\n Shape[key]\n >;\n };\n\nexport type PartialShape<\n Shape extends z.core.$ZodLooseShape,\n PartialKeys extends keyof Shape = keyof Shape,\n> = Simplify<{\n -readonly [key in keyof Shape]: key extends PartialKeys\n ? Shape[key] extends AnyZodSchema\n ? z.ZodOptional<Shape[key]>\n : Shape[key] extends CoreCoValueSchema\n ? CoOptionalSchema<Shape[key]>\n : never\n : Shape[key];\n}>;\n","import {\n Account,\n CoList,\n Group,\n ID,\n RefsToResolve,\n RefsToResolveStrict,\n Resolved,\n SubscribeListenerOptions,\n coOptionalDefiner,\n} from \"../../../internal.js\";\nimport { CoValueUniqueness } from \"cojson\";\nimport { AnonymousJazzAgent } from \"../../anonymousJazzAgent.js\";\nimport { CoListSchemaInit } from \"../typeConverters/CoFieldSchemaInit.js\";\nimport { InstanceOrPrimitiveOfSchema } from \"../typeConverters/InstanceOrPrimitiveOfSchema.js\";\nimport { InstanceOrPrimitiveOfSchemaCoValuesNullable } from \"../typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.js\";\nimport { AnyZodOrCoValueSchema } from \"../zodSchema.js\";\nimport { CoOptionalSchema } from \"./CoOptionalSchema.js\";\nimport { CoreCoValueSchema } from \"./CoValueSchema.js\";\n\nexport class CoListSchema<T extends AnyZodOrCoValueSchema>\n implements CoreCoListSchema<T>\n{\n collaborative = true as const;\n builtin = \"CoList\" as const;\n\n constructor(\n public element: T,\n private coValueClass: typeof CoList,\n ) {}\n\n create(\n items: CoListSchemaInit<T>,\n options?:\n | { owner: Group; unique?: CoValueUniqueness[\"uniqueness\"] }\n | Group,\n ): CoListInstance<T>;\n /** @deprecated Creating CoValues with an Account as owner is deprecated. Use a Group instead. */\n create(\n items: CoListSchemaInit<T>,\n options?:\n | { owner: Account | Group; unique?: CoValueUniqueness[\"uniqueness\"] }\n | Account\n | Group,\n ): CoListInstance<T>;\n create(\n items: CoListSchemaInit<T>,\n options?:\n | { owner: Account | Group; unique?: CoValueUniqueness[\"uniqueness\"] }\n | Account\n | Group,\n ): CoListInstance<T> {\n return this.coValueClass.create(items as any, options) as CoListInstance<T>;\n }\n\n load<const R extends RefsToResolve<CoListInstanceCoValuesNullable<T>> = true>(\n id: string,\n options?: {\n resolve?: RefsToResolveStrict<CoListInstanceCoValuesNullable<T>, R>;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Resolved<CoListInstanceCoValuesNullable<T>, R> | null> {\n // @ts-expect-error\n return this.coValueClass.load(id, options);\n }\n\n subscribe<\n const R extends RefsToResolve<CoListInstanceCoValuesNullable<T>> = true,\n >(\n id: string,\n options: SubscribeListenerOptions<CoListInstanceCoValuesNullable<T>, R>,\n listener: (\n value: Resolved<CoListInstanceCoValuesNullable<T>, R>,\n unsubscribe: () => void,\n ) => void,\n ): () => void {\n return this.coValueClass.subscribe(id, options, listener);\n }\n\n getCoValueClass(): typeof CoList {\n return this.coValueClass;\n }\n\n /** @deprecated Use `CoList.upsertUnique` and `CoList.loadUnique` instead. */\n findUnique(\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: ID<Account> | ID<Group>,\n as?: Account | Group | AnonymousJazzAgent,\n ): ID<CoListInstanceCoValuesNullable<T>> {\n return this.coValueClass.findUnique(unique, ownerID, as);\n }\n\n upsertUnique<\n const R extends RefsToResolve<CoListInstanceCoValuesNullable<T>> = true,\n >(options: {\n value: CoListSchemaInit<T>;\n unique: CoValueUniqueness[\"uniqueness\"];\n owner: Account | Group;\n resolve?: RefsToResolveStrict<CoListInstanceCoValuesNullable<T>, R>;\n }): Promise<Resolved<CoListInstanceCoValuesNullable<T>, R> | null> {\n // @ts-expect-error\n return this.coValueClass.upsertUnique(options);\n }\n\n loadUnique<\n const R extends RefsToResolve<CoListInstanceCoValuesNullable<T>> = true,\n >(\n unique: CoValueUniqueness[\"uniqueness\"],\n ownerID: ID<Account> | ID<Group>,\n options?: {\n resolve?: RefsToResolveStrict<CoListInstanceCoValuesNullable<T>, R>;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Resolved<CoListInstanceCoValuesNullable<T>, R> | null> {\n // @ts-expect-error\n return this.coValueClass.loadUnique(unique, ownerID, options);\n }\n\n optional(): CoOptionalSchema<this> {\n return coOptionalDefiner(this);\n }\n}\n\nexport function createCoreCoListSchema<T extends AnyZodOrCoValueSchema>(\n element: T,\n): CoreCoListSchema<T> {\n return {\n collaborative: true as const,\n builtin: \"CoList\" as const,\n element,\n };\n}\n\n// less precise version to avoid circularity issues and allow matching against\nexport interface CoreCoListSchema<\n T extends AnyZodOrCoValueSchema = AnyZodOrCoValueSchema,\n> extends CoreCoValueSchema {\n builtin: \"CoList\";\n element: T;\n}\n\nexport type CoListInstance<T extends AnyZodOrCoValueSchema> = CoList<\n InstanceOrPrimitiveOfSchema<T>\n>;\n\nexport type CoListInstanceCoValuesNullable<T extends AnyZodOrCoValueSchema> =\n CoList<InstanceOrPrimitiveOfSchemaCoValuesNullable<T>>;\n","import {\n Account,\n AnyZodOrCoValueSchema,\n CoFeed,\n Group,\n RefsToResolve,\n RefsToResolveStrict,\n Resolved,\n SubscribeListenerOptions,\n coOptionalDefiner,\n} from \"../../../internal.js\";\nimport { AnonymousJazzAgent } from \"../../anonymousJazzAgent.js\";\nimport { CoFeedSchemaInit } from \"../typeConverters/CoFieldSchemaInit.js\";\nimport { InstanceOrPrimitiveOfSchema } from \"../typeConverters/InstanceOrPrimitiveOfSchema.js\";\nimport { InstanceOrPrimitiveOfSchemaCoValuesNullable } from \"../typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.js\";\nimport { CoOptionalSchema } from \"./CoOptionalSchema.js\";\nimport { CoreCoValueSchema } from \"./CoValueSchema.js\";\n\nexport class CoFeedSchema<T extends AnyZodOrCoValueSchema>\n implements CoreCoFeedSchema<T>\n{\n collaborative = true as const;\n builtin = \"CoFeed\" as const;\n\n constructor(\n public element: T,\n private coValueClass: typeof CoFeed,\n ) {}\n\n create(\n init: CoFeedSchemaInit<T>,\n options?: { owner: Group } | Group,\n ): CoFeedInstance<T>;\n /** @deprecated Creating CoValues with an Account as owner is deprecated. Use a Group instead. */\n create(\n init: CoFeedSchemaInit<T>,\n options?: { owner: Account | Group } | Account | Group,\n ): CoFeedInstance<T>;\n create(\n init: CoFeedSchemaInit<T>,\n options?: { owner: Account | Group } | Account | Group,\n ): CoFeedInstance<T> {\n return this.coValueClass.create(init as any, options) as CoFeedInstance<T>;\n }\n\n load<const R extends RefsToResolve<CoFeedInstanceCoValuesNullable<T>> = true>(\n id: string,\n options?: {\n resolve?: RefsToResolveStrict<CoFeedInstanceCoValuesNullable<T>, R>;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Resolved<CoFeedInstanceCoValuesNullable<T>, R> | null> {\n // @ts-expect-error\n return this.coValueClass.load(id, options);\n }\n\n subscribe(\n id: string,\n listener: (\n value: Resolved<CoFeedInstanceCoValuesNullable<T>, true>,\n unsubscribe: () => void,\n ) => void,\n ): () => void;\n subscribe<\n const R extends RefsToResolve<CoFeedInstanceCoValuesNullable<T>> = true,\n >(\n id: string,\n options: SubscribeListenerOptions<CoFeedInstanceCoValuesNullable<T>, R>,\n listener: (\n value: Resolved<CoFeedInstanceCoValuesNullable<T>, R>,\n unsubscribe: () => void,\n ) => void,\n ): () => void;\n subscribe(...args: [any, ...any[]]) {\n // @ts-expect-error\n return this.coValueClass.subscribe(...args);\n }\n\n getCoValueClass(): typeof CoFeed {\n return this.coValueClass;\n }\n\n optional(): CoOptionalSchema<this> {\n return coOptionalDefiner(this);\n }\n}\n\nexport function createCoreCoFeedSchema<T extends AnyZodOrCoValueSchema>(\n element: T,\n): CoreCoFeedSchema<T> {\n return {\n collaborative: true as const,\n builtin: \"CoFeed\" as const,\n element,\n };\n}\n\n// less precise version to avoid circularity issues and allow matching against\nexport interface CoreCoFeedSchema<\n T extends AnyZodOrCoValueSchema = AnyZodOrCoValueSchema,\n> extends CoreCoValueSchema {\n builtin: \"CoFeed\";\n element: T;\n}\n\nexport type CoFeedInstance<T extends AnyZodOrCoValueSchema> = CoFeed<\n InstanceOrPrimitiveOfSchema<T>\n>;\n\nexport type CoFeedInstanceCoValuesNullable<T extends AnyZodOrCoValueSchema> =\n CoFeed<InstanceOrPrimitiveOfSchemaCoValuesNullable<T>>;\n","import { RawCoPlainText } from \"cojson\";\nimport {\n Account,\n CoPlainText,\n Group,\n coOptionalDefiner,\n} from \"../../../internal.js\";\nimport { AnonymousJazzAgent } from \"../../anonymousJazzAgent.js\";\nimport { CoOptionalSchema } from \"./CoOptionalSchema.js\";\nimport { CoreCoValueSchema } from \"./CoValueSchema.js\";\n\nexport interface CorePlainTextSchema extends CoreCoValueSchema {\n builtin: \"CoPlainText\";\n}\n\nexport function createCoreCoPlainTextSchema(): CorePlainTextSchema {\n return {\n collaborative: true as const,\n builtin: \"CoPlainText\" as const,\n };\n}\n\nexport class PlainTextSchema implements CorePlainTextSchema {\n readonly collaborative = true as const;\n readonly builtin = \"CoPlainText\" as const;\n\n constructor(private coValueClass: typeof CoPlainText) {}\n\n create(text: string, options?: { owner: Group } | Group): CoPlainText;\n /** @deprecated Creating CoValues with an Account as owner is deprecated. Use a Group instead. */\n create(\n text: string,\n options?: { owner: Account | Group } | Account | Group,\n ): CoPlainText;\n create(\n text: string,\n options?: { owner: Account | Group } | Account | Group,\n ): CoPlainText {\n return this.coValueClass.create(text, options);\n }\n\n load(\n id: string,\n options: { loadAs: Account | AnonymousJazzAgent },\n ): Promise<CoPlainText | null> {\n return this.coValueClass.load(id, options);\n }\n\n subscribe(\n id: string,\n options: { loadAs: Account | AnonymousJazzAgent },\n listener: (value: CoPlainText, unsubscribe: () => void) => void,\n ): () => void;\n subscribe(\n id: string,\n listener: (value: CoPlainText, unsubscribe: () => void) => void,\n ): () => void;\n subscribe(...args: [any, ...any[]]) {\n // @ts-expect-error\n return this.coValueClass.subscribe(...args);\n }\n\n fromRaw(raw: RawCoPlainText): CoPlainText {\n return this.coValueClass.fromRaw(raw);\n }\n\n getCoValueClass(): typeof CoPlainText {\n return this.coValueClass;\n }\n\n optional(): CoOptionalSchema<this> {\n return coOptionalDefiner(this);\n }\n}\n","import {\n Account,\n AnonymousJazzAgent,\n FileStream,\n Group,\n coOptionalDefiner,\n} from \"../../../internal.js\";\nimport { CoOptionalSchema } from \"./CoOptionalSchema.js\";\nimport { CoreCoValueSchema } from \"./CoValueSchema.js\";\n\nexport interface CoreFileStreamSchema extends CoreCoValueSchema {\n builtin: \"FileStream\";\n}\n\nexport function createCoreFileStreamSchema(): CoreFileStreamSchema {\n return {\n collaborative: true as const,\n builtin: \"FileStream\" as const,\n };\n}\n\nexport class FileStreamSchema implements CoreFileStreamSchema {\n readonly collaborative = true as const;\n readonly builtin = \"FileStream\" as const;\n\n constructor(private coValueClass: typeof FileStream) {}\n\n create(options?: { owner: Group } | Group): FileStream;\n /** @deprecated Creating CoValues with an Account as owner is deprecated. Use a Group instead. */\n create(options?: { owner: Account | Group } | Account | Group): FileStream;\n create(options?: { owner: Account | Group } | Account | Group): FileStream {\n return this.coValueClass.create(options);\n }\n\n createFromBlob(\n blob: Blob | File,\n options?:\n | { owner?: Group; onProgress?: (progress: number) => void }\n | Group,\n ): Promise<FileStream>;\n /** @deprecated Creating CoValues with an Account as owner is deprecated. Use a Group instead. */\n createFromBlob(\n blob: Blob | File,\n options?:\n | { owner?: Account | Group; onProgress?: (progress: number) => void }\n | Account\n | Group,\n ): Promise<FileStream>;\n createFromBlob(\n blob: Blob | File,\n options?:\n | {\n owner?: Account | Group;\n onProgress?: (progress: number) => void;\n }\n | Account\n | Group,\n ): Promise<FileStream> {\n return this.coValueClass.createFromBlob(blob, options);\n }\n\n createFromArrayBuffer(\n ...args: Parameters<typeof FileStream.createFromArrayBuffer>\n ) {\n return this.coValueClass.createFromArrayBuffer(...args);\n }\n\n loadAsBlob(\n id: string,\n options?: {\n allowUnfinished?: boolean;\n loadAs?: Account | AnonymousJazzAgent;\n },\n ): Promise<Blob | undefined> {\n return this.coValueClass.loadAsBlob(id, options);\n }\n\n load(\n id: string,\n options: { loadAs: Account | AnonymousJazzAgent },\n ): Promise<FileStream | null> {\n return this.coValueClass.load(id, options);\n }\n\n subscribe(\n id: string,\n options: { loadAs: Account | AnonymousJazzAgent },\n listener: (value: FileStream, unsubscribe: () => void) => void,\n ): () => void;\n subscribe(\n id: string,\n listener: (value: FileStream, unsubscribe: () => void) => void,\n ): () => void;\n subscribe(...args: [any, ...any[]]) {\n // @ts-expect-error\n return this.coValueClass.subscribe(...args);\n }\n\n getCoValueClass(): typeof FileStream {\n return this.coValueClass;\n }\n\n optional(): CoOptionalSchema<this> {\n return coOptionalDefiner(this);\n }\n}\n","import { CryptoProvider } from \"cojson\";\nimport {\n Account,\n AccountCreationProps,\n Group,\n RefsToResolveStrict,\n} from \"../../../internal.js\";\nimport { AnonymousJazzAgent } from \"../../anonymousJazzAgent.js\";\nimport { InstanceOrPrimitiveOfSchema } from \"../typeConverters/InstanceOrPrimitiveOfSchema.js\";\nimport { InstanceOrPrimitiveOfSchemaCoValuesNullable } from \"../typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.js\";\nimport { z } from \"../zodReExport.js\";\nimport { AnyZodOrCoValueSchema, Loaded, ResolveQuery } from \"../zodSchema.js\";\nimport {\n CoMapSchema,\n CoMapSchemaDefinition,\n CoreCoMapSchema,\n createCoreCoMapSchema,\n} from \"./CoMapSchema.js\";\n\nexport type BaseProfileShape = {\n name: z.core.$ZodString<string>;\n inbox?: z.core.$ZodOptional<z.core.$ZodString>;\n inboxInvite?: z.core.$ZodOptional<z.core.$ZodString>;\n};\n\nexport type BaseAccountShape = {\n profile: CoreCoMapSchema<BaseProfileShape>;\n root: CoreCoMapSchema;\n};\n\nexport type DefaultAccountShape = {\n profile: CoMapSchema<BaseProfileShape>;\n root: CoMapSchema<{}>;\n};\n\nexport interface AccountSchema<\n Shape extends BaseAccountShape = DefaultAccountShape,\n> extends CoreAccountSchema<Shape>,\n Omit<\n CoMapSchema<Shape>,\n | \"builtin\"\n | \"getDefinition\"\n | \"create\"\n | \"load\"\n | \"withMigration\"\n | \"getCoValueClass\"\n > {\n builtin: \"Account\";\n\n create: (options: {\n creationProps?: { name: string };\n crypto?: CryptoProvider;\n }) => Promise<AccountInstance<Shape>>;\n\n load: <R extends ResolveQuery<AccountSchema<Shape>>>(\n id: string,\n options?: {\n loadAs?: Account | AnonymousJazzAgent;\n resolve?: RefsToResolveStrict<AccountSchema<Shape>, R>;\n },\n ) => Promise<Loaded<AccountSchema<Shape>, R> | null>;\n\n createAs: (\n as: Account,\n options: {\n creationProps?: { name: string };\n },\n ) => Promise<AccountInstance<Shape>>;\n\n getMe: () => AccountInstanceCoValuesNullable<Shape>;\n\n withMigration(\n migration: (\n account: Loaded<AccountSchema<Shape>>,\n creationProps?: { name: string },\n ) => void,\n ): AccountSchema<Shape>;\n\n getCoValueClass: () => typeof Account;\n}\n\nexport function createCoreAccountSchema<Shape extends BaseAccountShape>(\n shape: Shape,\n): CoreAccountSchema<Shape> {\n return {\n ...createCoreCoMapSchema(shape),\n builtin: \"Account\" as const,\n };\n}\n\nexport function enrichAccountSchema<Shape extends BaseAccountShape>(\n schema: CoreAccountSchema<Shape>,\n coValueClass: typeof Account,\n): AccountSchema<Shape> {\n const enrichedSchema = Object.assign(schema, {\n create: (...args: any[]) => {\n // @ts-expect-error\n return coValueClass.create(...args);\n },\n createAs: (...args: any[]) => {\n // @ts-expect-error\n return coValueClass.createAs(...args);\n },\n getMe: (...args: any[]) => {\n // @ts-expect-error\n return coValueClass.getMe(...args);\n },\n load: (...args: any[]) => {\n // @ts-expect-error\n return coValueClass.load(...args);\n },\n subscribe: (...args: any[]) => {\n // @ts-expect-error\n return coValueClass.subscribe(...args);\n },\n fromRaw: (...args: any[]) => {\n // @ts-expect-error\n return coValueClass.fromRaw(...args);\n },\n withMigration: (\n migration: (\n value: any,\n creationProps?: AccountCreationProps,\n ) => void | Promise<void>,\n ) => {\n (coValueClass.prototype as Account).migrate = async function (\n this,\n creationProps,\n ) {\n await migration(this, creationProps);\n };\n\n return enrichedSchema;\n },\n getCoValueClass: () => {\n return coValueClass;\n },\n }) as unknown as AccountSchema<Shape>;\n return enrichedSchema;\n}\n\nexport type DefaultProfileShape = {\n name: z.core.$ZodString<string>;\n inbox: z.core.$ZodOptional<z.core.$ZodString>;\n inboxInvite: z.core.$ZodOptional<z.core.$ZodString>;\n};\n\nexport type CoProfileSchema<\n Shape extends z.core.$ZodLooseShape = DefaultProfileShape,\n CatchAll extends AnyZodOrCoValueSchema | unknown = unknown,\n> = CoMapSchema<Shape & DefaultProfileShape, CatchAll, Group>;\n\n// less precise version to avoid circularity issues and allow matching against\nexport interface CoreAccountSchema<\n Shape extends z.core.$ZodLooseShape = z.core.$ZodLooseShape,\n> extends Omit<CoreCoMapSchema<Shape>, \"builtin\"> {\n builtin: \"Account\";\n}\n\nexport type AccountInstance<Shape extends z.core.$ZodLooseShape> = {\n readonly [key in keyof Shape]: InstanceOrPrimitiveOfSchema<Shape[key]>;\n} & Account;\n\nexport type AccountInstanceCoValuesNullable<\n Shape extends z.core.$ZodLooseShape,\n> = {\n readonly [key in keyof Shape]: InstanceOrPrimitiveOfSchemaCoValuesNullable<\n Shape[key]\n >;\n} & Account;\n","import {\n AnyZodOrCoValueSchema,\n CoDiscriminatedUnionSchema,\n CoMap,\n CoreCoDiscriminatedUnionSchema,\n CoreCoMapSchema,\n DiscriminableCoValueSchemas,\n DiscriminableCoreCoValueSchema,\n SchemaUnionDiscriminator,\n} from \"../../internal.js\";\nimport {\n hydrateCoreCoValueSchema,\n isAnyCoValueSchema,\n} from \"./runtimeConverters/coValueSchemaTransformation.js\";\nimport { z } from \"./zodReExport.js\";\n\nexport function schemaUnionDiscriminatorFor(\n schema: CoreCoDiscriminatedUnionSchema<DiscriminableCoValueSchemas>,\n) {\n if (isUnionOfCoMapsDeeply(schema)) {\n const definition = schema.getDefinition();\n const { discriminatorMap, discriminator, options } = definition;\n\n const field = discriminatorMap[discriminator];\n if (!field) {\n throw new Error(\n \"co.discriminatedUnion() of collaborative types with non-existent discriminator key is not supported\",\n );\n }\n\n for (const value of field) {\n if (typeof value !== \"string\" && typeof value !== \"number\") {\n throw new Error(\n \"co.discriminatedUnion() of collaborative types with non-string or non-number discriminator value is not supported\",\n );\n }\n }\n\n const availableOptions: DiscriminableCoreCoValueSchema[] = [];\n\n for (const option of options) {\n if (option.builtin === \"CoMap\") {\n availableOptions.push(option);\n } else if (option.builtin === \"CoDiscriminatedUnion\") {\n for (const subOption of (\n option as CoDiscriminatedUnionSchema<any>\n ).getDefinition().options) {\n if (!options.includes(subOption)) {\n options.push(subOption);\n }\n }\n } else {\n throw new Error(\n \"Unsupported zod type in co.discriminatedUnion() of collaborative types\",\n );\n }\n }\n\n const determineSchema: SchemaUnionDiscriminator<CoMap> = (\n discriminable,\n ) => {\n for (const option of availableOptions) {\n let match = true;\n\n for (const key of Object.keys(discriminatorMap)) {\n const discriminatorDef = (option as CoreCoMapSchema).getDefinition()\n .shape[key];\n\n const discriminatorValue = discriminable.get(key);\n\n if (discriminatorValue && typeof discriminatorValue === \"object\") {\n throw new Error(\"Discriminator must be a primitive value\");\n }\n\n if (!discriminatorDef) {\n if (key === discriminator) {\n match = false;\n break;\n } else {\n continue;\n }\n }\n if (discriminatorDef._zod?.def.type !== \"literal\") {\n break;\n }\n\n const literalDef = discriminatorDef._zod\n .def as z.core.$ZodLiteralDef<any>;\n\n if (!Array.from(literalDef.values).includes(discriminatorValue)) {\n match = false;\n break;\n }\n }\n\n if (match) {\n const coValueSchema = hydrateCoreCoValueSchema(option as any);\n return coValueSchema.getCoValueClass() as typeof CoMap;\n }\n }\n\n throw new Error(\n \"co.discriminatedUnion() of collaborative types with no matching discriminator value found\",\n );\n };\n\n return determineSchema;\n } else {\n throw new Error(\n \"co.discriminatedUnion() of non-collaborative types is not supported\",\n );\n }\n}\n\nfunction isUnionOfCoMapsDeeply(\n schema: CoreCoDiscriminatedUnionSchema<DiscriminableCoValueSchemas>,\n): boolean {\n return schema.getDefinition().options.every(isCoMapOrUnionOfCoMapsDeeply);\n}\n\nfunction isCoMapOrUnionOfCoMapsDeeply(\n schema: DiscriminableCoreCoValueSchema,\n): boolean {\n if (schema.builtin === \"CoMap\") {\n return true;\n } else if (schema.builtin === \"CoDiscriminatedUnion\") {\n return (schema as CoDiscriminatedUnionSchema<any>)\n .getDefinition()\n .options.every(isCoMapOrUnionOfCoMapsDeeply);\n } else {\n return false;\n }\n}\n\nexport function isUnionOfPrimitivesDeeply(schema: AnyZodOrCoValueSchema) {\n if (schema instanceof z.core.$ZodUnion) {\n return schema._zod.def.options.every(isUnionOfPrimitivesDeeply);\n } else {\n return !isAnyCoValueSchema(schema);\n }\n}\n\nfunction isCoDiscriminatedUnion(\n def: any,\n): def is CoreCoDiscriminatedUnionSchema<any> {\n return def.builtin === \"CoDiscriminatedUnion\";\n}\n","import { CoValueClass, isCoValueClass } from \"../../../internal.js\";\nimport { coField } from \"../../schema.js\";\nimport { CoreCoValueSchema } from \"../schemaTypes/CoValueSchema.js\";\nimport { isUnionOfPrimitivesDeeply } from \"../unionUtils.js\";\nimport {\n ZodCatch,\n ZodDefault,\n ZodLazy,\n ZodReadonly,\n z,\n} from \"../zodReExport.js\";\nimport { ZodPrimitiveSchema } from \"../zodSchema.js\";\nimport { isCoValueSchema } from \"./coValueSchemaTransformation.js\";\n\n/**\n * Types of objects that can be nested inside CoValue schema containers\n */\nexport type SchemaField =\n // Schemas created with co.map(), co.record(), co.list(), etc.\n | CoreCoValueSchema\n // CoValue classes created with class syntax, or framework-provided classes like Group\n | CoValueClass\n | ZodPrimitiveSchema\n | z.core.$ZodOptional<z.core.$ZodType>\n | z.core.$ZodNullable<z.core.$ZodType>\n | z.core.$ZodUnion<z.core.$ZodType[]>\n | z.core.$ZodDiscriminatedUnion<z.core.$ZodType[]>\n | z.core.$ZodObject<z.core.$ZodLooseShape>\n | z.core.$ZodArray<z.core.$ZodType>\n | z.core.$ZodTuple<z.core.$ZodType[]>\n | z.core.$ZodReadonly<z.core.$ZodType>\n | z.core.$ZodLazy<z.core.$ZodType>\n | z.core.$ZodTemplateLiteral<any>\n | z.core.$ZodLiteral<any>\n | z.core.$ZodCatch<z.core.$ZodType>\n | z.core.$ZodEnum<any>\n | z.core.$ZodDefault<z.core.$ZodType>\n | z.core.$ZodCatch<z.core.$ZodType>;\n\nexport function schemaFieldToCoFieldDef(schema: SchemaField) {\n if (isCoValueClass(schema)) {\n return coField.ref(schema);\n } else if (isCoValueSchema(schema)) {\n if (schema.builtin === \"CoOptional\") {\n return coField.ref(schema.getCoValueClass(), {\n optional: true,\n });\n }\n return coField.ref(schema.getCoValueClass());\n } else {\n if (\"_zod\" in schema) {\n const zodSchemaDef = schema._zod.def;\n if (\n zodSchemaDef.type === \"optional\" ||\n zodSchemaDef.type === \"nullable\"\n ) {\n const inner = zodSchemaDef.innerType as ZodPrimitiveSchema;\n const coFieldDef: any = schemaFieldToCoFieldDef(inner);\n if (\n zodSchemaDef.type === \"nullable\" &&\n coFieldDef === coField.optional.Date\n ) {\n // We do not currently have a way to encode null Date coFields.\n // We only support encoding optional (i.e. Date | undefined) coFields.\n throw new Error(\"Nullable z.date() is not supported\");\n }\n // Primitive coField types support null and undefined as values,\n // so we can just return the inner type here and rely on support\n // for null/undefined at the type level\n return coFieldDef;\n } else if (zodSchemaDef.type === \"string\") {\n return coField.string;\n } else if (zodSchemaDef.type === \"number\") {\n return coField.number;\n } else if (zodSchemaDef.type === \"boolean\") {\n return coField.boolean;\n } else if (zodSchemaDef.type === \"null\") {\n return coField.null;\n } else if (zodSchemaDef.type === \"enum\") {\n return coField.string;\n } else if (zodSchemaDef.type === \"readonly\") {\n return schemaFieldToCoFieldDef(\n (schema as unknown as ZodReadonly).def.innerType as SchemaField,\n );\n } else if (zodSchemaDef.type === \"date\") {\n return coField.optional.Date;\n } else if (zodSchemaDef.type === \"template_literal\") {\n return coField.string;\n } else if (zodSchemaDef.type === \"lazy\") {\n // Mostly to support z.json()\n return schemaFieldToCoFieldDef(\n (schema as unknown as ZodLazy).unwrap() as SchemaField,\n );\n } else if (\n zodSchemaDef.type === \"default\" ||\n zodSchemaDef.type === \"catch\"\n ) {\n console.warn(\n \"z.default()/z.catch() are not supported in collaborative schemas. They will be ignored.\",\n );\n\n return schemaFieldToCoFieldDef(\n (schema as unknown as ZodDefault | ZodCatch).def\n .innerType as SchemaField,\n );\n } else if (zodSchemaDef.type === \"literal\") {\n if (\n zodSchemaDef.values.some((literal) => typeof literal === \"undefined\")\n ) {\n throw new Error(\"z.literal() with undefined is not supported\");\n }\n if (zodSchemaDef.values.some((literal) => literal === null)) {\n throw new Error(\"z.literal() with null is not supported\");\n }\n if (\n zodSchemaDef.values.some((literal) => typeof literal === \"bigint\")\n ) {\n throw new Error(\"z.literal() with bigint is not supported\");\n }\n return coField.literal(\n ...(zodSchemaDef.values as Exclude<\n (typeof zodSchemaDef.values)[number],\n undefined | null | bigint\n >[]),\n );\n } else if (\n zodSchemaDef.type === \"object\" ||\n zodSchemaDef.type === \"array\" ||\n zodSchemaDef.type === \"tuple\"\n ) {\n return coField.json();\n } else if (zodSchemaDef.type === \"union\") {\n if (isUnionOfPrimitivesDeeply(schema)) {\n return coField.json();\n } else {\n throw new Error(\n \"z.union()/z.discriminatedUnion() of collaborative types is not supported. Use co.discriminatedUnion() instead.\",\n );\n }\n } else {\n throw new Error(\n `Unsupported zod type: ${(schema._zod?.def as any)?.type || JSON.stringify(schema)}`,\n );\n }\n } else {\n throw new Error(`Unsupported zod type: ${schema}`);\n }\n }\n}\n","import { RawCoList, RawCoMap } from \"cojson\";\nimport {\n Account,\n CoDiscriminatedUnionSchema,\n CoFeed,\n CoFeedSchema,\n CoList,\n CoListSchema,\n CoMap,\n CoPlainText,\n CoRichText,\n CoValueClass,\n FileStream,\n FileStreamSchema,\n PlainTextSchema,\n SchemaUnion,\n enrichAccountSchema,\n enrichCoMapSchema,\n isCoValueClass,\n} from \"../../../internal.js\";\nimport { coField } from \"../../schema.js\";\n\nimport { CoreCoValueSchema } from \"../schemaTypes/CoValueSchema.js\";\nimport { RichTextSchema } from \"../schemaTypes/RichTextSchema.js\";\nimport { schemaUnionDiscriminatorFor } from \"../unionUtils.js\";\nimport {\n AnyCoreCoValueSchema,\n AnyZodOrCoValueSchema,\n CoValueClassFromAnySchema,\n CoValueClassOrSchema,\n CoValueSchemaFromCoreSchema,\n} from \"../zodSchema.js\";\nimport {\n SchemaField,\n schemaFieldToCoFieldDef,\n} from \"./schemaFieldToCoFieldDef.js\";\n\n// Note: if you're editing this function, edit the `isAnyCoValueSchema`\n// function in `zodReExport.ts` as well\nexport function isAnyCoValueSchema(\n schema: unknown,\n): schema is AnyCoreCoValueSchema {\n return (\n typeof schema === \"object\" &&\n schema !== null &&\n \"collaborative\" in schema &&\n schema.collaborative === true\n );\n}\n\nexport function isCoValueSchema(\n schema: AnyZodOrCoValueSchema | CoValueClass,\n): schema is CoValueSchemaFromCoreSchema<AnyCoreCoValueSchema> {\n return isAnyCoValueSchema(schema) && \"getCoValueClass\" in schema;\n}\n\n/**\n * Convert a \"core\" CoValue schema into a CoValue schema.\n * See {@link CoreCoValueSchema} for more information.\n *\n * @returns The CoValue schema matching the provided CoreCoValueSchema\n */\nexport function hydrateCoreCoValueSchema<S extends AnyCoreCoValueSchema>(\n schema: S,\n): CoValueSchemaFromCoreSchema<S> {\n if (isCoValueSchema(schema)) {\n // If the schema is already a CoValue schema, return it as is\n return schema as any;\n }\n\n if (schema.builtin === \"CoOptional\") {\n throw new Error(\n `co.optional() of collaborative types is not supported as top-level schema: ${JSON.stringify(schema)}`,\n );\n } else if (schema.builtin === \"CoMap\" || schema.builtin === \"Account\") {\n const def = schema.getDefinition();\n const ClassToExtend = schema.builtin === \"Account\" ? Account : CoMap;\n\n const coValueClass = class ZCoMap extends ClassToExtend {\n constructor(options: { fromRaw: RawCoMap } | undefined) {\n super(options);\n for (const [fieldName, fieldType] of Object.entries(def.shape)) {\n (this as any)[fieldName] = schemaFieldToCoFieldDef(\n fieldType as SchemaField,\n );\n }\n if (def.catchall) {\n (this as any)[coField.items] = schemaFieldToCoFieldDef(\n def.catchall as SchemaField,\n );\n }\n }\n };\n\n const coValueSchema =\n ClassToExtend === Account\n ? enrichAccountSchema(schema as any, coValueClass as any)\n : enrichCoMapSchema(schema as any, coValueClass as any);\n\n return coValueSchema as unknown as CoValueSchemaFromCoreSchema<S>;\n } else if (schema.builtin === \"CoList\") {\n const element = schema.element;\n const coValueClass = class ZCoList extends CoList {\n constructor(options: { fromRaw: RawCoList } | undefined) {\n super(options);\n (this as any)[coField.items] = schemaFieldToCoFieldDef(\n element as SchemaField,\n );\n }\n };\n\n const coValueSchema = new CoListSchema(element, coValueClass as any);\n\n return coValueSchema as unknown as CoValueSchemaFromCoreSchema<S>;\n } else if (schema.builtin === \"CoFeed\") {\n const coValueClass = CoFeed.Of(\n schemaFieldToCoFieldDef(schema.element as SchemaField),\n );\n const coValueSchema = new CoFeedSchema(schema.element, coValueClass);\n return coValueSchema as unknown as CoValueSchemaFromCoreSchema<S>;\n } else if (schema.builtin === \"FileStream\") {\n const coValueClass = FileStream;\n return new FileStreamSchema(coValueClass) as CoValueSchemaFromCoreSchema<S>;\n } else if (schema.builtin === \"CoPlainText\") {\n const coValueClass = CoPlainText;\n return new PlainTextSchema(coValueClass) as CoValueSchemaFromCoreSchema<S>;\n } else if (schema.builtin === \"CoRichText\") {\n const coValueClass = CoRichText;\n return new RichTextSchema(coValueClass) as CoValueSchemaFromCoreSchema<S>;\n } else if (schema.builtin === \"CoDiscriminatedUnion\") {\n const coValueClass = SchemaUnion.Of(schemaUnionDiscriminatorFor(schema));\n const coValueSchema = new CoDiscriminatedUnionSchema(schema, coValueClass);\n return coValueSchema as CoValueSchemaFromCoreSchema<S>;\n } else {\n const notReachable: never = schema;\n throw new Error(\n `Unsupported zod CoValue type for top-level schema: ${JSON.stringify(notReachable, undefined, 2)}`,\n );\n }\n}\n\n/**\n * Convert a CoValue class or a CoValue schema into a CoValue class.\n *\n * This function bridges the gap between CoValue classes created with the class syntax,\n * and CoValue classes created with our `co.` definers.\n *\n * @param schema A CoValue class or a CoValue schema\n * @returns The same CoValue class, or a CoValue class that matches the provided schema\n */\nexport function coValueClassFromCoValueClassOrSchema<\n S extends CoValueClassOrSchema,\n>(schema: S): CoValueClassFromAnySchema<S> {\n if (isCoValueClass(schema)) {\n return schema as any;\n } else if (isCoValueSchema(schema)) {\n return schema.getCoValueClass() as any;\n }\n\n throw new Error(`Unsupported schema: ${JSON.stringify(schema)}`);\n}\n","import { z } from \"../../implementation/zodSchema/zodReExport.js\";\nimport { Loaded, coFileStreamDefiner, coMapDefiner } from \"../../internal.js\";\n\n// avoiding circularity by using the standalone definers instead of `co`\nconst ImageDefinitionBase = coMapDefiner({\n original: coFileStreamDefiner(),\n originalSize: z.tuple([z.number(), z.number()]),\n placeholderDataURL: z.string().optional(),\n progressive: z.boolean(),\n}).catchall(coFileStreamDefiner());\n\n/** @category Media */\nexport const ImageDefinition = ImageDefinitionBase;\nexport type ImageDefinition = Loaded<typeof ImageDefinition>;\n","import { AgentSecret, LocalNode, cojsonInternals } from \"cojson\";\nimport { PureJSCrypto } from \"cojson/dist/crypto/PureJSCrypto\";\nimport { AuthSecretStorage } from \"../auth/AuthSecretStorage.js\";\nimport { InMemoryKVStore } from \"../auth/InMemoryKVStore.js\";\nimport { KvStore, KvStoreContext } from \"../auth/KvStoreContext.js\";\nimport { Account } from \"../coValues/account.js\";\nimport { AuthCredentials } from \"../types.js\";\nimport { JazzContextType } from \"../types.js\";\nimport { AnonymousJazzAgent } from \"./anonymousJazzAgent.js\";\nimport { createAnonymousJazzContext } from \"./createContext.js\";\nimport { InstanceOfSchema } from \"./zodSchema/typeConverters/InstanceOfSchema.js\";\n\nexport type JazzContextManagerAuthProps = {\n credentials?: AuthCredentials;\n newAccountProps?: { secret: AgentSecret; creationProps: { name: string } };\n};\n\nexport type JazzContextManagerBaseProps<Acc extends Account> = {\n onAnonymousAccountDiscarded?: (anonymousAccount: Acc) => Promise<void>;\n onLogOut?: () => void | Promise<unknown>;\n logOutReplacement?: () => void | Promise<unknown>;\n};\n\ntype PlatformSpecificAuthContext<Acc extends Account> = {\n me: Acc;\n node: LocalNode;\n logOut: () => Promise<void>;\n done: () => void;\n};\n\ntype PlatformSpecificGuestContext = {\n guest: AnonymousJazzAgent;\n node: LocalNode;\n logOut: () => Promise<void>;\n done: () => void;\n};\n\ntype PlatformSpecificContext<Acc extends Account> =\n | PlatformSpecificAuthContext<Acc>\n | PlatformSpecificGuestContext;\n\nfunction getAnonymousFallback() {\n const context = createAnonymousJazzContext({\n peersToLoadFrom: [],\n crypto: new PureJSCrypto(),\n });\n\n return {\n guest: context.agent,\n node: context.agent.node,\n done: () => {},\n logOut: async () => {},\n isAuthenticated: false,\n authenticate: async () => {},\n register: async () => {\n throw new Error(\"Not implemented\");\n },\n } satisfies JazzContextType<InstanceOfSchema<any>>;\n}\n\nexport class JazzContextManager<\n Acc extends Account,\n P extends JazzContextManagerBaseProps<Acc>,\n> {\n protected value: JazzContextType<Acc> | undefined;\n protected context: PlatformSpecificContext<Acc> | undefined;\n protected props: P | undefined;\n protected authSecretStorage = new AuthSecretStorage();\n protected keepContextOpen = false;\n contextPromise: Promise<void> | undefined;\n protected authenticatingAccountID: string | null = null;\n\n constructor(opts?: { useAnonymousFallback?: boolean }) {\n KvStoreContext.getInstance().initialize(this.getKvStore());\n\n if (opts?.useAnonymousFallback) {\n this.value = getAnonymousFallback();\n }\n }\n\n getKvStore(): KvStore {\n return new InMemoryKVStore();\n }\n\n async createContext(props: P, authProps?: JazzContextManagerAuthProps) {\n // We need to store the props here to block the double effect execution\n // on React. Otherwise when calling propsChanged this.props is undefined.\n this.props = props;\n\n // Avoid race condition between the previous context and the new one\n const { promise, resolve } = createResolvablePromise<void>();\n\n const prevPromise = this.contextPromise;\n this.contextPromise = promise;\n\n await prevPromise;\n\n try {\n const result = await this.getNewContext(props, authProps);\n await this.updateContext(props, result, authProps);\n\n resolve();\n } catch (error) {\n resolve();\n throw error;\n }\n }\n\n async getNewContext(\n props: P,\n authProps?: JazzContextManagerAuthProps,\n ): Promise<PlatformSpecificContext<Acc>> {\n props;\n authProps;\n throw new Error(\"Not implemented\");\n }\n\n async updateContext(\n props: P,\n context: PlatformSpecificContext<Acc>,\n authProps?: JazzContextManagerAuthProps,\n ) {\n // When keepContextOpen we don't want to close the previous context\n // because we might need to handle the onAnonymousAccountDiscarded callback\n if (!this.keepContextOpen) {\n this.context?.done();\n }\n\n this.context = context;\n this.props = props;\n this.value = {\n ...context,\n node: context.node,\n authenticate: this.authenticate,\n register: this.register,\n logOut: this.logOut,\n };\n\n if (authProps?.credentials) {\n this.authSecretStorage.emitUpdate(authProps.credentials);\n } else {\n this.authSecretStorage.emitUpdate(await this.authSecretStorage.get());\n }\n\n this.notify();\n }\n\n propsChanged(props: P) {\n props;\n throw new Error(\"Not implemented\");\n }\n\n getCurrentValue() {\n return this.value;\n }\n\n setCurrentValue(value: JazzContextType<Acc>) {\n this.value = value;\n }\n\n getAuthSecretStorage() {\n return this.authSecretStorage;\n }\n\n getAuthenticatingAccountID() {\n return this.authenticatingAccountID;\n }\n\n logOut = async () => {\n if (!this.context || !this.props) {\n return;\n }\n\n this.authenticatingAccountID = null;\n\n await this.props.onLogOut?.();\n\n if (this.props.logOutReplacement) {\n await this.props.logOutReplacement();\n } else {\n await this.context.logOut();\n return this.createContext(this.props);\n }\n };\n\n done = () => {\n if (!this.context) {\n return;\n }\n\n this.context.done();\n };\n\n shouldMigrateAnonymousAccount = async () => {\n if (!this.props?.onAnonymousAccountDiscarded) {\n return false;\n }\n\n const prevCredentials = await this.authSecretStorage.get();\n const wasAnonymous =\n this.authSecretStorage.getIsAuthenticated(prevCredentials) === false;\n\n return wasAnonymous;\n };\n\n /**\n * Authenticates the user with the given credentials\n */\n authenticate = async (credentials: AuthCredentials) => {\n if (!this.props) {\n throw new Error(\"Props required\");\n }\n\n if (\n this.authenticatingAccountID &&\n this.authenticatingAccountID === credentials.accountID\n ) {\n console.info(\n \"Authentication already in progress for account\",\n credentials.accountID,\n \"skipping duplicate request\",\n );\n return;\n }\n\n if (\n this.authenticatingAccountID &&\n this.authenticatingAccountID !== credentials.accountID\n ) {\n throw new Error(\n `Authentication already in progress for different account (${this.authenticatingAccountID}), cannot authenticate ${credentials.accountID}`,\n );\n }\n\n this.authenticatingAccountID = credentials.accountID;\n\n try {\n const prevContext = this.context;\n const migratingAnonymousAccount =\n await this.shouldMigrateAnonymousAccount();\n\n this.keepContextOpen = migratingAnonymousAccount;\n await this.createContext(this.props, { credentials }).finally(() => {\n this.keepContextOpen = false;\n });\n\n if (migratingAnonymousAccount) {\n await this.handleAnonymousAccountMigration(prevContext);\n }\n } finally {\n this.authenticatingAccountID = null;\n }\n };\n\n register = async (\n accountSecret: AgentSecret,\n creationProps: { name: string },\n ) => {\n if (!this.props) {\n throw new Error(\"Props required\");\n }\n\n if (this.authenticatingAccountID) {\n throw new Error(\"Authentication already in progress\");\n }\n\n // For registration, we don't know the account ID yet, so we'll set it to \"register\"\n this.authenticatingAccountID = \"register\";\n\n try {\n const prevContext = this.context;\n const migratingAnonymousAccount =\n await this.shouldMigrateAnonymousAccount();\n\n this.keepContextOpen = migratingAnonymousAccount;\n await this.createContext(this.props, {\n newAccountProps: {\n secret: accountSecret,\n creationProps,\n },\n }).finally(() => {\n this.keepContextOpen = false;\n });\n\n if (migratingAnonymousAccount) {\n await this.handleAnonymousAccountMigration(prevContext);\n }\n\n if (this.context && \"me\" in this.context) {\n return this.context.me.$jazz.id;\n }\n\n throw new Error(\"The registration hasn't created a new account\");\n } finally {\n this.authenticatingAccountID = null;\n }\n };\n\n private async handleAnonymousAccountMigration(\n prevContext: PlatformSpecificContext<Acc> | undefined,\n ) {\n if (!this.props) {\n throw new Error(\"Props required\");\n }\n\n const currentContext = this.context;\n\n if (\n prevContext &&\n currentContext &&\n \"me\" in prevContext &&\n \"me\" in currentContext\n ) {\n // Using a direct connection to make coValue transfer almost synchronous\n const [prevAccountAsPeer, currentAccountAsPeer] =\n cojsonInternals.connectedPeers(\n prevContext.me.$jazz.id,\n currentContext.me.$jazz.id,\n {\n peer1role: \"client\",\n peer2role: \"server\",\n },\n );\n\n // Closing storage on the prevContext to avoid conflicting transactions and getting stuck on waitForAllCoValuesSync\n // The storage is reachable through currentContext using the connectedPeers\n prevContext.node.removeStorage();\n\n currentContext.node.syncManager.addPeer(prevAccountAsPeer);\n prevContext.node.syncManager.addPeer(currentAccountAsPeer);\n\n try {\n await this.props.onAnonymousAccountDiscarded?.(prevContext.me);\n await prevContext.me.$jazz.waitForAllCoValuesSync();\n } catch (error) {\n console.error(\"Error onAnonymousAccountDiscarded\", error);\n }\n\n prevAccountAsPeer.outgoing.close();\n currentAccountAsPeer.outgoing.close();\n }\n\n prevContext?.done();\n }\n\n listeners = new Set<() => void>();\n subscribe = (callback: () => void) => {\n this.listeners.add(callback);\n\n return () => {\n this.listeners.delete(callback);\n };\n };\n\n notify() {\n for (const listener of this.listeners) {\n listener();\n }\n }\n}\n\nfunction createResolvablePromise<T>() {\n let resolve!: (value: T) => void;\n\n const promise = new Promise<T>((res) => {\n resolve = res;\n });\n\n return { promise, resolve };\n}\n","export interface KvStore {\n get(key: string): Promise<string | null>;\n set(key: string, value: string): Promise<void>;\n delete(key: string): Promise<void>;\n clearAll(): Promise<void>;\n}\n\nexport class KvStoreContext {\n private static instance: KvStoreContext;\n private storageInstance: KvStore | null = null;\n\n private constructor() {}\n\n public static getInstance(): KvStoreContext {\n if (!KvStoreContext.instance) {\n KvStoreContext.instance = new KvStoreContext();\n }\n return KvStoreContext.instance;\n }\n\n public isInitialized(): boolean {\n return this.storageInstance !== null;\n }\n\n public initialize(store: KvStore): void {\n if (!this.storageInstance) {\n this.storageInstance = store;\n }\n }\n\n public getStorage(): KvStore {\n if (!this.storageInstance) {\n throw new Error(\"Storage instance is not initialized.\");\n }\n return this.storageInstance;\n }\n}\n\nexport default KvStoreContext;\n","import { AgentSecret } from \"cojson\";\nimport type { Account } from \"../coValues/account.js\";\nimport type { ID } from \"../internal.js\";\nimport { AuthCredentials } from \"../types.js\";\nimport KvStoreContext from \"./KvStoreContext.js\";\n\nconst STORAGE_KEY = \"jazz-logged-in-secret\";\n\nexport type AuthSetPayload = {\n accountID: ID<Account>;\n secretSeed?: Uint8Array;\n accountSecret: AgentSecret;\n provider:\n | \"anonymous\"\n | \"clerk\"\n | \"betterauth\"\n | \"demo\"\n | \"passkey\"\n | \"passphrase\"\n | string;\n};\n\nexport class AuthSecretStorage {\n private listeners: Set<(isAuthenticated: boolean) => void>;\n public isAuthenticated: boolean;\n\n constructor() {\n this.listeners = new Set();\n this.isAuthenticated = false;\n }\n\n async migrate() {\n const kvStore = KvStoreContext.getInstance().getStorage();\n\n if (!(await kvStore.get(STORAGE_KEY))) {\n const demoAuthSecret = await kvStore.get(\"demo-auth-logged-in-secret\");\n if (demoAuthSecret) {\n const parsed = JSON.parse(demoAuthSecret);\n await kvStore.set(\n STORAGE_KEY,\n JSON.stringify({\n accountID: parsed.accountID,\n accountSecret: parsed.accountSecret,\n provider: \"demo\",\n }),\n );\n await kvStore.delete(\"demo-auth-logged-in-secret\");\n }\n\n const clerkAuthSecret = await kvStore.get(\"jazz-clerk-auth\");\n if (clerkAuthSecret) {\n const parsed = JSON.parse(clerkAuthSecret);\n await kvStore.set(\n STORAGE_KEY,\n JSON.stringify({\n accountID: parsed.accountID,\n accountSecret: parsed.secret,\n provider: \"clerk\",\n }),\n );\n await kvStore.delete(\"jazz-clerk-auth\");\n }\n }\n\n const value = await kvStore.get(STORAGE_KEY);\n\n if (value) {\n const parsed = JSON.parse(value);\n\n if (\"secret\" in parsed) {\n await kvStore.set(\n STORAGE_KEY,\n JSON.stringify({\n accountID: parsed.accountID,\n secretSeed: parsed.secretSeed,\n accountSecret: parsed.secret,\n provider: parsed.provider,\n }),\n );\n }\n }\n }\n\n async get(): Promise<AuthCredentials | null> {\n const kvStore = KvStoreContext.getInstance().getStorage();\n const data = await kvStore.get(STORAGE_KEY);\n\n if (!data) return null;\n\n const parsed = JSON.parse(data);\n\n if (!parsed.accountID || !parsed.accountSecret) {\n throw new Error(\"Invalid auth secret storage data\");\n }\n\n return {\n accountID: parsed.accountID,\n secretSeed: parsed.secretSeed\n ? new Uint8Array(parsed.secretSeed)\n : undefined,\n accountSecret: parsed.accountSecret,\n provider: parsed.provider,\n };\n }\n\n async setWithoutNotify(payload: AuthSetPayload) {\n const kvStore = KvStoreContext.getInstance().getStorage();\n await kvStore.set(\n STORAGE_KEY,\n JSON.stringify({\n accountID: payload.accountID,\n secretSeed: payload.secretSeed\n ? Array.from(payload.secretSeed)\n : undefined,\n accountSecret: payload.accountSecret,\n provider: payload.provider,\n }),\n );\n }\n\n async set(payload: AuthSetPayload) {\n this.setWithoutNotify(payload);\n this.emitUpdate(payload);\n }\n\n getIsAuthenticated(data: AuthCredentials | null): boolean {\n if (!data) return false;\n return data.provider !== \"anonymous\";\n }\n\n onUpdate(handler: (isAuthenticated: boolean) => void) {\n this.listeners.add(handler);\n return () => {\n this.listeners.delete(handler);\n };\n }\n\n emitUpdate(data: AuthCredentials | null) {\n const isAuthenticated = this.getIsAuthenticated(data);\n\n if (this.isAuthenticated === isAuthenticated) return;\n\n this.isAuthenticated = isAuthenticated;\n for (const listener of this.listeners) {\n listener(this.isAuthenticated);\n }\n }\n\n async clearWithoutNotify() {\n const kvStore = KvStoreContext.getInstance().getStorage();\n await kvStore.delete(STORAGE_KEY);\n }\n\n async clear() {\n await this.clearWithoutNotify();\n this.emitUpdate(null);\n }\n}\n","import { KvStore } from \"./KvStoreContext.js\";\n\nexport class InMemoryKVStore implements KvStore {\n private store: Record<string, string> = {};\n\n async get(key: string) {\n const data = this.store[key];\n\n if (!data) return null;\n\n return data;\n }\n\n async set(key: string, value: string) {\n this.store[key] = value;\n }\n\n async delete(key: string) {\n delete this.store[key];\n }\n\n async clearAll() {\n this.store = {};\n }\n}\n","/* istanbul ignore file -- @preserve */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ItemsSym, TypeSym } from \"./symbols.js\";\n\n(globalThis as any).devtoolsFormatters = [\n {\n header: (object: any) => {\n if (object[TypeSym] === \"CoMap\") {\n return [\"div\", {}, [\"span\", {}, object.constructor.name]];\n } else if (object[TypeSym] === \"CoList\") {\n return [\n \"div\",\n {},\n [\"span\", {}, object.constructor.name + \"(\" + object.length + \") \"],\n ];\n } else if (object[TypeSym] === \"Account\") {\n return [\n \"div\",\n {},\n [\n \"span\",\n {},\n object.constructor.name +\n \"(\" +\n object.$jazz.refs.profile.value?.name +\n (object.isMe ? \" ME\" : \"\") +\n \")\",\n ],\n ];\n } else {\n return null;\n }\n },\n hasBody: function () {\n return true;\n },\n body: function (object: any) {\n if (object[TypeSym] === \"CoMap\" || object[TypeSym] === \"Account\") {\n return [\n \"div\",\n { style: \"margin-left: 15px\" },\n [\"div\", \"id: \", [\"object\", { object: object.id }]],\n ...Object.entries(object).map(([k, v]) => [\n \"div\",\n { style: \"white-space: nowrap;\" },\n [\"span\", { style: \"font-weight: bold; opacity: 0.6\" }, k, \": \"],\n [\"object\", { object: v }],\n ...(typeof object._schema[k] === \"function\"\n ? v === null\n ? [\n [\n \"span\",\n { style: \"opacity: 0.5\" },\n ` (pending ${object._schema[k].name} `,\n [\"object\", { object: object.$jazz.refs[k] }],\n \")\",\n ],\n ]\n : []\n : []),\n ]),\n ];\n } else if (object[TypeSym] === \"CoList\") {\n return [\n \"div\",\n { style: \"margin-left: 15px\" },\n [\"div\", \"id: \", [\"object\", { object: object.id }]],\n ...(object as any[]).map((v, i) => [\n \"div\",\n { style: \"white-space: nowrap;\" },\n [\"span\", { style: \"font-weight: bold; opacity: 0.6\" }, i, \": \"],\n [\"object\", { object: v }],\n ...(typeof object._schema[ItemsSym] === \"function\"\n ? v === null\n ? [\n [\n \"span\",\n { style: \"opacity: 0.5\" },\n ` (pending ${object._schema[ItemsSym].name} `,\n [\"object\", { object: object.$jazz.refs[i] }],\n \")\",\n ],\n ]\n : []\n : []),\n ]),\n ];\n }\n },\n },\n];\n","import {\n type CoValueUniqueness,\n type CojsonInternalTypes,\n type RawCoValue,\n} from \"cojson\";\nimport { AvailableCoValueCore } from \"cojson/dist/coValueCore/coValueCore.js\";\nimport {\n Account,\n AnonymousJazzAgent,\n CoValueClassOrSchema,\n type Group,\n Loaded,\n RefsToResolve,\n RefsToResolveStrict,\n RegisteredSchemas,\n ResolveQuery,\n ResolveQueryStrict,\n Resolved,\n SubscriptionScope,\n type SubscriptionValue,\n TypeSym,\n activeAccountContext,\n coValueClassFromCoValueClassOrSchema,\n inspect,\n} from \"../internal.js\";\n\n/** @category Abstract interfaces */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface CoValueClass<Value extends CoValue = CoValue> {\n /** @ignore */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new (...args: any[]): Value;\n}\n\nexport interface CoValueFromRaw<V extends CoValue> {\n fromRaw(raw: V[\"$jazz\"][\"raw\"]): V;\n}\n\n/** @category Abstract interfaces */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface CoValue {\n /** @category Type Helpers */\n [TypeSym]: string;\n\n $jazz: {\n /** @category Content */\n readonly id: ID<CoValue>;\n /** @category Collaboration */\n owner?: Group;\n /** @internal */\n readonly loadedAs: Account | AnonymousJazzAgent;\n /** @category Internals */\n raw: RawCoValue;\n /** @internal */\n _subscriptionScope?: SubscriptionScope<CoValue>;\n };\n\n /** @category Stringifying & Inspection */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n toJSON(key?: string, seenAbove?: ID<CoValue>[]): any[] | object | string;\n /** @category Stringifying & Inspection */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [inspect](): any;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isCoValue(value: any): value is CoValue {\n return value && value[TypeSym] !== undefined;\n}\n\nexport function isCoValueClass<V extends CoValue>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any,\n): value is CoValueClass<V> & CoValueFromRaw<V> {\n return typeof value === \"function\" && value.fromRaw !== undefined;\n}\n\n/**\n * IDs are unique identifiers for `CoValue`s.\n * Can be used with a type argument to refer to a specific `CoValue` type.\n *\n * @example\n *\n * ```ts\n * type AccountID = ID<Account>;\n * ```\n *\n * @category CoValues\n */\nexport type ID<T> = string;\n\nexport function loadCoValueWithoutMe<\n V extends CoValue,\n const R extends RefsToResolve<V>,\n>(\n cls: CoValueClass<V>,\n id: ID<CoValue>,\n options?: {\n resolve?: RefsToResolveStrict<V, R>;\n loadAs?: Account | AnonymousJazzAgent;\n skipRetry?: boolean;\n },\n): Promise<Resolved<V, R> | null> {\n return loadCoValue(cls, id, {\n ...options,\n loadAs: options?.loadAs ?? activeAccountContext.get(),\n });\n}\n\nexport function loadCoValue<\n V extends CoValue,\n const R extends RefsToResolve<V>,\n>(\n cls: CoValueClass<V>,\n id: ID<CoValue>,\n options: {\n resolve?: RefsToResolveStrict<V, R>;\n loadAs: Account | AnonymousJazzAgent;\n skipRetry?: boolean;\n },\n): Promise<Resolved<V, R> | null> {\n return new Promise((resolve) => {\n subscribeToCoValue<V, R>(\n cls,\n id,\n {\n resolve: options.resolve,\n loadAs: options.loadAs,\n syncResolution: true,\n skipRetry: options.skipRetry,\n onUnavailable: () => {\n resolve(null);\n },\n onUnauthorized: () => {\n resolve(null);\n },\n },\n (value, unsubscribe) => {\n resolve(value);\n unsubscribe();\n },\n );\n });\n}\n\nexport async function ensureCoValueLoaded<\n V extends CoValue,\n const R extends RefsToResolve<V>,\n>(\n existing: V,\n options?: { resolve?: RefsToResolveStrict<V, R> } | undefined,\n): Promise<Resolved<V, R>> {\n const response = await loadCoValue(\n existing.constructor as CoValueClass<V>,\n existing.$jazz.id,\n {\n loadAs: existing.$jazz.loadedAs,\n resolve: options?.resolve,\n },\n );\n\n if (!response) {\n throw new Error(\"Failed to deeply load CoValue \" + existing.$jazz.id);\n }\n\n return response;\n}\n\ntype SubscribeListener<V extends CoValue, R extends RefsToResolve<V>> = (\n value: Resolved<V, R>,\n unsubscribe: () => void,\n) => void;\n\nexport type SubscribeListenerOptions<\n V extends CoValue,\n R extends RefsToResolve<V>,\n> = {\n resolve?: RefsToResolveStrict<V, R>;\n loadAs?: Account | AnonymousJazzAgent;\n onUnauthorized?: () => void;\n onUnavailable?: () => void;\n};\n\nexport type SubscribeRestArgs<V extends CoValue, R extends RefsToResolve<V>> =\n | [options: SubscribeListenerOptions<V, R>, listener: SubscribeListener<V, R>]\n | [listener: SubscribeListener<V, R>];\n\nexport function parseSubscribeRestArgs<\n V extends CoValue,\n R extends RefsToResolve<V>,\n>(\n args: SubscribeRestArgs<V, R>,\n): {\n options: SubscribeListenerOptions<V, R>;\n listener: SubscribeListener<V, R>;\n} {\n if (args.length === 2) {\n if (\n typeof args[0] === \"object\" &&\n args[0] &&\n typeof args[1] === \"function\"\n ) {\n return {\n options: {\n resolve: args[0].resolve,\n loadAs: args[0].loadAs,\n onUnauthorized: args[0].onUnauthorized,\n onUnavailable: args[0].onUnavailable,\n },\n listener: args[1],\n };\n } else {\n throw new Error(\"Invalid arguments\");\n }\n } else {\n if (typeof args[0] === \"function\") {\n return { options: {}, listener: args[0] };\n } else {\n throw new Error(\"Invalid arguments\");\n }\n }\n}\n\nexport function subscribeToCoValueWithoutMe<\n V extends CoValue,\n const R extends RefsToResolve<V>,\n>(\n cls: CoValueClass<V>,\n id: ID<CoValue>,\n options: SubscribeListenerOptions<V, R>,\n listener: SubscribeListener<V, R>,\n) {\n return subscribeToCoValue(\n cls,\n id,\n {\n ...options,\n loadAs: options.loadAs ?? activeAccountContext.get(),\n },\n listener,\n );\n}\n\nexport function subscribeToCoValue<\n V extends CoValue,\n const R extends RefsToResolve<V>,\n>(\n cls: CoValueClass<V>,\n id: ID<CoValue>,\n options: {\n resolve?: RefsToResolveStrict<V, R>;\n loadAs: Account | AnonymousJazzAgent;\n onUnavailable?: () => void;\n onUnauthorized?: () => void;\n syncResolution?: boolean;\n skipRetry?: boolean;\n },\n listener: SubscribeListener<V, R>,\n): () => void {\n const loadAs = options.loadAs ?? activeAccountContext.get();\n const node = \"node\" in loadAs ? loadAs.node : loadAs.$jazz.localNode;\n\n const resolve = options.resolve ?? true;\n\n let unsubscribed = false;\n\n const rootNode = new SubscriptionScope<V>(\n node,\n resolve,\n id as ID<V>,\n {\n ref: cls,\n optional: false,\n },\n options.skipRetry,\n );\n\n const handleUpdate = (value: SubscriptionValue<V, any>) => {\n if (unsubscribed) return;\n\n if (value.type === \"unavailable\") {\n options.onUnavailable?.();\n\n console.error(value.toString());\n } else if (value.type === \"unauthorized\") {\n options.onUnauthorized?.();\n\n console.error(value.toString());\n } else if (value.type === \"loaded\") {\n listener(value.value as Resolved<V, R>, unsubscribe);\n }\n };\n\n let shouldDefer = !options.syncResolution;\n\n rootNode.setListener((value) => {\n if (shouldDefer) {\n shouldDefer = false;\n Promise.resolve().then(() => {\n handleUpdate(value);\n });\n } else {\n handleUpdate(value);\n }\n });\n\n function unsubscribe() {\n unsubscribed = true;\n rootNode.destroy();\n }\n\n return unsubscribe;\n}\n\nexport function subscribeToExistingCoValue<\n V extends CoValue,\n const R extends RefsToResolve<V>,\n>(\n existing: V,\n options:\n | {\n resolve?: RefsToResolveStrict<V, R>;\n onUnavailable?: () => void;\n onUnauthorized?: () => void;\n }\n | undefined,\n listener: SubscribeListener<V, R>,\n): () => void {\n return subscribeToCoValue(\n existing.constructor as CoValueClass<V>,\n existing.$jazz.id,\n {\n loadAs: existing.$jazz.loadedAs,\n resolve: options?.resolve,\n onUnavailable: options?.onUnavailable,\n onUnauthorized: options?.onUnauthorized,\n },\n listener,\n );\n}\n\nexport function isAccountInstance(instance: unknown): instance is Account {\n if (typeof instance !== \"object\" || instance === null) {\n return false;\n }\n\n return TypeSym in instance && instance[TypeSym] === \"Account\";\n}\n\nexport function isAnonymousAgentInstance(\n instance: unknown,\n): instance is AnonymousJazzAgent {\n if (typeof instance !== \"object\" || instance === null) {\n return false;\n }\n\n return TypeSym in instance && instance[TypeSym] === \"Anonymous\";\n}\n\nexport function parseCoValueCreateOptions(\n options:\n | {\n owner?: Account | Group;\n unique?: CoValueUniqueness[\"uniqueness\"];\n }\n | Account\n | Group\n | undefined,\n): {\n owner: Group;\n uniqueness?: CoValueUniqueness;\n} {\n const Group = RegisteredSchemas[\"Group\"];\n\n if (!options) {\n return { owner: Group.create(), uniqueness: undefined };\n }\n\n if (TypeSym in options) {\n if (options[TypeSym] === \"Account\") {\n return { owner: accountOrGroupToGroup(options), uniqueness: undefined };\n } else if (options[TypeSym] === \"Group\") {\n return { owner: options, uniqueness: undefined };\n }\n }\n\n const uniqueness = options.unique\n ? { uniqueness: options.unique }\n : undefined;\n\n const opts = {\n owner: options.owner\n ? accountOrGroupToGroup(options.owner)\n : Group.create(),\n uniqueness,\n };\n return opts;\n}\n\nexport function accountOrGroupToGroup(accountOrGroup: Account | Group): Group {\n if (accountOrGroup[TypeSym] === \"Group\") {\n return accountOrGroup;\n }\n return RegisteredSchemas[\"Group\"].fromRaw(accountOrGroup.$jazz.raw);\n}\n\nexport function parseGroupCreateOptions(\n options:\n | {\n owner?: Account;\n }\n | Account\n | undefined,\n) {\n if (!options) {\n return { owner: activeAccountContext.get() };\n }\n\n return TypeSym in options && isAccountInstance(options)\n ? { owner: options }\n : { owner: options.owner ?? activeAccountContext.get() };\n}\n\n/**\n * Deeply export a CoValue to a content piece.\n *\n * @param cls - The class of the CoValue to export.\n * @param id - The ID of the CoValue to export.\n * @param options - The options for the export.\n * @returns The content pieces that were exported.\n *\n * @example\n * ```ts\n * const Address = co.map({\n * street: z.string(),\n * city: z.string(),\n * });\n *\n * const Person = co.map({\n * name: z.string(),\n * address: Address,\n * });\n *\n * const group = Group.create();\n * const address = Address.create(\n * { street: \"123 Main St\", city: \"New York\" },\n * group,\n * );\n * const person = Person.create({ name: \"John\", address }, group);\n * group.addMember(\"everyone\", \"reader\");\n *\n * // Export with nested references resolved, values can be serialized to JSON\n * const exportedWithResolve = await exportCoValue(Person, person.id, {\n * resolve: { address: true },\n * });\n *\n * // In another client or session\n * // Load the exported content pieces into the node, they will be persisted\n * importContentPieces(exportedWithResolve);\n *\n * // Now the person can be loaded from the node, even offline\n * const person = await loadCoValue(Person, person.id, {\n * resolve: { address: true },\n * });\n * ```\n */\nexport async function exportCoValue<\n S extends CoValueClassOrSchema,\n const R extends ResolveQuery<S>,\n>(\n cls: S,\n id: ID<CoValue>,\n options: {\n resolve?: ResolveQueryStrict<S, R>;\n loadAs: Account | AnonymousJazzAgent;\n skipRetry?: boolean;\n bestEffortResolution?: boolean;\n },\n) {\n const loadAs = options.loadAs ?? activeAccountContext.get();\n const node = \"node\" in loadAs ? loadAs.node : loadAs.$jazz.localNode;\n\n const resolve = options.resolve ?? true;\n\n const rootNode = new SubscriptionScope<CoValue>(\n node,\n resolve as any,\n id,\n {\n ref: coValueClassFromCoValueClassOrSchema(cls),\n optional: false,\n },\n options.skipRetry,\n options.bestEffortResolution,\n );\n\n const value = await new Promise<Loaded<S, R> | null>((resolve) => {\n rootNode.setListener((value) => {\n if (value.type === \"unavailable\") {\n resolve(null);\n console.error(value.toString());\n } else if (value.type === \"unauthorized\") {\n resolve(null);\n console.error(value.toString());\n } else if (value.type === \"loaded\") {\n resolve(value.value as Loaded<S, R>);\n }\n\n rootNode.destroy();\n });\n });\n\n if (!value) {\n return null;\n }\n\n const valuesExported = new Set<string>();\n const contentPieces: CojsonInternalTypes.NewContentMessage[] = [];\n\n loadContentPiecesFromSubscription(rootNode, valuesExported, contentPieces);\n\n return contentPieces;\n}\n\nfunction loadContentPiecesFromSubscription(\n subscription: SubscriptionScope<any>,\n valuesExported: Set<string>,\n contentPieces: CojsonInternalTypes.NewContentMessage[],\n) {\n if (valuesExported.has(subscription.id)) {\n return;\n }\n\n valuesExported.add(subscription.id);\n\n const core = subscription.getCurrentValue()?.$jazz.raw\n .core as AvailableCoValueCore;\n\n if (core) {\n loadContentPiecesFromCoValue(core, valuesExported, contentPieces);\n }\n\n for (const child of subscription.childNodes.values()) {\n loadContentPiecesFromSubscription(child, valuesExported, contentPieces);\n }\n}\n\nfunction loadContentPiecesFromCoValue(\n core: AvailableCoValueCore,\n valuesExported: Set<string>,\n contentPieces: CojsonInternalTypes.NewContentMessage[],\n) {\n for (const dependency of core.getDependedOnCoValues()) {\n if (valuesExported.has(dependency)) {\n continue;\n }\n\n const depCoValue = core.node.getCoValue(dependency);\n\n if (depCoValue.isAvailable()) {\n valuesExported.add(dependency);\n loadContentPiecesFromCoValue(depCoValue, valuesExported, contentPieces);\n }\n }\n\n const pieces = core.verified.newContentSince(undefined) ?? [];\n\n for (const piece of pieces) {\n contentPieces.push(piece);\n }\n}\n\n/**\n * Import content pieces into the node.\n *\n * @param contentPieces - The content pieces to import.\n * @param loadAs - The account to load the content pieces as.\n */\nexport function importContentPieces(\n contentPieces: CojsonInternalTypes.NewContentMessage[],\n loadAs?: Account | AnonymousJazzAgent,\n) {\n const account = loadAs ?? Account.getMe();\n const node = \"node\" in account ? account.node : account.$jazz.localNode;\n\n for (const piece of contentPieces) {\n node.syncManager.handleNewContent(piece, \"import\");\n }\n}\n"],"mappings":"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","names":["enum","enum","ref","_a","rawEdit","cojsonInternals","_a","cojsonInternals","cojsonInternals","_a","rawEntry","cojsonInternals","base64","cojsonInternals","LocalNode","cojsonInternals","LocalNode","cojsonInternals","ref","Group","RawAccount","RawAccount","Schema","error","message","calcPatch","calcPatch","value","key","optional","Group","value","RawAccount","RawAccount","ref","LocalNode","LocalNode","account","creationProps","isAnyCoValueSchema","isAnyCoValueSchema","isAnyCoValueSchema","literal","isAnyCoValueSchema","cojsonInternals","cojsonInternals","object","Group","resolve","value","core"]}
|