@dxos/keys 0.8.4-main.b97322e → 0.8.4-main.f5c0578

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/keys",
3
- "version": "0.8.4-main.b97322e",
3
+ "version": "0.8.4-main.f5c0578",
4
4
  "description": "Key utils and definitions.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -10,12 +10,10 @@
10
10
  "type": "module",
11
11
  "exports": {
12
12
  ".": {
13
+ "source": "./src/index.ts",
14
+ "types": "./dist/types/src/index.d.ts",
13
15
  "browser": "./dist/lib/browser/index.mjs",
14
- "node": {
15
- "require": "./dist/lib/node/index.cjs",
16
- "default": "./dist/lib/node-esm/index.mjs"
17
- },
18
- "types": "./dist/types/src/index.d.ts"
16
+ "node": "./dist/lib/node-esm/index.mjs"
19
17
  }
20
18
  },
21
19
  "types": "dist/types/src/index.d.ts",
@@ -27,11 +25,11 @@
27
25
  "src"
28
26
  ],
29
27
  "dependencies": {
30
- "effect": "3.17.0",
28
+ "effect": "3.17.7",
31
29
  "ulidx": "^2.3.0",
32
- "@dxos/debug": "0.8.4-main.b97322e",
33
- "@dxos/invariant": "0.8.4-main.b97322e",
34
- "@dxos/node-std": "0.8.4-main.b97322e"
30
+ "@dxos/debug": "0.8.4-main.f5c0578",
31
+ "@dxos/invariant": "0.8.4-main.f5c0578",
32
+ "@dxos/node-std": "0.8.4-main.f5c0578"
35
33
  },
