cojson 0.1.8 → 0.1.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.
Files changed (76) hide show
  1. package/dist/account.d.ts +6 -3
  2. package/dist/account.js +4 -2
  3. package/dist/account.js.map +1 -1
  4. package/dist/coValue.d.ts +44 -80
  5. package/dist/coValue.js +4 -348
  6. package/dist/coValue.js.map +1 -1
  7. package/dist/coValueCore.d.ts +84 -0
  8. package/dist/coValueCore.js +356 -0
  9. package/dist/coValueCore.js.map +1 -0
  10. package/dist/coValues/coList.d.ts +114 -0
  11. package/dist/{contentTypes → coValues}/coList.js +59 -19
  12. package/dist/coValues/coList.js.map +1 -0
  13. package/dist/{contentTypes → coValues}/coMap.d.ts +25 -7
  14. package/dist/{contentTypes → coValues}/coMap.js +34 -15
  15. package/dist/coValues/coMap.js.map +1 -0
  16. package/dist/coValues/coStream.d.ts +69 -0
  17. package/dist/coValues/coStream.js +131 -0
  18. package/dist/coValues/coStream.js.map +1 -0
  19. package/dist/coValues/static.d.ts +14 -0
  20. package/dist/coValues/static.js +20 -0
  21. package/dist/coValues/static.js.map +1 -0
  22. package/dist/group.d.ts +57 -9
  23. package/dist/group.js +94 -28
  24. package/dist/group.js.map +1 -1
  25. package/dist/index.d.ts +19 -10
  26. package/dist/index.js +7 -5
  27. package/dist/index.js.map +1 -1
  28. package/dist/node.d.ts +59 -5
  29. package/dist/node.js +36 -15
  30. package/dist/node.js.map +1 -1
  31. package/dist/permissions.d.ts +2 -2
  32. package/dist/permissions.js +1 -1
  33. package/dist/permissions.js.map +1 -1
  34. package/dist/sync.d.ts +3 -3
  35. package/dist/sync.js +2 -2
  36. package/dist/sync.js.map +1 -1
  37. package/dist/testUtils.d.ts +2 -2
  38. package/dist/testUtils.js +1 -1
  39. package/dist/testUtils.js.map +1 -1
  40. package/package.json +2 -2
  41. package/src/account.test.ts +1 -1
  42. package/src/account.ts +8 -5
  43. package/src/coValue.test.ts +335 -129
  44. package/src/coValue.ts +52 -576
  45. package/src/coValueCore.test.ts +180 -0
  46. package/src/coValueCore.ts +592 -0
  47. package/src/{contentTypes → coValues}/coList.ts +91 -42
  48. package/src/{contentTypes → coValues}/coMap.ts +40 -20
  49. package/src/coValues/coStream.ts +249 -0
  50. package/src/coValues/static.ts +31 -0
  51. package/src/group.test.ts +47 -0
  52. package/src/group.ts +120 -50
  53. package/src/index.ts +43 -28
  54. package/src/node.ts +48 -27
  55. package/src/permissions.test.ts +32 -32
  56. package/src/permissions.ts +5 -5
  57. package/src/sync.test.ts +77 -77
  58. package/src/sync.ts +5 -5
  59. package/src/testUtils.ts +1 -1
  60. package/tsconfig.json +1 -2
  61. package/dist/contentType.d.ts +0 -15
  62. package/dist/contentType.js +0 -7
  63. package/dist/contentType.js.map +0 -1
  64. package/dist/contentTypes/coList.d.ts +0 -77
  65. package/dist/contentTypes/coList.js.map +0 -1
  66. package/dist/contentTypes/coMap.js.map +0 -1
  67. package/dist/contentTypes/coStream.d.ts +0 -11
  68. package/dist/contentTypes/coStream.js +0 -16
  69. package/dist/contentTypes/coStream.js.map +0 -1
  70. package/dist/contentTypes/static.d.ts +0 -11
  71. package/dist/contentTypes/static.js +0 -14
  72. package/dist/contentTypes/static.js.map +0 -1
  73. package/src/contentType.test.ts +0 -284
  74. package/src/contentType.ts +0 -26
  75. package/src/contentTypes/coStream.ts +0 -24
  76. package/src/contentTypes/static.ts +0 -22
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coList.js","sourceRoot":"","sources":["../../src/coValues/coList.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { JsonObject, JsonValue } from '../jsonValue.js';
2
2
  import { TransactionID } from '../ids.js';
