@dxos/protocols 2.33.8-dev.c77ba621 → 2.33.9-dev.2637427f
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/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/proto/gen/dxos/bot.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/bot.js.map +1 -1
- package/dist/src/proto/gen/dxos/client.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/client.js.map +1 -1
- package/dist/src/proto/gen/dxos/config.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/config.js.map +1 -1
- package/dist/src/proto/gen/dxos/credentials/auth.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/credentials/greet.d.ts +1 -1
- package/dist/src/proto/gen/dxos/credentials/greet.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/credentials/greet.js.map +1 -1
- package/dist/src/proto/gen/dxos/credentials/identity.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/credentials/party.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/credentials/party.js.map +1 -1
- package/dist/src/proto/gen/dxos/credentials.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/devtools.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/echo/feed.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/echo/feed.js.map +1 -1
- package/dist/src/proto/gen/dxos/echo/invitation.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/echo/invitation.js.map +1 -1
- package/dist/src/proto/gen/dxos/echo/metadata.d.ts +6 -5
- package/dist/src/proto/gen/dxos/echo/metadata.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/echo/service.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/echo/snapshot.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/echo/timeframe.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/halo/keys.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/halo/keys.js.map +1 -1
- package/dist/src/proto/gen/dxos/rpc.d.ts.map +1 -1
- package/dist/src/proto/gen/dxos/rpc.js.map +1 -1
- package/dist/src/proto/gen/dxos/test/echo.d.ts +11 -0
- package/dist/src/proto/gen/dxos/test/echo.d.ts.map +1 -0
- package/dist/src/proto/gen/dxos/test/echo.js +3 -0
- package/dist/src/proto/gen/dxos/test/echo.js.map +1 -0
- package/dist/src/proto/gen/google/protobuf.d.ts.map +1 -1
- package/dist/src/proto/gen/google/protobuf.js.map +1 -1
- package/dist/src/proto/gen/index.d.ts +4 -0
- package/dist/src/proto/gen/index.d.ts.map +1 -1
- package/dist/src/proto/gen/index.js +1 -1
- package/dist/src/proto/gen/index.js.map +1 -1
- package/dist/src/proto/index.d.ts +0 -1
- package/dist/src/proto/index.d.ts.map +1 -1
- package/dist/src/proto/index.js +0 -16
- package/dist/src/proto/index.js.map +1 -1
- package/dist/src/public-key.d.ts +21 -2
- package/dist/src/public-key.d.ts.map +1 -1
- package/dist/src/public-key.js +62 -4
- package/dist/src/public-key.js.map +1 -1
- package/dist/src/public-key.test.js +7 -0
- package/dist/src/public-key.test.js.map +1 -1
- package/dist/src/timeframe.d.ts +57 -0
- package/dist/src/timeframe.d.ts.map +1 -0
- package/dist/src/timeframe.js +127 -0
- package/dist/src/timeframe.js.map +1 -0
- package/dist/src/timeframe.test.d.ts +2 -0
- package/dist/src/timeframe.test.d.ts.map +1 -0
- package/dist/src/timeframe.test.js +113 -0
- package/dist/src/timeframe.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -5
- package/src/index.ts +1 -1
- package/src/proto/dxos/echo/metadata.proto +10 -7
- package/src/proto/dxos/halo/greet.proto +1 -2
- package/src/proto/dxos/test/echo.proto +20 -0
- package/src/proto/gen/dxos/bot.ts +1 -0
- package/src/proto/gen/dxos/client.ts +1 -0
- package/src/proto/gen/dxos/config.ts +1 -0
- package/src/proto/gen/dxos/credentials/auth.ts +1 -0
- package/src/proto/gen/dxos/credentials/greet.ts +2 -1
- package/src/proto/gen/dxos/credentials/identity.ts +1 -0
- package/src/proto/gen/dxos/credentials/party.ts +1 -0
- package/src/proto/gen/dxos/credentials.ts +1 -0
- package/src/proto/gen/dxos/devtools.ts +1 -0
- package/src/proto/gen/dxos/echo/feed.ts +1 -0
- package/src/proto/gen/dxos/echo/invitation.ts +1 -0
- package/src/proto/gen/dxos/echo/metadata.ts +7 -5
- package/src/proto/gen/dxos/echo/service.ts +1 -0
- package/src/proto/gen/dxos/echo/snapshot.ts +1 -0
- package/src/proto/gen/dxos/echo/timeframe.ts +1 -0
- package/src/proto/gen/dxos/halo/keys.ts +1 -0
- package/src/proto/gen/dxos/rpc.ts +1 -0
- package/src/proto/gen/dxos/test/echo.ts +29 -0
- package/src/proto/gen/google/protobuf.ts +1 -0
- package/src/proto/gen/index.ts +5 -1
- package/src/proto/index.ts +0 -2
- package/src/public-key.test.ts +10 -0
- package/src/public-key.ts +69 -3
- package/src/timeframe.test.ts +125 -0
- package/src/timeframe.ts +144 -0
package/dist/src/public-key.js
CHANGED
|
@@ -6,9 +6,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
6
6
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
7
|
};
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.publicKeySubstitutions = exports.PublicKey = void 0;
|
|
9
|
+
exports.publicKeySubstitutions = exports.PublicKey = exports.SECRET_KEY_LENGTH = exports.PUBLIC_KEY_LENGTH = void 0;
|
|
10
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
11
|
+
const node_util_1 = require("node:util");
|
|
10
12
|
const randombytes_1 = __importDefault(require("randombytes"));
|
|
11
|
-
|
|
13
|
+
exports.PUBLIC_KEY_LENGTH = 32;
|
|
14
|
+
exports.SECRET_KEY_LENGTH = 64;
|
|
15
|
+
/**
|
|
16
|
+
* The purpose of this class is to assure consistent use of keys throughout the project.
|
|
17
|
+
* Keys should be maintained as buffers in objects and proto definitions, and converted to hex
|
|
18
|
+
* strings as late as possible (eg, to log/display).
|
|
19
|
+
*/
|
|
12
20
|
class PublicKey {
|
|
13
21
|
constructor(_value) {
|
|
14
22
|
this._value = _value;
|
|
@@ -71,6 +79,32 @@ class PublicKey {
|
|
|
71
79
|
static equals(left, right) {
|
|
72
80
|
return PublicKey.from(left).equals(right);
|
|
73
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* @param Hex string representation of key.
|
|
84
|
+
* @return Key buffer.
|
|
85
|
+
* @deprecated All keys should be represented as instances of PublicKey.
|
|
86
|
+
*/
|
|
87
|
+
static bufferize(str) {
|
|
88
|
+
(0, node_assert_1.default)(typeof str === 'string', 'Invalid type');
|
|
89
|
+
const buffer = Buffer.from(str, 'hex');
|
|
90
|
+
(0, node_assert_1.default)(buffer.length === exports.PUBLIC_KEY_LENGTH || buffer.length === exports.SECRET_KEY_LENGTH, `Invalid key length: ${buffer.length}`);
|
|
91
|
+
return buffer;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* @param Public key like data structure (but not PublicKey which should use toString).
|
|
95
|
+
* @return Hex string representation of key.
|
|
96
|
+
* @deprecated All keys should be represented as instances of PublicKey.
|
|
97
|
+
*/
|
|
98
|
+
static stringify(key) {
|
|
99
|
+
if (key instanceof PublicKey) {
|
|
100
|
+
key = key.asBuffer();
|
|
101
|
+
}
|
|
102
|
+
else if (key instanceof Uint8Array) {
|
|
103
|
+
key = Buffer.from(key);
|
|
104
|
+
}
|
|
105
|
+
(0, node_assert_1.default)(key instanceof Buffer, 'Invalid type');
|
|
106
|
+
return key.toString('hex');
|
|
107
|
+
}
|
|
74
108
|
/**
|
|
75
109
|
* Return underlying Uint8Array representation.
|
|
76
110
|
*/
|
|
@@ -111,8 +145,32 @@ class PublicKey {
|
|
|
111
145
|
/**
|
|
112
146
|
* Used by NodeJS to get textual representation of this object when it's printed with a `console.log` statement.
|
|
113
147
|
*/
|
|
114
|
-
[
|
|
115
|
-
|
|
148
|
+
[node_util_1.inspect.custom](depth, options) {
|
|
149
|
+
if (!options.colors || !process.stdout.hasColors()) {
|
|
150
|
+
return `<PublicKey ${this.truncate()}>`;
|
|
151
|
+
}
|
|
152
|
+
const printControlCode = (code) => {
|
|
153
|
+
return `\x1b[${code}m`;
|
|
154
|
+
};
|
|
155
|
+
// Compute simple hash of the key.
|
|
156
|
+
const hash = Math.abs(this._value.reduce((acc, val) => acc ^ val | 0, 0));
|
|
157
|
+
const colors = [
|
|
158
|
+
'red',
|
|
159
|
+
'green',
|
|
160
|
+
'yellow',
|
|
161
|
+
'blue',
|
|
162
|
+
'magenta',
|
|
163
|
+
'cyan',
|
|
164
|
+
'redBright',
|
|
165
|
+
'greenBright',
|
|
166
|
+
'yellowBright',
|
|
167
|
+
'blueBright',
|
|
168
|
+
'magentaBright',
|
|
169
|
+
'cyanBright',
|
|
170
|
+
'whiteBright'
|
|
171
|
+
];
|
|
172
|
+
const color = colors[hash % colors.length];
|
|
173
|
+
return `<PublicKey ${printControlCode(node_util_1.inspect.colors[color][0])}${this.truncate()}${printControlCode(node_util_1.inspect.colors.reset[0])}>`;
|
|
116
174
|
}
|
|
117
175
|
/**
|
|
118
176
|
* Test this key for equality with some other key.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-key.js","sourceRoot":"","sources":["../../src/public-key.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;AAEF,8DAAsC;
|
|
1
|
+
{"version":3,"file":"public-key.js","sourceRoot":"","sources":["../../src/public-key.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,13 @@
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const public_key_1 = require("./public-key");
|
|
7
7
|
const KEY_HEX = '2c28f0d08ccc5340aee02655675be5796227a28d27b9704df34b7d8b2d9fddc7';
|
|
8
|
+
it('Basic key operations', () => {
|
|
9
|
+
const publicKey = public_key_1.PublicKey.random().asBuffer();
|
|
10
|
+
expect(public_key_1.PublicKey.bufferize(public_key_1.PublicKey.stringify(publicKey))).toEqual(publicKey);
|
|
11
|
+
expect(() => public_key_1.PublicKey.stringify('not-a-buffer')).toThrowError();
|
|
12
|
+
expect(() => public_key_1.PublicKey.bufferize('not-a-value-hex-key')).toThrowError();
|
|
13
|
+
expect(() => public_key_1.PublicKey.bufferize(publicKey)).toThrowError();
|
|
14
|
+
});
|
|
8
15
|
it('formatting', () => {
|
|
9
16
|
const key = public_key_1.PublicKey.fromHex(KEY_HEX);
|
|
10
17
|
expect(public_key_1.PublicKey.isPublicKey(key)).toEqual(true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-key.test.js","sourceRoot":"","sources":["../../src/public-key.test.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;AAEF,6CAAyC;AAEzC,MAAM,OAAO,GAAG,kEAAkE,CAAC;AAEnF,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;IACpB,MAAM,GAAG,GAAG,sBAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvC,MAAM,CAAC,sBAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,sBAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAEpC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;IAClB,MAAM,GAAG,GAAG,sBAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;IAE9B,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAEtC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACnE,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;IACtB,MAAM,GAAG,GAAG,sBAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvC,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;IACjC,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7E,MAAM,CAAC,sBAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;AAChG,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;IACd,MAAM,CAAC,sBAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;SACpC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,MAAM,CAAC,sBAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;SACxD,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,MAAM,CAAC,sBAAS,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;SAC/C,OAAO,CAAC,kEAAkE,CAAC,CAAC;AACjF,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IAChB,MAAM,CAAC,sBAAS,CAAC,MAAM,CACrB,sBAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EACvB,sBAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CACxB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,MAAM,CAAC,sBAAS,CAAC,MAAM,CACrB,sBAAS,CAAC,MAAM,EAAE,EAClB,sBAAS,CAAC,MAAM,EAAE,CACnB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;IACzB,MAAM,GAAG,GAAG,sBAAS,CAAC,MAAM,EAAE,CAAC;IAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,sBAAS,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"public-key.test.js","sourceRoot":"","sources":["../../src/public-key.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { inspect } from 'node:util';
|
|
3
|
+
import { PublicKey } from './public-key';
|
|
4
|
+
/**
|
|
5
|
+
* A mapping of feed key to a sequence number on that feed.
|
|
6
|
+
* Describes how many messages have been processed.
|
|
7
|
+
*/
|
|
8
|
+
export declare class Timeframe {
|
|
9
|
+
private readonly _keys;
|
|
10
|
+
private readonly _frames;
|
|
11
|
+
constructor(frames?: [PublicKey, number][]);
|
|
12
|
+
get(key: PublicKey): number | undefined;
|
|
13
|
+
set(key: PublicKey, value: number): void;
|
|
14
|
+
frames(): [PublicKey, number][];
|
|
15
|
+
size(): number;
|
|
16
|
+
isEmpty(): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Returns a new timeframe with specified keys removed.
|
|
19
|
+
* @param keys
|
|
20
|
+
*/
|
|
21
|
+
withoutKeys(keys: PublicKey[]): Timeframe;
|
|
22
|
+
/**
|
|
23
|
+
* Returns a total amount of messages represented by this timeframe.
|
|
24
|
+
*/
|
|
25
|
+
totalMessages(): number;
|
|
26
|
+
toJSON(): Record<string, number>;
|
|
27
|
+
toString(): string;
|
|
28
|
+
/**
|
|
29
|
+
* Used by NodeJS to get textual representation of this object when it's printed with a `console.log` statement.
|
|
30
|
+
*/
|
|
31
|
+
[inspect.custom](): string;
|
|
32
|
+
/**
|
|
33
|
+
* Merges the values, updating the highest sequence numbers.
|
|
34
|
+
* @param timeframes
|
|
35
|
+
*/
|
|
36
|
+
static merge(...timeframes: Timeframe[]): Timeframe;
|
|
37
|
+
/**
|
|
38
|
+
* Compares two timeframes and returns an array of frames from the first timeframe where the sequence number
|
|
39
|
+
* is greater than the associated sequence number from the second timeframe.
|
|
40
|
+
*
|
|
41
|
+
* @param tf1
|
|
42
|
+
* @param tf2
|
|
43
|
+
*/
|
|
44
|
+
static dependencies(tf1: Timeframe, tf2: Timeframe): Timeframe;
|
|
45
|
+
}
|
|
46
|
+
export declare const timeframeSubstitutions: {
|
|
47
|
+
'dxos.echo.timeframe.TimeframeVector': {
|
|
48
|
+
encode: (timeframe: Timeframe) => {
|
|
49
|
+
frames: {
|
|
50
|
+
feedKey: Uint8Array;
|
|
51
|
+
seq: number;
|
|
52
|
+
}[];
|
|
53
|
+
};
|
|
54
|
+
decode: (vector: any) => Timeframe;
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=timeframe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeframe.d.ts","sourceRoot":"","sources":["../../src/timeframe.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC;;;GAGG;AACH,qBAAa,SAAS;IAEpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;gBAExC,MAAM,GAAE,CAAC,SAAS,EAAE,MAAM,CAAC,EAAO;IAM/C,GAAG,CAAE,GAAG,EAAE,SAAS;IAKnB,GAAG,CAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM;IAOlC,MAAM,IAAK,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE;IAchC,IAAI;IAKJ,OAAO;IAIP;;;OAGG;IACH,WAAW,CAAE,IAAI,EAAE,SAAS,EAAE,GAAG,SAAS;IAK1C;;OAEG;IACH,aAAa,IAAK,MAAM;IAIxB,MAAM;IAON,QAAQ;IAIR;;OAEG;IACH,CAAC,OAAO,CAAC,MAAM,CAAC;IAIhB;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAE,GAAG,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS;IAcpD;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,CACjB,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,GAC7B,SAAS;CAWb;AAED,eAAO,MAAM,sBAAsB;;4BAEX,SAAS;;;;;;yBAGZ,GAAG;;CAMvB,CAAC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
//
|
|
3
|
+
// Copyright 2020 DXOS.org
|
|
4
|
+
//
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.timeframeSubstitutions = exports.Timeframe = void 0;
|
|
7
|
+
const node_util_1 = require("node:util");
|
|
8
|
+
const public_key_1 = require("./public-key");
|
|
9
|
+
/**
|
|
10
|
+
* A mapping of feed key to a sequence number on that feed.
|
|
11
|
+
* Describes how many messages have been processed.
|
|
12
|
+
*/
|
|
13
|
+
class Timeframe {
|
|
14
|
+
constructor(frames = []) {
|
|
15
|
+
// Cannot use ComplexMap because @dxos/util depends on @dxos/protocols for PublicKey.
|
|
16
|
+
this._keys = new Map();
|
|
17
|
+
this._frames = new Map();
|
|
18
|
+
for (const [key, seq] of frames) {
|
|
19
|
+
this.set(key, seq);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
get(key) {
|
|
23
|
+
const keyString = key.toString();
|
|
24
|
+
return this._frames.get(keyString);
|
|
25
|
+
}
|
|
26
|
+
set(key, value) {
|
|
27
|
+
const keyString = key.toString();
|
|
28
|
+
this._frames.set(keyString, value);
|
|
29
|
+
this._keys.set(keyString, key);
|
|
30
|
+
}
|
|
31
|
+
// TODO(burdon): Change to getter.
|
|
32
|
+
frames() {
|
|
33
|
+
return Array.from(this._frames.entries())
|
|
34
|
+
.map(([keyString, value]) => {
|
|
35
|
+
const key = this._keys.get(keyString);
|
|
36
|
+
if (!key) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
return [key, value];
|
|
40
|
+
})
|
|
41
|
+
.filter((frame) => !!frame);
|
|
42
|
+
}
|
|
43
|
+
// TODO(burdon): Change to getter.
|
|
44
|
+
size() {
|
|
45
|
+
return this._frames.size;
|
|
46
|
+
}
|
|
47
|
+
// TODO(burdon): Change to getter (empty).
|
|
48
|
+
isEmpty() {
|
|
49
|
+
return this.size() === 0;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Returns a new timeframe with specified keys removed.
|
|
53
|
+
* @param keys
|
|
54
|
+
*/
|
|
55
|
+
withoutKeys(keys) {
|
|
56
|
+
return new Timeframe(this.frames().filter(([frameKey]) => keys.every(key => Buffer.compare(key.asBuffer(), frameKey.asBuffer()) !== 0)));
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Returns a total amount of messages represented by this timeframe.
|
|
60
|
+
*/
|
|
61
|
+
totalMessages() {
|
|
62
|
+
return Array.from(this._frames.values()).reduce((acc, seq) => acc + seq + 1, 0);
|
|
63
|
+
}
|
|
64
|
+
toJSON() {
|
|
65
|
+
return this.frames().reduce((frames, [key, seq]) => {
|
|
66
|
+
frames[key.truncate()] = seq;
|
|
67
|
+
return frames;
|
|
68
|
+
}, {});
|
|
69
|
+
}
|
|
70
|
+
toString() {
|
|
71
|
+
return `(${this.frames().map(([key, seq]) => `${key.truncate()} => ${seq}`).join(', ')})`;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Used by NodeJS to get textual representation of this object when it's printed with a `console.log` statement.
|
|
75
|
+
*/
|
|
76
|
+
[node_util_1.inspect.custom]() {
|
|
77
|
+
return `Timeframe${this.toString()}`;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Merges the values, updating the highest sequence numbers.
|
|
81
|
+
* @param timeframes
|
|
82
|
+
*/
|
|
83
|
+
static merge(...timeframes) {
|
|
84
|
+
const result = new Timeframe();
|
|
85
|
+
for (const timeframe of timeframes) {
|
|
86
|
+
for (const [key, seq] of timeframe.frames()) {
|
|
87
|
+
const current = result.get(key);
|
|
88
|
+
if (current === undefined || seq > current) {
|
|
89
|
+
result.set(key, seq);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Compares two timeframes and returns an array of frames from the first timeframe where the sequence number
|
|
97
|
+
* is greater than the associated sequence number from the second timeframe.
|
|
98
|
+
*
|
|
99
|
+
* @param tf1
|
|
100
|
+
* @param tf2
|
|
101
|
+
*/
|
|
102
|
+
static dependencies(tf1, tf2) {
|
|
103
|
+
const result = new Timeframe();
|
|
104
|
+
for (const [key, seq] of tf1.frames()) {
|
|
105
|
+
const otherSeq = tf2.get(key);
|
|
106
|
+
if (otherSeq === undefined || otherSeq < seq) {
|
|
107
|
+
result.set(key, seq);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return result;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
exports.Timeframe = Timeframe;
|
|
114
|
+
exports.timeframeSubstitutions = {
|
|
115
|
+
'dxos.echo.timeframe.TimeframeVector': {
|
|
116
|
+
encode: (timeframe) => ({
|
|
117
|
+
frames: timeframe.frames().map(([feedKey, seq]) => ({ feedKey: feedKey.asUint8Array(), seq }))
|
|
118
|
+
}),
|
|
119
|
+
decode: (vector) => {
|
|
120
|
+
var _a;
|
|
121
|
+
return new Timeframe(((_a = vector.frames) !== null && _a !== void 0 ? _a : [])
|
|
122
|
+
.filter((frame) => frame.feedKey != null && frame.seq != null)
|
|
123
|
+
.map((frame) => [public_key_1.PublicKey.from(new Uint8Array(frame.feedKey)), frame.seq]));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
//# sourceMappingURL=timeframe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeframe.js","sourceRoot":"","sources":["../../src/timeframe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeframe.test.d.ts","sourceRoot":"","sources":["../../src/timeframe.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
//
|
|
3
|
+
// Copyright 2020 DXOS.org
|
|
4
|
+
//
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const debug_1 = __importDefault(require("debug"));
|
|
10
|
+
const public_key_1 = require("./public-key");
|
|
11
|
+
const timeframe_1 = require("./timeframe");
|
|
12
|
+
const log = (0, debug_1.default)('dxos:protocols:timeframe:test');
|
|
13
|
+
describe('spacetime', () => {
|
|
14
|
+
test('constructors', () => {
|
|
15
|
+
const feedKey = public_key_1.PublicKey.random();
|
|
16
|
+
const tf1 = new timeframe_1.Timeframe([[feedKey, 1]]);
|
|
17
|
+
log(tf1.toString());
|
|
18
|
+
expect(tf1).toBeTruthy();
|
|
19
|
+
});
|
|
20
|
+
test('merge/subtract', () => {
|
|
21
|
+
const feedKey1 = public_key_1.PublicKey.random();
|
|
22
|
+
const feedKey2 = public_key_1.PublicKey.random();
|
|
23
|
+
const feedKey3 = public_key_1.PublicKey.random();
|
|
24
|
+
{
|
|
25
|
+
// Merge.
|
|
26
|
+
const tf1 = new timeframe_1.Timeframe();
|
|
27
|
+
const tf2 = new timeframe_1.Timeframe([[feedKey1, 2], [feedKey2, 1]]);
|
|
28
|
+
const tf3 = timeframe_1.Timeframe.merge(tf1, tf2);
|
|
29
|
+
expect(tf3.frames()).toHaveLength(2);
|
|
30
|
+
}
|
|
31
|
+
{
|
|
32
|
+
// Merge (no change).
|
|
33
|
+
const tf1 = new timeframe_1.Timeframe([[feedKey1, 1], [feedKey2, 1]]);
|
|
34
|
+
const tf2 = new timeframe_1.Timeframe([[feedKey1, 2], [feedKey3, 1]]);
|
|
35
|
+
const tf3 = timeframe_1.Timeframe.merge(tf1, tf2);
|
|
36
|
+
expect(tf3.frames()).toHaveLength(3);
|
|
37
|
+
}
|
|
38
|
+
{
|
|
39
|
+
// Merge (no change).
|
|
40
|
+
const tf1 = new timeframe_1.Timeframe([[feedKey1, 1]]);
|
|
41
|
+
const tf2 = new timeframe_1.Timeframe([[feedKey1, 3]]);
|
|
42
|
+
const tf3 = new timeframe_1.Timeframe([[feedKey1, 2]]);
|
|
43
|
+
const tf4 = timeframe_1.Timeframe.merge(tf1, tf2, tf3);
|
|
44
|
+
log(tf4.toString());
|
|
45
|
+
expect(tf4.frames()).toHaveLength(1);
|
|
46
|
+
expect(tf4.get(feedKey1)).toBe(3);
|
|
47
|
+
}
|
|
48
|
+
{
|
|
49
|
+
// Remove keys.
|
|
50
|
+
const tf1 = new timeframe_1.Timeframe([[feedKey1, 1], [feedKey2, 2]]);
|
|
51
|
+
const tf2 = tf1.withoutKeys([feedKey1, feedKey3]);
|
|
52
|
+
expect(tf2.frames()).toHaveLength(1);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
test('dependencies', () => {
|
|
56
|
+
const feedKey1 = public_key_1.PublicKey.random();
|
|
57
|
+
const feedKey2 = public_key_1.PublicKey.random();
|
|
58
|
+
const feedKey3 = public_key_1.PublicKey.random();
|
|
59
|
+
{
|
|
60
|
+
const tf1 = new timeframe_1.Timeframe();
|
|
61
|
+
const tf2 = new timeframe_1.Timeframe();
|
|
62
|
+
const tf3 = timeframe_1.Timeframe.dependencies(tf1, tf2);
|
|
63
|
+
log(tf3.toString());
|
|
64
|
+
expect(tf3.frames()).toHaveLength(0);
|
|
65
|
+
}
|
|
66
|
+
{
|
|
67
|
+
const tf1 = new timeframe_1.Timeframe();
|
|
68
|
+
const tf2 = new timeframe_1.Timeframe([[feedKey1, 10], [feedKey2, 11]]);
|
|
69
|
+
const tf3 = timeframe_1.Timeframe.dependencies(tf1, tf2);
|
|
70
|
+
log(tf3.toString());
|
|
71
|
+
expect(tf3.frames()).toHaveLength(0);
|
|
72
|
+
}
|
|
73
|
+
{
|
|
74
|
+
const tf1 = new timeframe_1.Timeframe([[feedKey1, 10], [feedKey2, 10]]);
|
|
75
|
+
const tf2 = new timeframe_1.Timeframe();
|
|
76
|
+
const tf3 = timeframe_1.Timeframe.dependencies(tf1, tf2);
|
|
77
|
+
log(tf3.toString());
|
|
78
|
+
expect(tf3.frames()).toHaveLength(2);
|
|
79
|
+
}
|
|
80
|
+
// TODO(burdon): Test 0.
|
|
81
|
+
{
|
|
82
|
+
const tf1 = new timeframe_1.Timeframe([[feedKey1, 0]]);
|
|
83
|
+
const tf2 = new timeframe_1.Timeframe([[feedKey1, 0]]);
|
|
84
|
+
const tf3 = timeframe_1.Timeframe.dependencies(tf1, tf2);
|
|
85
|
+
log(tf3.toString());
|
|
86
|
+
expect(tf3.frames()).toHaveLength(0);
|
|
87
|
+
}
|
|
88
|
+
{
|
|
89
|
+
const tf1 = new timeframe_1.Timeframe([[feedKey1, 1]]);
|
|
90
|
+
const tf2 = new timeframe_1.Timeframe([[feedKey1, 1]]);
|
|
91
|
+
const tf3 = timeframe_1.Timeframe.dependencies(tf1, tf2);
|
|
92
|
+
log(tf1.toString());
|
|
93
|
+
log(tf2.toString());
|
|
94
|
+
log(tf3.toString());
|
|
95
|
+
expect(tf3.frames()).toHaveLength(0);
|
|
96
|
+
}
|
|
97
|
+
{
|
|
98
|
+
const tf1 = new timeframe_1.Timeframe([[feedKey1, 10], [feedKey2, 10]]);
|
|
99
|
+
const tf2 = new timeframe_1.Timeframe([[feedKey1, 10], [feedKey2, 11]]);
|
|
100
|
+
const tf3 = timeframe_1.Timeframe.dependencies(tf1, tf2);
|
|
101
|
+
log(tf3.toString());
|
|
102
|
+
expect(tf3.frames()).toHaveLength(0);
|
|
103
|
+
}
|
|
104
|
+
{
|
|
105
|
+
const tf1 = new timeframe_1.Timeframe([[feedKey1, 10], [feedKey2, 10], [feedKey3, 10]]);
|
|
106
|
+
const tf2 = new timeframe_1.Timeframe([[feedKey1, 10], [feedKey2, 9]]);
|
|
107
|
+
const tf3 = timeframe_1.Timeframe.dependencies(tf1, tf2);
|
|
108
|
+
log(tf3.toString());
|
|
109
|
+
expect(tf3.frames()).toHaveLength(2);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
//# sourceMappingURL=timeframe.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeframe.test.js","sourceRoot":"","sources":["../../src/timeframe.test.ts"],"names":[],"mappings":"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"}
|