cojson 0.10.15 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +14 -0
  3. package/dist/CoValuesStore.d.ts +12 -0
  4. package/dist/CoValuesStore.d.ts.map +1 -0
  5. package/dist/PeerKnownStates.d.ts +38 -0
  6. package/dist/PeerKnownStates.d.ts.map +1 -0
  7. package/dist/PeerState.d.ts +46 -0
  8. package/dist/PeerState.d.ts.map +1 -0
  9. package/dist/PriorityBasedMessageQueue.d.ts +18 -0
  10. package/dist/PriorityBasedMessageQueue.d.ts.map +1 -0
  11. package/dist/SyncStateManager.d.ts +20 -0
  12. package/dist/SyncStateManager.d.ts.map +1 -0
  13. package/dist/base64url.d.ts +3 -0
  14. package/dist/base64url.d.ts.map +1 -0
  15. package/dist/base64url.test.d.ts +2 -0
  16. package/dist/base64url.test.d.ts.map +1 -0
  17. package/dist/coValue.d.ts +52 -0
  18. package/dist/coValue.d.ts.map +1 -0
  19. package/dist/coValueCore.d.ts +143 -0
  20. package/dist/coValueCore.d.ts.map +1 -0
  21. package/dist/coValueState.d.ts +58 -0
  22. package/dist/coValueState.d.ts.map +1 -0
  23. package/dist/coValues/account.d.ts +69 -0
  24. package/dist/coValues/account.d.ts.map +1 -0
  25. package/dist/coValues/coList.d.ts +163 -0
  26. package/dist/coValues/coList.d.ts.map +1 -0
  27. package/dist/coValues/coMap.d.ts +142 -0
  28. package/dist/coValues/coMap.d.ts.map +1 -0
  29. package/dist/coValues/coPlainText.d.ts +33 -0
  30. package/dist/coValues/coPlainText.d.ts.map +1 -0
  31. package/dist/coValues/coStream.d.ts +109 -0
  32. package/dist/coValues/coStream.d.ts.map +1 -0
  33. package/dist/coValues/group.d.ts +143 -0
  34. package/dist/coValues/group.d.ts.map +1 -0
  35. package/dist/coValues/group.js +51 -3
  36. package/dist/coValues/group.js.map +1 -1
  37. package/dist/coreToCoValue.d.ts +15 -0
  38. package/dist/coreToCoValue.d.ts.map +1 -0
  39. package/dist/crypto/PureJSCrypto.d.ts +50 -0
  40. package/dist/crypto/PureJSCrypto.d.ts.map +1 -0
  41. package/dist/crypto/WasmCrypto.d.ts +49 -0
  42. package/dist/crypto/WasmCrypto.d.ts.map +1 -0
  43. package/dist/crypto/crypto.d.ts +142 -0
  44. package/dist/crypto/crypto.d.ts.map +1 -0
  45. package/dist/exports.d.ts +84 -0
  46. package/dist/exports.d.ts.map +1 -0
  47. package/dist/ids.d.ts +23 -0
  48. package/dist/ids.d.ts.map +1 -0
  49. package/dist/index.d.ts +2 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/jsonStringify.d.ts +7 -0
  52. package/dist/jsonStringify.d.ts.map +1 -0
  53. package/dist/jsonValue.d.ts +45 -0
  54. package/dist/jsonValue.d.ts.map +1 -0
  55. package/dist/localNode.d.ts +111 -0
  56. package/dist/localNode.d.ts.map +1 -0
  57. package/dist/logger.d.ts +33 -0
  58. package/dist/logger.d.ts.map +1 -0
  59. package/dist/media.d.ts +8 -0
  60. package/dist/media.d.ts.map +1 -0
  61. package/dist/permissions.d.ts +24 -0
  62. package/dist/permissions.d.ts.map +1 -0
  63. package/dist/permissions.js +3 -4
  64. package/dist/permissions.js.map +1 -1
  65. package/dist/priority.d.ts +19 -0
  66. package/dist/priority.d.ts.map +1 -0
  67. package/dist/storage/FileSystem.d.ts +37 -0
  68. package/dist/storage/FileSystem.d.ts.map +1 -0
  69. package/dist/storage/chunksAndKnownStates.d.ts +7 -0
  70. package/dist/storage/chunksAndKnownStates.d.ts.map +1 -0
  71. package/dist/storage/index.d.ts +52 -0
  72. package/dist/storage/index.d.ts.map +1 -0
  73. package/dist/streamUtils.d.ts +13 -0
  74. package/dist/streamUtils.d.ts.map +1 -0
  75. package/dist/sync.d.ts +97 -0
  76. package/dist/sync.d.ts.map +1 -0
  77. package/dist/tests/PeerKnownStates.test.d.ts +2 -0
  78. package/dist/tests/PeerKnownStates.test.d.ts.map +1 -0
  79. package/dist/tests/PeerState.test.d.ts +2 -0
  80. package/dist/tests/PeerState.test.d.ts.map +1 -0
  81. package/dist/tests/PriorityBasedMessageQueue.test.d.ts +2 -0
  82. package/dist/tests/PriorityBasedMessageQueue.test.d.ts.map +1 -0
  83. package/dist/tests/SyncStateManager.test.d.ts +2 -0
  84. package/dist/tests/SyncStateManager.test.d.ts.map +1 -0
  85. package/dist/tests/account.test.d.ts +2 -0
  86. package/dist/tests/account.test.d.ts.map +1 -0
  87. package/dist/tests/coList.test.d.ts +2 -0
  88. package/dist/tests/coList.test.d.ts.map +1 -0
  89. package/dist/tests/coMap.test.d.ts +2 -0
  90. package/dist/tests/coMap.test.d.ts.map +1 -0
  91. package/dist/tests/coPlainText.test.d.ts +2 -0
  92. package/dist/tests/coPlainText.test.d.ts.map +1 -0
  93. package/dist/tests/coStream.test.d.ts +2 -0
  94. package/dist/tests/coStream.test.d.ts.map +1 -0
  95. package/dist/tests/coValueCore.test.d.ts +2 -0
  96. package/dist/tests/coValueCore.test.d.ts.map +1 -0
  97. package/dist/tests/coValueState.test.d.ts +2 -0
  98. package/dist/tests/coValueState.test.d.ts.map +1 -0
  99. package/dist/tests/crypto.test.d.ts +2 -0
  100. package/dist/tests/crypto.test.d.ts.map +1 -0
  101. package/dist/tests/cryptoImpl.test.d.ts +2 -0
  102. package/dist/tests/cryptoImpl.test.d.ts.map +1 -0
  103. package/dist/tests/group.test.d.ts +2 -0
  104. package/dist/tests/group.test.d.ts.map +1 -0
  105. package/dist/tests/group.test.js +130 -0
  106. package/dist/tests/group.test.js.map +1 -1
  107. package/dist/tests/logger.test.d.ts +2 -0
  108. package/dist/tests/logger.test.d.ts.map +1 -0
  109. package/dist/tests/permissions.test.d.ts +2 -0
  110. package/dist/tests/permissions.test.d.ts.map +1 -0
  111. package/dist/tests/permissions.test.js +194 -1
  112. package/dist/tests/permissions.test.js.map +1 -1
  113. package/dist/tests/priority.test.d.ts +2 -0
  114. package/dist/tests/priority.test.d.ts.map +1 -0
  115. package/dist/tests/sync.test.d.ts +2 -0
  116. package/dist/tests/sync.test.d.ts.map +1 -0
  117. package/dist/tests/testUtils.d.ts +142 -0
  118. package/dist/tests/testUtils.d.ts.map +1 -0
  119. package/dist/tests/testUtils.js +4 -1
  120. package/dist/tests/testUtils.js.map +1 -1
  121. package/dist/typeUtils/accountOrAgentIDfromSessionID.d.ts +4 -0
  122. package/dist/typeUtils/accountOrAgentIDfromSessionID.d.ts.map +1 -0
  123. package/dist/typeUtils/expectGroup.d.ts +4 -0
  124. package/dist/typeUtils/expectGroup.d.ts.map +1 -0
  125. package/dist/typeUtils/isAccountID.d.ts +4 -0
  126. package/dist/typeUtils/isAccountID.d.ts.map +1 -0
  127. package/dist/typeUtils/isCoValue.d.ts +4 -0
  128. package/dist/typeUtils/isCoValue.d.ts.map +1 -0
  129. package/dist/utils.d.ts +5 -0
  130. package/dist/utils.d.ts.map +1 -0
  131. package/package.json +6 -6
  132. package/src/coValues/group.ts +84 -9
  133. package/src/jsonValue.ts +9 -5
  134. package/src/permissions.ts +3 -4
  135. package/src/tests/group.test.ts +187 -0
  136. package/src/tests/permissions.test.ts +285 -0
  137. package/src/tests/testUtils.ts +4 -1
  138. package/tsconfig.json +3 -1
