@dxos/keys 0.8.3-staging.0fa589b → 0.8.4-main.28f8d3d

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,21 +95,21 @@ 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
103
  import { Schema as Schema3 } from "effect";
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
109
  import { Schema } from "effect";
110
110
  import { ulid } 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 {
@@ -117,7 +117,7 @@ var ObjectId = class extends ObjectIdSchema {
117
117
  try {
118
118
  Schema.decodeSync(ObjectId)(id);
119
119
  return true;
120
- } catch (err) {
120
+ } catch {
121
121
  return false;
122
122
  }
123
123
  }
@@ -126,14 +126,14 @@ var ObjectId = class extends ObjectIdSchema {
126
126
  }
127
127
  };
128
128
 
129
- // packages/common/keys/src/space-id.ts
129
+ // src/space-id.ts
130
130
  init_inject_globals();
131
131
  var import_base32_decode = __toESM(require_base32_decode(), 1);
132
132
 
133
- // node_modules/.pnpm/base32-encode@2.0.0/node_modules/base32-encode/index.js
133
+ // ../../../node_modules/.pnpm/base32-encode@2.0.0/node_modules/base32-encode/index.js
134
134
  init_inject_globals();
135
135
 
136
- // node_modules/.pnpm/to-data-view@2.0.0/node_modules/to-data-view/index.js
136
+ // ../../../node_modules/.pnpm/to-data-view@2.0.0/node_modules/to-data-view/index.js
137
137
  init_inject_globals();
138
138
  function toDataView(data) {
139
139
  if (data instanceof Int8Array || data instanceof Uint8Array || data instanceof Uint8ClampedArray) {
@@ -145,7 +145,7 @@ function toDataView(data) {
145
145
  throw new TypeError("Expected `data` to be an ArrayBuffer, Buffer, Int8Array, Uint8Array or Uint8ClampedArray");
146
146
  }
147
147
 
148
- // node_modules/.pnpm/base32-encode@2.0.0/node_modules/base32-encode/index.js
148
+ // ../../../node_modules/.pnpm/base32-encode@2.0.0/node_modules/base32-encode/index.js
149
149
  var RFC4648 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
150
150
  var RFC4648_HEX = "0123456789ABCDEFGHIJKLMNOPQRSTUV";
151
151
  var CROCKFORD = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
@@ -193,11 +193,11 @@ function base32Encode(data, variant, options) {
193
193
  return output;
194
194
  }
195
195
 
196
- // packages/common/keys/src/space-id.ts
196
+ // src/space-id.ts
197
197
  import { Schema as Schema2 } from "effect";
198
198
  import { invariant } from "@dxos/invariant";
199
199
 
200
- // packages/common/keys/src/random-bytes.ts
200
+ // src/random-bytes.ts
201
201
  init_inject_globals();
202
202
  var randomBytes = (length) => {
203
203
  const webCrypto = globalThis.crypto ?? __require("@dxos/node-std/crypto").webcrypto;
@@ -206,116 +206,104 @@ var randomBytes = (length) => {
206
206
  return bytes;
207
207
  };
208
208
 
209
- // packages/common/keys/src/space-id.ts
210
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/common/keys/src/space-id.ts";
209
+ // src/space-id.ts
210
+ var __dxlog_file = "/__w/dxos/dxos/packages/common/keys/src/space-id.ts";
211
211
  var MULTIBASE_PREFIX = "B";
212
212
  var ENCODED_LENGTH = 33;
213
213
  var isValid = (value) => {
214
214
  return typeof value === "string" && value.startsWith(MULTIBASE_PREFIX) && value.length === ENCODED_LENGTH;
215
215
  };
216
216
  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
- }
217
+ static byteLength = 20;
218
+ static encode = (value) => {
219
+ invariant(value instanceof Uint8Array, "Invalid type", {
220
+ F: __dxlog_file,
221
+ L: 43,
222
+ S: this,
223
+ A: [
224
+ "value instanceof Uint8Array",
225
+ "'Invalid type'"
226
+ ]
227
+ });
228
+ invariant(value.length === SpaceId.byteLength, "Invalid length", {
229
+ F: __dxlog_file,
230
+ L: 44,
231
+ S: this,
232
+ A: [
233
+ "value.length === SpaceId.byteLength",
234
+ "'Invalid length'"
235
+ ]
236
+ });
237
+ return MULTIBASE_PREFIX + base32Encode(value, "RFC4648");
238
+ };
239
+ static decode = (value) => {
240
+ invariant(value.startsWith(MULTIBASE_PREFIX), "Invalid multibase32 encoding", {
241
+ F: __dxlog_file,
242
+ L: 49,
243
+ S: this,
244
+ A: [
245
+ "value.startsWith(MULTIBASE_PREFIX)",
246
+ "'Invalid multibase32 encoding'"
247
+ ]
248
+ });
249
+ return new Uint8Array((0, import_base32_decode.default)(value.slice(1), "RFC4648"));
250
+ };
251
+ static isValid = isValid;
252
+ static random = () => {
253
+ return SpaceId.encode(randomBytes(SpaceId.byteLength));
254
+ };
265
255
  };
266
256
 
267
- // packages/common/keys/src/dxn.ts
268
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/common/keys/src/dxn.ts";
257
+ // src/dxn.ts
258
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/common/keys/src/dxn.ts";
269
259
  var LOCAL_SPACE_TAG = "@";
260
+ var DXN_ECHO_REGEXP = /@(dxn:[a-zA-Z0-p:@]+)/;
270
261
  var QueueSubspaceTags = Object.freeze({
271
262
  DATA: "data",
272
263
  TRACE: "trace"
273
264
  });
274
265
  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
- }
266
+ // TODO(burdon): Rename to DXN (i.e., DXN.DXN).
267
+ // TODO(dmaretskyi): Should this be a transformation into the DXN type?
268
+ static Schema = Schema3.NonEmptyString.pipe(
269
+ Schema3.pattern(/^dxn:([^:]+):(?:[^:]+:?)+[^:]$/),
270
+ // TODO(dmaretskyi): To set the format we need to move the annotation IDs out of the echo-schema package.
271
+ // FormatAnnotation.set(FormatEnum.DXN),
272
+ Schema3.annotations({
273
+ title: "DXN",
274
+ description: "DXN URI",
275
+ examples: [
276
+ "dxn:type:example.com/type/MyType",
277
+ "dxn:echo:@:01J00J9B45YHYSGZQTQMSKMGJ6"
278
+ ]
279
+ })
280
+ );
291
281
  static hash(dxn) {
292
282
  return dxn.toString();
293
283
  }
