@welshman/net 0.0.22 → 0.0.24
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/build/src/Executor.cjs +50 -5
- package/build/src/Executor.cjs.map +1 -1
- package/build/src/Executor.d.ts +19 -2
- package/build/src/Executor.mjs +50 -5
- package/build/src/Executor.mjs.map +1 -1
- package/build/src/Negentropy.cjs +516 -0
- package/build/src/Negentropy.cjs.map +1 -0
- package/build/src/Negentropy.d.ts +47 -0
- package/build/src/Negentropy.mjs +512 -0
- package/build/src/Negentropy.mjs.map +1 -0
- package/build/src/Subscribe.cjs.map +1 -1
- package/build/src/Subscribe.mjs.map +1 -1
- package/build/src/Sync.cjs +138 -0
- package/build/src/Sync.cjs.map +1 -0
- package/build/src/Sync.d.ts +42 -0
- package/build/src/Sync.mjs +128 -0
- package/build/src/Sync.mjs.map +1 -0
- package/build/src/index.cjs +2 -0
- package/build/src/index.cjs.map +1 -1
- package/build/src/index.d.ts +2 -0
- package/build/src/index.mjs +2 -0
- package/build/src/target/Echo.cjs +20 -0
- package/build/src/target/Echo.cjs.map +1 -0
- package/build/src/target/Echo.d.ts +7 -0
- package/build/src/target/Echo.mjs +16 -0
- package/build/src/target/Echo.mjs.map +1 -0
- package/package.json +6 -4
package/build/src/Executor.cjs
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Executor = void 0;
|
|
4
4
|
const lib_1 = require("@welshman/lib");
|
|
5
|
+
const Negentropy_1 = require("./Negentropy.cjs");
|
|
5
6
|
const createSubId = (prefix) => [prefix, Math.random().toString().slice(2, 10)].join('-');
|
|
6
7
|
class Executor {
|
|
7
8
|
constructor(target) {
|
|
@@ -28,11 +29,11 @@ class Executor {
|
|
|
28
29
|
this.target.send("REQ", id, ...filters);
|
|
29
30
|
return {
|
|
30
31
|
unsubscribe: () => {
|
|
31
|
-
if (
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
if (closed)
|
|
33
|
+
return;
|
|
34
|
+
this.target.send("CLOSE", id);
|
|
35
|
+
this.target.off('EVENT', eventListener);
|
|
36
|
+
this.target.off('EOSE', eoseListener);
|
|
36
37
|
closed = true;
|
|
37
38
|
},
|
|
38
39
|
};
|
|
@@ -59,6 +60,50 @@ class Executor {
|
|
|
59
60
|
}
|
|
60
61
|
};
|
|
61
62
|
}
|
|
63
|
+
diff(filter, events, { onMessage, onError, onClose } = {}) {
|
|
64
|
+
let closed = false;
|
|
65
|
+
const id = createSubId('NEG');
|
|
66
|
+
const storage = new Negentropy_1.NegentropyStorageVector();
|
|
67
|
+
const neg = new Negentropy_1.Negentropy(storage, 50000);
|
|
68
|
+
for (const event of events) {
|
|
69
|
+
storage.insert(event.created_at, event.id);
|
|
70
|
+
}
|
|
71
|
+
storage.seal();
|
|
72
|
+
const msgListener = async (url, negid, msg) => {
|
|
73
|
+
if (negid === id) {
|
|
74
|
+
const [newMsg, have, need] = await neg.reconcile(msg);
|
|
75
|
+
onMessage === null || onMessage === void 0 ? void 0 : onMessage(url, { have, need });
|
|
76
|
+
if (newMsg) {
|
|
77
|
+
this.target.send('NEG-MSG', id, newMsg);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
close();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const errListener = (url, negid, msg) => {
|
|
85
|
+
if (negid === id) {
|
|
86
|
+
onError === null || onError === void 0 ? void 0 : onError(url, msg);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
const close = () => {
|
|
90
|
+
if (closed)
|
|
91
|
+
return;
|
|
92
|
+
this.target.send('NEG-CLOSE', id);
|
|
93
|
+
this.target.off('NEG-MSG', msgListener);
|
|
94
|
+
this.target.off('NEG-ERR', errListener);
|
|
95
|
+
closed = true;
|
|
96
|
+
onClose === null || onClose === void 0 ? void 0 : onClose();
|
|
97
|
+
};
|
|
98
|
+
this.target.on('NEG-MSG', msgListener);
|
|
99
|
+
this.target.on('NEG-ERR', errListener);
|
|
100
|
+
neg.initiate().then((msg) => {
|
|
101
|
+
this.target.send("NEG-OPEN", id, filter, msg);
|
|
102
|
+
});
|
|
103
|
+
return {
|
|
104
|
+
unsubscribe: close,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
62
107
|
}
|
|
63
108
|
exports.Executor = Executor;
|
|
64
109
|
//# sourceMappingURL=Executor.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Executor.cjs","sourceRoot":"","sources":["../../src/Executor.ts"],"names":[],"mappings":";;;AAAA,uCAAiC;
|
|
1
|
+
{"version":3,"file":"Executor.cjs","sourceRoot":"","sources":["../../src/Executor.ts"],"names":[],"mappings":"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"}
|
package/build/src/Executor.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Emitter } from '@welshman/lib';
|
|
2
|
-
import type { SignedEvent, Filter } from '@welshman/util';
|
|
2
|
+
import type { SignedEvent, TrustedEvent, Filter } from '@welshman/util';
|
|
3
3
|
import type { Message } from './Socket';
|
|
4
4
|
import type { Connection } from './Connection';
|
|
5
5
|
export type Target = Emitter & {
|
|
@@ -7,10 +7,19 @@ export type Target = Emitter & {
|
|
|
7
7
|
send: (...args: Message) => void;
|
|
8
8
|
cleanup: () => void;
|
|
9
9
|
};
|
|
10
|
-
type
|
|
10
|
+
export type NegentropyMessage = {
|
|
11
|
+
have: string[];
|
|
12
|
+
need: string[];
|
|
13
|
+
};
|
|
14
|
+
type EventCallback = (url: string, event: TrustedEvent) => void;
|
|
11
15
|
type EoseCallback = (url: string) => void;
|
|
16
|
+
type CloseCallback = () => void;
|
|
12
17
|
type OkCallback = (url: string, id: string, ...extra: any[]) => void;
|
|
13
18
|
type ErrorCallback = (url: string, id: string, ...extra: any[]) => void;
|
|
19
|
+
type DiffMessageCallback = (url: string, { have, need }: {
|
|
20
|
+
have: string[];
|
|
21
|
+
need: string[];
|
|
22
|
+
}) => void;
|
|
14
23
|
type SubscribeOpts = {
|
|
15
24
|
onEvent?: EventCallback;
|
|
16
25
|
onEose?: EoseCallback;
|
|
@@ -20,6 +29,11 @@ type PublishOpts = {
|
|
|
20
29
|
onOk?: OkCallback;
|
|
21
30
|
onError?: ErrorCallback;
|
|
22
31
|
};
|
|
32
|
+
type DiffOpts = {
|
|
33
|
+
onError?: ErrorCallback;
|
|
34
|
+
onMessage?: DiffMessageCallback;
|
|
35
|
+
onClose?: CloseCallback;
|
|
36
|
+
};
|
|
23
37
|
export declare class Executor {
|
|
24
38
|
readonly target: Target;
|
|
25
39
|
constructor(target: Target);
|
|
@@ -29,5 +43,8 @@ export declare class Executor {
|
|
|
29
43
|
publish(event: SignedEvent, { verb, onOk, onError }?: PublishOpts): {
|
|
30
44
|
unsubscribe: () => void;
|
|
31
45
|
};
|
|
46
|
+
diff(filter: Filter, events: TrustedEvent[], { onMessage, onError, onClose }?: DiffOpts): {
|
|
47
|
+
unsubscribe: () => void;
|
|
48
|
+
};
|
|
32
49
|
}
|
|
33
50
|
export {};
|
package/build/src/Executor.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ctx } from '@welshman/lib';
|
|
2
|
+
import { Negentropy, NegentropyStorageVector } from "./Negentropy.mjs";
|
|
2
3
|
const createSubId = (prefix) => [prefix, Math.random().toString().slice(2, 10)].join('-');
|
|
3
4
|
export class Executor {
|
|
4
5
|
constructor(target) {
|
|
@@ -25,11 +26,11 @@ export class Executor {
|
|
|
25
26
|
this.target.send("REQ", id, ...filters);
|
|
26
27
|
return {
|
|
27
28
|
unsubscribe: () => {
|
|
28
|
-
if (
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
if (closed)
|
|
30
|
+
return;
|
|
31
|
+
this.target.send("CLOSE", id);
|
|
32
|
+
this.target.off('EVENT', eventListener);
|
|
33
|
+
this.target.off('EOSE', eoseListener);
|
|
33
34
|
closed = true;
|
|
34
35
|
},
|
|
35
36
|
};
|
|
@@ -56,5 +57,49 @@ export class Executor {
|
|
|
56
57
|
}
|
|
57
58
|
};
|
|
58
59
|
}
|
|
60
|
+
diff(filter, events, { onMessage, onError, onClose } = {}) {
|
|
61
|
+
let closed = false;
|
|
62
|
+
const id = createSubId('NEG');
|
|
63
|
+
const storage = new NegentropyStorageVector();
|
|
64
|
+
const neg = new Negentropy(storage, 50000);
|
|
65
|
+
for (const event of events) {
|
|
66
|
+
storage.insert(event.created_at, event.id);
|
|
67
|
+
}
|
|
68
|
+
storage.seal();
|
|
69
|
+
const msgListener = async (url, negid, msg) => {
|
|
70
|
+
if (negid === id) {
|
|
71
|
+
const [newMsg, have, need] = await neg.reconcile(msg);
|
|
72
|
+
onMessage === null || onMessage === void 0 ? void 0 : onMessage(url, { have, need });
|
|
73
|
+
if (newMsg) {
|
|
74
|
+
this.target.send('NEG-MSG', id, newMsg);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
close();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const errListener = (url, negid, msg) => {
|
|
82
|
+
if (negid === id) {
|
|
83
|
+
onError === null || onError === void 0 ? void 0 : onError(url, msg);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const close = () => {
|
|
87
|
+
if (closed)
|
|
88
|
+
return;
|
|
89
|
+
this.target.send('NEG-CLOSE', id);
|
|
90
|
+
this.target.off('NEG-MSG', msgListener);
|
|
91
|
+
this.target.off('NEG-ERR', errListener);
|
|
92
|
+
closed = true;
|
|
93
|
+
onClose === null || onClose === void 0 ? void 0 : onClose();
|
|
94
|
+
};
|
|
95
|
+
this.target.on('NEG-MSG', msgListener);
|
|
96
|
+
this.target.on('NEG-ERR', errListener);
|
|
97
|
+
neg.initiate().then((msg) => {
|
|
98
|
+
this.target.send("NEG-OPEN", id, filter, msg);
|
|
99
|
+
});
|
|
100
|
+
return {
|
|
101
|
+
unsubscribe: close,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
59
104
|
}
|
|
60
105
|
//# sourceMappingURL=Executor.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Executor.mjs","sourceRoot":"","sources":["../../src/Executor.ts"],"names":[],"mappings":"OAAO,EAAC,GAAG,EAAC,MAAM,eAAe;
|
|
1
|
+
{"version":3,"file":"Executor.mjs","sourceRoot":"","sources":["../../src/Executor.ts"],"names":[],"mappings":"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"}
|