cojson 0.2.2 → 0.3.0-alpha.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/.eslintrc.cjs +1 -0
- package/dist/account.d.ts +8 -8
- package/dist/account.js +2 -2
- package/dist/account.js.map +1 -1
- package/dist/coValue.d.ts +22 -27
- package/dist/coValue.js +21 -0
- package/dist/coValue.js.map +1 -1
- package/dist/coValueCore.d.ts +7 -7
- package/dist/coValueCore.js +11 -14
- package/dist/coValueCore.js.map +1 -1
- package/dist/coValues/coList.d.ts +107 -42
- package/dist/coValues/coList.js +163 -72
- package/dist/coValues/coList.js.map +1 -1
- package/dist/coValues/coMap.d.ts +109 -50
- package/dist/coValues/coMap.js +161 -109
- package/dist/coValues/coMap.js.map +1 -1
- package/dist/coValues/coStream.d.ts +78 -33
- package/dist/coValues/coStream.js +134 -53
- 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 +59 -23
- package/dist/group.js +83 -25
- package/dist/group.js.map +1 -1
- package/dist/index.d.ts +14 -11
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/{node.d.ts → localNode.d.ts} +23 -11
- package/dist/{node.js → localNode.js} +80 -42
- package/dist/localNode.js.map +1 -0
- package/dist/media.d.ts +1 -2
- 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 +31 -0
- package/dist/queries.js +77 -0
- package/dist/queries.js.map +1 -0
- package/dist/sync.d.ts +1 -1
- package/dist/sync.js +1 -1
- package/dist/sync.js.map +1 -1
- package/dist/{testUtils.d.ts → tests/testUtils.d.ts} +9 -9
- package/dist/{testUtils.js → tests/testUtils.js} +9 -7
- package/dist/tests/testUtils.js.map +1 -0
- package/package.json +2 -2
- package/src/account.ts +6 -6
- package/src/coValue.ts +65 -34
- package/src/coValueCore.ts +18 -22
- package/src/coValues/coList.ts +272 -122
- package/src/coValues/coMap.ts +349 -152
- package/src/coValues/coStream.ts +258 -94
- package/src/crypto.ts +37 -24
- package/src/group.ts +112 -46
- package/src/index.ts +42 -30
- package/src/{node.ts → localNode.ts} +117 -66
- package/src/media.ts +1 -2
- 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 +142 -0
- package/src/sync.ts +2 -2
- package/src/{account.test.ts → tests/account.test.ts} +6 -9
- package/src/{coValue.test.ts → tests/coValue.test.ts} +120 -114
- package/src/{coValueCore.test.ts → tests/coValueCore.test.ts} +7 -7
- package/src/{crypto.test.ts → tests/crypto.test.ts} +19 -21
- package/src/{group.test.ts → tests/group.test.ts} +2 -2
- package/src/{permissions.test.ts → tests/permissions.test.ts} +260 -247
- package/src/tests/queries.test.ts +318 -0
- package/src/{sync.test.ts → tests/sync.test.ts} +39 -39
- package/src/{testUtils.ts → tests/testUtils.ts} +10 -8
- 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/dist/testUtils.js.map +0 -1
- package/src/coValues/static.ts +0 -31
package/dist/coValues/coMap.js
CHANGED
|
@@ -1,27 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { parseJSON } from
|
|
4
|
-
|
|
5
|
-
export class CoMap {
|
|
1
|
+
import { isCoValue } from "../coValue.js";
|
|
2
|
+
import { accountOrAgentIDfromSessionID } from "../coValueCore.js";
|
|
3
|
+
import { parseJSON } from "../jsonStringify.js";
|
|
4
|
+
export class CoMapView {
|
|
6
5
|
/** @internal */
|
|
7
6
|
constructor(core) {
|
|
7
|
+
/** @category 6. Meta */
|
|
8
8
|
this.type = "comap";
|
|
9
|
+
/** @internal */
|
|
10
|
+
this.atTimeFilter = undefined;
|
|
9
11
|
this.id = core.id;
|
|
10
12
|
this.core = core;
|
|
11
13
|
this.ops = {};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
get meta() {
|
|
15
|
-
return this.core.header.meta;
|
|
16
|
-
}
|
|
17
|
-
get group() {
|
|
18
|
-
return this.core.getGroup();
|
|
19
|
-
}
|
|
20
|
-
/** @internal */
|
|
21
|
-
fillOpsFromCoValue() {
|
|
22
|
-
this.ops = {};
|
|
23
|
-
for (const { txID, changes, madeAt } of this.core.getValidSortedTransactions()) {
|
|
24
|
-
for (const [changeIdx, changeUntyped] of (parseJSON(changes)).entries()) {
|
|
14
|
+
for (const { txID, changes, madeAt, } of core.getValidSortedTransactions()) {
|
|
15
|
+
for (const [changeIdx, changeUntyped] of parseJSON(changes).entries()) {
|
|
25
16
|
const change = changeUntyped;
|
|
26
17
|
let entries = this.ops[change.key];
|
|
27
18
|
if (!entries) {
|
|
@@ -37,144 +28,205 @@ export class CoMap {
|
|
|
37
28
|
}
|
|
38
29
|
}
|
|
39
30
|
}
|
|
40
|
-
|
|
41
|
-
|
|
31
|
+
/** @category 6. Meta */
|
|
32
|
+
get meta() {
|
|
33
|
+
return this.core.header.meta;
|
|
42
34
|
}
|
|
43
|
-
/**
|
|
44
|
-
get(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
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);
|
|
52
53
|
}
|
|
53
54
|
else {
|
|
54
|
-
return
|
|
55
|
+
return this.ops[key];
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const
|
|
63
|
-
if (
|
|
64
|
-
return
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
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
|
+
});
|
|
68
68
|
}
|
|
69
69
|
else {
|
|
70
|
-
return
|
|
70
|
+
return keys;
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
|
-
/**
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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) {
|
|
77
81
|
return undefined;
|
|
78
82
|
}
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
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;
|
|
82
89
|
}
|
|
83
90
|
else {
|
|
84
|
-
return
|
|
91
|
+
return lastEntry?.value;
|
|
85
92
|
}
|
|
86
93
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
+
}
|
|
91
102
|
}
|
|
92
|
-
|
|
93
|
-
return lastEntry.txID;
|
|
103
|
+
return object;
|
|
94
104
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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) {
|
|
98
113
|
return undefined;
|
|
99
114
|
}
|
|
100
|
-
const
|
|
101
|
-
if (
|
|
115
|
+
const entry = ops[n];
|
|
116
|
+
if (this.atTimeFilter && entry.madeAt > this.atTimeFilter) {
|
|
102
117
|
return undefined;
|
|
103
118
|
}
|
|
104
|
-
|
|
105
|
-
|
|
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;
|
|
106
131
|
}
|
|
132
|
+
return this.nthEditAt(key, ops.length - 1);
|
|
107
133
|
}
|
|
108
|
-
|
|
109
|
-
|
|
134
|
+
/** @category 5. Edit history */
|
|
135
|
+
*editsAt(key) {
|
|
136
|
+
const ops = this.timeFilteredOps(key);
|
|
110
137
|
if (!ops) {
|
|
111
|
-
return
|
|
112
|
-
}
|
|
113
|
-
const history = [];
|
|
114
|
-
for (const op of ops) {
|
|
115
|
-
if (op.op === "del") {
|
|
116
|
-
history.push({ at: op.madeAt, txID: op.txID, value: undefined });
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
history.push({ at: op.madeAt, txID: op.txID, value: op.value });
|
|
120
|
-
}
|
|
138
|
+
return;
|
|
121
139
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
toJSON() {
|
|
125
|
-
const json = {};
|
|
126
|
-
for (const key of this.keys()) {
|
|
127
|
-
const value = this.get(key);
|
|
128
|
-
if (value !== undefined) {
|
|
129
|
-
json[key] = value;
|
|
130
|
-
}
|
|
140
|
+
for (let i = 0; i < ops.length; i++) {
|
|
141
|
+
yield this.nthEditAt(key, i);
|
|
131
142
|
}
|
|
132
|
-
return json;
|
|
133
143
|
}
|
|
144
|
+
/** @category 3. Subscription */
|
|
134
145
|
subscribe(listener) {
|
|
135
146
|
return this.core.subscribe((content) => {
|
|
136
147
|
listener(content);
|
|
137
148
|
});
|
|
138
149
|
}
|
|
139
|
-
edit(changer) {
|
|
140
|
-
const editable = new WriteableCoMap(this.core);
|
|
141
|
-
changer(editable);
|
|
142
|
-
return new CoMap(this.core);
|
|
143
|
-
}
|
|
144
150
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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);
|
|
149
177
|
}
|
|
150
|
-
/**
|
|
178
|
+
/** Returns a new version of this CoMap with the given key deleted (setting it to undefined).
|
|
151
179
|
*
|
|
152
|
-
* 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.
|
|
153
181
|
*
|
|
154
|
-
* If `privacy` is `"trusting"`,
|
|
155
|
-
|
|
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") {
|
|
156
187
|
this.core.makeTransaction([
|
|
157
188
|
{
|
|
158
|
-
op: "
|
|
189
|
+
op: "del",
|
|
159
190
|
key,
|
|
160
|
-
value,
|
|
161
191
|
},
|
|
162
192
|
], privacy);
|
|
163
|
-
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;
|
|
164
219
|
}
|
|
165
220
|
/** Deletes the value for the given key (setting it to undefined).
|
|
166
221
|
*
|
|
167
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.
|
|
168
223
|
*
|
|
169
|
-
* 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
|
+
*/
|
|
170
227
|
delete(key, privacy = "private") {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
op: "del",
|
|
174
|
-
key,
|
|
175
|
-
},
|
|
176
|
-
], privacy);
|
|
177
|
-
this.fillOpsFromCoValue();
|
|
228
|
+
const after = CoMap.prototype.delete.call(this, key, privacy);
|
|
229
|
+
this.ops = after.ops;
|
|
178
230
|
}
|
|
179
231
|
}
|
|
180
232
|
//# sourceMappingURL=coMap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coMap.js","sourceRoot":"","sources":["../../src/coValues/coMap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"coMap.js","sourceRoot":"","sources":["../../src/coValues/coMap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { JsonObject, JsonValue } from "../jsonValue.js";
|
|
2
|
-
import {
|
|
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";
|
|
6
|
-
import { AccountID } from "../
|
|
7
|
-
export type
|
|
5
|
+
import { AgentID, SessionID, TransactionID } from "../ids.js";
|
|
6
|
+
import { AccountID } from "../account.js";
|
|
7
|
+
export type BinaryStreamInfo = {
|
|
8
8
|
mimeType: string;
|
|
9
9
|
fileName?: string;
|
|
10
10
|
totalSizeBytes?: number;
|
|
11
11
|
};
|
|
12
12
|
export type BinaryStreamStart = {
|
|
13
13
|
type: "start";
|
|
14
|
-
} &
|
|
14
|
+
} & BinaryStreamInfo;
|
|
15
15
|
export type BinaryStreamChunk = {
|
|
16
16
|
type: "chunk";
|
|
17
17
|
chunk: `binary_U${string}`;
|
|
@@ -23,56 +23,101 @@ export type BinaryCoStreamMeta = JsonObject & {
|
|
|
23
23
|
type: "binary";
|
|
24
24
|
};
|
|
25
25
|
export type BinaryStreamItem = BinaryStreamStart | BinaryStreamChunk | BinaryStreamEnd;
|
|
26
|
-
export
|
|
27
|
-
|
|
26
|
+
export type CoStreamItem<Item extends JsonValue | CoValue> = {
|
|
27
|
+
value: Item extends CoValue ? CoID<Item> : Exclude<Item, CoValue>;
|
|
28
|
+
tx: TransactionID;
|
|
29
|
+
madeAt: number;
|
|
30
|
+
};
|
|
31
|
+
export declare class CoStreamView<Item extends JsonValue | CoValue, Meta extends JsonObject | null = null> implements CoValue {
|
|
32
|
+
id: CoID<this>;
|
|
28
33
|
type: "costream";
|
|
29
34
|
core: CoValueCore;
|
|
30
35
|
items: {
|
|
31
|
-
[key: SessionID]:
|
|
32
|
-
item: T;
|
|
33
|
-
madeAt: number;
|
|
34
|
-
}[];
|
|
36
|
+
[key: SessionID]: CoStreamItem<Item>[];
|
|
35
37
|
};
|
|
38
|
+
readonly _item: Item;
|
|
36
39
|
constructor(core: CoValueCore);
|
|
37
40
|
get meta(): Meta;
|
|
38
41
|
get group(): Group;
|
|
42
|
+
/** Not yet implemented */
|
|
43
|
+
atTime(_time: number): this;
|
|
39
44
|
/** @internal */
|
|
40
45
|
protected fillFromCoValue(): void;
|
|
41
|
-
getSingleStream():
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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>;
|
|
47
80
|
toJSON(): {
|
|
48
|
-
[key: SessionID]:
|
|
81
|
+
[key: SessionID]: (Item extends CoValue ? CoID<Item> : Exclude<Item, CoValue>)[];
|
|
49
82
|
};
|
|
50
|
-
subscribe(listener: (
|
|
51
|
-
edit(changer: (editable: WriteableCoStream<T, Meta>) => void): CoStream<T, Meta>;
|
|
83
|
+
subscribe(listener: (coStream: this) => void): () => void;
|
|
52
84
|
}
|
|
53
|
-
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 = {
|
|
54
95
|
type: "binary";
|
|
55
|
-
}> extends
|
|
56
|
-
id: CoID<
|
|
57
|
-
getBinaryChunks(allowUnfinished?: boolean): (
|
|
96
|
+
}> extends CoStreamView<BinaryStreamItem, Meta> implements CoValue {
|
|
97
|
+
id: CoID<this>;
|
|
98
|
+
getBinaryChunks(allowUnfinished?: boolean): (BinaryStreamInfo & {
|
|
58
99
|
chunks: Uint8Array[];
|
|
59
100
|
finished: boolean;
|
|
60
101
|
}) | undefined;
|
|
61
|
-
edit(changer: (editable: WriteableBinaryCoStream<Meta>) => void): BinaryCoStream<Meta>;
|
|
62
102
|
}
|
|
63
|
-
export declare class
|
|
103
|
+
export declare class BinaryCoStream<Meta extends BinaryCoStreamMeta = {
|
|
104
|
+
type: "binary";
|
|
105
|
+
}> extends BinaryCoStreamView<Meta> implements CoValue {
|
|
64
106
|
/** @internal */
|
|
65
|
-
|
|
66
|
-
|
|
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;
|
|
67
114
|
}
|
|
68
|
-
export declare class
|
|
115
|
+
export declare class MutableBinaryCoStream<Meta extends BinaryCoStreamMeta = {
|
|
69
116
|
type: "binary";
|
|
70
|
-
}> extends
|
|
71
|
-
/** @internal */
|
|
72
|
-
edit(_changer: (editable: WriteableBinaryCoStream<Meta>) => void): BinaryCoStream<Meta>;
|
|
117
|
+
}> extends BinaryCoStreamView<Meta> implements CoValue {
|
|
73
118
|
/** @internal */
|
|
74
119
|
push(item: BinaryStreamItem, privacy?: "private" | "trusting"): void;
|
|
75
|
-
startBinaryStream(settings:
|
|
120
|
+
startBinaryStream(settings: BinaryStreamInfo, privacy?: "private" | "trusting"): void;
|
|
76
121
|
pushBinaryStreamChunk(chunk: Uint8Array, privacy?: "private" | "trusting"): void;
|
|
77
122
|
endBinaryStream(privacy?: "private" | "trusting"): void;
|
|
78
123
|
}
|