cojson 0.4.0 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist/coValue.js +1 -1
  2. package/dist/coValue.js.map +1 -1
  3. package/dist/coValues/coList.js +1 -1
  4. package/dist/coValues/coList.js.map +1 -1
  5. package/dist/coValues/coMap.js +1 -1
  6. package/dist/coValues/coMap.js.map +1 -1
  7. package/dist/coValues/coStream.js +3 -2
  8. package/dist/coValues/coStream.js.map +1 -1
  9. package/dist/coValues/group.js.map +1 -1
  10. package/dist/index.js +2 -4
  11. package/dist/index.js.map +1 -1
  12. package/dist/localNode.js +1 -14
  13. package/dist/localNode.js.map +1 -1
  14. package/package.json +4 -4
  15. package/src/coValue.ts +10 -7
  16. package/src/coValues/coList.ts +1 -1
  17. package/src/coValues/coMap.ts +1 -1
  18. package/src/coValues/coStream.ts +4 -6
  19. package/src/coValues/group.ts +4 -4
  20. package/src/index.ts +16 -16
  21. package/src/localNode.ts +6 -47
  22. package/src/tests/coValue.test.ts +5 -5
  23. package/src/tests/group.test.ts +1 -1
  24. package/dist/base64url.d.ts +0 -2
  25. package/dist/coValue.d.ts +0 -38
  26. package/dist/coValueCore.d.ts +0 -103
  27. package/dist/coValues/account.d.ts +0 -62
  28. package/dist/coValues/coList.d.ts +0 -179
  29. package/dist/coValues/coMap.d.ts +0 -149
  30. package/dist/coValues/coStream.d.ts +0 -123
  31. package/dist/coValues/group.d.ts +0 -111
  32. package/dist/crypto.d.ts +0 -120
  33. package/dist/ids.d.ts +0 -11
  34. package/dist/index.d.ts +0 -67
  35. package/dist/jsonStringify.d.ts +0 -6
  36. package/dist/jsonValue.d.ts +0 -7
  37. package/dist/localNode.d.ts +0 -101
  38. package/dist/media.d.ts +0 -7
  39. package/dist/permissions.d.ts +0 -20
  40. package/dist/queriedCoValues/queriedAccount.d.ts +0 -13
  41. package/dist/queriedCoValues/queriedAccount.js +0 -24
  42. package/dist/queriedCoValues/queriedAccount.js.map +0 -1
  43. package/dist/queriedCoValues/queriedCoList.d.ts +0 -66
  44. package/dist/queriedCoValues/queriedCoList.js +0 -116
  45. package/dist/queriedCoValues/queriedCoList.js.map +0 -1
  46. package/dist/queriedCoValues/queriedCoMap.d.ts +0 -40
  47. package/dist/queriedCoValues/queriedCoMap.js +0 -82
  48. package/dist/queriedCoValues/queriedCoMap.js.map +0 -1
  49. package/dist/queriedCoValues/queriedCoStream.d.ts +0 -40
  50. package/dist/queriedCoValues/queriedCoStream.js +0 -96
  51. package/dist/queriedCoValues/queriedCoStream.js.map +0 -1
  52. package/dist/queriedCoValues/queriedGroup.d.ts +0 -29
  53. package/dist/queriedCoValues/queriedGroup.js +0 -54
  54. package/dist/queriedCoValues/queriedGroup.js.map +0 -1
  55. package/dist/queries.d.ts +0 -62
  56. package/dist/queries.js +0 -142
  57. package/dist/queries.js.map +0 -1
  58. package/dist/streamUtils.d.ts +0 -8
  59. package/dist/sync.d.ts +0 -80
  60. package/dist/tests/testUtils.d.ts +0 -37
  61. package/src/queriedCoValues/queriedAccount.ts +0 -40
  62. package/src/queriedCoValues/queriedCoList.ts +0 -240
  63. package/src/queriedCoValues/queriedCoMap.ts +0 -168
  64. package/src/queriedCoValues/queriedCoStream.ts +0 -155
  65. package/src/queriedCoValues/queriedGroup.ts +0 -90
  66. package/src/queries.ts +0 -263
  67. package/src/tests/queries.test.ts +0 -337
