@dxos/keys 0.8.4-main.b97322e → 0.8.4-main.bbf232bc24
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/lib/browser/index.mjs +158 -228
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +158 -228
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/dxn.d.ts +35 -18
- package/dist/types/src/dxn.d.ts.map +1 -1
- package/dist/types/src/object-id.d.ts +50 -1
- package/dist/types/src/object-id.d.ts.map +1 -1
- package/dist/types/src/prng.d.ts +32 -0
- package/dist/types/src/prng.d.ts.map +1 -0
- package/dist/types/src/public-key.d.ts +3 -3
- package/dist/types/src/public-key.d.ts.map +1 -1
- package/dist/types/src/random-bytes.d.ts.map +1 -1
- package/dist/types/src/space-id.d.ts +2 -2
- package/dist/types/src/space-id.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +16 -14
- package/src/dxn.ts +80 -61
- package/src/object-id.ts +94 -5
- package/src/prng.ts +54 -0
- package/src/public-key.ts +4 -4
- package/src/space-id.ts +3 -3
|
@@ -82,28 +82,69 @@ var require_base32_decode = __commonJS({
|
|
|
82
82
|
});
|
|
83
83
|
|
|
84
84
|
// src/dxn.ts
|
|
85
|
-
import
|
|
85
|
+
import * as Schema3 from "effect/Schema";
|
|
86
86
|
import { devtoolsFormatter, inspectCustom } from "@dxos/debug";
|
|
87
87
|
import { assertArgument, invariant as invariant2 } from "@dxos/invariant";
|
|
88
88
|
|
|
89
89
|
// src/object-id.ts
|
|
90
|
-
import
|
|
91
|
-
import {
|
|
90
|
+
import * as Schema from "effect/Schema";
|
|
91
|
+
import { monotonicFactory } from "ulidx";
|
|
92
92
|
var ObjectIdSchema = Schema.String.pipe(Schema.pattern(/^[0-7][0-9A-HJKMNP-TV-Z]{25}$/i)).annotations({
|
|
93
|
-
description: "
|
|
93
|
+
description: "A Universally Unique Lexicographically Sortable Identifier",
|
|
94
94
|
pattern: "^[0-7][0-9A-HJKMNP-TV-Z]{25}$"
|
|
95
95
|
});
|
|
96
96
|
var ObjectId = class extends ObjectIdSchema {
|
|
97
|
+
static #factory = monotonicFactory();
|
|
98
|
+
static #seedTime = void 0;
|
|
97
99
|
static isValid(id) {
|
|
98
100
|
try {
|
|
99
101
|
Schema.decodeSync(ObjectId)(id);
|
|
100
102
|
return true;
|
|
101
|
-
} catch
|
|
103
|
+
} catch {
|
|
102
104
|
return false;
|
|
103
105
|
}
|
|
104
106
|
}
|
|
105
107
|
static random() {
|
|
106
|
-
return
|
|
108
|
+
return this.#factory(this.#seedTime);
|
|
109
|
+
}
|
|
110
|
+
static dangerouslyDisableRandomness() {
|
|
111
|
+
this.#factory = monotonicFactory(makeTestPRNG());
|
|
112
|
+
this.#seedTime = (/* @__PURE__ */ new Date("2025-01-01")).getTime();
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
var makeTestPRNG = () => {
|
|
116
|
+
const rng = new SimplePRNG();
|
|
117
|
+
return () => {
|
|
118
|
+
return rng.next();
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
var SimplePRNG = class _SimplePRNG {
|
|
122
|
+
#seed;
|
|
123
|
+
// LCG parameters (from Numerical Recipes)
|
|
124
|
+
static #a = 1664525;
|
|
125
|
+
static #c = 1013904223;
|
|
126
|
+
static #m = Math.pow(2, 32);
|
|
127
|
+
/**
|
|
128
|
+
* Creates a new PRNG instance.
|
|
129
|
+
* @param seed - Initial seed value. If not provided, uses 0.
|
|
130
|
+
*/
|
|
131
|
+
constructor(seed = 0) {
|
|
132
|
+
this.#seed = seed;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Generates the next pseudo-random number in the range [0, 1).
|
|
136
|
+
* @returns A pseudo-random number between 0 (inclusive) and 1 (exclusive).
|
|
137
|
+
*/
|
|
138
|
+
next() {
|
|
139
|
+
this.#seed = (_SimplePRNG.#a * this.#seed + _SimplePRNG.#c) % _SimplePRNG.#m;
|
|
140
|
+
return this.#seed / _SimplePRNG.#m;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Resets the generator with a new seed.
|
|
144
|
+
* @param seed - New seed value.
|
|
145
|
+
*/
|
|
146
|
+
reset(seed) {
|
|
147
|
+
this.#seed = seed;
|
|
107
148
|
}
|
|
108
149
|
};
|
|
109
150
|
|
|
@@ -170,7 +211,7 @@ function base32Encode(data, variant, options) {
|
|
|
170
211
|
}
|
|
171
212
|
|
|
172
213
|
// src/space-id.ts
|
|
173
|
-
import
|
|
214
|
+
import * as Schema2 from "effect/Schema";
|
|
174
215
|
import { invariant } from "@dxos/invariant";
|
|
175
216
|
|
|
176
217
|
// src/random-bytes.ts
|
|
@@ -182,121 +223,88 @@ var randomBytes = (length) => {
|
|
|
182
223
|
};
|
|
183
224
|
|
|
184
225
|
// src/space-id.ts
|
|
185
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/common/keys/src/space-id.ts";
|
|
186
226
|
var MULTIBASE_PREFIX = "B";
|
|
187
227
|
var ENCODED_LENGTH = 33;
|
|
188
228
|
var isValid = (value) => {
|
|
189
229
|
return typeof value === "string" && value.startsWith(MULTIBASE_PREFIX) && value.length === ENCODED_LENGTH;
|
|
190
230
|
};
|
|
191
231
|
var SpaceId = class extends Schema2.String.pipe(Schema2.filter(isValid)) {
|
|
192
|
-
static
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
invariant(value.length === SpaceId.byteLength, "Invalid length", {
|
|
207
|
-
F: __dxlog_file,
|
|
208
|
-
L: 44,
|
|
209
|
-
S: this,
|
|
210
|
-
A: [
|
|
211
|
-
"value.length === SpaceId.byteLength",
|
|
212
|
-
"'Invalid length'"
|
|
213
|
-
]
|
|
214
|
-
});
|
|
215
|
-
return MULTIBASE_PREFIX + base32Encode(value, "RFC4648");
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
static {
|
|
219
|
-
this.decode = (value) => {
|
|
220
|
-
invariant(value.startsWith(MULTIBASE_PREFIX), "Invalid multibase32 encoding", {
|
|
221
|
-
F: __dxlog_file,
|
|
222
|
-
L: 49,
|
|
223
|
-
S: this,
|
|
224
|
-
A: [
|
|
225
|
-
"value.startsWith(MULTIBASE_PREFIX)",
|
|
226
|
-
"'Invalid multibase32 encoding'"
|
|
227
|
-
]
|
|
228
|
-
});
|
|
229
|
-
return new Uint8Array((0, import_base32_decode.default)(value.slice(1), "RFC4648"));
|
|
230
|
-
};
|
|
231
|
-
}
|
|
232
|
-
static {
|
|
233
|
-
this.isValid = isValid;
|
|
234
|
-
}
|
|
235
|
-
static {
|
|
236
|
-
this.random = () => {
|
|
237
|
-
return SpaceId.encode(randomBytes(SpaceId.byteLength));
|
|
238
|
-
};
|
|
239
|
-
}
|
|
232
|
+
static byteLength = 20;
|
|
233
|
+
static encode = (value) => {
|
|
234
|
+
invariant(value instanceof Uint8Array, "Invalid type");
|
|
235
|
+
invariant(value.length === SpaceId.byteLength, "Invalid length");
|
|
236
|
+
return MULTIBASE_PREFIX + base32Encode(value, "RFC4648");
|
|
237
|
+
};
|
|
238
|
+
static decode = (value) => {
|
|
239
|
+
invariant(value.startsWith(MULTIBASE_PREFIX), "Invalid multibase32 encoding");
|
|
240
|
+
return new Uint8Array((0, import_base32_decode.default)(value.slice(1), "RFC4648"));
|
|
241
|
+
};
|
|
242
|
+
static isValid = isValid;
|
|
243
|
+
static random = () => {
|
|
244
|
+
return SpaceId.encode(randomBytes(SpaceId.byteLength));
|
|
245
|
+
};
|
|
240
246
|
};
|
|
241
247
|
|
|
242
248
|
// src/dxn.ts
|
|
243
|
-
var __dxlog_file2 = "/__w/dxos/dxos/packages/common/keys/src/dxn.ts";
|
|
244
249
|
var LOCAL_SPACE_TAG = "@";
|
|
250
|
+
var DXN_ECHO_REGEXP = /@(dxn:[a-zA-Z0-p:@]+)/;
|
|
245
251
|
var QueueSubspaceTags = Object.freeze({
|
|
246
252
|
DATA: "data",
|
|
247
253
|
TRACE: "trace"
|
|
248
254
|
});
|
|
249
255
|
var DXN = class _DXN {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
}
|
|
256
|
+
// TODO(burdon): Rename to DXN (i.e., DXN.DXN).
|
|
257
|
+
// TODO(dmaretskyi): Should this be a transformation into the DXN type?
|
|
258
|
+
static Schema = Schema3.NonEmptyString.pipe(
|
|
259
|
+
Schema3.pattern(/^dxn:([^:]+):(?:[^:]+:?)+[^:]$/),
|
|
260
|
+
// TODO(dmaretskyi): To set the format we need to move the annotation IDs out of the echo-schema package.
|
|
261
|
+
// FormatAnnotation.set(TypeFormat.DXN),
|
|
262
|
+
Schema3.annotations({
|
|
263
|
+
title: "DXN",
|
|
264
|
+
description: "DXN URI",
|
|
265
|
+
examples: [
|
|
266
|
+
"dxn:type:com.example.type.my-type",
|
|
267
|
+
"dxn:echo:@:01J00J9B45YHYSGZQTQMSKMGJ6"
|
|
268
|
+
]
|
|
269
|
+
})
|
|
270
|
+
);
|
|
266
271
|
static hash(dxn) {
|
|
267
272
|
return dxn.toString();
|
|
268
273
|
}
|
|
269
|
-
|
|
274
|
+
/**
|
|
275
|
+
* Kind constants.
|
|
276
|
+
*/
|
|
277
|
+
static kind = Object.freeze({
|
|
270
278
|
/**
|
|
271
|
-
*
|
|
279
|
+
* dxn:type:<type_name>[:<version>]
|
|
272
280
|
*/
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
});
|
|
293
|
-
}
|
|
294
|
-
get kind() {
|
|
295
|
-
return this.#kind;
|
|
296
|
-
}
|
|
281
|
+
TYPE: "type",
|
|
282
|
+
/**
|
|
283
|
+
* dxn:echo:<space_id>:<echo_id>
|
|
284
|
+
* dxn:echo:@:<echo_id>
|
|
285
|
+
*/
|
|
286
|
+
// TODO(burdon): Rename to OBJECT? (BREAKING CHANGE to update "echo").
|
|
287
|
+
// TODO(burdon): Add separate Kind for space?
|
|
288
|
+
ECHO: "echo",
|
|
289
|
+
/**
|
|
290
|
+
* The subspace tag enables us to partition queues by usage within the context of a space.
|
|
291
|
+
* dxn:queue:<subspace_tag>:<space_id>:<queue_id>[:object_id]
|
|
292
|
+
* dxn:queue:data:BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE:01J00J9B45YHYSGZQTQMSKMGJ6
|
|
293
|
+
* dxn:queue:trace:BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE:01J00J9B45YHYSGZQTQMSKMGJ6
|
|
294
|
+
*/
|
|
295
|
+
QUEUE: "queue"
|
|
296
|
+
});
|
|
297
|
+
/**
|
|
298
|
+
* Exactly equals.
|
|
299
|
+
*/
|
|
297
300
|
static equals(a, b) {
|
|
298
301
|
return a.kind === b.kind && a.parts.length === b.parts.length && a.parts.every((part, i) => part === b.parts[i]);
|
|
299
302
|
}
|
|
303
|
+
static equalsEchoId(a, b) {
|
|
304
|
+
const a1 = a.asEchoDXN();
|
|
305
|
+
const b1 = b.asEchoDXN();
|
|
306
|
+
return !!a1 && !!b1 && a1.echoId === b1.echoId;
|
|
307
|
+
}
|
|
300
308
|
// TODO(burdon): Rename isValid.
|
|
301
309
|
static isDXNString(dxn) {
|
|
302
310
|
return dxn.startsWith("dxn:");
|
|
@@ -320,12 +328,12 @@ var DXN = class _DXN {
|
|
|
320
328
|
static tryParse(dxn) {
|
|
321
329
|
try {
|
|
322
330
|
return _DXN.parse(dxn);
|
|
323
|
-
} catch
|
|
331
|
+
} catch {
|
|
324
332
|
return void 0;
|
|
325
333
|
}
|
|
326
334
|
}
|
|
327
335
|
/**
|
|
328
|
-
* @example `dxn:type:example.
|
|
336
|
+
* @example `dxn:type:com.example.type.person`
|
|
329
337
|
*/
|
|
330
338
|
static fromTypename(typename) {
|
|
331
339
|
return new _DXN(_DXN.kind.TYPE, [
|
|
@@ -333,7 +341,7 @@ var DXN = class _DXN {
|
|
|
333
341
|
]);
|
|
334
342
|
}
|
|
335
343
|
/**
|
|
336
|
-
* @example `dxn:type:example.
|
|
344
|
+
* @example `dxn:type:com.example.type.person:0.1.0`
|
|
337
345
|
*/
|
|
338
346
|
// TODO(dmaretskyi): Consider using @ as the version separator.
|
|
339
347
|
static fromTypenameAndVersion(typename, version) {
|
|
@@ -343,43 +351,30 @@ var DXN = class _DXN {
|
|
|
343
351
|
]);
|
|
344
352
|
}
|
|
345
353
|
/**
|
|
354
|
+
* @example `dxn:echo:BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE:01J00J9B45YHYSGZQTQMSKMGJ6`
|
|
355
|
+
*/
|
|
356
|
+
static fromSpaceAndObjectId(spaceId, objectId) {
|
|
357
|
+
assertArgument(SpaceId.isValid(spaceId), `Invalid space ID: ${spaceId}`);
|
|
358
|
+
assertArgument(ObjectId.isValid(objectId), "objectId", `Invalid object ID: ${objectId}`);
|
|
359
|
+
return new _DXN(_DXN.kind.ECHO, [
|
|
360
|
+
spaceId,
|
|
361
|
+
objectId
|
|
362
|
+
]);
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
346
365
|
* @example `dxn:echo:@:01J00J9B45YHYSGZQTQMSKMGJ6`
|
|
347
366
|
*/
|
|
348
367
|
static fromLocalObjectId(id) {
|
|
349
|
-
assertArgument(ObjectId.isValid(id), `Invalid object ID: ${id}`);
|
|
368
|
+
assertArgument(ObjectId.isValid(id), "id", `Invalid object ID: ${id}`);
|
|
350
369
|
return new _DXN(_DXN.kind.ECHO, [
|
|
351
370
|
LOCAL_SPACE_TAG,
|
|
352
371
|
id
|
|
353
372
|
]);
|
|
354
373
|
}
|
|
355
374
|
static fromQueue(subspaceTag, spaceId, queueId, objectId) {
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
S: this,
|
|
360
|
-
A: [
|
|
361
|
-
"SpaceId.isValid(spaceId)",
|
|
362
|
-
""
|
|
363
|
-
]
|
|
364
|
-
});
|
|
365
|
-
invariant2(ObjectId.isValid(queueId), void 0, {
|
|
366
|
-
F: __dxlog_file2,
|
|
367
|
-
L: 152,
|
|
368
|
-
S: this,
|
|
369
|
-
A: [
|
|
370
|
-
"ObjectId.isValid(queueId)",
|
|
371
|
-
""
|
|
372
|
-
]
|
|
373
|
-
});
|
|
374
|
-
invariant2(!objectId || ObjectId.isValid(objectId), void 0, {
|
|
375
|
-
F: __dxlog_file2,
|
|
376
|
-
L: 153,
|
|
377
|
-
S: this,
|
|
378
|
-
A: [
|
|
379
|
-
"!objectId || ObjectId.isValid(objectId)",
|
|
380
|
-
""
|
|
381
|
-
]
|
|
382
|
-
});
|
|
375
|
+
assertArgument(SpaceId.isValid(spaceId), `Invalid space ID: ${spaceId}`);
|
|
376
|
+
assertArgument(ObjectId.isValid(queueId), "queueId", `Invalid queue ID: ${queueId}`);
|
|
377
|
+
assertArgument(!objectId || ObjectId.isValid(objectId), "objectId", `Invalid object ID: ${objectId}`);
|
|
383
378
|
return new _DXN(_DXN.kind.QUEUE, [
|
|
384
379
|
subspaceTag,
|
|
385
380
|
spaceId,
|
|
@@ -392,33 +387,17 @@ var DXN = class _DXN {
|
|
|
392
387
|
#kind;
|
|
393
388
|
#parts;
|
|
394
389
|
constructor(kind, parts) {
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
L: 162,
|
|
398
|
-
S: this,
|
|
399
|
-
A: [
|
|
400
|
-
"parts.length > 0",
|
|
401
|
-
""
|
|
402
|
-
]
|
|
403
|
-
});
|
|
404
|
-
invariant2(parts.every((part) => typeof part === "string" && part.length > 0 && part.indexOf(":") === -1), void 0, {
|
|
405
|
-
F: __dxlog_file2,
|
|
406
|
-
L: 163,
|
|
407
|
-
S: this,
|
|
408
|
-
A: [
|
|
409
|
-
"parts.every((part) => typeof part === 'string' && part.length > 0 && part.indexOf(':') === -1)",
|
|
410
|
-
""
|
|
411
|
-
]
|
|
412
|
-
});
|
|
390
|
+
assertArgument(parts.length > 0, "parts", `Invalid DXN: ${parts}`);
|
|
391
|
+
assertArgument(parts.every((part) => typeof part === "string" && part.length > 0 && part.indexOf(":") === -1), "parts", `Invalid DXN: ${parts}`);
|
|
413
392
|
switch (kind) {
|
|
414
393
|
case _DXN.kind.TYPE:
|
|
415
394
|
if (parts.length > 2) {
|
|
416
|
-
throw new Error(
|
|
395
|
+
throw new Error("Invalid DXN.kind.TYPE");
|
|
417
396
|
}
|
|
418
397
|
break;
|
|
419
398
|
case _DXN.kind.ECHO:
|
|
420
399
|
if (parts.length !== 2) {
|
|
421
|
-
throw new Error(
|
|
400
|
+
throw new Error("Invalid DXN.kind.ECHO");
|
|
422
401
|
}
|
|
423
402
|
break;
|
|
424
403
|
}
|
|
@@ -453,22 +432,20 @@ var DXN = class _DXN {
|
|
|
453
432
|
}
|
|
454
433
|
};
|
|
455
434
|
}
|
|
435
|
+
get kind() {
|
|
436
|
+
return this.#kind;
|
|
437
|
+
}
|
|
456
438
|
get parts() {
|
|
457
439
|
return this.#parts;
|
|
458
440
|
}
|
|
459
441
|
// TODO(burdon): Should getters fail?
|
|
460
442
|
get typename() {
|
|
461
|
-
invariant2(this.#kind === _DXN.kind.TYPE
|
|
462
|
-
F: __dxlog_file2,
|
|
463
|
-
L: 218,
|
|
464
|
-
S: this,
|
|
465
|
-
A: [
|
|
466
|
-
"this.#kind === DXN.kind.TYPE",
|
|
467
|
-
""
|
|
468
|
-
]
|
|
469
|
-
});
|
|
443
|
+
invariant2(this.#kind === _DXN.kind.TYPE);
|
|
470
444
|
return this.#parts[0];
|
|
471
445
|
}
|
|
446
|
+
equals(other) {
|
|
447
|
+
return _DXN.equals(this, other);
|
|
448
|
+
}
|
|
472
449
|
hasTypenameOf(typename) {
|
|
473
450
|
return this.#kind === _DXN.kind.TYPE && this.#parts.length === 1 && this.#parts[0] === typename;
|
|
474
451
|
}
|
|
@@ -493,6 +470,7 @@ var DXN = class _DXN {
|
|
|
493
470
|
const [spaceId, echoId] = this.#parts;
|
|
494
471
|
return {
|
|
495
472
|
spaceId: spaceId === LOCAL_SPACE_TAG ? void 0 : spaceId,
|
|
473
|
+
// TODO(burdon): objectId.
|
|
496
474
|
echoId
|
|
497
475
|
};
|
|
498
476
|
}
|
|
@@ -511,45 +489,29 @@ var DXN = class _DXN {
|
|
|
511
489
|
objectId
|
|
512
490
|
};
|
|
513
491
|
}
|
|
492
|
+
/**
|
|
493
|
+
* Produces a new DXN with the given parts appended.
|
|
494
|
+
*/
|
|
495
|
+
extend(parts) {
|
|
496
|
+
return new _DXN(this.#kind, [
|
|
497
|
+
...this.#parts,
|
|
498
|
+
...parts
|
|
499
|
+
]);
|
|
500
|
+
}
|
|
514
501
|
};
|
|
515
502
|
|
|
516
503
|
// src/identity-did.ts
|
|
517
504
|
var import_base32_decode2 = __toESM(require_base32_decode(), 1);
|
|
518
505
|
import { invariant as invariant3 } from "@dxos/invariant";
|
|
519
|
-
var __dxlog_file3 = "/__w/dxos/dxos/packages/common/keys/src/identity-did.ts";
|
|
520
506
|
var IdentityDid = Object.freeze({
|
|
521
507
|
byteLength: 20,
|
|
522
508
|
encode: (value) => {
|
|
523
|
-
invariant3(value instanceof Uint8Array, "Invalid type"
|
|
524
|
-
|
|
525
|
-
L: 22,
|
|
526
|
-
S: void 0,
|
|
527
|
-
A: [
|
|
528
|
-
"value instanceof Uint8Array",
|
|
529
|
-
"'Invalid type'"
|
|
530
|
-
]
|
|
531
|
-
});
|
|
532
|
-
invariant3(value.length === IdentityDid.byteLength, "Invalid length", {
|
|
533
|
-
F: __dxlog_file3,
|
|
534
|
-
L: 23,
|
|
535
|
-
S: void 0,
|
|
536
|
-
A: [
|
|
537
|
-
"value.length === IdentityDid.byteLength",
|
|
538
|
-
"'Invalid length'"
|
|
539
|
-
]
|
|
540
|
-
});
|
|
509
|
+
invariant3(value instanceof Uint8Array, "Invalid type");
|
|
510
|
+
invariant3(value.length === IdentityDid.byteLength, "Invalid length");
|
|
541
511
|
return DID_PREFIX + MULTIBASE_PREFIX2 + base32Encode(value, "RFC4648");
|
|
542
512
|
},
|
|
543
513
|
decode: (value) => {
|
|
544
|
-
invariant3(value.startsWith(DID_PREFIX + MULTIBASE_PREFIX2), "Invalid multibase32 encoding"
|
|
545
|
-
F: __dxlog_file3,
|
|
546
|
-
L: 28,
|
|
547
|
-
S: void 0,
|
|
548
|
-
A: [
|
|
549
|
-
"value.startsWith(DID_PREFIX + MULTIBASE_PREFIX)",
|
|
550
|
-
"'Invalid multibase32 encoding'"
|
|
551
|
-
]
|
|
552
|
-
});
|
|
514
|
+
invariant3(value.startsWith(DID_PREFIX + MULTIBASE_PREFIX2), "Invalid multibase32 encoding");
|
|
553
515
|
return new Uint8Array((0, import_base32_decode2.default)(value.slice(10), "RFC4648"));
|
|
554
516
|
},
|
|
555
517
|
isValid: (value) => {
|
|
@@ -567,29 +529,19 @@ var ENCODED_LENGTH2 = 42;
|
|
|
567
529
|
var import_base32_decode3 = __toESM(require_base32_decode(), 1);
|
|
568
530
|
import { devtoolsFormatter as devtoolsFormatter2, equalsSymbol, inspectCustom as inspectCustom2, truncateKey } from "@dxos/debug";
|
|
569
531
|
import { invariant as invariant4 } from "@dxos/invariant";
|
|
570
|
-
var __dxlog_file4 = "/__w/dxos/dxos/packages/common/keys/src/public-key.ts";
|
|
571
532
|
var PUBLIC_KEY_LENGTH = 32;
|
|
572
533
|
var SECRET_KEY_LENGTH = 64;
|
|
573
534
|
var isLikeArrayBuffer = (value) => typeof value === "object" && value !== null && Object.getPrototypeOf(value).constructor.name === "ArrayBuffer";
|
|
574
535
|
var PublicKey = class _PublicKey {
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
}
|
|
536
|
+
_value;
|
|
537
|
+
static ZERO = _PublicKey.from("00".repeat(PUBLIC_KEY_LENGTH));
|
|
578
538
|
/**
|
|
579
539
|
* Creates new instance of PublicKey automatically determining the input format.
|
|
580
540
|
* @param source A Buffer, or Uint8Array, or hex encoded string, or something with an `asUint8Array` method on it
|
|
581
541
|
* @returns PublicKey
|
|
582
542
|
*/
|
|
583
543
|
static from(source) {
|
|
584
|
-
invariant4(source
|
|
585
|
-
F: __dxlog_file4,
|
|
586
|
-
L: 49,
|
|
587
|
-
S: this,
|
|
588
|
-
A: [
|
|
589
|
-
"source",
|
|
590
|
-
""
|
|
591
|
-
]
|
|
592
|
-
});
|
|
544
|
+
invariant4(source);
|
|
593
545
|
if (source instanceof _PublicKey) {
|
|
594
546
|
return source;
|
|
595
547
|
} else if (source instanceof Buffer) {
|
|
@@ -673,15 +625,7 @@ var PublicKey = class _PublicKey {
|
|
|
673
625
|
* @deprecated All keys should be represented as instances of PublicKey.
|
|
674
626
|
*/
|
|
675
627
|
static bufferize(str) {
|
|
676
|
-
invariant4(typeof str === "string", "Invalid type"
|
|
677
|
-
F: __dxlog_file4,
|
|
678
|
-
L: 152,
|
|
679
|
-
S: this,
|
|
680
|
-
A: [
|
|
681
|
-
"typeof str === 'string'",
|
|
682
|
-
"'Invalid type'"
|
|
683
|
-
]
|
|
684
|
-
});
|
|
628
|
+
invariant4(typeof str === "string", "Invalid type");
|
|
685
629
|
const buffer = Buffer.from(str, "hex");
|
|
686
630
|
return buffer;
|
|
687
631
|
}
|
|
@@ -696,15 +640,7 @@ var PublicKey = class _PublicKey {
|
|
|
696
640
|
} else if (key instanceof Uint8Array) {
|
|
697
641
|
key = Buffer.from(key.buffer, key.byteOffset, key.byteLength);
|
|
698
642
|
}
|
|
699
|
-
invariant4(key instanceof Buffer, "Invalid type"
|
|
700
|
-
F: __dxlog_file4,
|
|
701
|
-
L: 171,
|
|
702
|
-
S: this,
|
|
703
|
-
A: [
|
|
704
|
-
"key instanceof Buffer",
|
|
705
|
-
"'Invalid type'"
|
|
706
|
-
]
|
|
707
|
-
});
|
|
643
|
+
invariant4(key instanceof Buffer, "Invalid type");
|
|
708
644
|
return key.toString("hex");
|
|
709
645
|
}
|
|
710
646
|
/**
|
|
@@ -715,15 +651,7 @@ var PublicKey = class _PublicKey {
|
|
|
715
651
|
return key.toHex();
|
|
716
652
|
}
|
|
717
653
|
static fromMultibase32(encoded) {
|
|
718
|
-
invariant4(encoded.startsWith("B"), "Invalid multibase32 encoding"
|
|
719
|
-
F: __dxlog_file4,
|
|
720
|
-
L: 184,
|
|
721
|
-
S: this,
|
|
722
|
-
A: [
|
|
723
|
-
"encoded.startsWith('B')",
|
|
724
|
-
"'Invalid multibase32 encoding'"
|
|
725
|
-
]
|
|
726
|
-
});
|
|
654
|
+
invariant4(encoded.startsWith("B"), "Invalid multibase32 encoding");
|
|
727
655
|
return new _PublicKey(new Uint8Array((0, import_base32_decode3.default)(encoded.slice(1), "RFC4648")));
|
|
728
656
|
}
|
|
729
657
|
constructor(_value) {
|
|
@@ -750,7 +678,7 @@ var PublicKey = class _PublicKey {
|
|
|
750
678
|
toMultibase32() {
|
|
751
679
|
return "B" + base32Encode(this._value, "RFC4648");
|
|
752
680
|
}
|
|
753
|
-
truncate(length
|
|
681
|
+
truncate(length) {
|
|
754
682
|
return truncateKey(this, length);
|
|
755
683
|
}
|
|
756
684
|
asBuffer() {
|
|
@@ -856,6 +784,7 @@ var PublicKey = class _PublicKey {
|
|
|
856
784
|
};
|
|
857
785
|
export {
|
|
858
786
|
DXN,
|
|
787
|
+
DXN_ECHO_REGEXP,
|
|
859
788
|
IdentityDid,
|
|
860
789
|
LOCAL_SPACE_TAG,
|
|
861
790
|
ObjectId,
|
|
@@ -863,6 +792,7 @@ export {
|
|
|
863
792
|
PublicKey,
|
|
864
793
|
QueueSubspaceTags,
|
|
865
794
|
SECRET_KEY_LENGTH,
|
|
795
|
+
SimplePRNG,
|
|
866
796
|
SpaceId
|
|
867
797
|
};
|
|
868
798
|
//# sourceMappingURL=index.mjs.map
|