cojson 0.2.3 → 0.3.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.
- package/dist/account.d.ts +1 -1
- package/dist/coValue.d.ts +5 -13
- package/dist/coValue.js +14 -7
- package/dist/coValue.js.map +1 -1
- package/dist/coValueCore.d.ts +6 -6
- package/dist/coValueCore.js +11 -14
- package/dist/coValueCore.js.map +1 -1
- package/dist/coValues/coList.d.ts +99 -34
- package/dist/coValues/coList.js +162 -72
- package/dist/coValues/coList.js.map +1 -1
- package/dist/coValues/coMap.d.ts +96 -31
- package/dist/coValues/coMap.js +157 -114
- package/dist/coValues/coMap.js.map +1 -1
- package/dist/coValues/coStream.d.ts +67 -23
- package/dist/coValues/coStream.js +131 -59
- package/dist/coValues/coStream.js.map +1 -1
- package/dist/crypto.d.ts +8 -3
- package/dist/crypto.js +6 -6
- package/dist/crypto.js.map +1 -1
- package/dist/group.d.ts +57 -23
- package/dist/group.js +75 -33
- package/dist/group.js.map +1 -1
- package/dist/index.d.ts +8 -6
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/{node.d.ts → localNode.d.ts} +16 -8
- package/dist/{node.js → localNode.js} +48 -40
- package/dist/localNode.js.map +1 -0
- package/dist/permissions.js +6 -3
- package/dist/permissions.js.map +1 -1
- package/dist/queriedCoValues/queriedCoList.d.ts +66 -0
- package/dist/queriedCoValues/queriedCoList.js +120 -0
- package/dist/queriedCoValues/queriedCoList.js.map +1 -0
- package/dist/queriedCoValues/queriedCoMap.d.ts +47 -0
- package/dist/queriedCoValues/queriedCoMap.js +83 -0
- package/dist/queriedCoValues/queriedCoMap.js.map +1 -0
- package/dist/queriedCoValues/queriedCoStream.d.ts +40 -0
- package/dist/queriedCoValues/queriedCoStream.js +72 -0
- package/dist/queriedCoValues/queriedCoStream.js.map +1 -0
- package/dist/queries.d.ts +29 -112
- package/dist/queries.js +44 -227
- package/dist/queries.js.map +1 -1
- package/dist/sync.d.ts +1 -1
- package/dist/sync.js +1 -1
- package/dist/sync.js.map +1 -1
- package/dist/tests/testUtils.d.ts +1 -1
- package/dist/tests/testUtils.js +3 -3
- package/dist/tests/testUtils.js.map +1 -1
- package/package.json +2 -2
- package/src/account.ts +1 -1
- package/src/coValue.ts +25 -20
- package/src/coValueCore.ts +17 -21
- package/src/coValues/coList.ts +242 -128
- package/src/coValues/coMap.ts +293 -162
- package/src/coValues/coStream.ts +227 -94
- package/src/crypto.ts +37 -24
- package/src/group.ts +90 -63
- package/src/index.ts +35 -25
- package/src/{node.ts → localNode.ts} +64 -64
- package/src/permissions.ts +15 -18
- package/src/queriedCoValues/queriedCoList.ts +248 -0
- package/src/queriedCoValues/queriedCoMap.ts +180 -0
- package/src/queriedCoValues/queriedCoStream.ts +125 -0
- package/src/queries.ts +83 -460
- package/src/sync.ts +2 -2
- package/src/tests/account.test.ts +3 -6
- package/src/tests/coValue.test.ts +116 -110
- package/src/tests/coValueCore.test.ts +1 -1
- package/src/tests/crypto.test.ts +19 -21
- package/src/tests/permissions.test.ts +255 -242
- package/src/tests/queries.test.ts +57 -40
- package/src/tests/sync.test.ts +30 -30
- package/src/tests/testUtils.ts +3 -3
- package/dist/coValues/static.d.ts +0 -14
- package/dist/coValues/static.js +0 -20
- package/dist/coValues/static.js.map +0 -1
- package/dist/node.js.map +0 -1
- package/src/coValues/static.ts +0 -31
package/dist/coValues/coMap.js
CHANGED
|
@@ -1,27 +1,17 @@
|
|
|
1
1
|
import { isCoValue } from "../coValue.js";
|
|
2
2
|
import { accountOrAgentIDfromSessionID } from "../coValueCore.js";
|
|
3
|
-
import { isAccountID } from "../account.js";
|
|
4
3
|
import { parseJSON } from "../jsonStringify.js";
|
|
5
|
-
|
|
6
|
-
export class CoMap {
|
|
4
|
+
export class CoMapView {
|
|
7
5
|
/** @internal */
|
|
8
6
|
constructor(core) {
|
|
7
|
+
/** @category 6. Meta */
|
|
9
8
|
this.type = "comap";
|
|
9
|
+
/** @internal */
|
|
10
|
+
this.atTimeFilter = undefined;
|
|
10
11
|
this.id = core.id;
|
|
11
12
|
this.core = core;
|
|
12
13
|
this.ops = {};
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
get meta() {
|
|
16
|
-
return this.core.header.meta;
|
|
17
|
-
}
|
|
18
|
-
get group() {
|
|
19
|
-
return this.core.getGroup();
|
|
20
|
-
}
|
|
21
|
-
/** @internal */
|
|
22
|
-
fillOpsFromCoValue() {
|
|
23
|
-
this.ops = {};
|
|
24
|
-
for (const { txID, changes, madeAt, } of this.core.getValidSortedTransactions()) {
|
|
14
|
+
for (const { txID, changes, madeAt, } of core.getValidSortedTransactions()) {
|
|
25
15
|
for (const [changeIdx, changeUntyped] of parseJSON(changes).entries()) {
|
|
26
16
|
const change = changeUntyped;
|
|
27
17
|
let entries = this.ops[change.key];
|
|
@@ -38,152 +28,205 @@ export class CoMap {
|
|
|
38
28
|
}
|
|
39
29
|
}
|
|
40
30
|
}
|
|
41
|
-
|
|
42
|
-
|
|
31
|
+
/** @category 6. Meta */
|
|
32
|
+
get meta() {
|
|
33
|
+
return this.core.header.meta;
|
|
43
34
|
}
|
|
44
|
-
/**
|
|
45
|
-
get(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
35
|
+
/** @category 6. Meta */
|
|
36
|
+
get group() {
|
|
37
|
+
return this.core.getGroup();
|
|
38
|
+
}
|
|
39
|
+
/** @category 4. Time travel */
|
|
40
|
+
atTime(time) {
|
|
41
|
+
const clone = Object.create(this);
|
|
42
|
+
clone.id = this.id;
|
|
43
|
+
clone.type = this.type;
|
|
44
|
+
clone.core = this.core;
|
|
45
|
+
clone.ops = this.ops;
|
|
46
|
+
clone.atTimeFilter = time;
|
|
47
|
+
return clone;
|
|
48
|
+
}
|
|
49
|
+
/** @internal */
|
|
50
|
+
timeFilteredOps(key) {
|
|
51
|
+
if (this.atTimeFilter) {
|
|
52
|
+
return this.ops[key]?.filter((op) => op.madeAt <= this.atTimeFilter);
|
|
53
53
|
}
|
|
54
54
|
else {
|
|
55
|
-
return
|
|
55
|
+
return this.ops[key];
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const
|
|
64
|
-
if (
|
|
65
|
-
return
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
return undefined;
|
|
58
|
+
/**
|
|
59
|
+
* Get all keys currently in the map.
|
|
60
|
+
*
|
|
61
|
+
* @category 1. Reading */
|
|
62
|
+
keys() {
|
|
63
|
+
const keys = Object.keys(this.ops);
|
|
64
|
+
if (this.atTimeFilter) {
|
|
65
|
+
return keys.filter((key) => {
|
|
66
|
+
this.timeFilteredOps(key)?.length;
|
|
67
|
+
});
|
|
69
68
|
}
|
|
70
69
|
else {
|
|
71
|
-
return
|
|
70
|
+
return keys;
|
|
72
71
|
}
|
|
73
72
|
}
|
|
74
|
-
/**
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
73
|
+
/**
|
|
74
|
+
* Returns the current value for the given key.
|
|
75
|
+
*
|
|
76
|
+
* @category 1. Reading
|
|
77
|
+
**/
|
|
78
|
+
get(key) {
|
|
79
|
+
const ops = this.timeFilteredOps(key);
|
|
80
|
+
if (!ops) {
|
|
78
81
|
return undefined;
|
|
79
82
|
}
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
+
const includeUntil = this.atTimeFilter;
|
|
84
|
+
const lastEntry = includeUntil
|
|
85
|
+
? ops.findLast((entry) => entry.madeAt <= includeUntil)
|
|
86
|
+
: ops[ops.length - 1];
|
|
87
|
+
if (lastEntry?.op === "del") {
|
|
88
|
+
return undefined;
|
|
83
89
|
}
|
|
84
90
|
else {
|
|
85
|
-
return
|
|
91
|
+
return lastEntry?.value;
|
|
86
92
|
}
|
|
87
93
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
94
|
+
/** @category 1. Reading */
|
|
95
|
+
asObject() {
|
|
96
|
+
const object = {};
|
|
97
|
+
for (const key of this.keys()) {
|
|
98
|
+
const value = this.get(key);
|
|
99
|
+
if (value !== undefined) {
|
|
100
|
+
object[key] = value;
|
|
101
|
+
}
|
|
92
102
|
}
|
|
93
|
-
|
|
94
|
-
return lastEntry.txID;
|
|
103
|
+
return object;
|
|
95
104
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
105
|
+
/** @category 1. Reading */
|
|
106
|
+
toJSON() {
|
|
107
|
+
return this.asObject();
|
|
108
|
+
}
|
|
109
|
+
/** @category 5. Edit history */
|
|
110
|
+
nthEditAt(key, n) {
|
|
111
|
+
const ops = this.timeFilteredOps(key);
|
|
112
|
+
if (!ops || ops.length <= n) {
|
|
99
113
|
return undefined;
|
|
100
114
|
}
|
|
101
|
-
const
|
|
102
|
-
if (
|
|
115
|
+
const entry = ops[n];
|
|
116
|
+
if (this.atTimeFilter && entry.madeAt > this.atTimeFilter) {
|
|
103
117
|
return undefined;
|
|
104
118
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
119
|
+
return {
|
|
120
|
+
by: accountOrAgentIDfromSessionID(entry.txID.sessionID),
|
|
121
|
+
tx: entry.txID,
|
|
122
|
+
at: new Date(entry.madeAt),
|
|
123
|
+
value: entry.op === "del" ? undefined : entry.value,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/** @category 5. Edit history */
|
|
127
|
+
lastEditAt(key) {
|
|
128
|
+
const ops = this.timeFilteredOps(key);
|
|
129
|
+
if (!ops || ops.length === 0) {
|
|
130
|
+
return undefined;
|
|
111
131
|
}
|
|
132
|
+
return this.nthEditAt(key, ops.length - 1);
|
|
112
133
|
}
|
|
113
|
-
|
|
114
|
-
|
|
134
|
+
/** @category 5. Edit history */
|
|
135
|
+
*editsAt(key) {
|
|
136
|
+
const ops = this.timeFilteredOps(key);
|
|
115
137
|
if (!ops) {
|
|
116
|
-
return
|
|
117
|
-
}
|
|
118
|
-
const history = [];
|
|
119
|
-
for (const op of ops) {
|
|
120
|
-
if (op.op === "del") {
|
|
121
|
-
history.push({
|
|
122
|
-
at: op.madeAt,
|
|
123
|
-
txID: op.txID,
|
|
124
|
-
value: undefined,
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
history.push({ at: op.madeAt, txID: op.txID, value: op.value });
|
|
129
|
-
}
|
|
138
|
+
return;
|
|
130
139
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
toJSON() {
|
|
134
|
-
const json = {};
|
|
135
|
-
for (const key of this.keys()) {
|
|
136
|
-
const value = this.get(key);
|
|
137
|
-
if (value !== undefined) {
|
|
138
|
-
json[key] = value;
|
|
139
|
-
}
|
|
140
|
+
for (let i = 0; i < ops.length; i++) {
|
|
141
|
+
yield this.nthEditAt(key, i);
|
|
140
142
|
}
|
|
141
|
-
return json;
|
|
142
143
|
}
|
|
144
|
+
/** @category 3. Subscription */
|
|
143
145
|
subscribe(listener) {
|
|
144
146
|
return this.core.subscribe((content) => {
|
|
145
147
|
listener(content);
|
|
146
148
|
});
|
|
147
149
|
}
|
|
148
|
-
edit(changer) {
|
|
149
|
-
const editable = new WriteableCoMap(this.core);
|
|
150
|
-
changer(editable);
|
|
151
|
-
return new CoMap(this.core);
|
|
152
|
-
}
|
|
153
150
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
151
|
+
/** A collaborative map with precise shape `Shape` and optional static metadata `Meta` */
|
|
152
|
+
export class CoMap extends CoMapView {
|
|
153
|
+
set(...args) {
|
|
154
|
+
if (typeof args[0] === "string") {
|
|
155
|
+
const [key, value, privacy = "private"] = args;
|
|
156
|
+
this.core.makeTransaction([
|
|
157
|
+
{
|
|
158
|
+
op: "set",
|
|
159
|
+
key,
|
|
160
|
+
value: isCoValue(value) ? value.id : value,
|
|
161
|
+
},
|
|
162
|
+
], privacy);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
const [kv, privacy = "private"] = args;
|
|
166
|
+
for (const [key, value] of Object.entries(kv)) {
|
|
167
|
+
this.core.makeTransaction([
|
|
168
|
+
{
|
|
169
|
+
op: "set",
|
|
170
|
+
key,
|
|
171
|
+
value: isCoValue(value) ? value.id : value,
|
|
172
|
+
},
|
|
173
|
+
], privacy);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return new CoMap(this.core);
|
|
158
177
|
}
|
|
159
|
-
/**
|
|
178
|
+
/** Returns a new version of this CoMap with the given key deleted (setting it to undefined).
|
|
160
179
|
*
|
|
161
|
-
* If `privacy` is `"private"` **(default)**,
|
|
180
|
+
* 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.
|
|
162
181
|
*
|
|
163
|
-
* If `privacy` is `"trusting"`,
|
|
164
|
-
|
|
182
|
+
* If `privacy` is `"trusting"`, `key` is stored in plaintext in the transaction, visible to everyone who gets a hold of it, including sync servers.
|
|
183
|
+
*
|
|
184
|
+
* @category 2. Editing
|
|
185
|
+
**/
|
|
186
|
+
delete(key, privacy = "private") {
|
|
165
187
|
this.core.makeTransaction([
|
|
166
188
|
{
|
|
167
|
-
op: "
|
|
189
|
+
op: "del",
|
|
168
190
|
key,
|
|
169
|
-
value: isCoValue(value) ? value.id : value,
|
|
170
191
|
},
|
|
171
192
|
], privacy);
|
|
172
|
-
this.
|
|
193
|
+
return new CoMap(this.core);
|
|
194
|
+
}
|
|
195
|
+
/** @category 2. Editing */
|
|
196
|
+
mutate(mutator) {
|
|
197
|
+
const mutable = new MutableCoMap(this.core);
|
|
198
|
+
mutator(mutable);
|
|
199
|
+
return new CoMap(this.core);
|
|
200
|
+
}
|
|
201
|
+
/** @deprecated Use `mutate` instead. */
|
|
202
|
+
edit(mutator) {
|
|
203
|
+
return this.mutate(mutator);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
export class MutableCoMap extends CoMapView {
|
|
207
|
+
/** Sets a new value for the given key.
|
|
208
|
+
*
|
|
209
|
+
* 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.
|
|
210
|
+
*
|
|
211
|
+
* 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.
|
|
212
|
+
*
|
|
213
|
+
* @category 2. Mutation
|
|
214
|
+
*/
|
|
215
|
+
set(key, value, privacy = "private") {
|
|
216
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
217
|
+
const after = CoMap.prototype.set.call(this, key, value, privacy);
|
|
218
|
+
this.ops = after.ops;
|
|
173
219
|
}
|
|
174
220
|
/** Deletes the value for the given key (setting it to undefined).
|
|
175
221
|
*
|
|
176
222
|
* 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.
|
|
177
223
|
*
|
|
178
|
-
* If `privacy` is `"trusting"`, `key` is stored in plaintext in the transaction, visible to everyone who gets a hold of it, including sync servers.
|
|
224
|
+
* If `privacy` is `"trusting"`, `key` is stored in plaintext in the transaction, visible to everyone who gets a hold of it, including sync servers.
|
|
225
|
+
* @category 2. Mutation
|
|
226
|
+
*/
|
|
179
227
|
delete(key, privacy = "private") {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
op: "del",
|
|
183
|
-
key,
|
|
184
|
-
},
|
|
185
|
-
], privacy);
|
|
186
|
-
this.fillOpsFromCoValue();
|
|
228
|
+
const after = CoMap.prototype.delete.call(this, key, privacy);
|
|
229
|
+
this.ops = after.ops;
|
|
187
230
|
}
|
|
188
231
|
}
|
|
189
232
|
//# sourceMappingURL=coMap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coMap.js","sourceRoot":"","sources":["../../src/coValues/coMap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,SAAS,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAe,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"coMap.js","sourceRoot":"","sources":["../../src/coValues/coMap.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { JsonObject, JsonValue } from "../jsonValue.js";
|
|
|
2
2
|
import { CoValue, CoID } from "../coValue.js";
|
|
3
3
|
import { CoValueCore } from "../coValueCore.js";
|
|
4
4
|
import { Group } from "../group.js";
|
|
5
|
-
import { SessionID } from "../ids.js";
|
|
5
|
+
import { AgentID, SessionID, TransactionID } from "../ids.js";
|
|
6
6
|
import { AccountID } from "../account.js";
|
|
7
7
|
export type BinaryStreamInfo = {
|
|
8
8
|
mimeType: string;
|
|
@@ -23,54 +23,98 @@ export type BinaryCoStreamMeta = JsonObject & {
|
|
|
23
23
|
type: "binary";
|
|
24
24
|
};
|
|
25
25
|
export type BinaryStreamItem = BinaryStreamStart | BinaryStreamChunk | BinaryStreamEnd;
|
|
26
|
-
export type CoStreamItem<
|
|
27
|
-
|
|
26
|
+
export type CoStreamItem<Item extends JsonValue | CoValue> = {
|
|
27
|
+
value: Item extends CoValue ? CoID<Item> : Exclude<Item, CoValue>;
|
|
28
|
+
tx: TransactionID;
|
|
28
29
|
madeAt: number;
|
|
29
30
|
};
|
|
30
|
-
export declare class
|
|
31
|
+
export declare class CoStreamView<Item extends JsonValue | CoValue, Meta extends JsonObject | null = null> implements CoValue {
|
|
31
32
|
id: CoID<this>;
|
|
32
33
|
type: "costream";
|
|
33
34
|
core: CoValueCore;
|
|
34
35
|
items: {
|
|
35
|
-
[key: SessionID]: CoStreamItem<
|
|
36
|
+
[key: SessionID]: CoStreamItem<Item>[];
|
|
36
37
|
};
|
|
38
|
+
readonly _item: Item;
|
|
37
39
|
constructor(core: CoValueCore);
|
|
38
40
|
get meta(): Meta;
|
|
39
41
|
get group(): Group;
|
|
42
|
+
/** Not yet implemented */
|
|
43
|
+
atTime(_time: number): this;
|
|
40
44
|
/** @internal */
|
|
41
45
|
protected fillFromCoValue(): void;
|
|
42
|
-
getSingleStream(): (
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
getSingleStream(): (Item extends CoValue ? CoID<Item> : Exclude<Item, CoValue>)[] | undefined;
|
|
47
|
+
sessions(): SessionID[];
|
|
48
|
+
accounts(): Set<AccountID | AgentID>;
|
|
49
|
+
nthItemIn(sessionID: SessionID, n: number): {
|
|
50
|
+
by: AccountID | AgentID;
|
|
51
|
+
tx: TransactionID;
|
|
52
|
+
at: Date;
|
|
53
|
+
value: Item extends CoValue ? CoID<Item> : Exclude<Item, CoValue>;
|
|
54
|
+
} | undefined;
|
|
55
|
+
lastItemIn(sessionID: SessionID): {
|
|
56
|
+
by: AccountID | AgentID;
|
|
57
|
+
tx: TransactionID;
|
|
58
|
+
at: Date;
|
|
59
|
+
value: Item extends CoValue ? CoID<Item> : Exclude<Item, CoValue>;
|
|
60
|
+
} | undefined;
|
|
61
|
+
itemsIn(sessionID: SessionID): Generator<{
|
|
62
|
+
by: `sealer_z${string}/signer_z${string}` | AccountID;
|
|
63
|
+
tx: TransactionID;
|
|
64
|
+
at: Date;
|
|
65
|
+
value: Item extends CoValue ? CoID<Item> : Exclude<Item, CoValue>;
|
|
66
|
+
}, void, unknown>;
|
|
67
|
+
lastItemBy(account: AccountID | AgentID): {
|
|
68
|
+
by: AccountID | AgentID;
|
|
69
|
+
tx: TransactionID;
|
|
70
|
+
at: Date;
|
|
71
|
+
value: Item extends CoValue ? CoID<Item> : Exclude<Item, CoValue>;
|
|
72
|
+
} | undefined;
|
|
73
|
+
itemsBy(account: AccountID | AgentID): Generator<{
|
|
74
|
+
by: `sealer_z${string}/signer_z${string}` | AccountID;
|
|
75
|
+
tx: TransactionID;
|
|
76
|
+
at: Date;
|
|
77
|
+
value: Item extends CoValue ? CoID<Item> : Exclude<Item, CoValue>;
|
|
78
|
+
in: `sealer_z${string}/signer_z${string}_session_z${string}` | `co_z${string}_session_z${string}`;
|
|
79
|
+
}, void, unknown>;
|
|
48
80
|
toJSON(): {
|
|
49
|
-
[key: SessionID]: (
|
|
81
|
+
[key: SessionID]: (Item extends CoValue ? CoID<Item> : Exclude<Item, CoValue>)[];
|
|
50
82
|
};
|
|
51
83
|
subscribe(listener: (coStream: this) => void): () => void;
|
|
52
|
-
edit(changer: (editable: WriteableCoStream<T, Meta>) => void): this;
|
|
53
84
|
}
|
|
54
|
-
export declare class
|
|
85
|
+
export declare class CoStream<Item extends JsonValue | CoValue, Meta extends JsonObject | null = null> extends CoStreamView<Item, Meta> implements CoValue {
|
|
86
|
+
push(item: Item extends CoValue ? Item | CoID<Item> : Item, privacy?: "private" | "trusting"): this;
|
|
87
|
+
mutate(mutator: (mutable: MutableCoStream<Item, Meta>) => void): this;
|
|
88
|
+
/** @deprecated Use `mutate` instead. */
|
|
89
|
+
edit(mutator: (mutable: MutableCoStream<Item, Meta>) => void): this;
|
|
90
|
+
}
|
|
91
|
+
export declare class MutableCoStream<Item extends JsonValue | CoValue, Meta extends JsonObject | null = null> extends CoStreamView<Item, Meta> implements CoValue {
|
|
92
|
+
push(item: Item extends CoValue ? Item | CoID<Item> : Item, privacy?: "private" | "trusting"): void;
|
|
93
|
+
}
|
|
94
|
+
export declare class BinaryCoStreamView<Meta extends BinaryCoStreamMeta = {
|
|
55
95
|
type: "binary";
|
|
56
|
-
}> extends
|
|
96
|
+
}> extends CoStreamView<BinaryStreamItem, Meta> implements CoValue {
|
|
57
97
|
id: CoID<this>;
|
|
58
98
|
getBinaryChunks(allowUnfinished?: boolean): (BinaryStreamInfo & {
|
|
59
99
|
chunks: Uint8Array[];
|
|
60
100
|
finished: boolean;
|
|
61
101
|
}) | undefined;
|
|
62
|
-
edit(changer: (editable: WriteableBinaryCoStream<Meta>) => void): this;
|
|
63
102
|
}
|
|
64
|
-
export declare class
|
|
103
|
+
export declare class BinaryCoStream<Meta extends BinaryCoStreamMeta = {
|
|
104
|
+
type: "binary";
|
|
105
|
+
}> extends BinaryCoStreamView<Meta> implements CoValue {
|
|
65
106
|
/** @internal */
|
|
66
|
-
|
|
67
|
-
|
|
107
|
+
push(item: BinaryStreamItem, privacy?: "private" | "trusting"): this;
|
|
108
|
+
startBinaryStream(settings: BinaryStreamInfo, privacy?: "private" | "trusting"): this;
|
|
109
|
+
pushBinaryStreamChunk(chunk: Uint8Array, privacy?: "private" | "trusting"): this;
|
|
110
|
+
endBinaryStream(privacy?: "private" | "trusting"): this;
|
|
111
|
+
mutate(mutator: (mutable: MutableBinaryCoStream<Meta>) => void): this;
|
|
112
|
+
/** @deprecated Use `mutate` instead. */
|
|
113
|
+
edit(mutator: (mutable: MutableBinaryCoStream<Meta>) => void): this;
|
|
68
114
|
}
|
|
69
|
-
export declare class
|
|
115
|
+
export declare class MutableBinaryCoStream<Meta extends BinaryCoStreamMeta = {
|
|
70
116
|
type: "binary";
|
|
71
|
-
}> extends
|
|
72
|
-
/** @internal */
|
|
73
|
-
edit(_changer: (editable: WriteableBinaryCoStream<Meta>) => void): this;
|
|
117
|
+
}> extends BinaryCoStreamView<Meta> implements CoValue {
|
|
74
118
|
/** @internal */
|
|
75
119
|
push(item: BinaryStreamItem, privacy?: "private" | "trusting"): void;
|
|
76
120
|
startBinaryStream(settings: BinaryStreamInfo, privacy?: "private" | "trusting"): void;
|