@@ -1,29 +0,0 @@
1
- import { Everyone, Group, InviteSecret } from "../coValues/group.js";
2
- import { CoID } from "../coValue.js";
3
- import { QueryContext, ValueOrSubQueried } from "../queries.js";
4
- import { CoValueCore } from "../coValueCore.js";
5
- import { Role } from "../permissions.js";
6
- import { AccountID } from "../coValues/account.js";
7
- import { CoMap } from "../coValues/coMap.js";
8
- import { CoList } from "../coValues/coList.js";
9
- import { CoStream } from "../coValues/coStream.js";
10
- import { BinaryCoStream } from "../coValues/coStream.js";
11
- export declare class QueriedGroup<G extends Group = Group> {
12
- group: G;
13
- id: CoID<G>;
14
- type: "group";
15
- profile?: ValueOrSubQueried<G["_shape"]["profile"]>;
16
- root?: ValueOrSubQueried<G["_shape"]["root"]>;
17
- constructor(group: G, queryContext: QueryContext);
18
- get meta(): G["meta"];
19
- get core(): CoValueCore;
20
- addMember(accountID: AccountID | Everyone, role: Role): G;
21
- removeMember(accountID: AccountID): G;
22
- createInvite(role: "reader" | "writer" | "admin"): InviteSecret;
23
- createMap<M extends CoMap>(init?: {
24
- [K in keyof M["_shape"]]: M["_shape"][K];
25
- }, meta?: M["meta"], initPrivacy?: "trusting" | "private"): M;
26
- createList<L extends CoList>(init?: L["_item"][], meta?: L["meta"], initPrivacy?: "trusting" | "private"): L;
27
- createStream<C extends CoStream>(meta?: C["meta"]): C;
28
- createBinaryStream<C extends BinaryCoStream>(meta?: C["meta"]): C;
29
- }
@@ -1,54 +0,0 @@
1
- export class QueriedGroup {
2
- constructor(group, queryContext) {
3
- this.type = "group";
4
- const profileID = group.get("profile");
5
- const rootID = group.get("root");
6
- queryContext.defineSubqueryPropertiesIn(Object.defineProperties(this, {
7
- group: {
8
- get() {
9
- return group;
10
- },
11
- enumerable: false,
12
- },
13
- id: { value: group.id, enumerable: false },
14
- type: { value: "group", enumerable: false },
15
- }), {
16
- profile: {
17
- value: profileID,
18
- enumerable: false,
19
- },
20
- root: {
21
- value: rootID,
22
- enumerable: false,
23
- },
24
- }, [group.id]);
25
- }
26
- get meta() {
27
- return this.group.meta;
28
- }
29
- get core() {
30
- return this.group.core;
31
- }
32
- addMember(accountID, role) {
33
- return this.group.addMember(accountID, role);
34
- }
35
- removeMember(accountID) {
36
- return this.group.removeMember(accountID);
37
- }
38
- createInvite(role) {
39
- return this.group.createInvite(role);
40
- }
41
- createMap(init, meta, initPrivacy = "private") {
42
- return this.group.createMap(init, meta, initPrivacy);
43
- }
44
- createList(init, meta, initPrivacy = "private") {
45
- return this.group.createList(init, meta, initPrivacy);
46
- }
47
- createStream(meta) {
48
- return this.group.createStream(meta);
49
- }
50
- createBinaryStream(meta = { type: "binary" }) {
51
- return this.group.createBinaryStream(meta);
52
- }
53
- }
54
- //# sourceMappingURL=queriedGroup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queriedGroup.js","sourceRoot":"","sources":["../../src/queriedCoValues/queriedGroup.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,YAAY;IAOrB,YAAY,KAAQ,EAAE,YAA0B;QAJhD,SAAI,GAAG,OAAgB,CAAC;QAKpB,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,YAAY,CAAC,0BAA0B,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;YAClE,KAAK,EAAE;gBACH,GAAG;oBACC,OAAO,KAAK,CAAC;gBACjB,CAAC;gBACD,UAAU,EAAE,KAAK;aACpB;YACD,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE;YAC1C,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE;SAC9C,CAAC,EAAE;YACA,OAAO,EAAE;gBACL,KAAK,EAAE,SAAS;gBAChB,UAAU,EAAE,KAAK;aACpB;YACD,IAAI,EAAE;gBACF,KAAK,EAAE,MAAM;gBACb,UAAU,EAAE,KAAK;aACpB;SACJ,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,SAA+B,EAAE,IAAU;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,YAAY,CAAC,SAAoB;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,YAAY,CAAC,IAAmC;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,SAAS,CACL,IAEC,EACD,IAAgB,EAChB,cAAsC,SAAS;QAE/C,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IACzD,CAAC;IAED,UAAU,CACN,IAAmB,EACnB,IAAgB,EAChB,cAAsC,SAAS;QAE/C,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC1D,CAAC;IAED,YAAY,CAAqB,IAAgB;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,kBAAkB,CACd,OAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE;QAEpC,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;CACJ"}
package/dist/queries.d.ts DELETED
@@ -1,62 +0,0 @@
1
- import { JsonValue } from "./jsonValue.js";
2
- import { CoMap } from "./coValues/coMap.js";
3
- import { CoStream } from "./coValues/coStream.js";
4
- import { CoList } from "./coValues/coList.js";
5
- import { Account } from "./coValues/account.js";
6
- import { CoID, CoValue } from "./coValue.js";
7
- import { LocalNode } from "./localNode.js";
8
- import { QueriedCoMap } from "./queriedCoValues/queriedCoMap.js";
9
- import { QueriedCoList } from "./queriedCoValues/queriedCoList.js";
10
- import { QueriedCoStream } from "./queriedCoValues/queriedCoStream.js";
11
- import { Group } from "./coValues/group.js";
12
- import { QueriedAccount } from "./queriedCoValues/queriedAccount.js";
13
- import { QueriedGroup } from "./queriedCoValues/queriedGroup.js";
14
- export type Queried<T extends CoValue> = T extends CoMap ? T extends Account ? QueriedAccount<T> : T extends Group ? QueriedGroup<T> : QueriedCoMap<T> : T extends CoList ? QueriedCoList<T> : T extends CoStream ? T["meta"] extends {
15
- type: "binary";
16
- } ? never : QueriedCoStream<T> : QueriedAccount | QueriedGroup | QueriedCoMap<CoMap> | QueriedCoList<CoList> | QueriedCoStream<CoStream>;
17
- export type ValueOrSubQueried<V extends JsonValue | CoValue | CoID<CoValue> | undefined> = V extends CoID<infer C> ? Queried<C> | undefined : V extends CoValue ? Queried<V> | undefined : V;
18
- export interface CleanupCallbackAndUsable {
19
- (): void;
20
- [Symbol.dispose]: () => void;
21
- }
22
- export interface QueryExtension<T extends CoValue, O> {
23
- id: string;
24
- query(base: T, queryContext: QueryContext, onUpdate: (value: O) => void): () => void;
25
- }
26
- export declare class QueryContext {
27
- values: {
28
- [id: CoID<CoValue>]: {
29
- lastUpdate: CoValue | undefined;
30
- lastQueried: Queried<CoValue> | undefined;
31
- render: () => void;
32
- unsubscribe: () => void;
33
- };
34
- };
35
- extensions: {
36
- [id: `${CoID<CoValue>}_${string}`]: {
37
- lastOutput: unknown;
38
- unsubscribe: () => void;
39
- };
40
- };
41
- node: LocalNode;
42
- onUpdate: () => void;
43
- constructor(node: LocalNode, onUpdate: () => void);
44
- query<T extends CoValue>(valueID: CoID<T>, alsoRender: CoID<CoValue>[]): Queried<T> | undefined;
45
- queryIfCoID<T extends JsonValue | undefined>(value: T, alsoRender: CoID<CoValue>[]): T extends CoID<infer C> ? Queried<C> | undefined : T;
46
- valueOrSubQueryPropertyDescriptor<T extends JsonValue | undefined>(value: T, alsoRender: CoID<CoValue>[]): T extends CoID<infer C> ? {
47
- get(): Queried<C> | undefined;
48
- } : {
49
- value: T;
50
- };
51
- defineSubqueryPropertiesIn<O extends object, P extends {
52
- [key: string]: {
53
- value: JsonValue | undefined;
54
- enumerable: boolean;
55
- };
56
- }>(obj: O, subqueryProps: P, alsoRender: CoID<CoValue>[]): O & {
57
- [Key in keyof P]: ValueOrSubQueried<P[Key]["value"]>;
58
- };
59
- getOrCreateExtension<T extends CoValue, O>(valueID: CoID<T>, extension: QueryExtension<T, O>): O | undefined;
60
- cleanup(): void;
61
- }
62
- export declare function query<T extends CoValue>(id: CoID<T>, node: LocalNode, callback: (queried: Queried<T> | undefined) => void): CleanupCallbackAndUsable;
package/dist/queries.js DELETED
@@ -1,142 +0,0 @@
1
- import { CoMap } from "./coValues/coMap.js";
2
- import { CoStream } from "./coValues/coStream.js";
3
- import { CoList } from "./coValues/coList.js";
4
- import { Account } from "./coValues/account.js";
5
- import { QueriedCoMapBase, } from "./queriedCoValues/queriedCoMap.js";
6
- import { QueriedCoList } from "./queriedCoValues/queriedCoList.js";
7
- import { QueriedCoStream } from "./queriedCoValues/queriedCoStream.js";
8
- import { Group } from "./coValues/group.js";
9
- import { QueriedAccount } from "./queriedCoValues/queriedAccount.js";
10
- import { QueriedGroup } from "./queriedCoValues/queriedGroup.js";
11
- export class QueryContext {
12
- constructor(node, onUpdate) {
13
- this.values = {};
14
- this.extensions = {};
15
- this.node = node;
16
- this.onUpdate = onUpdate;
17
- }
18
- query(valueID, alsoRender) {
19
- let value = this.values[valueID];
20
- if (!value) {
21
- const render = () => {
22
- let newQueried;
23
- const lastUpdate = value.lastUpdate;
24
- if (lastUpdate instanceof CoMap) {
25
- if (lastUpdate instanceof Account) {
26
- newQueried = new QueriedAccount(lastUpdate, this);
27
- }
28
- else if (lastUpdate instanceof Group) {
29
- newQueried = new QueriedGroup(lastUpdate, this);
30
- }
31
- else {
32
- newQueried = QueriedCoMapBase.newWithKVPairs(lastUpdate, this);
33
- }
34
- }
35
- else if (lastUpdate instanceof CoList) {
36
- newQueried = new QueriedCoList(lastUpdate, this);
37
- }
38
- else if (lastUpdate instanceof CoStream) {
39
- if (lastUpdate.meta?.type === "binary") {
40
- // Querying binary string not yet implemented
41
- }
42
- else {
43
- newQueried = new QueriedCoStream(lastUpdate, this);
44
- }
45
- }
46
- // console.log(
47
- // "Rendered ",
48
- // valueID,
49
- // lastUpdate?.constructor.name,
50
- // newQueried
51
- // );
52
- value.lastQueried = newQueried;
53
- for (const alsoRenderID of alsoRender) {
54
- // console.log("Also rendering", alsoRenderID);
55
- this.values[alsoRenderID]?.render();
56
- }
57
- };
58
- value = {
59
- lastQueried: undefined,
60
- lastUpdate: undefined,
61
- render,
62
- unsubscribe: this.node.subscribe(valueID, (valueUpdate) => {
63
- value.lastUpdate = valueUpdate;
64
- value.render();
65
- this.onUpdate();
66
- }),
67
- };
68
- this.values[valueID] = value;
69
- }
70
- return value.lastQueried;
71
- }
72
- queryIfCoID(value, alsoRender) {
73
- if (typeof value === "string" && value.startsWith("co_")) {
74
- return this.query(value, alsoRender);
75
- }
76
- else {
77
- return value;
78
- }
79
- }
80
- valueOrSubQueryPropertyDescriptor(value, alsoRender) {
81
- if (typeof value === "string" && value.startsWith("co_")) {
82
- // TODO: when we track render dirty status, we can actually return the queried value without a getter if it's up to date
83
- return {
84
- get: () => this.query(value, alsoRender),
85
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
- };
87
- }
88
- else {
89
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
90
- return { value: value };
91
- }
92
- }
93
- defineSubqueryPropertiesIn(obj, subqueryProps, alsoRender) {
94
- for (const [key, descriptor] of Object.entries(subqueryProps)) {
95
- Object.defineProperty(obj, key, {
96
- ...this.valueOrSubQueryPropertyDescriptor(descriptor.value, alsoRender),
97
- enumerable: descriptor.enumerable,
98
- });
99
- }
100
- return obj;
101
- }
102
- getOrCreateExtension(valueID, extension) {
103
- const id = `${valueID}_${extension.id}`;
104
- let ext = this.extensions[id];
105
- if (!ext) {
106
- ext = {
107
- lastOutput: undefined,
108
- unsubscribe: extension.query(this.node
109
- .expectCoValueLoaded(valueID)
110
- .getCurrentContent(), this, (output) => {
111
- ext.lastOutput = output;
112
- this.values[valueID]?.render();
113
- this.onUpdate();
114
- }),
115
- };
116
- this.extensions[id] = ext;
117
- }
118
- return ext.lastOutput;
119
- }
120
- cleanup() {
121
- for (const child of Object.values(this.values)) {
122
- child.unsubscribe?.();
123
- }
124
- for (const extension of Object.values(this.extensions)) {
125
- extension.unsubscribe();
126
- }
127
- }
128
- }
129
- export function query(id, node, callback) {
130
- // console.log("querying", id);
131
- const context = new QueryContext(node, () => {
132
- const rootQueried = context.values[id]?.lastQueried;
133
- callback(rootQueried);
134
- });
135
- context.query(id, []);
136
- const cleanup = function cleanup() {
137
- context.cleanup();
138
- };
139
- cleanup[Symbol.dispose] = cleanup;
140
- return cleanup;
141
- }
142
- //# sourceMappingURL=queries.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import { ReadableStream, WritableStream } from "isomorphic-streams";
2
- import { Peer, PeerID } from "./sync.js";
3
- export declare function connectedPeers(peer1id: PeerID, peer2id: PeerID, { trace, peer1role, peer2role, }?: {
4
- trace?: boolean;
5
- peer1role?: Peer["role"];
6
- peer2role?: Peer["role"];
7
- }): [Peer, Peer];
8
- export declare function newStreamPair<T>(): [ReadableStream<T>, WritableStream<T>];
package/dist/sync.d.ts DELETED
@@ -1,80 +0,0 @@
1
- import { Signature } from "./crypto.js";
2
- import { CoValueHeader, Transaction } from "./coValueCore.js";
3
- import { CoValueCore } from "./coValueCore.js";
4
- import { LocalNode } from "./localNode.js";
5
- import { ReadableStream, WritableStream, WritableStreamDefaultWriter } from "isomorphic-streams";
6
- import { RawCoID, SessionID } from "./ids.js";
7
- export type CoValueKnownState = {
8
- id: RawCoID;
9
- header: boolean;
10
- sessions: {
11
- [sessionID: SessionID]: number;
12
- };
13
- };
14
- export declare function emptyKnownState(id: RawCoID): CoValueKnownState;
15
- export type SyncMessage = LoadMessage | KnownStateMessage | NewContentMessage | DoneMessage;
16
- export type LoadMessage = {
17
- action: "load";
18
- } & CoValueKnownState;
19
- export type KnownStateMessage = {
20
- action: "known";
21
- asDependencyOf?: RawCoID;
22
- isCorrection?: boolean;
23
- } & CoValueKnownState;
24
- export type NewContentMessage = {
25
- action: "content";
26
- id: RawCoID;
27
- header?: CoValueHeader;
28
- new: {
29
- [sessionID: SessionID]: SessionNewContent;
30
- };
31
- };
32
- export type SessionNewContent = {
33
- after: number;
34
- newTransactions: Transaction[];
35
- lastSignature: Signature;
36
- };
37
- export type DoneMessage = {
38
- action: "done";
39
- id: RawCoID;
40
- };
41
- export type PeerID = string;
42
- export interface Peer {
43
- id: PeerID;
44
- incoming: ReadableStream<SyncMessage>;
45
- outgoing: WritableStream<SyncMessage>;
46
- role: "peer" | "server" | "client";
47
- delayOnError?: number;
48
- }
49
- export interface PeerState {
50
- id: PeerID;
51
- optimisticKnownStates: {
52
- [id: RawCoID]: CoValueKnownState;
53
- };
54
- toldKnownState: Set<RawCoID>;
55
- incoming: ReadableStream<SyncMessage>;
56
- outgoing: WritableStreamDefaultWriter<SyncMessage>;
57
- role: "peer" | "server" | "client";
58
- delayOnError?: number;
59
- }
60
- export declare function combinedKnownStates(stateA: CoValueKnownState, stateB: CoValueKnownState): CoValueKnownState;
61
- export declare class SyncManager {
62
- peers: {
63
- [key: PeerID]: PeerState;
64
- };
65
- local: LocalNode;
66
- constructor(local: LocalNode);
67
- loadFromPeers(id: RawCoID): void;
68
- handleSyncMessage(msg: SyncMessage, peer: PeerState): Promise<void | never[]>;
69
- subscribeToIncludingDependencies(id: RawCoID, peer: PeerState): Promise<void>;
70
- tellUntoldKnownStateIncludingDependencies(id: RawCoID, peer: PeerState, asDependencyOf?: RawCoID): Promise<void>;
71
- sendNewContentIncludingDependencies(id: RawCoID, peer: PeerState): Promise<void>;
72
- addPeer(peer: Peer): void;
73
- trySendToPeer(peer: PeerState, msg: SyncMessage): Promise<void>;
74
- handleLoad(msg: LoadMessage, peer: PeerState): Promise<void>;
75
- handleKnownState(msg: KnownStateMessage, peer: PeerState): Promise<never[] | undefined>;
76
- handleNewContent(msg: NewContentMessage, peer: PeerState): Promise<void>;
77
- handleCorrection(msg: KnownStateMessage, peer: PeerState): Promise<void>;
78
- handleUnsubscribe(_msg: DoneMessage): void;
79
- syncCoValue(coValue: CoValueCore): Promise<void>;
80
- }
@@ -1,37 +0,0 @@
1
- import { LocalNode } from "../localNode.js";
2
- import { AnonymousControlledAccount } from "../coValues/account.js";
3
- import { SessionID } from "../ids.js";
4
- export declare function randomAnonymousAccountAndSessionID(): [AnonymousControlledAccount, SessionID];
5
- export declare function newGroup(): {
6
- node: LocalNode;
7
- groupCore: import("../coValueCore.js").CoValueCore;
8
- admin: AnonymousControlledAccount;
9
- };
10
- export declare function groupWithTwoAdmins(): {
11
- groupCore: import("../coValueCore.js").CoValueCore;
12
- admin: AnonymousControlledAccount;
13
- otherAdmin: import("../coValues/account.js").ControlledAccount<import("../coValues/account.js").Profile<import("../coValues/account.js").ProfileShape, import("../coValues/account.js").ProfileMeta>, import("../index.js").CoMap<{
14
- [key: string]: import("../jsonValue.js").JsonValue | undefined;
15
- }, import("../jsonValue.js").JsonObject | null>, import("../coValues/account.js").AccountMeta>;
16
- node: LocalNode;
17
- };
18
- export declare function newGroupHighLevel(): {
19
- admin: AnonymousControlledAccount;
20
- node: LocalNode;
21
- group: import("../coValues/group.js").Group<import("../coValues/account.js").Profile<import("../coValues/account.js").ProfileShape, import("../coValues/account.js").ProfileMeta>, import("../index.js").CoMap<{
22
- [key: string]: import("../jsonValue.js").JsonValue | undefined;
23
- }, import("../jsonValue.js").JsonObject | null>, import("../jsonValue.js").JsonObject | null>;
24
- };
25
- export declare function groupWithTwoAdminsHighLevel(): {
26
- admin: AnonymousControlledAccount;
27
- node: LocalNode;
28
- group: import("../coValues/group.js").Group<import("../coValues/account.js").Profile<import("../coValues/account.js").ProfileShape, import("../coValues/account.js").ProfileMeta>, import("../index.js").CoMap<{
29
- [key: string]: import("../jsonValue.js").JsonValue | undefined;
30
- }, import("../jsonValue.js").JsonObject | null>, import("../jsonValue.js").JsonObject | null>;
31
- otherAdmin: import("../coValues/account.js").ControlledAccount<import("../coValues/account.js").Profile<import("../coValues/account.js").ProfileShape, import("../coValues/account.js").ProfileMeta>, import("../index.js").CoMap<{
32
- [key: string]: import("../jsonValue.js").JsonValue | undefined;
33
- }, import("../jsonValue.js").JsonObject | null>, import("../coValues/account.js").AccountMeta>;
34
- };
35
- export declare function shouldNotResolve<T>(promise: Promise<T>, ops: {
36
- timeout: number;
37
- }): Promise<void>;
@@ -1,40 +0,0 @@
1
- import { Account } from "../coValues/account.js";
2
- import { CoID, CoValue, ControlledAccount, InviteSecret } from "../index.js";
3
- import { QueryContext } from "../queries.js";
4
- import { QueriedGroup } from "./queriedGroup.js";
5
-
6
- export class QueriedAccount<A extends Account = Account> extends QueriedGroup<A> {
7
- id!: CoID<A>;
8
- isMe!: boolean;
9
-
10
- constructor(account: A, queryContext: QueryContext) {
11
- super(account, queryContext);
12
- Object.defineProperties(this, {
13
- id: { value: account.id, enumerable: false },
14
- isMe: {
15
- value: account.core.node.account.id === account.id,
16
- enumerable: false,
17
- },
18
- });
19
- }
20
-
21
- createGroup() {
22
- if (!this.isMe)
23
- throw new Error("Only the current user can create a group");
24
- return (
25
- this.group.core.node.account as ControlledAccount
26
- ).createGroup();
27
- }
28
-
29
- acceptInvite<T extends CoValue>(
30
- groupOrOwnedValueID: CoID<T>,
31
- inviteSecret: InviteSecret
32
- ) {
33
- if (!this.isMe)
34
- throw new Error("Only the current user can accept an invite");
35
- return (this.group.core.node.account as ControlledAccount).acceptInvite(
36
- groupOrOwnedValueID,
37
- inviteSecret
38
- );
39
- }
40
- }