@evolu/common 8.6.2 → 8.7.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/src/Buffer.d.ts +67 -8
- package/dist/src/Buffer.d.ts.map +1 -1
- package/dist/src/Buffer.js +722 -15
- package/dist/src/local-first/Protocol.d.ts +14 -0
- package/dist/src/local-first/Protocol.d.ts.map +1 -1
- package/dist/src/local-first/Protocol.js +24 -31
- package/package.json +1 -2
- package/src/Buffer.ts +966 -22
- package/src/local-first/Protocol.ts +24 -36
|
@@ -159,6 +159,20 @@
|
|
|
159
159
|
*
|
|
160
160
|
* @module
|
|
161
161
|
*/
|
|
162
|
+
/**
|
|
163
|
+
* TODO:
|
|
164
|
+
*
|
|
165
|
+
* - The client-relay naming convention in functions like
|
|
166
|
+
* `applyProtocolMessageAsClient` and `applyProtocolMessageAsRelay` is not
|
|
167
|
+
* ideal. In the future, clients will be able to sync directly with each other
|
|
168
|
+
* (P2P), making the current naming misleading. Consider using
|
|
169
|
+
* initiator/non-initiator terminology instead, and consolidate into a single
|
|
170
|
+
* `applyProtocolMessage` function with conditional arguments to reduce code
|
|
171
|
+
* duplication.
|
|
172
|
+
* - Allow clients to broadcast messages that are not persisted by relays. This
|
|
173
|
+
* would enable real-time ephemeral data (like cursor positions, typing
|
|
174
|
+
* indicators) to be forwarded by relays without storage overhead.
|
|
175
|
+
*/
|
|
162
176
|
import { type NonEmptyReadonlyArray } from "../Array.ts";
|
|
163
177
|
import type { Brand } from "../Brand.ts";
|
|
164
178
|
import { type Buffer } from "../Buffer.ts";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Protocol.d.ts","sourceRoot":"","sources":["../../../src/local-first/Protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgKG;
|
|
1
|
+
{"version":3,"file":"Protocol.d.ts","sourceRoot":"","sources":["../../../src/local-first/Protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -169,16 +169,13 @@
|
|
|
169
169
|
* initiator/non-initiator terminology instead, and consolidate into a single
|
|
170
170
|
* `applyProtocolMessage` function with conditional arguments to reduce code
|
|
171
171
|
* duplication.
|
|
172
|
-
* - Replace try-catch with Result + new Error (to preserve stacktraces). Measure
|
|
173
|
-
* Result overhead, it should be super small.
|
|
174
172
|
* - Allow clients to broadcast messages that are not persisted by relays. This
|
|
175
173
|
* would enable real-time ephemeral data (like cursor positions, typing
|
|
176
174
|
* indicators) to be forwarded by relays without storage overhead.
|
|
177
175
|
*/
|
|
178
|
-
import { Packr } from "msgpackr";
|
|
179
176
|
import { createMutableArray, isNonEmptyArray, } from "../Array.js";
|
|
180
177
|
import { assert, assertNonNullable, assertNotUndefined } from "../Assert.js";
|
|
181
|
-
import { bytesToHex, bytesToUtf8, createBuffer, hexToBytes, utf8ToBytes, } from "../Buffer.js";
|
|
178
|
+
import { bytesToHex, bytesToUtf8, createBuffer, decodeJsonValue, encodeJsonValue, hexToBytes, utf8ToBytes, } from "../Buffer.js";
|
|
182
179
|
import { createPadmePadding, decryptWithXChaCha20Poly1305, EncryptionKey, encryptWithXChaCha20Poly1305, Entropy24, XChaCha20Poly1305Ciphertext, xChaCha20Poly1305NonceLength, } from "../Crypto.js";
|
|
183
180
|
import { eqArrayNumber } from "../Eq.js";
|
|
184
181
|
import { computeBalancedBuckets } from "../Number.js";
|
|
@@ -191,13 +188,7 @@ import { Base64Url, base64UrlToUint8Array, between, DateIso, FiniteNumber, Id, I
|
|
|
191
188
|
import { OwnerId, OwnerIdBytes, ownerIdToOwnerIdBytes, OwnerWriteKey, ownerWriteKeyLength, } from "./Owner.js";
|
|
192
189
|
import { DbChange, fingerprintSize, InfiniteUpperBound, RangeType, } from "./Storage.js";
|
|
193
190
|
import { Counter, eqTimestamp, NodeId, Timestamp, TimestampBytes, timestampBytesLength, timestampBytesToTimestamp, timestampToTimestampBytes, } from "./Timestamp.js";
|
|
194
|
-
|
|
195
|
-
* Evolu uses MessagePack for numbers and JSONs.
|
|
196
|
-
*
|
|
197
|
-
* - `variableMapSize: true` - More compact maps, ~5-10% slower encoding
|
|
198
|
-
* - `useRecords: false` - Standard MessagePack without extensions
|
|
199
|
-
*/
|
|
200
|
-
const packr = new Packr({ variableMapSize: true, useRecords: false });
|
|
191
|
+
const jsonBuffer = createBuffer();
|
|
201
192
|
const minProtocolMessageMaxSize = 1_000_000;
|
|
202
193
|
const maxProtocolMessageMaxSize = 100_000_000;
|
|
203
194
|
/**
|
|
@@ -1181,23 +1172,12 @@ const decodeId = (buffer) => {
|
|
|
1181
1172
|
* For NonNegativeInt, Evolu provides more efficient encoding.
|
|
1182
1173
|
*/
|
|
1183
1174
|
export const encodeNumber = (buffer, number) => {
|
|
1184
|
-
buffer
|
|
1175
|
+
encodeJsonValue(buffer, number);
|
|
1185
1176
|
};
|
|
1186
1177
|
export const decodeNumber = (buffer) => {
|
|
1187
|
-
|
|
1188
|
-
let end;
|
|
1189
|
-
packr.unpackMultiple(buffer.unwrap(), (n, _, e) => {
|
|
1190
|
-
number = n;
|
|
1191
|
-
end = e;
|
|
1192
|
-
return false;
|
|
1193
|
-
});
|
|
1194
|
-
const endResult = NonNegativeInt.fromUnknown(end);
|
|
1195
|
-
if (!endResult.ok)
|
|
1196
|
-
throw new ProtocolDecodeError(endResult.error.type);
|
|
1197
|
-
const numberResult = FiniteNumber.fromUnknown(number);
|
|
1178
|
+
const numberResult = FiniteNumber.fromUnknown(decodeJsonValue(buffer));
|
|
1198
1179
|
if (!numberResult.ok)
|
|
1199
1180
|
throw new ProtocolDecodeError(numberResult.error.type);
|
|
1200
|
-
buffer.shiftN(endResult.value);
|
|
1201
1181
|
return numberResult.value;
|
|
1202
1182
|
};
|
|
1203
1183
|
/**
|
|
@@ -1471,10 +1451,17 @@ export const encodeSqliteValue = (buffer, value) => {
|
|
|
1471
1451
|
// Some valid JSON strings like "-0E0" get normalized to "0" during parsing,
|
|
1472
1452
|
// which would cause data corruption if we don't verify round-trip safety.
|
|
1473
1453
|
if (json.ok && JSON.stringify(jsonToJsonValue(json.value)) === value) {
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1454
|
+
jsonBuffer.reset();
|
|
1455
|
+
try {
|
|
1456
|
+
encodeJsonValue(jsonBuffer, jsonToJsonValue(json.value));
|
|
1457
|
+
const jsonBytes = jsonBuffer.unwrap();
|
|
1458
|
+
encodeNonNegativeInt(buffer, ProtocolValueType.Json);
|
|
1459
|
+
encodeLength(buffer, jsonBytes);
|
|
1460
|
+
buffer.extend(jsonBytes);
|
|
1461
|
+
}
|
|
1462
|
+
finally {
|
|
1463
|
+
jsonBuffer.reset();
|
|
1464
|
+
}
|
|
1478
1465
|
return;
|
|
1479
1466
|
}
|
|
1480
1467
|
const base64Url = Base64Url.from.parent(value);
|
|
@@ -1490,7 +1477,9 @@ export const encodeSqliteValue = (buffer, value) => {
|
|
|
1490
1477
|
return;
|
|
1491
1478
|
}
|
|
1492
1479
|
case "number": {
|
|
1493
|
-
|
|
1480
|
+
// Negative zero is a non-negative integer in JavaScript, but integer
|
|
1481
|
+
// encoding would lose its observable sign.
|
|
1482
|
+
if (!globalThis.Object.is(value, -0) && NonNegativeInt.is(value)) {
|
|
1494
1483
|
if (isSmallInt(value)) {
|
|
1495
1484
|
encodeNonNegativeInt(buffer, value);
|
|
1496
1485
|
return;
|
|
@@ -1530,8 +1519,12 @@ export const decodeSqliteValue = (buffer) => {
|
|
|
1530
1519
|
return decodeNonNegativeInt(buffer);
|
|
1531
1520
|
case ProtocolValueType.Json: {
|
|
1532
1521
|
const length = decodeLength(buffer);
|
|
1533
|
-
const
|
|
1534
|
-
|
|
1522
|
+
const lengthBeforeDecoding = buffer.getLength();
|
|
1523
|
+
const value = decodeJsonValue(buffer);
|
|
1524
|
+
if (lengthBeforeDecoding - buffer.getLength() !== length) {
|
|
1525
|
+
throw new ProtocolDecodeError("Invalid JSON MessagePack length");
|
|
1526
|
+
}
|
|
1527
|
+
return JSON.stringify(value);
|
|
1535
1528
|
}
|
|
1536
1529
|
case ProtocolValueType.DateIsoWithNonNegativeTime:
|
|
1537
1530
|
case ProtocolValueType.DateIsoWithNegativeTime: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@evolu/common",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.7.0",
|
|
4
4
|
"description": "TypeScript library and local-first platform",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"evolu",
|
|
@@ -71,7 +71,6 @@
|
|
|
71
71
|
"@scure/bip39": "^2.3.0",
|
|
72
72
|
"@standard-schema/spec": "^1.1.0",
|
|
73
73
|
"kysely": "^0.29.5",
|
|
74
|
-
"msgpackr": "^2.0.5",
|
|
75
74
|
"random": "5.5.1"
|
|
76
75
|
},
|
|
77
76
|
"devDependencies": {
|