@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.
@@ -82,28 +82,69 @@ var require_base32_decode = __commonJS({
82
82
  });
83
83
 
84
84
  // src/dxn.ts
85
- import { Schema as Schema3 } from "effect";
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 { Schema } from "effect";
91
- import { ulid } from "ulidx";
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: "a Universally Unique Lexicographically Sortable Identifier",
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 (err) {
103
+ } catch {
102
104
  return false;
103
105
  }
104
106
  }
105
107
  static random() {
106
- return ulid();
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 { Schema as Schema2 } from "effect";
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
- this.byteLength = 20;
194
- }
195
- static {
196
- this.encode = (value) => {
197
- invariant(value instanceof Uint8Array, "Invalid type", {
198
- F: __dxlog_file,
199
- L: 43,
200
- S: this,
201
- A: [
202
- "value instanceof Uint8Array",
203
- "'Invalid type'"
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
- static {
251
- // TODO(dmaretskyi): Should this be a transformation into the DXN type?
252
- this.Schema = Schema3.NonEmptyString.pipe(
253
- Schema3.pattern(/^dxn:([^:]+):(?:[^:]+:?)+[^:]$/),
254
- // TODO(dmaretskyi): To set the format we need to move the annotation IDs out of the echo-schema package.
255
- // FormatAnnotation.set(FormatEnum.DXN),
256
- Schema3.annotations({
257
- title: "DXN",
258
- description: "DXN URI",
259
- examples: [
260
- "dxn:type:example.com/type/MyType",
261
- "dxn:echo:@:01J00J9B45YHYSGZQTQMSKMGJ6"
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
- static {
274
+ /**
275
+ * Kind constants.
276
+ */
277
+ static kind = Object.freeze({
270
278
  /**
271
- * Kind constants.
279
+ * dxn:type:<type_name>[:<version>]
272
280
  */
273
- this.kind = Object.freeze({
274
- /**
275
- * dxn:type:<type name>[:<version>]
276
- */
277
- TYPE: "type",
278
- /**
279
- * dxn:echo:<space id>:<echo id>
280
- * dxn:echo:@:<echo id>
281
- */
282
- // TODO(burdon): Rename to OBJECT? (BREAKING CHANGE).
283
- // TODO(burdon): Add separate Kind for space.
284
- ECHO: "echo",
285
- /**
286
- * The subspace tag enables us to partition queues by usage within the context of a space.
287
- * dxn:queue:<subspace_tag>:<space_id>:<queue_id>[:object_id]
288
- * dxn:queue:data:BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE:01J00J9B45YHYSGZQTQMSKMGJ6
289
- * dxn:queue:trace:BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE:01J00J9B45YHYSGZQTQMSKMGJ6
290
- */
291
- QUEUE: "queue"
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 (error) {
331
+ } catch {
324
332
  return void 0;
325
333
  }
326
334
  }
327
335
  /**
328
- * @example `dxn:type:example.com/type/Contact`
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.com/type/Contact:0.1.0`
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
- invariant2(SpaceId.isValid(spaceId), void 0, {
357
- F: __dxlog_file2,
358
- L: 151,
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
- invariant2(parts.length > 0, void 0, {
396
- F: __dxlog_file2,
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('Invalid "type" DXN');
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('Invalid "echo" DXN');
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, void 0, {
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
- F: __dxlog_file3,
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
- static {
576
- this.ZERO = _PublicKey.from("00".repeat(PUBLIC_KEY_LENGTH));
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, void 0, {
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 = void 0) {
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