@@ -0,0 +1,163 @@
1
+ import { CoID, RawCoValue } from "../coValue.js";
2
+ import { CoValueCore } from "../coValueCore.js";
3
+ import { AgentID, SessionID, TransactionID } from "../ids.js";
4
+ import { JsonObject, JsonValue } from "../jsonValue.js";
5
+ import { RawAccountID } from "./account.js";
6
+ import { RawGroup } from "./group.js";
7
+ export type OpID = TransactionID & {
8
+ changeIdx: number;
9
+ };
10
+ export type InsertionOpPayload<T extends JsonValue> = {
11
+ op: "pre";
12
+ value: T;
13
+ before: OpID | "end";
14
+ } | {
15
+ op: "app";
16
+ value: T;
17
+ after: OpID | "start";
18
+ };
19
+ export type DeletionOpPayload = {
20
+ op: "del";
21
+ insertion: OpID;
22
+ };
23
+ export type ListOpPayload<T extends JsonValue> = InsertionOpPayload<T> | DeletionOpPayload;
24
+ type InsertionEntry<T extends JsonValue> = {
25
+ madeAt: number;
26
+ predecessors: OpID[];
27
+ successors: OpID[];
28
+ } & InsertionOpPayload<T>;
29
+ type DeletionEntry = {
30
+ madeAt: number;
31
+ deletionID: OpID;
32
+ } & DeletionOpPayload;
33
+ export declare class RawCoListView<Item extends JsonValue = JsonValue, Meta extends JsonObject | null = null> implements RawCoValue {
34
+ /** @category 6. Meta */
35
+ id: CoID<this>;
36
+ /** @category 6. Meta */
37
+ type: "colist" | "coplaintext";
38
+ /** @category 6. Meta */
39
+ core: CoValueCore;
40
+ /** @internal */
41
+ afterStart: OpID[];
42
+ /** @internal */
43
+ beforeEnd: OpID[];
44
+ /** @internal */
45
+ insertions: {
46
+ [sessionID: SessionID]: {
47
+ [txIdx: number]: {
48
+ [changeIdx: number]: InsertionEntry<Item>;
49
+ };
50
+ };
51
+ };
52
+ /** @internal */
53
+ deletionsByInsertion: {
54
+ [deletedSessionID: SessionID]: {
55
+ [deletedTxIdx: number]: {
56
+ [deletedChangeIdx: number]: DeletionEntry[];
57
+ };
58
+ };
59
+ };
60
+ /** @category 6. Meta */
61
+ readonly _item: Item;
62
+ /** @internal */
63
+ _cachedEntries?: {
64
+ value: Item;
65
+ madeAt: number;
66
+ opID: OpID;
67
+ }[];
68
+ /** @internal */
69
+ constructor(core: CoValueCore);
70
+ /** @category 6. Meta */
71
+ get headerMeta(): Meta;
72
+ /** @category 6. Meta */
73
+ get group(): RawGroup;
74
+ /**
75
+ * Not yet implemented
76
+ *
77
+ * @category 4. Time travel
78
+ */
79
+ atTime(_time: number): this;
80
+ /**
81
+ * Get the item currently at `idx`.
82
+ *
83
+ * @category 1. Reading
84
+ */
85
+ get(idx: number): Item | undefined;
86
+ /**
87
+ * Returns the current items in the CoList as an array.
88
+ *
89
+ * @category 1. Reading
90
+ **/
91
+ asArray(): Item[];
92
+ /** @internal */
93
+ entries(): {
94
+ value: Item;
95
+ madeAt: number;
96
+ opID: OpID;
97
+ }[];
98
+ /** @internal */
99
+ entriesUncached(): {
100
+ value: Item;
101
+ madeAt: number;
102
+ opID: OpID;
103
+ }[];
104
+ /** @internal */
105
+ private fillArrayFromOpID;
106
+ /**
107
+ * Returns the current items in the CoList as an array. (alias of `asArray`)
108
+ *
109
+ * @category 1. Reading
110
+ */
111
+ toJSON(): Item[];
112
+ /** @category 5. Edit history */
113
+ editAt(idx: number): {
114
+ by: RawAccountID | AgentID;
115
+ tx: TransactionID;
116
+ at: Date;
117
+ value: Item;
118
+ } | undefined;
119
+ /** @category 5. Edit history */
120
+ deletionEdits(): {
121
+ by: RawAccountID | AgentID;
122
+ tx: TransactionID;
123
+ at: Date;
124
+ }[];
125
+ /** @category 3. Subscription */
126
+ subscribe(listener: (coList: this) => void): () => void;
127
+ }
128
+ export declare class RawCoList<Item extends JsonValue = JsonValue, Meta extends JsonObject | null = JsonObject | null> extends RawCoListView<Item, Meta> implements RawCoValue {
129
+ /** Appends `item` after the item currently at index `after`.
130
+ *
131
+ * If `privacy` is `"private"` **(default)**, `item` is encrypted in the transaction, only readable by other members of the group this `CoList` belongs to. Not even sync servers can see the content in plaintext.
132
+ *
133
+ * If `privacy` is `"trusting"`, `item` is stored in plaintext in the transaction, visible to everyone who gets a hold of it, including sync servers.
134
+ *
135
+ * @category 2. Editing
136
+ **/
137
+ append(item: Item, after?: number, privacy?: "private" | "trusting"): void;
138
+ appendItems(items: Item[], after?: number, privacy?: "private" | "trusting"): void;
139
+ /**
140
+ * Prepends `item` before the item currently at index `before`.
141
+ *
142
+ * If `privacy` is `"private"` **(default)**, `item` is encrypted in the transaction, only readable by other members of the group this `CoList` belongs to. Not even sync servers can see the content in plaintext.
143
+ *
144
+ * If `privacy` is `"trusting"`, `item` is stored in plaintext in the transaction, visible to everyone who gets a hold of it, including sync servers.
145
+ *
146
+ * @category 2. Editing
147
+ */
148
+ prepend(item: Item, before?: number, privacy?: "private" | "trusting"): void;
149
+ /** Deletes the item at index `at`.
150
+ *
151
+ * If `privacy` is `"private"` **(default)**, the fact of this deletion is encrypted in the transaction, only readable by other members of the group this `CoList` belongs to. Not even sync servers can see the content in plaintext.
152
+ *
153
+ * If `privacy` is `"trusting"`, the fact of this deletion is stored in plaintext in the transaction, visible to everyone who gets a hold of it, including sync servers.
154
+ *
155
+ * @category 2. Editing
156
+ **/
157
+ delete(at: number, privacy?: "private" | "trusting"): void;
158
+ replace(at: number, newItem: Item, privacy?: "private" | "trusting"): void;
159
+ /** @internal */
160
+ rebuildFromCore(): void;
161
+ }
162
+ export {};
163
+ //# sourceMappingURL=coList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coList.d.ts","sourceRoot":"","sources":["../../src/coValues/coList.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,142 @@
1
+ import { CoID, RawCoValue } from "../coValue.js";
2
+ import { CoValueCore } from "../coValueCore.js";
3
+ import { AgentID, TransactionID } from "../ids.js";
4
+ import { JsonObject, JsonValue } from "../jsonValue.js";
5
+ import { CoValueKnownState } from "../sync.js";
6
+ import { RawAccountID } from "./account.js";
7
+ import type { RawGroup } from "./group.js";
8
+ type MapOp<K extends string, V extends JsonValue | undefined> = {
9
+ txID: TransactionID;
10
+ madeAt: number;
11
+ changeIdx: number;
12
+ change: MapOpPayload<K, V>;
13
+ };
14
+ export type MapOpPayload<K extends string, V extends JsonValue | undefined> = {
15
+ op: "set";
16
+ key: K;
17
+ value: V;
18
+ } | {
19
+ op: "del";
20
+ key: K;
21
+ };
22
+ export declare class RawCoMapView<Shape extends {
23
+ [key: string]: JsonValue | undefined;
24
+ } = {
25
+ [key: string]: JsonValue | undefined;
26
+ }, Meta extends JsonObject | null = JsonObject | null> implements RawCoValue {
27
+ /** @category 6. Meta */
28
+ id: CoID<this>;
29
+ /** @category 6. Meta */
30
+ type: "comap";
31
+ /** @category 6. Meta */
32
+ core: CoValueCore;
33
+ /** @internal */
34
+ latest: {
35
+ [Key in keyof Shape & string]?: MapOp<Key, Shape[Key]>;
36
+ };
37
+ /** @internal */
38
+ latestTxMadeAt: number;
39
+ /** @internal */
40
+ ops: {
41
+ [Key in keyof Shape & string]?: MapOp<Key, Shape[Key]>[];
42
+ };
43
+ /** @internal */
44
+ knownTransactions: CoValueKnownState["sessions"];
45
+ /** @internal */
46
+ ignorePrivateTransactions: boolean;
47
+ /** @internal */
48
+ atTimeFilter?: number;
49
+ /** @category 6. Meta */
50
+ readonly _shape: Shape;
51
+ /** @internal */
52
+ constructor(core: CoValueCore, options?: {
53
+ ignorePrivateTransactions: boolean;
54
+ });
55
+ processNewTransactions(): void;
56
+ isTimeTravelEntity(): boolean;
57
+ /** @category 6. Meta */
58
+ get headerMeta(): Meta;
59
+ /** @category 6. Meta */
60
+ get group(): RawGroup;
61
+ /** @category 4. Time travel */
62
+ atTime(time: number): this;
63
+ /** @internal */
64
+ timeFilteredOps<K extends keyof Shape & string>(key: K): MapOp<K, Shape[K]>[] | undefined;
65
+ /**
66
+ * Get all keys currently in the map.
67
+ *
68
+ * @category 1. Reading */
69
+ keys<K extends keyof Shape & string = keyof Shape & string>(): K[];
70
+ getRaw<K extends keyof Shape & string>(key: K): ({ [Key in keyof Shape & string]?: MapOp<Key, Shape[Key]> | undefined; }[K] & {}) | undefined;
71
+ /**
72
+ * Returns the current value for the given key.
73
+ *
74
+ * @category 1. Reading
75
+ **/
76
+ get<K extends keyof Shape & string>(key: K): Shape[K] | undefined;
77
+ /** @category 1. Reading */
78
+ asObject(): {
79
+ [K in keyof Shape & string]: Shape[K];
80
+ };
81
+ /** @category 1. Reading */
82
+ toJSON(): {
83
+ [K in keyof Shape & string]: Shape[K];
84
+ };
85
+ /** @category 5. Edit history */
86
+ nthEditAt<K extends keyof Shape & string>(key: K, n: number): {
87
+ by: RawAccountID | `sealer_z${string}/signer_z${string}`;
88
+ tx: TransactionID;
89
+ at: Date;
90
+ value: Shape[K] | undefined;
91
+ } | undefined;
92
+ /** @category 5. Edit history */
93
+ lastEditAt<K extends keyof Shape & string>(key: K): {
94
+ by: RawAccountID | AgentID;
95
+ tx: TransactionID;
96
+ at: Date;
97
+ value?: Shape[K];
98
+ } | undefined;
99
+ /** @category 5. Edit history */
100
+ editsAt<K extends keyof Shape & string>(key: K): Generator<{
101
+ by: RawAccountID | `sealer_z${string}/signer_z${string}`;
102
+ tx: TransactionID;
103
+ at: Date;
104
+ value: Shape[K] | undefined;
105
+ }, void, unknown>;
106
+ /** @category 3. Subscription */
107
+ subscribe(listener: (coMap: this) => void): () => void;
108
+ }
109
+ /** A collaborative map with precise shape `Shape` and optional static metadata `Meta` */
110
+ export declare class RawCoMap<Shape extends {
111
+ [key: string]: JsonValue | undefined;
112
+ } = {
113
+ [key: string]: JsonValue | undefined;
114
+ }, Meta extends JsonObject | null = JsonObject | null> extends RawCoMapView<Shape, Meta> implements RawCoValue {
115
+ /** Set a new value for the given key.
116
+ *
117
+ * 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.
118
+ *
119
+ * 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.
120
+ *
121
+ * @category 2. Editing
122
+ **/
123
+ set<K extends keyof Shape & string>(key: K, value: Shape[K], privacy?: "private" | "trusting"): void;
124
+ assign(entries: Partial<Shape>, privacy?: "private" | "trusting"): void;
125
+ /** Delete the given key (setting it to undefined).
126
+ *
127
+ * 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.
128
+ *
129
+ * If `privacy` is `"trusting"`, `key` is stored in plaintext in the transaction, visible to everyone who gets a hold of it, including sync servers.
130
+ *
131
+ * @category 2. Editing
132
+ **/
133
+ delete(key: keyof Shape & string, privacy?: "private" | "trusting"): void;
134
+ }
135
+ export declare function operationToEditEntry<K extends string, V extends JsonValue | undefined>(op: MapOp<K, V>): {
136
+ by: RawAccountID | `sealer_z${string}/signer_z${string}`;
137
+ tx: TransactionID;
138
+ at: Date;
139
+ value: V | undefined;
140
+ };
141
+ export {};
142
+ //# sourceMappingURL=coMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coMap.d.ts","sourceRoot":"","sources":["../../src/coValues/coMap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { CoValueCore } from "../coValueCore.js";
2
+ import { JsonObject } from "../jsonValue.js";
3
+ import { OpID, RawCoList } from "./coList.js";
4
+ export type StringifiedOpID = string & {
5
+ __stringifiedOpID: true;
6
+ };
7
+ export declare function stringifyOpID(opID: OpID): StringifiedOpID;
8
+ type PlaintextIdxMapping = {
9
+ opIDbeforeIdx: OpID[];
10
+ opIDafterIdx: OpID[];
11
+ idxAfterOpID: {
12
+ [opID: StringifiedOpID]: number;
13
+ };
14
+ idxBeforeOpID: {
15
+ [opID: StringifiedOpID]: number;
16
+ };
17
+ };
18
+ export declare class RawCoPlainText<Meta extends JsonObject | null = JsonObject | null> extends RawCoList<string, Meta> {
19
+ /** @category 6. Meta */
20
+ type: "coplaintext";
21
+ private _segmenter;
22
+ _cachedMapping: WeakMap<NonNullable<typeof this._cachedEntries>, PlaintextIdxMapping>;
23
+ constructor(core: CoValueCore);
24
+ get mapping(): PlaintextIdxMapping;
25
+ toString(): string;
26
+ insertAfter(idx: number, text: string, privacy?: "private" | "trusting"): void;
27
+ deleteRange({ from, to }: {
28
+ from: number;
29
+ to: number;
30
+ }, privacy?: "private" | "trusting"): void;
31
+ }
32
+ export {};
33
+ //# sourceMappingURL=coPlainText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coPlainText.d.ts","sourceRoot":"","sources":["../../src/coValues/coPlainText.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAqB,IAAI,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG;IAAE,iBAAiB,EAAE,IAAI,CAAA;CAAE,CAAC;AAEnE,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,eAAe,CAEzD;AAED,KAAK,mBAAmB,GAAG;IACzB,aAAa,EAAE,IAAI,EAAE,CAAC;IACtB,YAAY,EAAE,IAAI,EAAE,CAAC;IACrB,YAAY,EAAE;QAAE,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAAA;KAAE,CAAC;IAClD,aAAa,EAAE;QAAE,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAAA;KAAE,CAAC;CACpD,CAAC;AAEF,qBAAa,cAAc,CACzB,IAAI,SAAS,UAAU,GAAG,IAAI,GAAG,UAAU,GAAG,IAAI,CAClD,SAAQ,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC;IAC/B,wBAAwB;IACxB,IAAI,gBAA0B;IAE9B,OAAO,CAAC,UAAU,CAAiB;IAEnC,cAAc,EAAE,OAAO,CACrB,WAAW,CAAC,OAAO,IAAI,CAAC,cAAc,CAAC,EACvC,mBAAmB,CACpB,CAAC;gBAEU,IAAI,EAAE,WAAW;IAa7B,IAAI,OAAO,wBA6BV;IAED,QAAQ;IAMR,WAAW,CACT,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,SAAS,GAAG,UAAsB;IAoB7C,WAAW,CACT,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAC1C,OAAO,GAAE,SAAS,GAAG,UAAsB;CAsB9C"}
@@ -0,0 +1,109 @@
1
+ import { CoID, RawCoValue } from "../coValue.js";
2
+ import { CoValueCore } from "../coValueCore.js";
3
+ import { AgentID, SessionID, TransactionID } from "../ids.js";
4
+ import { JsonObject, JsonValue } from "../jsonValue.js";
5
+ import { CoValueKnownState } from "../sync.js";
6
+ import { RawAccountID } from "./account.js";
7
+ import { RawGroup } from "./group.js";
8
+ export type BinaryStreamInfo = {
9
+ mimeType: string;
10
+ fileName?: string;
11
+ totalSizeBytes?: number;
12
+ };
13
+ export type BinaryStreamStart = {
14
+ type: "start";
15
+ } & BinaryStreamInfo;
16
+ export type BinaryStreamChunk = {
17
+ type: "chunk";
18
+ chunk: `binary_U${string}`;
19
+ };
20
+ export type BinaryStreamEnd = {
21
+ type: "end";
22
+ };
23
+ export type BinaryCoStreamMeta = JsonObject & {
24
+ type: "binary";
25
+ };
26
+ export type BinaryStreamItem = BinaryStreamStart | BinaryStreamChunk | BinaryStreamEnd;
27
+ export type CoStreamItem<Item extends JsonValue> = {
28
+ value: Item;
29
+ tx: TransactionID;
30
+ madeAt: number;
31
+ };
32
+ export declare class RawCoStreamView<Item extends JsonValue = JsonValue, Meta extends JsonObject | null = JsonObject | null> implements RawCoValue {
33
+ id: CoID<this>;
34
+ type: "costream";
35
+ core: CoValueCore;
36
+ items: {
37
+ [key: SessionID]: CoStreamItem<Item>[];
38
+ };
39
+ /** @internal */
40
+ knownTransactions: CoValueKnownState["sessions"];
41
+ readonly _item: Item;
42
+ constructor(core: CoValueCore);
43
+ get headerMeta(): Meta;
44
+ get group(): RawGroup;
45
+ /** Not yet implemented */
46
+ atTime(_time: number): this;
47
+ /** @internal */
48
+ protected processNewTransactions(): void;
49
+ getSingleStream(): Item[] | undefined;
50
+ sessions(): SessionID[];
51
+ accounts(): Set<RawAccountID>;
52
+ nthItemIn(sessionID: SessionID, n: number): {
53
+ by: RawAccountID | AgentID;
54
+ tx: TransactionID;
55
+ at: Date;
56
+ value: Item;
57
+ } | undefined;
58
+ lastItemIn(sessionID: SessionID): {
59
+ by: RawAccountID | AgentID;
60
+ tx: TransactionID;
61
+ at: Date;
62
+ value: Item;
63
+ } | undefined;
64
+ itemsIn(sessionID: SessionID): Generator<{
65
+ by: RawAccountID | `sealer_z${string}/signer_z${string}`;
66
+ tx: TransactionID;
67
+ at: Date;
68
+ value: Item;
69
+ }, void, unknown>;
70
+ lastItemBy(account: RawAccountID | AgentID): {
71
+ by: RawAccountID | AgentID;
72
+ tx: TransactionID;
73
+ at: Date;
74
+ value: Item;
75
+ } | undefined;
76
+ itemsBy(account: RawAccountID | AgentID): Generator<{
77
+ by: RawAccountID | `sealer_z${string}/signer_z${string}`;
78
+ tx: TransactionID;
79
+ at: Date;
80
+ value: Item;
81
+ in: SessionID;
82
+ }, void, unknown>;
83
+ toJSON(): {
84
+ [key: SessionID]: Item[];
85
+ };
86
+ subscribe(listener: (coStream: this) => void): () => void;
87
+ }
88
+ export declare class RawCoStream<Item extends JsonValue = JsonValue, Meta extends JsonObject | null = JsonObject | null> extends RawCoStreamView<Item, Meta> implements RawCoValue {
89
+ push(item: Item, privacy?: "private" | "trusting"): void;
90
+ }
91
+ export declare class RawBinaryCoStreamView<Meta extends BinaryCoStreamMeta = {
92
+ type: "binary";
93
+ }> extends RawCoStreamView<BinaryStreamItem, Meta> implements RawCoValue {
94
+ isBinaryStreamEnded(): boolean;
95
+ getBinaryChunks(allowUnfinished?: boolean): (BinaryStreamInfo & {
96
+ chunks: Uint8Array[];
97
+ finished: boolean;
98
+ }) | undefined;
99
+ }
100
+ export declare class RawBinaryCoStream<Meta extends BinaryCoStreamMeta = {
101
+ type: "binary";
102
+ }> extends RawBinaryCoStreamView<Meta> implements RawCoValue {
103
+ /** @internal */
104
+ push(item: BinaryStreamItem, privacy?: "private" | "trusting", updateView?: boolean): void;
105
+ startBinaryStream(settings: BinaryStreamInfo, privacy?: "private" | "trusting"): void;
106
+ pushBinaryStreamChunk(chunk: Uint8Array, privacy?: "private" | "trusting"): void;
107
+ endBinaryStream(privacy?: "private" | "trusting"): void;
108
+ }
109
+ //# sourceMappingURL=coStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coStream.d.ts","sourceRoot":"","sources":["../../src/coValues/coStream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,143 @@
1
+ import { CoID } from "../coValue.js";
2
+ import { CoValueUniqueness } from "../coValueCore.js";
3
+ import { Encrypted, KeyID, KeySecret, Sealed } from "../crypto/crypto.js";
4
+ import { AgentID, ChildGroupReference, ParentGroupReference } from "../ids.js";
5
+ import { JsonObject } from "../jsonValue.js";
6
+ import { AccountRole, Role } from "../permissions.js";
7
+ import { ControlledAccountOrAgent, RawAccount, RawAccountID } from "./account.js";
8
+ import { RawCoList } from "./coList.js";
9
+ import { RawCoMap } from "./coMap.js";
10
+ import { RawCoPlainText } from "./coPlainText.js";
11
+ import { RawBinaryCoStream, RawCoStream } from "./coStream.js";
12
+ export declare const EVERYONE: "everyone";
13
+ export type Everyone = "everyone";
14
+ export type ParentGroupReferenceRole = "revoked" | "extend" | "reader" | "writer" | "admin";
15
+ export type GroupShape = {
16
+ profile: CoID<RawCoMap> | null;
17
+ root: CoID<RawCoMap> | null;
18
+ [key: RawAccountID | AgentID]: Role;
19
+ [EVERYONE]?: Role;
20
+ readKey?: KeyID;
21
+ [writeKeyFor: `writeKeyFor_${RawAccountID | AgentID}`]: KeyID;
22
+ [revelationFor: `${KeyID}_for_${RawAccountID | AgentID}`]: Sealed<KeySecret>;
23
+ [revelationFor: `${KeyID}_for_${Everyone}`]: KeySecret;
24
+ [oldKeyForNewKey: `${KeyID}_for_${KeyID}`]: Encrypted<KeySecret, {
25
+ encryptedID: KeyID;
26
+ encryptingID: KeyID;
27
+ }>;
28
+ [parent: ParentGroupReference]: ParentGroupReferenceRole;
29
+ [child: ChildGroupReference]: "revoked" | "extend";
30
+ };
31
+ /** A `Group` is a scope for permissions of its members (`"reader" | "writer" | "admin"`), applying to objects owned by that group.
32
+ *
33
+ * A `Group` object exposes methods for permission management and allows you to create new CoValues owned by that group.
34
+ *
35
+ * (Internally, a `Group` is also just a `CoMap`, mapping member accounts to roles and containing some
36
+ * state management for making cryptographic keys available to current members)
37
+ *
38
+ * @example
39
+ * You typically get a group from a CoValue that you already have loaded:
40
+ *
41
+ * ```typescript
42
+ * const group = coMap.group;
43
+ * ```
44
+ *
45
+ * @example
46
+ * Or, you can create a new group with a `LocalNode`:
47
+ *
48
+ * ```typescript
49
+ * const localNode.createGroup();
50
+ * ```
51
+ * */
52
+ export declare class RawGroup<Meta extends JsonObject | null = JsonObject | null> extends RawCoMap<GroupShape, Meta> {
53
+ /**
54
+ * Returns the current role of a given account.
55
+ *
56
+ * @category 1. Role reading
57
+ */
58
+ roleOf(accountID: RawAccountID | typeof EVERYONE): Role | undefined;
59
+ /** @internal */
60
+ roleOfInternal(accountID: RawAccountID | AgentID | typeof EVERYONE): {
61
+ role: Role;
62
+ via: CoID<RawGroup> | undefined;
63
+ } | undefined;
64
+ getParentGroups(atTime?: number): {
65
+ group: RawGroup;
66
+ role: ParentGroupReferenceRole;
67
+ }[];
68
+ loadAllChildGroups(): Promise<unknown[]>;
69
+ getChildGroups(): RawGroup<JsonObject | null>[];
70
+ /**
71
+ * Returns the role of the current account in the group.
72
+ *
73
+ * @category 1. Role reading
74
+ */
75
+ myRole(): Role | undefined;
76
+ /**
77
+ * Directly grants a new member a role in the group. The current account must be an
78
+ * admin to be able to do so. Throws otherwise.
79
+ *
80
+ * @category 2. Role changing
81
+ */
82
+ addMember(account: RawAccount | ControlledAccountOrAgent | Everyone, role: Role): void;
83
+ /** @internal */
84
+ addMemberInternal(account: RawAccount | ControlledAccountOrAgent | AgentID | Everyone, role: Role): void;
85
+ private storeKeyRevelationForMember;
86
+ private getWriteOnlyKeys;
87
+ getCurrentReadKeyId(): `key_z${string}` | undefined;
88
+ getMemberKeys(): (RawAccountID | AgentID)[];
89
+ getAllMemberKeysSet(): Set<RawAccountID | `sealer_z${string}/signer_z${string}`>;
90
+ /** @internal */
91
+ rotateReadKey(removedMemberKey?: RawAccountID | AgentID | "everyone"): void;
92
+ /** Detect circular references in group inheritance */
93
+ isSelfExtension(parent: RawGroup): boolean;
94
+ extend(parent: RawGroup, role?: "reader" | "writer" | "admin" | "inherit"): void;
95
+ revokeExtend(parent: RawGroup): Promise<void>;
96
+ /**
97
+ * Strips the specified member of all roles (preventing future writes in
98
+ * the group and owned values) and rotates the read encryption key for that group
99
+ * (preventing reads of new content in the group and owned values)
100
+ *
101
+ * @category 2. Role changing
102
+ */
103
+ removeMember(account: RawAccount | ControlledAccountOrAgent | Everyone): Promise<void>;
104
+ /** @internal */
105
+ removeMemberInternal(account: RawAccount | ControlledAccountOrAgent | AgentID | Everyone): void;
106
+ /**
107
+ * Creates an invite for new members to indirectly join the group,
108
+ * allowing them to grant themselves the specified role with the InviteSecret
109
+ * (a string starting with "inviteSecret_") - use `LocalNode.acceptInvite()` for this purpose.
110
+ *
111
+ * @category 2. Role changing
112
+ */
113
+ createInvite(role: AccountRole): InviteSecret;
114
+ /**
115
+ * Creates a new `CoMap` within this group, with the specified specialized
116
+ * `CoMap` type `M` and optional static metadata.
117
+ *
118
+ * @category 3. Value creation
119
+ */
120
+ createMap<M extends RawCoMap>(init?: M["_shape"], meta?: M["headerMeta"], initPrivacy?: "trusting" | "private", uniqueness?: CoValueUniqueness): M;
121
+ /**
122
+ * Creates a new `CoList` within this group, with the specified specialized
123
+ * `CoList` type `L` and optional static metadata.
124
+ *
125
+ * @category 3. Value creation
126
+ */
127
+ createList<L extends RawCoList>(init?: L["_item"][], meta?: L["headerMeta"], initPrivacy?: "trusting" | "private", uniqueness?: CoValueUniqueness): L;
128
+ /**
129
+ * Creates a new `CoPlainText` within this group, with the specified specialized
130
+ * `CoPlainText` type `T` and optional static metadata.
131
+ *
132
+ * @category 3. Value creation
133
+ */
134
+ createPlainText<T extends RawCoPlainText>(init?: string, meta?: T["headerMeta"], initPrivacy?: "trusting" | "private"): T;
135
+ /** @category 3. Value creation */
136
+ createStream<C extends RawCoStream>(meta?: C["headerMeta"], uniqueness?: CoValueUniqueness): C;
137
+ /** @category 3. Value creation */
138
+ createBinaryStream<C extends RawBinaryCoStream>(meta?: C["headerMeta"], uniqueness?: CoValueUniqueness): C;
139
+ }
140
+ export declare function isInheritableRole(roleInParent: Role | undefined): roleInParent is "revoked" | "admin" | "writer" | "reader";
141
+ export type InviteSecret = `inviteSecret_z${string}`;
142
+ export declare function secretSeedFromInviteSecret(inviteSecret: InviteSecret): Uint8Array;
143
+ //# sourceMappingURL=group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../../src/coValues/group.ts"],"names":[],"mappings":"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"}