@dxos/keys 0.8.3 → 0.8.4-main.16b68245aa

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.
@@ -44,9 +44,9 @@ var init_inject_globals = __esm({
44
44
  }
45
45
  });
46
46
 
47
- // node_modules/.pnpm/base32-decode@1.0.0/node_modules/base32-decode/index.js
47
+ // ../../../node_modules/.pnpm/base32-decode@1.0.0/node_modules/base32-decode/index.js
48
48
  var require_base32_decode = __commonJS({
49
- "node_modules/.pnpm/base32-decode@1.0.0/node_modules/base32-decode/index.js"(exports, module) {
49
+ "../../../node_modules/.pnpm/base32-decode@1.0.0/node_modules/base32-decode/index.js"(exports, module) {
50
50
  init_inject_globals();
51
51
  var RFC46482 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
52
52
  var RFC4648_HEX2 = "0123456789ABCDEFGHIJKLMNOPQRSTUV";
@@ -95,45 +95,86 @@ var require_base32_decode = __commonJS({
95
95
  }
96
96
  });
97
97
 
98
- // packages/common/keys/src/index.ts
98
+ // src/index.ts
99
99
  init_inject_globals();
100
100
 
101
- // packages/common/keys/src/dxn.ts
101
+ // src/dxn.ts
102
102
  init_inject_globals();
103
- import { Schema as Schema3 } from "effect";
103
+ import * as Schema3 from "effect/Schema";
104
104
  import { devtoolsFormatter, inspectCustom } from "@dxos/debug";
105
- import { invariant as invariant2 } from "@dxos/invariant";
105
+ import { assertArgument, invariant as invariant2 } from "@dxos/invariant";
106
106
 
107
- // packages/common/keys/src/object-id.ts
107
+ // src/object-id.ts
108
108
  init_inject_globals();
109
- import { Schema } from "effect";
110
- import { ulid } from "ulidx";
109
+ import * as Schema from "effect/Schema";
110
+ import { monotonicFactory } from "ulidx";
111
111
  var ObjectIdSchema = Schema.String.pipe(Schema.pattern(/^[0-7][0-9A-HJKMNP-TV-Z]{25}$/i)).annotations({
112
- description: "a Universally Unique Lexicographically Sortable Identifier",
112
+ description: "A Universally Unique Lexicographically Sortable Identifier",
113
113
  pattern: "^[0-7][0-9A-HJKMNP-TV-Z]{25}$"
114
114
  });
115
115
  var ObjectId = class extends ObjectIdSchema {
116
+ static #factory = monotonicFactory();
117
+ static #seedTime = void 0;
116
118
  static isValid(id) {
117
119
  try {
118
120
  Schema.decodeSync(ObjectId)(id);
119
121
  return true;
120
- } catch (err) {
122
+ } catch {
121
123
  return false;
122
124
  }
123
125
  }
124
126
  static random() {
125
- return ulid();
127
+ return this.#factory(this.#seedTime);
128
+ }
129
+ static dangerouslyDisableRandomness() {
130
+ this.#factory = monotonicFactory(makeTestPRNG());
131
+ this.#seedTime = (/* @__PURE__ */ new Date("2025-01-01")).getTime();
132
+ }
133
+ };
134
+ var makeTestPRNG = () => {
135
+ const rng = new SimplePRNG();
136
+ return () => {
137
+ return rng.next();
138
+ };
139
+ };
140
+ var SimplePRNG = class _SimplePRNG {
141
+ #seed;
142
+ // LCG parameters (from Numerical Recipes)
143
+ static #a = 1664525;
144
+ static #c = 1013904223;
145
+ static #m = Math.pow(2, 32);
146
+ /**
147
+ * Creates a new PRNG instance.
148
+ * @param seed - Initial seed value. If not provided, uses 0.
149
+ */
150
+ constructor(seed = 0) {
151
+ this.#seed = seed;
152
+ }
153
+ /**
154
+ * Generates the next pseudo-random number in the range [0, 1).
155
+ * @returns A pseudo-random number between 0 (inclusive) and 1 (exclusive).
156
+ */
157
+ next() {
158
+ this.#seed = (_SimplePRNG.#a * this.#seed + _SimplePRNG.#c) % _SimplePRNG.#m;
159
+ return this.#seed / _SimplePRNG.#m;
160
+ }
161
+ /**
162
+ * Resets the generator with a new seed.
163
+ * @param seed - New seed value.
164
+ */
165
+ reset(seed) {
166
+ this.#seed = seed;
126
167
  }
127
168
  };
128
169
 
129
- // packages/common/keys/src/space-id.ts
170
+ // src/space-id.ts
130
171
  init_inject_globals();
131
172
  var import_base32_decode = __toESM(require_base32_decode(), 1);
132
173
 
133
- // node_modules/.pnpm/base32-encode@2.0.0/node_modules/base32-encode/index.js
174
+ // ../../../node_modules/.pnpm/base32-encode@2.0.0/node_modules/base32-encode/index.js
134
175
  init_inject_globals();
135
176
 
136
- // node_modules/.pnpm/to-data-view@2.0.0/node_modules/to-data-view/index.js
177
+ // ../../../node_modules/.pnpm/to-data-view@2.0.0/node_modules/to-data-view/index.js
137
178
  init_inject_globals();
138
179
  function toDataView(data) {
139
180
  if (data instanceof Int8Array || data instanceof Uint8Array || data instanceof Uint8ClampedArray) {
@@ -145,7 +186,7 @@ function toDataView(data) {
145
186
  throw new TypeError("Expected `data` to be an ArrayBuffer, Buffer, Int8Array, Uint8Array or Uint8ClampedArray");
146
187
  }
147
188
 
148
- // node_modules/.pnpm/base32-encode@2.0.0/node_modules/base32-encode/index.js
189
+ // ../../../node_modules/.pnpm/base32-encode@2.0.0/node_modules/base32-encode/index.js
149
190
  var RFC4648 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
150
191
  var RFC4648_HEX = "0123456789ABCDEFGHIJKLMNOPQRSTUV";
151
192
  var CROCKFORD = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
@@ -193,11 +234,11 @@ function base32Encode(data, variant, options) {
193
234
  return output;
194
235
  }
195
236
 
196
- // packages/common/keys/src/space-id.ts
197
- import { Schema as Schema2 } from "effect";
237
+ // src/space-id.ts
238
+ import * as Schema2 from "effect/Schema";
198
239
  import { invariant } from "@dxos/invariant";
199
240
 
200
- // packages/common/keys/src/random-bytes.ts
241
+ // src/random-bytes.ts
201
242
  init_inject_globals();
202
243
  var randomBytes = (length) => {
203
244
  const webCrypto = globalThis.crypto ?? __require("@dxos/node-std/crypto").webcrypto;
@@ -206,122 +247,89 @@ var randomBytes = (length) => {
206
247
  return bytes;
207
248
  };
208
249
 
209
- // packages/common/keys/src/space-id.ts
210
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/common/keys/src/space-id.ts";
250
+ // src/space-id.ts
211
251
  var MULTIBASE_PREFIX = "B";
212
252
  var ENCODED_LENGTH = 33;
213
253
  var isValid = (value) => {
214
254
  return typeof value === "string" && value.startsWith(MULTIBASE_PREFIX) && value.length === ENCODED_LENGTH;
215
255
  };
216
256
  var SpaceId = class extends Schema2.String.pipe(Schema2.filter(isValid)) {
217
- static {
218
- this.byteLength = 20;
219
- }
220
- static {
221
- this.encode = (value) => {
222
- invariant(value instanceof Uint8Array, "Invalid type", {
223
- F: __dxlog_file,
224
- L: 43,
225
- S: this,
226
- A: [
227
- "value instanceof Uint8Array",
228
- "'Invalid type'"
229
- ]
230
- });
231
- invariant(value.length === SpaceId.byteLength, "Invalid length", {
232
- F: __dxlog_file,
233
- L: 44,
234
- S: this,
235
- A: [
236
- "value.length === SpaceId.byteLength",
237
- "'Invalid length'"
238
- ]
239
- });
240
- return MULTIBASE_PREFIX + base32Encode(value, "RFC4648");
241
- };
242
- }
243
- static {
244
- this.decode = (value) => {
245
- invariant(value.startsWith(MULTIBASE_PREFIX), "Invalid multibase32 encoding", {
246
- F: __dxlog_file,
247
- L: 49,
248
- S: this,
249
- A: [
250
- "value.startsWith(MULTIBASE_PREFIX)",
251
- "'Invalid multibase32 encoding'"
252
- ]
253
- });
254
- return new Uint8Array((0, import_base32_decode.default)(value.slice(1), "RFC4648"));
255
- };
256
- }
257
- static {
258
- this.isValid = isValid;
259
- }
260
- static {
261
- this.random = () => {
262
- return SpaceId.encode(randomBytes(SpaceId.byteLength));
263
- };
264
- }
257
+ static byteLength = 20;
258
+ static encode = (value) => {
259
+ invariant(value instanceof Uint8Array, "Invalid type");
260
+ invariant(value.length === SpaceId.byteLength, "Invalid length");
261
+ return MULTIBASE_PREFIX + base32Encode(value, "RFC4648");
262
+ };
263
+ static decode = (value) => {
264
+ invariant(value.startsWith(MULTIBASE_PREFIX), "Invalid multibase32 encoding");
265
+ return new Uint8Array((0, import_base32_decode.default)(value.slice(1), "RFC4648"));
266
+ };
267
+ static isValid = isValid;
268
+ static random = () => {
269
+ return SpaceId.encode(randomBytes(SpaceId.byteLength));
270
+ };
265
271
  };
266
272
 
267
- // packages/common/keys/src/dxn.ts
268
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/common/keys/src/dxn.ts";
273
+ // src/dxn.ts
269
274
  var LOCAL_SPACE_TAG = "@";
275
+ var DXN_ECHO_REGEXP = /@(dxn:[a-zA-Z0-p:@]+)/;
270
276
  var QueueSubspaceTags = Object.freeze({
271
277
  DATA: "data",
272
278
  TRACE: "trace"
273
279
  });
274
280
  var DXN = class _DXN {
275
- static {
276
- // TODO(dmaretskyi): Should this be a transformation into the DXN type?
277
- this.Schema = Schema3.NonEmptyString.pipe(
278
- Schema3.pattern(/^dxn:([^:]+):(?:[^:]+:?)+[^:]$/),
279
- // TODO(dmaretskyi): To set the format we need to move the annotation IDs out of the echo-schema package.
280
- // FormatAnnotation.set(FormatEnum.DXN),
281
- Schema3.annotations({
282
- title: "DXN",
283
- description: "DXN URI",
284
- examples: [
285
- "dxn:type:example.com/type/MyType",
286
- "dxn:echo:@:01J00J9B45YHYSGZQTQMSKMGJ6"
287
- ]
288
- })
289
- );
290
- }
281
+ // TODO(burdon): Rename to DXN (i.e., DXN.DXN).
282
+ // TODO(dmaretskyi): Should this be a transformation into the DXN type?
283
+ static Schema = Schema3.NonEmptyString.pipe(
284
+ Schema3.pattern(/^dxn:([^:]+):(?:[^:]+:?)+[^:]$/),
285
+ // TODO(dmaretskyi): To set the format we need to move the annotation IDs out of the echo-schema package.
286
+ // FormatAnnotation.set(TypeFormat.DXN),
287
+ Schema3.annotations({
288
+ title: "DXN",
289
+ description: "DXN URI",
290
+ examples: [
291
+ "dxn:type:com.example.type.my-type",
292
+ "dxn:echo:@:01J00J9B45YHYSGZQTQMSKMGJ6"
293
+ ]
294
+ })
295
+ );
291
296
  static hash(dxn) {
292
297
  return dxn.toString();
293
298
  }
294
- static {
299
+ /**
300
+ * Kind constants.
301
+ */
302
+ static kind = Object.freeze({
295
303
  /**
296
- * Kind constants.
304
+ * dxn:type:<type_name>[:<version>]
297
305
  */
298
- this.kind = Object.freeze({
299
- /**
300
- * dxn:type:<type name>[:<version>]
301
- */
302
- TYPE: "type",
303
- /**
304
- * dxn:echo:<space id>:<echo id>
305
- * dxn:echo:@:<echo id>
306
- */
307
- // TODO(burdon): Rename to OBJECT? (BREAKING CHANGE).
308
- // TODO(burdon): Add separate Kind for space.
309
- ECHO: "echo",
310
- /**
311
- * The subspace tag enables us to partition queues by usage within the context of a space.
312
- * dxn:queue:<subspace_tag>:<space_id>:<queue_id>[:object_id]
313
- * dxn:queue:data:BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE:01J00J9B45YHYSGZQTQMSKMGJ6
314
- * dxn:queue:trace:BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE:01J00J9B45YHYSGZQTQMSKMGJ6
315
- */
316
- QUEUE: "queue"
317
- });
318
- }
319
- get kind() {
320
- return this.#kind;
321
- }
306
+ TYPE: "type",
307
+ /**
308
+ * dxn:echo:<space_id>:<echo_id>
309
+ * dxn:echo:@:<echo_id>
310
+ */
311
+ // TODO(burdon): Rename to OBJECT? (BREAKING CHANGE to update "echo").
312
+ // TODO(burdon): Add separate Kind for space?
313
+ ECHO: "echo",
314
+ /**
315
+ * The subspace tag enables us to partition queues by usage within the context of a space.
316
+ * dxn:queue:<subspace_tag>:<space_id>:<queue_id>[:object_id]
317
+ * dxn:queue:data:BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE:01J00J9B45YHYSGZQTQMSKMGJ6
318
+ * dxn:queue:trace:BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE:01J00J9B45YHYSGZQTQMSKMGJ6
319
+ */
320
+ QUEUE: "queue"
321
+ });
322
+ /**
323
+ * Exactly equals.
324
+ */
322
325
  static equals(a, b) {
323
326
  return a.kind === b.kind && a.parts.length === b.parts.length && a.parts.every((part, i) => part === b.parts[i]);
324
327
  }
328
+ static equalsEchoId(a, b) {
329
+ const a1 = a.asEchoDXN();
330
+ const b1 = b.asEchoDXN();
331
+ return !!a1 && !!b1 && a1.echoId === b1.echoId;
332
+ }
325
333
  // TODO(burdon): Rename isValid.
326
334
  static isDXNString(dxn) {
327
335
  return dxn.startsWith("dxn:");
@@ -345,12 +353,12 @@ var DXN = class _DXN {
345
353
  static tryParse(dxn) {
346
354
  try {
347
355
  return _DXN.parse(dxn);
348
- } catch (error) {
356
+ } catch {
349
357
  return void 0;
350
358
  }
351
359
  }
352
360
  /**
353
- * @example `dxn:type:example.com/type/Contact`
361
+ * @example `dxn:type:com.example.type.person`
354
362
  */
355
363
  static fromTypename(typename) {
356
364
  return new _DXN(_DXN.kind.TYPE, [
@@ -358,7 +366,7 @@ var DXN = class _DXN {
358
366
  ]);
359
367
  }
360
368
  /**
361
- * @example `dxn:type:example.com/type/Contact:0.1.0`
369
+ * @example `dxn:type:com.example.type.person:0.1.0`
362
370
  */
363
371
  // TODO(dmaretskyi): Consider using @ as the version separator.
364
372
  static fromTypenameAndVersion(typename, version) {
@@ -368,42 +376,30 @@ var DXN = class _DXN {
368
376
  ]);
369
377
  }
370
378
  /**
379
+ * @example `dxn:echo:BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE:01J00J9B45YHYSGZQTQMSKMGJ6`
380
+ */
381
+ static fromSpaceAndObjectId(spaceId, objectId) {
382
+ assertArgument(SpaceId.isValid(spaceId), `Invalid space ID: ${spaceId}`);
383
+ assertArgument(ObjectId.isValid(objectId), "objectId", `Invalid object ID: ${objectId}`);
384
+ return new _DXN(_DXN.kind.ECHO, [
385
+ spaceId,
386
+ objectId
387
+ ]);
388
+ }
389
+ /**
371
390
  * @example `dxn:echo:@:01J00J9B45YHYSGZQTQMSKMGJ6`
372
391
  */
373
392
  static fromLocalObjectId(id) {
393
+ assertArgument(ObjectId.isValid(id), "id", `Invalid object ID: ${id}`);
374
394
  return new _DXN(_DXN.kind.ECHO, [
375
395
  LOCAL_SPACE_TAG,
376
396
  id
377
397
  ]);
378
398
  }
379
399
  static fromQueue(subspaceTag, spaceId, queueId, objectId) {
380
- invariant2(SpaceId.isValid(spaceId), void 0, {
381
- F: __dxlog_file2,
382
- L: 150,
383
- S: this,
384
- A: [
385
- "SpaceId.isValid(spaceId)",
386
- ""
387
- ]
388
- });
389
- invariant2(ObjectId.isValid(queueId), void 0, {
390
- F: __dxlog_file2,
391
- L: 151,
392
- S: this,
393
- A: [
394
- "ObjectId.isValid(queueId)",
395
- ""
396
- ]
397
- });
398
- invariant2(!objectId || ObjectId.isValid(objectId), void 0, {
399
- F: __dxlog_file2,
400
- L: 152,
401
- S: this,
402
- A: [
403
- "!objectId || ObjectId.isValid(objectId)",
404
- ""
405
- ]
406
- });
400
+ assertArgument(SpaceId.isValid(spaceId), `Invalid space ID: ${spaceId}`);
401
+ assertArgument(ObjectId.isValid(queueId), "queueId", `Invalid queue ID: ${queueId}`);
402
+ assertArgument(!objectId || ObjectId.isValid(objectId), "objectId", `Invalid object ID: ${objectId}`);
407
403
  return new _DXN(_DXN.kind.QUEUE, [
408
404
  subspaceTag,
409
405
  spaceId,
@@ -416,55 +412,65 @@ var DXN = class _DXN {
416
412
  #kind;
417
413
  #parts;
418
414
  constructor(kind, parts) {
419
- invariant2(parts.length > 0, void 0, {
420
- F: __dxlog_file2,
421
- L: 161,
422
- S: this,
423
- A: [
424
- "parts.length > 0",
425
- ""
426
- ]
427
- });
428
- invariant2(parts.every((part) => typeof part === "string" && part.length > 0 && part.indexOf(":") === -1), void 0, {
429
- F: __dxlog_file2,
430
- L: 162,
431
- S: this,
432
- A: [
433
- "parts.every((part) => typeof part === 'string' && part.length > 0 && part.indexOf(':') === -1)",
434
- ""
435
- ]
436
- });
415
+ assertArgument(parts.length > 0, "parts", `Invalid DXN: ${parts}`);
416
+ assertArgument(parts.every((part) => typeof part === "string" && part.length > 0 && part.indexOf(":") === -1), "parts", `Invalid DXN: ${parts}`);
437
417
  switch (kind) {
438
418
  case _DXN.kind.TYPE:
439
419
  if (parts.length > 2) {
440
- throw new Error('Invalid "type" DXN');
420
+ throw new Error("Invalid DXN.kind.TYPE");
441
421
  }
442
422
  break;
443
423
  case _DXN.kind.ECHO:
444
424
  if (parts.length !== 2) {
445
- throw new Error('Invalid "echo" DXN');
425
+ throw new Error("Invalid DXN.kind.ECHO");
446
426
  }
447
427
  break;
448
428
  }
449
429
  this.#kind = kind;
450
430
  this.#parts = parts;
451
431
  }
432
+ toString() {
433
+ return `dxn:${this.#kind}:${this.#parts.join(":")}`;
434
+ }
435
+ toJSON() {
436
+ return this.toString();
437
+ }
438
+ /**
439
+ * Used by Node.js to get textual representation of this object when it's printed with a `console.log` statement.
440
+ */
441
+ [inspectCustom](depth, options, inspectFn) {
442
+ const printControlCode = (code) => {
443
+ return `\x1B[${code}m`;
444
+ };
445
+ return printControlCode(inspectFn.colors.blueBright[0]) + this.toString() + printControlCode(inspectFn.colors.reset[0]);
446
+ }
447
+ get [devtoolsFormatter]() {
448
+ return {
449
+ header: () => {
450
+ return [
451
+ "span",
452
+ {
453
+ style: "font-weight: bold;"
454
+ },
455
+ this.toString()
456
+ ];
457
+ }
458
+ };
459
+ }
460
+ get kind() {
461
+ return this.#kind;
462
+ }
452
463
  get parts() {
453
464
  return this.#parts;
454
465
  }
455
466
  // TODO(burdon): Should getters fail?
456
467
  get typename() {
457
- invariant2(this.#kind === _DXN.kind.TYPE, void 0, {
458
- F: __dxlog_file2,
459
- L: 188,
460
- S: this,
461
- A: [
462
- "this.#kind === DXN.kind.TYPE",
463
- ""
464
- ]
465
- });
468
+ invariant2(this.#kind === _DXN.kind.TYPE);
466
469
  return this.#parts[0];
467
470
  }
471
+ equals(other) {
472
+ return _DXN.equals(this, other);
473
+ }
468
474
  hasTypenameOf(typename) {
469
475
  return this.#kind === _DXN.kind.TYPE && this.#parts.length === 1 && this.#parts[0] === typename;
470
476
  }
@@ -477,6 +483,7 @@ var DXN = class _DXN {
477
483
  }
478
484
  const [type, version] = this.#parts;
479
485
  return {
486
+ // TODO(wittjosiah): Should be `typename` for consistency.
480
487
  type,
481
488
  version
482
489
  };
@@ -488,6 +495,7 @@ var DXN = class _DXN {
488
495
  const [spaceId, echoId] = this.#parts;
489
496
  return {
490
497
  spaceId: spaceId === LOCAL_SPACE_TAG ? void 0 : spaceId,
498
+ // TODO(burdon): objectId.
491
499
  echoId
492
500
  };
493
501
  }
@@ -506,71 +514,30 @@ var DXN = class _DXN {
506
514
  objectId
507
515
  };
508
516
  }
509
- toString() {
510
- return `dxn:${this.#kind}:${this.#parts.join(":")}`;
511
- }
512
517
  /**
513
- * Used by Node.js to get textual representation of this object when it's printed with a `console.log` statement.
518
+ * Produces a new DXN with the given parts appended.
514
519
  */
515
- [inspectCustom](depth, options, inspectFn) {
516
- const printControlCode = (code) => {
517
- return `\x1B[${code}m`;
518
- };
519
- return printControlCode(inspectFn.colors.blueBright[0]) + this.toString() + printControlCode(inspectFn.colors.reset[0]);
520
- }
521
- get [devtoolsFormatter]() {
522
- return {
523
- header: () => {
524
- return [
525
- "span",
526
- {
527
- style: "font-weight: bold;"
528
- },
529
- this.toString()
530
- ];
531
- }
532
- };
520
+ extend(parts) {
521
+ return new _DXN(this.#kind, [
522
+ ...this.#parts,
523
+ ...parts
524
+ ]);
533
525
  }
534
526
  };
535
527
 
536
- // packages/common/keys/src/identity-did.ts
528
+ // src/identity-did.ts
537
529
  init_inject_globals();
538
530
  var import_base32_decode2 = __toESM(require_base32_decode(), 1);
539
531
  import { invariant as invariant3 } from "@dxos/invariant";
540
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/common/keys/src/identity-did.ts";
541
532
  var IdentityDid = Object.freeze({
542
533
  byteLength: 20,
543
534
  encode: (value) => {
544
- invariant3(value instanceof Uint8Array, "Invalid type", {
545
- F: __dxlog_file3,
546
- L: 22,
547
- S: void 0,
548
- A: [
549
- "value instanceof Uint8Array",
550
- "'Invalid type'"
551
- ]
552
- });
553
- invariant3(value.length === IdentityDid.byteLength, "Invalid length", {
554
- F: __dxlog_file3,
555
- L: 23,
556
- S: void 0,
557
- A: [
558
- "value.length === IdentityDid.byteLength",
559
- "'Invalid length'"
560
- ]
561
- });
535
+ invariant3(value instanceof Uint8Array, "Invalid type");
536
+ invariant3(value.length === IdentityDid.byteLength, "Invalid length");
562
537
  return DID_PREFIX + MULTIBASE_PREFIX2 + base32Encode(value, "RFC4648");
563
538
  },
564
539
  decode: (value) => {
565
- invariant3(value.startsWith(DID_PREFIX + MULTIBASE_PREFIX2), "Invalid multibase32 encoding", {
566
- F: __dxlog_file3,
567
- L: 28,
568
- S: void 0,
569
- A: [
570
- "value.startsWith(DID_PREFIX + MULTIBASE_PREFIX)",
571
- "'Invalid multibase32 encoding'"
572
- ]
573
- });
540
+ invariant3(value.startsWith(DID_PREFIX + MULTIBASE_PREFIX2), "Invalid multibase32 encoding");
574
541
  return new Uint8Array((0, import_base32_decode2.default)(value.slice(10), "RFC4648"));
575
542
  },
576
543
  isValid: (value) => {
@@ -584,34 +551,24 @@ var MULTIBASE_PREFIX2 = "B";
584
551
  var DID_PREFIX = "did:halo:";
585
552
  var ENCODED_LENGTH2 = 42;
586
553
 
587
- // packages/common/keys/src/public-key.ts
554
+ // src/public-key.ts
588
555
  init_inject_globals();
589
556
  var import_base32_decode3 = __toESM(require_base32_decode(), 1);
590
557
  import { devtoolsFormatter as devtoolsFormatter2, equalsSymbol, inspectCustom as inspectCustom2, truncateKey } from "@dxos/debug";
591
558
  import { invariant as invariant4 } from "@dxos/invariant";
592
- var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/common/keys/src/public-key.ts";
593
559
  var PUBLIC_KEY_LENGTH = 32;
594
560
  var SECRET_KEY_LENGTH = 64;
595
561
  var isLikeArrayBuffer = (value) => typeof value === "object" && value !== null && Object.getPrototypeOf(value).constructor.name === "ArrayBuffer";
596
562
  var PublicKey = class _PublicKey {
597
- static {
598
- this.ZERO = _PublicKey.from("00".repeat(PUBLIC_KEY_LENGTH));
599
- }
563
+ _value;
564
+ static ZERO = _PublicKey.from("00".repeat(PUBLIC_KEY_LENGTH));
600
565
  /**
601
566
  * Creates new instance of PublicKey automatically determining the input format.
602
567
  * @param source A Buffer, or Uint8Array, or hex encoded string, or something with an `asUint8Array` method on it
603
568
  * @returns PublicKey
604
569
  */
605
570
  static from(source) {
606
- invariant4(source, void 0, {
607
- F: __dxlog_file4,
608
- L: 49,
609
- S: this,
610
- A: [
611
- "source",
612
- ""
613
- ]
614
- });
571
+ invariant4(source);
615
572
  if (source instanceof _PublicKey) {
616
573
  return source;
617
574
  } else if (source instanceof Buffer2) {
@@ -695,15 +652,7 @@ var PublicKey = class _PublicKey {
695
652
  * @deprecated All keys should be represented as instances of PublicKey.
696
653
  */
697
654
  static bufferize(str) {
698
- invariant4(typeof str === "string", "Invalid type", {
699
- F: __dxlog_file4,
700
- L: 152,
701
- S: this,
702
- A: [
703
- "typeof str === 'string'",
704
- "'Invalid type'"
705
- ]
706
- });
655
+ invariant4(typeof str === "string", "Invalid type");
707
656
  const buffer = Buffer2.from(str, "hex");
708
657
  return buffer;
709
658
  }
@@ -718,15 +667,7 @@ var PublicKey = class _PublicKey {
718
667
  } else if (key instanceof Uint8Array) {
719
668
  key = Buffer2.from(key.buffer, key.byteOffset, key.byteLength);
720
669
  }
721
- invariant4(key instanceof Buffer2, "Invalid type", {
722
- F: __dxlog_file4,
723
- L: 171,
724
- S: this,
725
- A: [
726
- "key instanceof Buffer",
727
- "'Invalid type'"
728
- ]
729
- });
670
+ invariant4(key instanceof Buffer2, "Invalid type");
730
671
  return key.toString("hex");
731
672
  }
732
673
  /**
@@ -737,15 +678,7 @@ var PublicKey = class _PublicKey {
737
678
  return key.toHex();
738
679
  }
739
680
  static fromMultibase32(encoded) {
740
- invariant4(encoded.startsWith("B"), "Invalid multibase32 encoding", {
741
- F: __dxlog_file4,
742
- L: 184,
743
- S: this,
744
- A: [
745
- "encoded.startsWith('B')",
746
- "'Invalid multibase32 encoding'"
747
- ]
748
- });
681
+ invariant4(encoded.startsWith("B"), "Invalid multibase32 encoding");
749
682
  return new _PublicKey(new Uint8Array((0, import_base32_decode3.default)(encoded.slice(1), "RFC4648")));
750
683
  }
751
684
  constructor(_value) {
@@ -772,7 +705,7 @@ var PublicKey = class _PublicKey {
772
705
  toMultibase32() {
773
706
  return "B" + base32Encode(this._value, "RFC4648");
774
707
  }
775
- truncate(length = void 0) {
708
+ truncate(length) {
776
709
  return truncateKey(this, length);
777
710
  }
778
711
  asBuffer() {
@@ -878,6 +811,7 @@ var PublicKey = class _PublicKey {
878
811
  };
879
812
  export {
880
813
  DXN,
814
+ DXN_ECHO_REGEXP,
881
815
  IdentityDid,
882
816
  LOCAL_SPACE_TAG,
883
817
  ObjectId,
@@ -885,6 +819,7 @@ export {
885
819
  PublicKey,
886
820
  QueueSubspaceTags,
887
821
  SECRET_KEY_LENGTH,
822
+ SimplePRNG,
888
823
  SpaceId
889
824
  };
890
825
  //# sourceMappingURL=index.mjs.map