294
- static {
284
+ /**
285
+ * Kind constants.
286
+ */
287
+ static kind = Object.freeze({
295
288
  /**
296
- * Kind constants.
289
+ * dxn:type:<type name>[:<version>]
297
290
  */
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
- }
291
+ TYPE: "type",
292
+ /**
293
+ * dxn:echo:<space id>:<echo id>
294
+ * dxn:echo:@:<echo id>
295
+ */
296
+ // TODO(burdon): Rename to OBJECT? (BREAKING CHANGE).
297
+ // TODO(burdon): Add separate Kind for space.
298
+ ECHO: "echo",
299
+ /**
300
+ * The subspace tag enables us to partition queues by usage within the context of a space.
301
+ * dxn:queue:<subspace_tag>:<space_id>:<queue_id>[:object_id]
302
+ * dxn:queue:data:BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE:01J00J9B45YHYSGZQTQMSKMGJ6
303
+ * dxn:queue:trace:BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE:01J00J9B45YHYSGZQTQMSKMGJ6
304
+ */
305
+ QUEUE: "queue"
306
+ });
319
307
  get kind() {
320
308
  return this.#kind;
321
309
  }
@@ -345,7 +333,7 @@ var DXN = class _DXN {
345
333
  static tryParse(dxn) {
346
334
  try {
347
335
  return _DXN.parse(dxn);
348
- } catch (error) {
336
+ } catch {
349
337
  return void 0;
350
338
  }
351
339
  }
@@ -368,42 +356,30 @@ var DXN = class _DXN {
368
356
  ]);
369
357
  }