3
- import { CoID } from '../contentType.js';
4
- import { CoValue } from '../coValue.js';
3
+ import { CoID, ReadableCoValue, WriteableCoValue } from '../coValue.js';
4
+ import { CoValueCore } from '../coValueCore.js';
5
5
  import { AccountID } from '../account.js';
6
6
  import { Group } from '../group.js';
7
7
  type MapOp<K extends string, V extends JsonValue> = {
@@ -28,22 +28,28 @@ export type MapM<M extends {
28
28
  }> = {
29
29
  [KK in MapK<M>]: M[KK];
30
30
  };
31
+ /** A collaborative map with precise shape `M` and optional static metadata `Meta` */
31
32
  export declare class CoMap<M extends {
32
33
  [key: string]: JsonValue;
33
- }, Meta extends JsonObject | null = null> {
34
+ }, Meta extends JsonObject | null = null> implements ReadableCoValue {
34
35
  id: CoID<CoMap<MapM<M>, Meta>>;
35
- coValue: CoValue;
36
36
  type: "comap";
37
+ core: CoValueCore;
38
+ /** @internal */
37
39
  ops: {
38
40
  [KK in MapK<M>]?: MapOp<KK, M[KK]>[];
39
41
  };
40
- constructor(coValue: CoValue);
42
+ /** @internal */
43
+ constructor(core: CoValueCore);
41
44
  get meta(): Meta;
42
45
  get group(): Group;
46
+ /** @internal */
43
47
  protected fillOpsFromCoValue(): void;
44
48
  keys(): MapK<M>[];
49
+ /** Returns the current value for the given key. */
45
50
  get<K extends MapK<M>>(key: K): M[K] | undefined;
46
51
  getAtTime<K extends MapK<M>>(key: K, time: number): M[K] | undefined;
52
+ /** Returns the accountID of the last account to modify the value for the given key. */
47
53
  whoEdited<K extends MapK<M>>(key: K): AccountID | undefined;
48
54
  getLastTxID<K extends MapK<M>>(key: K): TransactionID | undefined;
49
55
  getLastEntry<K extends MapK<M>>(key: K): {
@@ -57,13 +63,25 @@ export declare class CoMap<M extends {
57
63
  value: M[K] | undefined;
58
64
  }[];
59
65
  toJSON(): JsonObject;
60
- edit(changer: (editable: WriteableCoMap<M, Meta>) => void): CoMap<M, Meta>;
61
66
  subscribe(listener: (coMap: CoMap<M, Meta>) => void): () => void;
67
+ edit(changer: (editable: WriteableCoMap<M, Meta>) => void): CoMap<M, Meta>;
62
68
  }
63
69
  export declare class WriteableCoMap<M extends {
64
70
  [key: string]: JsonValue;
65
- }, Meta extends JsonObject | null = null> extends CoMap<M, Meta> {
71
+ }, Meta extends JsonObject | null = null> extends CoMap<M, Meta> implements WriteableCoValue {
72
+ /** @internal */
73
+ edit(_changer: (editable: WriteableCoMap<M, Meta>) => void): CoMap<M, Meta>;
74
+ /** Sets a new value for the given key.
75
+ *
76
+ * If `privacy` is `"private"` **(default)**, both `key` and `value` are encrypted in the transaction, only readable by other members of the group this `CoMap` belongs to. Not even sync servers can see the content in plaintext.
77
+ *
78
+ * If `privacy` is `"trusting"`, both `key` and `value` are stored in plaintext in the transaction, visible to everyone who gets a hold of it, including sync servers. */
66
79
  set<K extends MapK<M>>(key: K, value: M[K], privacy?: "private" | "trusting"): void;
80
+ /** Deletes the value for the given key (setting it to undefined).
81
+ *
82
+ * If `privacy` is `"private"` **(default)**, `key` is encrypted in the transaction, only readable by other members of the group this `CoMap` belongs to. Not even sync servers can see the content in plaintext.
83
+ *
84
+ * If `privacy` is `"trusting"`, `key` is stored in plaintext in the transaction, visible to everyone who gets a hold of it, including sync servers. */
67
85
  delete(key: MapK<M>, privacy?: "private" | "trusting"): void;
68
86
  }
69
87
  export {};
@@ -1,22 +1,25 @@
1
- import { accountOrAgentIDfromSessionID } from '../coValue.js';
1
+ import { accountOrAgentIDfromSessionID } from '../coValueCore.js';
2
2
  import { isAccountID } from '../account.js';
3
+ /** A collaborative map with precise shape `M` and optional static metadata `Meta` */
3
4
  export class CoMap {
4
- constructor(coValue) {
5
+ /** @internal */
6
+ constructor(core) {
5
7
  this.type = "comap";
6
- this.id = coValue.id;
7
- this.coValue = coValue;
8
+ this.id = core.id;
9
+ this.core = core;
8
10
  this.ops = {};
9
11
  this.fillOpsFromCoValue();
10
12
  }
11
13
  get meta() {
12
- return this.coValue.header.meta;
14
+ return this.core.header.meta;
13
15
  }
14
16
  get group() {
15
- return this.coValue.getGroup();
17
+ return this.core.getGroup();
16
18
  }
19
+ /** @internal */
17
20
  fillOpsFromCoValue() {
18
21
  this.ops = {};
19
- for (const { txID, changes, madeAt } of this.coValue.getValidSortedTransactions()) {
22
+ for (const { txID, changes, madeAt } of this.core.getValidSortedTransactions()) {
20
23
  for (const [changeIdx, changeUntyped] of (changes).entries()) {
21
24
  const change = changeUntyped;
22
25
  let entries = this.ops[change.key];
@@ -36,6 +39,7 @@ export class CoMap {
36
39
  keys() {
37
40
  return Object.keys(this.ops);
38
41
  }
42
+ /** Returns the current value for the given key. */
39
43
  get(key) {
40
44
  const ops = this.ops[key];
41
45
  if (!ops) {
@@ -65,6 +69,7 @@ export class CoMap {
65
69
  return lastOpBeforeOrAtTime.value;
66
70
  }
67
71
  }
72
+ /** Returns the accountID of the last account to modify the value for the given key. */
68
73
  whoEdited(key) {
69
74
  const tx = this.getLastTxID(key);
70
75
  if (!tx) {
@@ -125,20 +130,29 @@ export class CoMap {
125
130
  }
126
131
  return json;
127
132
  }
128
- edit(changer) {
129
- const editable = new WriteableCoMap(this.coValue);
130
- changer(editable);
131
- return new CoMap(this.coValue);
132
- }
133
133
  subscribe(listener) {
134
- return this.coValue.subscribe((content) => {
134
+ return this.core.subscribe((content) => {
135
135
  listener(content);
136
136
  });
137
137
  }
138
+ edit(changer) {
139
+ const editable = new WriteableCoMap(this.core);
140
+ changer(editable);
141
+ return new CoMap(this.core);
142
+ }
138
143
  }
139
144
  export class WriteableCoMap extends CoMap {
145
+ /** @internal */
146
+ edit(_changer) {
147
+ throw new Error("Already editing.");
148
+ }
149
+ /** Sets a new value for the given key.
150
+ *
151
+ * If `privacy` is `"private"` **(default)**, both `key` and `value` are encrypted in the transaction, only readable by other members of the group this `CoMap` belongs to. Not even sync servers can see the content in plaintext.
152
+ *
153
+ * If `privacy` is `"trusting"`, both `key` and `value` are stored in plaintext in the transaction, visible to everyone who gets a hold of it, including sync servers. */
140
154
  set(key, value, privacy = "private") {
141
- this.coValue.makeTransaction([
155
+ this.core.makeTransaction([
142
156
  {
143
157
  op: "set",
144
158
  key,
@@ -147,8 +161,13 @@ export class WriteableCoMap extends CoMap {
147
161
  ], privacy);
148
162
  this.fillOpsFromCoValue();
149
163
  }
164
+ /** Deletes the value for the given key (setting it to undefined).
165
+ *
166
+ * If `privacy` is `"private"` **(default)**, `key` is encrypted in the transaction, only readable by other members of the group this `CoMap` belongs to. Not even sync servers can see the content in plaintext.
167
+ *
168
+ * If `privacy` is `"trusting"`, `key` is stored in plaintext in the transaction, visible to everyone who gets a hold of it, including sync servers. */
150
169
  delete(key, privacy = "private") {
151
- this.coValue.makeTransaction([
170
+ this.core.makeTransaction([
152
171
  {
153
172
  op: "del",
154
173
  key,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coMap.js","sourceRoot":"","sources":["../../src/coValues/coMap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import { JsonObject, JsonValue } from "../jsonValue.js";
2
+ import { CoID, ReadableCoValue, WriteableCoValue } from "../coValue.js";
3
+ import { CoValueCore } from "../coValueCore.js";
4
+ import { Group } from "../group.js";
5
+ import { SessionID } from "../ids.js";
6
+ export type BinaryChunkInfo = {
7
+ mimeType: string;
8
+ fileName?: string;
9
+ totalSizeBytes?: number;
10
+ };
11
+ export type BinaryStreamStart = {
12
+ type: "start";
13
+ } & BinaryChunkInfo;
14
+ export type BinaryStreamChunk = {
15
+ type: "chunk";
16
+ chunk: `U${string}`;
17
+ };
18
+ export type BinaryStreamEnd = {
19
+ type: "end";
20
+ };
21
+ export type BinaryCoStreamMeta = JsonObject & {
22
+ type: "binary";
23
+ };
24
+ export type BinaryStreamItem = BinaryStreamStart | BinaryStreamChunk | BinaryStreamEnd;
25
+ export declare class CoStream<T extends JsonValue, Meta extends JsonObject | null = null> implements ReadableCoValue {
26
+ id: CoID<CoStream<T, Meta>>;
27
+ type: "costream";
28
+ core: CoValueCore;
29
+ items: {
30
+ [key: SessionID]: T[];
31
+ };
32
+ constructor(core: CoValueCore);
33
+ get meta(): Meta;
34
+ get group(): Group;
35
+ /** @internal */
36
+ protected fillFromCoValue(): void;
37
+ getSingleStream(): T[] | undefined;
38
+ toJSON(): {
39
+ [key: SessionID]: T[];
40
+ };
41
+ subscribe(listener: (coMap: CoStream<T, Meta>) => void): () => void;
42
+ edit(changer: (editable: WriteableCoStream<T, Meta>) => void): CoStream<T, Meta>;
43
+ }
44
+ export declare class BinaryCoStream<Meta extends BinaryCoStreamMeta = {
45
+ type: "binary";
46
+ }> extends CoStream<BinaryStreamItem, Meta> implements ReadableCoValue {
47
+ id: CoID<BinaryCoStream<Meta>>;
48
+ getBinaryChunks(): (BinaryChunkInfo & {
49
+ chunks: Uint8Array[];
50
+ finished: boolean;
51
+ }) | undefined;
52
+ edit(changer: (editable: WriteableBinaryCoStream<Meta>) => void): BinaryCoStream<Meta>;
53
+ }
54
+ export declare class WriteableCoStream<T extends JsonValue, Meta extends JsonObject | null = null> extends CoStream<T, Meta> implements WriteableCoValue {
55
+ /** @internal */
56
+ edit(_changer: (editable: WriteableCoStream<T, Meta>) => void): CoStream<T, Meta>;
57
+ push(item: T, privacy?: "private" | "trusting"): void;
58
+ }
59
+ export declare class WriteableBinaryCoStream<Meta extends BinaryCoStreamMeta = {
60
+ type: "binary";
61
+ }> extends BinaryCoStream<Meta> implements WriteableCoValue {
62
+ /** @internal */
63
+ edit(_changer: (editable: WriteableBinaryCoStream<Meta>) => void): BinaryCoStream<Meta>;
64
+ /** @internal */
65
+ push(item: BinaryStreamItem, privacy?: "private" | "trusting"): void;
66
+ startBinaryStream(settings: BinaryChunkInfo, privacy?: "private" | "trusting"): void;
67
+ pushBinaryStreamChunk(chunk: Uint8Array, privacy?: "private" | "trusting"): void;
68
+ endBinaryStream(privacy?: "private" | "trusting"): void;
69
+ }
@@ -0,0 +1,131 @@
1
+ import { base64url } from "@scure/base";
2
+ export class CoStream {
3
+ constructor(core) {
4
+ this.type = "costream";
5
+ this.id = core.id;
6
+ this.core = core;
7
+ this.items = {};
8
+ }
9
+ get meta() {
10
+ return this.core.header.meta;
11
+ }
12
+ get group() {
13
+ return this.core.getGroup();
14
+ }
15
+ /** @internal */
16
+ fillFromCoValue() {
17
+ this.items = {};
18
+ for (const { txID, changes, } of this.core.getValidSortedTransactions()) {
19
+ for (const changeUntyped of changes) {
20
+ const change = changeUntyped;
21
+ let entries = this.items[txID.sessionID];
22
+ if (!entries) {
23
+ entries = [];
24
+ this.items[txID.sessionID] = entries;
25
+ }
26
+ entries.push(change);
27
+ }
28
+ }
29
+ }
30
+ getSingleStream() {
31
+ if (Object.keys(this.items).length === 0) {
32
+ return undefined;
33
+ }
34
+ else if (Object.keys(this.items).length !== 1) {
35
+ throw new Error("CoStream.getSingleStream() can only be called when there is exactly one stream");
36
+ }
37
+ return Object.values(this.items)[0];
38
+ }
39
+ toJSON() {
40
+ return this.items;
41
+ }
42
+ subscribe(listener) {
43
+ return this.core.subscribe((content) => {
44
+ listener(content);
45
+ });
46
+ }
47
+ edit(changer) {
48
+ const editable = new WriteableCoStream(this.core);
49
+ changer(editable);
50
+ return new CoStream(this.core);
51
+ }
52
+ }
53
+ export class BinaryCoStream extends CoStream {
54
+ getBinaryChunks() {
55
+ const items = this.getSingleStream();
56
+ if (!items)
57
+ return;
58
+ const start = items[0];
59
+ if (start?.type !== "start") {
60
+ console.error("Invalid binary stream start", start);
61
+ return;
62
+ }
63
+ const chunks = [];
64
+ for (const item of items.slice(1)) {
65
+ if (item.type === "end") {
66
+ return {
67
+ mimeType: start.mimeType,
68
+ fileName: start.fileName,
69
+ totalSizeBytes: start.totalSizeBytes,
70
+ chunks,
71
+ finished: true,
72
+ };
73
+ }
74
+ if (item.type !== "chunk") {
75
+ console.error("Invalid binary stream chunk", item);
76
+ return undefined;
77
+ }
78
+ chunks.push(base64url.decode(item.chunk.slice(1)));
79
+ }
80
+ return {
81
+ mimeType: start.mimeType,
82
+ fileName: start.fileName,
83
+ totalSizeBytes: start.totalSizeBytes,
84
+ chunks,
85
+ finished: false,
86
+ };
87
+ }
88
+ edit(changer) {
89
+ const editable = new WriteableBinaryCoStream(this.core);
90
+ changer(editable);
91
+ return new BinaryCoStream(this.core);
92
+ }
93
+ }
94
+ export class WriteableCoStream extends CoStream {
95
+ /** @internal */
96
+ edit(_changer) {
97
+ throw new Error("Already editing.");
98
+ }
99
+ push(item, privacy = "private") {
100
+ this.core.makeTransaction([item], privacy);
101
+ this.fillFromCoValue();
102
+ }
103
+ }
104
+ export class WriteableBinaryCoStream extends BinaryCoStream {
105
+ /** @internal */
106
+ edit(_changer) {
107
+ throw new Error("Already editing.");
108
+ }
109
+ /** @internal */
110
+ push(item, privacy = "private") {
111
+ WriteableCoStream.prototype.push.call(this, item, privacy);
112
+ }
113
+ startBinaryStream(settings, privacy = "private") {
114
+ this.push({
115
+ type: "start",
116
+ ...settings,
117
+ }, privacy);
118
+ }
119
+ pushBinaryStreamChunk(chunk, privacy = "private") {
120
+ this.push({
121
+ type: "chunk",
122
+ chunk: `U${base64url.encode(chunk)}`,
123
+ }, privacy);
124
+ }
125
+ endBinaryStream(privacy = "private") {
126
+ this.push({
127
+ type: "end",
128
+ }, privacy);
129
+ }
130
+ }
131
+ //# sourceMappingURL=coStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coStream.js","sourceRoot":"","sources":["../../src/coValues/coStream.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AA4BxC,MAAM,OAAO,QAAQ;IAYjB,YAAY,IAAiB;QAN7B,SAAI,GAAG,UAAmB,CAAC;QAOvB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAA6B,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAY,CAAC;IACzC,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED,gBAAgB;IACN,eAAe;QACrB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAEhB,KAAK,MAAM,EACP,IAAI,EACJ,OAAO,GACV,IAAI,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE;YACzC,KAAK,MAAM,aAAa,IAAI,OAAO,EAAE;gBACjC,MAAM,MAAM,GAAG,aAAkB,CAAC;gBAClC,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACzC,IAAI,CAAC,OAAO,EAAE;oBACV,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;iBACxC;gBACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACxB;SACJ;IACL,CAAC;IAED,eAAe;QACX,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YACtC,OAAO,SAAS,CAAC;SACpB;aAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7C,MAAM,IAAI,KAAK,CACX,gFAAgF,CACnF,CAAC;SACL;QAED,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,MAAM;QAGF,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,SAAS,CAAC,QAA4C;QAClD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;YACnC,QAAQ,CAAC,OAA4B,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC;IAED,IAAI,CACA,OAAuD;QAEvD,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAU,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;CACJ;AAED,MAAM,OAAO,cAGT,SAAQ,QAAgC;IAKxC,eAAe;QAGX,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAErC,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEvB,IAAI,KAAK,EAAE,IAAI,KAAK,OAAO,EAAE;YACzB,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;YACpD,OAAO;SACV;QAED,MAAM,MAAM,GAAiB,EAAE,CAAC;QAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;gBACrB,OAAO;oBACH,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,cAAc,EAAE,KAAK,CAAC,cAAc;oBACpC,MAAM;oBACN,QAAQ,EAAE,IAAI;iBACjB,CAAC;aACL;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;gBACvB,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;gBACnD,OAAO,SAAS,CAAC;aACpB;YAED,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACtD;QAED,OAAO;YACH,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,MAAM;YACN,QAAQ,EAAE,KAAK;SAClB,CAAC;IACN,CAAC;IAED,IAAI,CACA,OAA0D;QAE1D,MAAM,QAAQ,GAAG,IAAI,uBAAuB,CAAO,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClB,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;CACJ;AAED,MAAM,OAAO,iBAIT,SAAQ,QAAiB;IAGzB,gBAAgB;IAChB,IAAI,CACA,QAAwD;QAExD,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC,IAAO,EAAE,UAAkC,SAAS;QACrD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,eAAe,EAAE,CAAC;IAC3B,CAAC;CACJ;AAED,MAAM,OAAO,uBAGT,SAAQ,cAAoB;IAG5B,gBAAgB;IAChB,IAAI,CACA,QAA2D;QAE3D,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC;IAED,gBAAgB;IAChB,IAAI,CACA,IAAsB,EACtB,UAAkC,SAAS;QAE3C,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED,iBAAiB,CACb,QAAyB,EACzB,UAAkC,SAAS;QAE3C,IAAI,CAAC,IAAI,CACL;YACI,IAAI,EAAE,OAAO;YACb,GAAG,QAAQ;SACc,EAC7B,OAAO,CACV,CAAC;IACN,CAAC;IAED,qBAAqB,CACjB,KAAiB,EACjB,UAAkC,SAAS;QAE3C,IAAI,CAAC,IAAI,CACL;YACI,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SACX,EAC7B,OAAO,CACV,CAAC;IACN,CAAC;IAED,eAAe,CAAC,UAAkC,SAAS;QACvD,IAAI,CAAC,IAAI,CACL;YACI,IAAI,EAAE,KAAK;SACY,EAC3B,OAAO,CACV,CAAC;IACN,CAAC;CACJ"}
@@ -0,0 +1,14 @@
1
+ import { JsonObject } from '../jsonValue.js';
2
+ import { CoID, ReadableCoValue } from '../coValue.js';
3
+ import { CoValueCore } from '../coValueCore.js';
4
+ import { Group } from '../index.js';
5
+ export declare class Static<T extends JsonObject> implements ReadableCoValue {
6
+ id: CoID<Static<T>>;
7
+ type: "static";
8
+ core: CoValueCore;
9
+ constructor(core: CoValueCore);
10
+ get meta(): T;
11
+ get group(): Group;
12
+ toJSON(): JsonObject;
13
+ subscribe(_listener: (coMap: Static<T>) => void): () => void;
14
+ }
@@ -0,0 +1,20 @@
1
+ export class Static {
2
+ constructor(core) {
3
+ this.type = "static";
4
+ this.id = core.id;
5
+ this.core = core;
6
+ }
7
+ get meta() {
8
+ return this.core.header.meta;
9
+ }
10
+ get group() {
11
+ return this.core.getGroup();
12
+ }
13
+ toJSON() {
14
+ throw new Error("Method not implemented.");
15
+ }
16
+ subscribe(_listener) {
17
+ throw new Error("Method not implemented.");
18
+ }
19
+ }
20
+ //# sourceMappingURL=static.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static.js","sourceRoot":"","sources":["../../src/coValues/static.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,MAAM;IAKf,YAAY,IAAiB;QAH7B,SAAI,GAAG,QAAiB,CAAC;QAIrB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAqB,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAS,CAAC;IACtC,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED,MAAM;QACF,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,SAAS,CAAC,SAAqC;QAC3C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;CACJ"}
package/dist/group.d.ts CHANGED
@@ -1,12 +1,13 @@
1
- import { CoID, ContentType } from "./contentType.js";
2
- import { CoMap } from "./contentTypes/coMap.js";
1
+ import { CoID, CoValueImpl } from "./coValue.js";
2
+ import { CoMap } from "./coValues/coMap.js";
3
3
  import { JsonObject, JsonValue } from "./jsonValue.js";
4
4
  import { Encrypted, KeyID, KeySecret, Sealed } from "./crypto.js";
5
5
  import { LocalNode } from "./node.js";
6
- import { AgentID } from "./ids.js";
7
- import { AccountID, Profile } from "./account.js";
6
+ import { AgentID, SessionID } from "./ids.js";
7
+ import { AccountID, GeneralizedControlledAccount, Profile } from "./account.js";
8
8
  import { Role } from "./permissions.js";
9
- import { CoList } from "./contentTypes/coList.js";
9
+ import { CoList } from "./coValues/coList.js";
10
+ import { BinaryCoStream, BinaryCoStreamMeta, CoStream } from "./coValues/coStream.js";
10
11
  export type GroupContent = {
11
12
  profile: CoID<Profile> | null;
12
13
  [key: AccountID | AgentID]: Role;
@@ -17,22 +18,69 @@ export type GroupContent = {
17
18
  encryptingID: KeyID;
18
19
  }>;
19
20
  };
20
- export declare function expectGroupContent(content: ContentType): CoMap<GroupContent, JsonObject | null>;
21
+ export declare function expectGroupContent(content: CoValueImpl): CoMap<GroupContent, JsonObject | null>;
22
+ /** A `Group` is a scope for permissions of its members (`"reader" | "writer" | "admin"`), applying to objects owned by that group.
23
+ *
24
+ * A `Group` object exposes methods for permission management and allows you to create new CoValues owned by that group.
25
+ *
26
+ * (Internally, a `Group` is also just a `CoMap`, mapping member accounts to roles and containing some
27
+ * state management for making cryptographic keys available to current members)
28
+ *
29
+ * @example
30
+ * You typically get a group from a CoValue that you already have loaded:
31
+ *
32
+ * ```typescript
33
+ * const group = coMap.group;
34
+ * ```
35
+ *
36
+ * @example
37
+ * Or, you can create a new group with a `LocalNode`:
38
+ *
39
+ * ```typescript
40
+ * const localNode.createGroup();
41
+ * ```
42
+ * */
21
43
  export declare class Group {
22
- groupMap: CoMap<GroupContent, JsonObject | null>;
44
+ underlyingMap: CoMap<GroupContent, JsonObject | null>;
45
+ /** @internal */
23
46
  node: LocalNode;
24
- constructor(groupMap: CoMap<GroupContent, JsonObject | null>, node: LocalNode);
47
+ /** @internal */
48
+ constructor(underlyingMap: CoMap<GroupContent, JsonObject | null>, node: LocalNode);
49
+ /** Returns the `CoID` of the `Group`. */
25
50
  get id(): CoID<CoMap<GroupContent, JsonObject | null>>;
51
+ /** Returns the current role of a given account. */
26
52
  roleOf(accountID: AccountID): Role | undefined;
53
+ /** @internal */
54
+ roleOfInternal(accountID: AccountID | AgentID): Role | undefined;
55
+ /** Returns the role of the current account in the group. */
27
56
  myRole(): Role | undefined;
57
+ /** Directly grants a new member a role in the group. The current account must be an
58
+ * admin to be able to do so. Throws otherwise. */
28
59
  addMember(accountID: AccountID, role: Role): void;
29
- createInvite(role: "reader" | "writer" | "admin"): InviteSecret;
60
+ /** @internal */
61
+ addMemberInternal(accountID: AccountID | AgentID, role: Role): void;
62
+ /** @internal */
30
63
  rotateReadKey(): void;
64
+ /** Strips the specified member of all roles (preventing future writes in
65
+ * the group and owned values) and rotates the read encryption key for that group
66
+ * (preventing reads of new content in the group and owned values) */
31
67
  removeMember(accountID: AccountID): void;
68
+ /** @internal */
69
+ removeMemberInternal(accountID: AccountID | AgentID): void;
70
+ /** Creates an invite for new members to indirectly join the group, allowing them to grant themselves the specified role with the InviteSecret (a string starting with "inviteSecret_") - use `LocalNode.acceptInvite()` for this purpose. */
71
+ createInvite(role: "reader" | "writer" | "admin"): InviteSecret;
72
+ /** Creates a new `CoMap` within this group, with the specified specialized
73
+ * `CoMap` type `M` and optional static metadata. */
32
74
  createMap<M extends CoMap<{
33
75
  [key: string]: JsonValue;
34
76
  }, JsonObject | null>>(meta?: M["meta"]): M;
77
+ /** Creates a new `CoList` within this group, with the specified specialized
78
+ * `CoList` type `L` and optional static metadata. */
35
79
  createList<L extends CoList<JsonValue, JsonObject | null>>(meta?: L["meta"]): L;
80
+ createStream<C extends CoStream<JsonValue, JsonObject | null>>(meta?: C["meta"]): C;
81
+ createBinaryStream<C extends BinaryCoStream<BinaryCoStreamMeta>>(meta?: C["meta"]): C;
82
+ /** @internal */
83
+ testWithDifferentAccount(account: GeneralizedControlledAccount, sessionId: SessionID): Group;
36
84
  }
37
85
  export type InviteSecret = `inviteSecret_z${string}`;
38
86
  export declare function secretSeedFromInviteSecret(inviteSecret: InviteSecret): Uint8Array;