36
34
  "devDependencies": {
37
35
  "base32-decode": "^1.0.0",
package/src/dxn.ts CHANGED
@@ -2,10 +2,11 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ import type { InspectOptionsStylized, inspect } from 'node:util';
6
+
5
7
  import { Schema } from 'effect';
6
- import type { inspect, InspectOptionsStylized } from 'node:util';
7
8
 
8
- import { devtoolsFormatter, type DevtoolsFormatter, inspectCustom } from '@dxos/debug';
9
+ import { type DevtoolsFormatter, devtoolsFormatter, inspectCustom } from '@dxos/debug';
9
10
  import { assertArgument, invariant } from '@dxos/invariant';
10
11
 
11
12
  import { ObjectId } from './object-id';
@@ -18,6 +19,8 @@ import { SpaceId } from './space-id';
18
19
  // TODO(dmaretskyi): "@" is a separator character in the URI spec.
19
20
  export const LOCAL_SPACE_TAG = '@';
20
21
 
22
+ export const DXN_ECHO_REGEXP = /@(dxn:[a-zA-Z0-p:@]+)/;
23
+
21
24
  // TODO(burdon): Namespace for.
22
25
  export const QueueSubspaceTags = Object.freeze({
23
26
  DATA: 'data',
@@ -43,6 +46,7 @@ export type QueueSubspaceTag = (typeof QueueSubspaceTags)[keyof typeof QueueSubs
43
46
  * ```
44
47
  */
45
48
  export class DXN {
49
+ // TODO(burdon): Rename to DXN (i.e., DXN.DXN).
46
50
  // TODO(dmaretskyi): Should this be a transformation into the DXN type?
47
51
  static Schema = Schema.NonEmptyString.pipe(
48
52
  Schema.pattern(/^dxn:([^:]+):(?:[^:]+:?)+[^:]$/),
@@ -64,16 +68,16 @@ export class DXN {
64
68
  */
65
69
  static kind = Object.freeze({
66
70
  /**
67
- * dxn:type:<type name>[:<version>]
71
+ * dxn:type:<type_name>[:<version>]
68
72
  */
69
73
  TYPE: 'type',
70
74
 
71
75
  /**
72
- * dxn:echo:<space id>:<echo id>
73
- * dxn:echo:@:<echo id>
76
+ * dxn:echo:<space_id>:<echo_id>
77
+ * dxn:echo:@:<echo_id>
74
78
  */
75
- // TODO(burdon): Rename to OBJECT? (BREAKING CHANGE).
76
- // TODO(burdon): Add separate Kind for space.
79
+ // TODO(burdon): Rename to OBJECT? (BREAKING CHANGE to update "echo").
80
+ // TODO(burdon): Add separate Kind for space?
77
81
  ECHO: 'echo',
78
82
 
79
83
  /**
@@ -119,7 +123,7 @@ export class DXN {
119
123
  static tryParse(dxn: string): DXN | undefined {
120
124
  try {
121
125
  return DXN.parse(dxn);
122
- } catch (error) {
126
+ } catch {
123
127
  return undefined;
124
128
  }
125
129
  }
@@ -139,6 +143,15 @@ export class DXN {
139
143
  return new DXN(DXN.kind.TYPE, [typename, version]);
140
144
  }
141
145
 
146
+ /**
147
+ * @example `dxn:echo:BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE:01J00J9B45YHYSGZQTQMSKMGJ6`
148
+ */
149
+ static fromSpaceAndObjectId(spaceId: SpaceId, objectId: ObjectId): DXN {
150
+ assertArgument(SpaceId.isValid(spaceId), `Invalid space ID: ${spaceId}`);
151
+ assertArgument(ObjectId.isValid(objectId), `Invalid object ID: ${objectId}`);
152
+ return new DXN(DXN.kind.ECHO, [spaceId, objectId]);
153
+ }
154
+
142
155
  /**
143
156
  * @example `dxn:echo:@:01J00J9B45YHYSGZQTQMSKMGJ6`
144
157
  */
@@ -148,9 +161,9 @@ export class DXN {
148
161
  }
149
162
 
150
163
  static fromQueue(subspaceTag: QueueSubspaceTag, spaceId: SpaceId, queueId: ObjectId, objectId?: ObjectId) {
151
- invariant(SpaceId.isValid(spaceId));
152
- invariant(ObjectId.isValid(queueId));
153
- invariant(!objectId || ObjectId.isValid(objectId));
164
+ assertArgument(SpaceId.isValid(spaceId), `Invalid space ID: ${spaceId}`);
165
+ assertArgument(ObjectId.isValid(queueId), `Invalid queue ID: ${queueId}`);
166
+ assertArgument(!objectId || ObjectId.isValid(objectId), `Invalid object ID: ${objectId}`);
154
167
 
155
168
  return new DXN(DXN.kind.QUEUE, [subspaceTag, spaceId, queueId, ...(objectId ? [objectId] : [])]);
156
169
  }
@@ -159,8 +172,11 @@ export class DXN {
159
172
  #parts: string[];
160
173
 
161
174
  constructor(kind: string, parts: string[]) {
162
- invariant(parts.length > 0);
163
- invariant(parts.every((part) => typeof part === 'string' && part.length > 0 && part.indexOf(':') === -1));
175
+ assertArgument(parts.length > 0, `Invalid DXN: ${parts}`);
176
+ assertArgument(
177
+ parts.every((part) => typeof part === 'string' && part.length > 0 && part.indexOf(':') === -1),
178
+ `Invalid DXN: ${parts}`,
179
+ );
164
180
 
165
181
  // Per-type validation.
166
182
  switch (kind) {
@@ -269,6 +285,13 @@ export class DXN {
269
285
  objectId: objectId as string | undefined,
270
286
  };
271
287
  }
288
+
289
+ /**
290
+ * Produces a new DXN with the given parts appended.
291
+ */
292
+ extend(parts: string[]): DXN {
293
+ return new DXN(this.#kind, [...this.#parts, ...parts]);
294
+ }
272
295
  }
273
296
 
274
297
  // TODO(dmaretskyi): Fluent API:
@@ -305,8 +328,7 @@ export declare namespace DXN {
305
328
 
306
329
  export type EchoDXN = {
307
330
  spaceId?: SpaceId;
308
- // TODO(burdon): Rename objectId.
309
- echoId: string; // TODO(dmaretskyi): ObjectId.
331
+ echoId: string; // TODO(dmaretskyi): Rename to `objectId` and use `ObjectId` for the type.
310
332
  };
311
333
 
312
334
  export type QueueDXN = {
package/src/object-id.ts CHANGED
@@ -9,7 +9,7 @@ import { ulid } from 'ulidx';
9
9
  // export const ObjectIdBrand: unique symbol = Symbol('@dxos/echo/ObjectId');
10
10
  // export const ObjectIdSchema = Schema.ULID.pipe(S.brand(ObjectIdBrand));
11
11
  const ObjectIdSchema = Schema.String.pipe(Schema.pattern(/^[0-7][0-9A-HJKMNP-TV-Z]{25}$/i)).annotations({
12
- description: 'a Universally Unique Lexicographically Sortable Identifier',
12
+ description: 'A Universally Unique Lexicographically Sortable Identifier',
13
13
  pattern: '^[0-7][0-9A-HJKMNP-TV-Z]{25}$',
14
14
  });
15
15
 
@@ -31,7 +31,7 @@ export const ObjectId: ObjectIdClass = class extends ObjectIdSchema {
31
31
  try {
32
32
  Schema.decodeSync(ObjectId)(id);
33
33
  return true;
34
- } catch (err) {
34
+ } catch {
35
35
  return false;
36
36
  }
37
37
  }
package/src/public-key.ts CHANGED
@@ -2,15 +2,16 @@
2
2
  // Copyright 2020 DXOS.org
3
3
  //
4
4
 
5
+ import { type InspectOptionsStylized, type inspect } from 'node:util';
6
+
5
7
  import base32Decode from 'base32-decode';
6
8
  import base32Encode from 'base32-encode';
7
- import { type inspect, type InspectOptionsStylized } from 'node:util';
8
9
 
9
10
  import {
10
- devtoolsFormatter,
11
11
  type DevtoolsFormatter,
12
- equalsSymbol,
13
12
  type Equatable,
13
+ devtoolsFormatter,
14
+ equalsSymbol,
14
15
  inspectCustom,
15
16
  truncateKey,
16
17
  } from '@dxos/debug';