370
358
  /**
359
+ * @example `dxn:echo:BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE:01J00J9B45YHYSGZQTQMSKMGJ6`
360
+ */
361
+ static fromSpaceAndObjectId(spaceId, objectId) {
362
+ assertArgument(SpaceId.isValid(spaceId), `Invalid space ID: ${spaceId}`);
363
+ assertArgument(ObjectId.isValid(objectId), `Invalid object ID: ${objectId}`);
364
+ return new _DXN(_DXN.kind.ECHO, [
365
+ spaceId,
366
+ objectId
367
+ ]);
368
+ }
369
+ /**
371
370
  * @example `dxn:echo:@:01J00J9B45YHYSGZQTQMSKMGJ6`
372
371
  */
373
372
  static fromLocalObjectId(id) {
373
+ assertArgument(ObjectId.isValid(id), `Invalid object ID: ${id}`);
374
374
  return new _DXN(_DXN.kind.ECHO, [
375
375
  LOCAL_SPACE_TAG,
376
376
  id
377
377
  ]);
378
378
  }
379
379
  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
- });
380
+ assertArgument(SpaceId.isValid(spaceId), `Invalid space ID: ${spaceId}`);
381
+ assertArgument(ObjectId.isValid(queueId), `Invalid queue ID: ${queueId}`);
382
+ assertArgument(!objectId || ObjectId.isValid(objectId), `Invalid object ID: ${objectId}`);
407
383
  return new _DXN(_DXN.kind.QUEUE, [
408
384
  subspaceTag,
409
385
  spaceId,
@@ -416,24 +392,8 @@ var DXN = class _DXN {
416
392
  #kind;
417
393
  #parts;
418
394
  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
- });
395
+ assertArgument(parts.length > 0, `Invalid DXN: ${parts}`);
396
+ assertArgument(parts.every((part) => typeof part === "string" && part.length > 0 && part.indexOf(":") === -1), `Invalid DXN: ${parts}`);
437
397
  switch (kind) {
438
398
  case _DXN.kind.TYPE:
439
399
  if (parts.length > 2) {
@@ -449,6 +409,34 @@ var DXN = class _DXN {
449
409
  this.#kind = kind;
450
410
  this.#parts = parts;
451
411
  }
412
+ toString() {
413
+ return `dxn:${this.#kind}:${this.#parts.join(":")}`;
414
+ }
415
+ toJSON() {
416
+ return this.toString();
417
+ }
418
+ /**
419
+ * Used by Node.js to get textual representation of this object when it's printed with a `console.log` statement.
420
+ */
421
+ [inspectCustom](depth, options, inspectFn) {
422
+ const printControlCode = (code) => {
423
+ return `\x1B[${code}m`;
424
+ };
425
+ return printControlCode(inspectFn.colors.blueBright[0]) + this.toString() + printControlCode(inspectFn.colors.reset[0]);
426
+ }
427
+ get [devtoolsFormatter]() {
428
+ return {
429
+ header: () => {
430
+ return [
431
+ "span",
432
+ {
433
+ style: "font-weight: bold;"
434
+ },
435
+ this.toString()
436
+ ];
437
+ }
438
+ };
439
+ }
452
440
  get parts() {
453
441
  return this.#parts;
454
442
  }
@@ -456,7 +444,7 @@ var DXN = class _DXN {
456
444
  get typename() {
457
445
  invariant2(this.#kind === _DXN.kind.TYPE, void 0, {
458
446
  F: __dxlog_file2,
459
- L: 188,
447
+ L: 234,
460
448
  S: this,
461
449
  A: [
462
450
  "this.#kind === DXN.kind.TYPE",
@@ -477,6 +465,7 @@ var DXN = class _DXN {
477
465
  }
478
466
  const [type, version] = this.#parts;
479
467
  return {
468
+ // TODO(wittjosiah): Should be `typename` for consistency.
480
469
  type,
481
470
  version
482
471
  };
@@ -506,38 +495,22 @@ var DXN = class _DXN {
506
495
  objectId
507
496
  };
508
497
  }
509
- toString() {
510
- return `dxn:${this.#kind}:${this.#parts.join(":")}`;
511
- }
512
498
  /**
513
- * Used by Node.js to get textual representation of this object when it's printed with a `console.log` statement.
499
+ * Produces a new DXN with the given parts appended.
514
500
  */
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
- };
501
+ extend(parts) {
502
+ return new _DXN(this.#kind, [
503
+ ...this.#parts,
504
+ ...parts
505
+ ]);
533
506
  }
534
507
  };
535
508
 
536
- // packages/common/keys/src/identity-did.ts
509
+ // src/identity-did.ts
537
510
  init_inject_globals();
538
511
  var import_base32_decode2 = __toESM(require_base32_decode(), 1);
539
512
  import { invariant as invariant3 } from "@dxos/invariant";
540
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/common/keys/src/identity-did.ts";
513
+ var __dxlog_file3 = "/__w/dxos/dxos/packages/common/keys/src/identity-did.ts";
541
514
  var IdentityDid = Object.freeze({
542
515
  byteLength: 20,
543
516
  encode: (value) => {
@@ -584,19 +557,18 @@ var MULTIBASE_PREFIX2 = "B";
584
557
  var DID_PREFIX = "did:halo:";
585
558
  var ENCODED_LENGTH2 = 42;
586
559
 
587
- // packages/common/keys/src/public-key.ts
560
+ // src/public-key.ts
588
561
  init_inject_globals();
589
562
  var import_base32_decode3 = __toESM(require_base32_decode(), 1);
590
563
  import { devtoolsFormatter as devtoolsFormatter2, equalsSymbol, inspectCustom as inspectCustom2, truncateKey } from "@dxos/debug";
591
564
  import { invariant as invariant4 } from "@dxos/invariant";
592
- var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/common/keys/src/public-key.ts";
565
+ var __dxlog_file4 = "/__w/dxos/dxos/packages/common/keys/src/public-key.ts";
593
566
  var PUBLIC_KEY_LENGTH = 32;
594
567
  var SECRET_KEY_LENGTH = 64;
595
568
  var isLikeArrayBuffer = (value) => typeof value === "object" && value !== null && Object.getPrototypeOf(value).constructor.name === "ArrayBuffer";
596
569
  var PublicKey = class _PublicKey {
597
- static {
598
- this.ZERO = _PublicKey.from("00".repeat(PUBLIC_KEY_LENGTH));
599
- }
570
+ _value;
571
+ static ZERO = _PublicKey.from("00".repeat(PUBLIC_KEY_LENGTH));
600
572
  /**
601
573
  * Creates new instance of PublicKey automatically determining the input format.
602
574
  * @param source A Buffer, or Uint8Array, or hex encoded string, or something with an `asUint8Array` method on it
@@ -605,7 +577,7 @@ var PublicKey = class _PublicKey {
605
577
  static from(source) {
606
578
  invariant4(source, void 0, {
607
579
  F: __dxlog_file4,
608
- L: 49,
580
+ L: 50,
609
581
  S: this,
610
582
  A: [
611
583
  "source",
@@ -697,7 +669,7 @@ var PublicKey = class _PublicKey {
697
669
  static bufferize(str) {
698
670
  invariant4(typeof str === "string", "Invalid type", {
699
671
  F: __dxlog_file4,
700
- L: 152,
672
+ L: 153,
701
673
  S: this,
702
674
  A: [
703
675
  "typeof str === 'string'",
@@ -720,7 +692,7 @@ var PublicKey = class _PublicKey {
720
692
  }
721
693
  invariant4(key instanceof Buffer2, "Invalid type", {
722
694
  F: __dxlog_file4,
723
- L: 171,
695
+ L: 172,
724
696
  S: this,
725
697
  A: [
726
698
  "key instanceof Buffer",
@@ -739,7 +711,7 @@ var PublicKey = class _PublicKey {
739
711
  static fromMultibase32(encoded) {
740
712
  invariant4(encoded.startsWith("B"), "Invalid multibase32 encoding", {
741
713
  F: __dxlog_file4,
742
- L: 184,
714
+ L: 185,
743
715
  S: this,
744
716
  A: [
745
717
  "encoded.startsWith('B')",
@@ -878,6 +850,7 @@ var PublicKey = class _PublicKey {
878
850
  };
879
851
  export {
880
852
  DXN,
853
+ DXN_ECHO_REGEXP,
881
854
  IdentityDid,
882
855
  LOCAL_SPACE_TAG,
883
856
  ObjectId,