@dxos/keys 0.8.1-main.ba2dec9 → 0.8.1-staging.31c3ee1
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 +22 -19
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +22 -19
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +22 -19
- 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 +22 -14
- package/dist/types/src/dxn.d.ts.map +1 -1
- package/dist/types/src/space-id.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/dxn.ts +40 -23
- package/src/space-id.ts +1 -0
package/dist/types/src/dxn.d.ts
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import type { inspect, InspectOptionsStylized } from 'node:util';
|
|
2
2
|
import { inspectCustom } from '@dxos/debug';
|
|
3
3
|
import type { SpaceId } from './space-id';
|
|
4
|
+
/**
|
|
5
|
+
* Tags for ECHO DXNs that should resolve the object ID in the local space.
|
|
6
|
+
*/
|
|
7
|
+
export declare const LOCAL_SPACE_TAG = "@";
|
|
8
|
+
export declare const QueueSubspaceTags: Readonly<{
|
|
9
|
+
DATA: "data";
|
|
10
|
+
TRACE: "trace";
|
|
11
|
+
}>;
|
|
4
12
|
/**
|
|
5
13
|
* DXN unambiguously names a resource like an ECHO object, schema definition, plugin, etc.
|
|
6
14
|
* Each DXN starts with a dxn prefix, followed by a resource kind.
|
|
@@ -9,7 +17,6 @@ import type { SpaceId } from './space-id';
|
|
|
9
17
|
* '@' in the place of the space id is used to denote that the DXN should be resolved in the local space.
|
|
10
18
|
*
|
|
11
19
|
* @example
|
|
12
|
-
*
|
|
13
20
|
* ```
|
|
14
21
|
* dxn:echo:<space key>:<echo id>
|
|
15
22
|
* dxn:echo:BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE:01J00J9B45YHYSGZQTQMSKMGJ6
|
|
@@ -48,11 +55,11 @@ export declare class DXN {
|
|
|
48
55
|
/**
|
|
49
56
|
* @example `dxn:type:example.com/type/Contact`
|
|
50
57
|
*/
|
|
51
|
-
static fromTypename(
|
|
58
|
+
static fromTypename(typename: string): DXN;
|
|
52
59
|
/**
|
|
53
60
|
* @example `dxn:type:example.com/type/Contact:0.1.0`
|
|
54
61
|
*/
|
|
55
|
-
static fromTypenameAndVersion(
|
|
62
|
+
static fromTypenameAndVersion(typename: string, version: string): DXN;
|
|
56
63
|
/**
|
|
57
64
|
* @example `dxn:echo:@:01J00J9B45YHYSGZQTQMSKMGJ6`
|
|
58
65
|
*/
|
|
@@ -60,18 +67,21 @@ export declare class DXN {
|
|
|
60
67
|
constructor(kind: string, parts: string[]);
|
|
61
68
|
get kind(): string;
|
|
62
69
|
get parts(): string[];
|
|
63
|
-
|
|
70
|
+
get typename(): string;
|
|
64
71
|
hasTypenameOf(typename: string): boolean;
|
|
72
|
+
isLocalObjectId(): boolean;
|
|
65
73
|
asTypeDXN(): DXN.TypeDXN | undefined;
|
|
66
74
|
asEchoDXN(): DXN.EchoDXN | undefined;
|
|
67
75
|
asQueueDXN(): DXN.QueueDXN | undefined;
|
|
68
|
-
|
|
69
|
-
toString(): string;
|
|
76
|
+
toString(): DXN.String;
|
|
70
77
|
/**
|
|
71
78
|
* Used by Node.js to get textual representation of this object when it's printed with a `console.log` statement.
|
|
72
79
|
*/
|
|
73
80
|
[inspectCustom](depth: number, options: InspectOptionsStylized, inspectFn: typeof inspect): string;
|
|
74
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* API namespace.
|
|
84
|
+
*/
|
|
75
85
|
export declare namespace DXN {
|
|
76
86
|
type TypeDXN = {
|
|
77
87
|
type: string;
|
|
@@ -87,13 +97,11 @@ export declare namespace DXN {
|
|
|
87
97
|
queueId: string;
|
|
88
98
|
objectId?: string;
|
|
89
99
|
};
|
|
100
|
+
/**
|
|
101
|
+
* DXN represented as a javascript string.
|
|
102
|
+
*/
|
|
103
|
+
type String = string & {
|
|
104
|
+
__DXNString: never;
|
|
105
|
+
};
|
|
90
106
|
}
|
|
91
|
-
/**
|
|
92
|
-
* Tags for ECHO DXNs that should resolve the object ID in the local space.
|
|
93
|
-
*/
|
|
94
|
-
export declare const LOCAL_SPACE_TAG = "@";
|
|
95
|
-
export declare const QueueSubspaceTags: Readonly<{
|
|
96
|
-
DATA: "data";
|
|
97
|
-
TRACE: "trace";
|
|
98
|
-
}>;
|
|
99
107
|
//# sourceMappingURL=dxn.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dxn.d.ts","sourceRoot":"","sources":["../../../src/dxn.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C
|
|
1
|
+
{"version":3,"file":"dxn.d.ts","sourceRoot":"","sources":["../../../src/dxn.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;GAEG;AACH,eAAO,MAAM,eAAe,MAAM,CAAC;AAGnC,eAAO,MAAM,iBAAiB;;;EAG5B,CAAC;AAEH;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,GAAG;;IACd;;OAEG;IACH,MAAM,CAAC,IAAI;QACT;;WAEG;;QAGH;;;WAGG;;QAKH;;;;;WAKG;;OAEF;IAEH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG;IAK5B,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM;IAI9B,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;IAkB9B,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS;IAQ7C;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM;IAIpC;;OAEG;IAEH,MAAM,CAAC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAI/D;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,EAAE,EAAE,MAAM;gBAOvB,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IAsBzC,IAAI,IAAI,WAEP;IAED,IAAI,KAAK,aAER;IAED,IAAI,QAAQ,WAGX;IAED,aAAa,CAAC,QAAQ,EAAE,MAAM;IAI9B,eAAe;IAIf,SAAS,IAAI,GAAG,CAAC,OAAO,GAAG,SAAS;IAYpC,SAAS,IAAI,GAAG,CAAC,OAAO,GAAG,SAAS;IAYpC,UAAU,IAAI,GAAG,CAAC,QAAQ,GAAG,SAAS;IAkBtC,QAAQ,IAAI,GAAG,CAAC,MAAM;IAItB;;OAEG;IACH,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,OAAO,OAAO;CAS1F;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,GAAG,CAAC;IAC3B,KAAY,OAAO,GAAG;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF,KAAY,OAAO,GAAG;QACpB,OAAO,CAAC,EAAE,OAAO,CAAC;QAElB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAEF,KAAY,QAAQ,GAAG;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF;;OAEG;IACH,KAAY,MAAM,GAAG,MAAM,GAAG;QAAE,WAAW,EAAE,KAAK,CAAA;KAAE,CAAC;CAItD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space-id.d.ts","sourceRoot":"","sources":["../../../src/space-id.ts"],"names":[],"mappings":"AAWA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"space-id.d.ts","sourceRoot":"","sources":["../../../src/space-id.ts"],"names":[],"mappings":"AAWA;;;;GAIG;AAEH,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,CAAC;AAEnD,eAAO,MAAM,OAAO;;oBAEF,UAAU,KAAG,OAAO;oBAMpB,OAAO,KAAG,UAAU;qBAKnB,MAAM,KAAG,KAAK,IAAI,OAAO;kBAG9B,OAAO;EAGnB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/keys",
|
|
3
|
-
"version": "0.8.1-
|
|
3
|
+
"version": "0.8.1-staging.31c3ee1",
|
|
4
4
|
"description": "Key utils and definitions.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
"src"
|
|
28
28
|
],
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@dxos/debug": "0.8.1-
|
|
31
|
-
"@dxos/invariant": "0.8.1-
|
|
32
|
-
"@dxos/node-std": "0.8.1-
|
|
30
|
+
"@dxos/debug": "0.8.1-staging.31c3ee1",
|
|
31
|
+
"@dxos/invariant": "0.8.1-staging.31c3ee1",
|
|
32
|
+
"@dxos/node-std": "0.8.1-staging.31c3ee1"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"base32-decode": "^1.0.0",
|
package/src/dxn.ts
CHANGED
|
@@ -9,6 +9,17 @@ import { invariant } from '@dxos/invariant';
|
|
|
9
9
|
|
|
10
10
|
import type { SpaceId } from './space-id';
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Tags for ECHO DXNs that should resolve the object ID in the local space.
|
|
14
|
+
*/
|
|
15
|
+
export const LOCAL_SPACE_TAG = '@';
|
|
16
|
+
|
|
17
|
+
// TODO(burdon): Namespace for.
|
|
18
|
+
export const QueueSubspaceTags = Object.freeze({
|
|
19
|
+
DATA: 'data',
|
|
20
|
+
TRACE: 'trace',
|
|
21
|
+
});
|
|
22
|
+
|
|
12
23
|
/**
|
|
13
24
|
* DXN unambiguously names a resource like an ECHO object, schema definition, plugin, etc.
|
|
14
25
|
* Each DXN starts with a dxn prefix, followed by a resource kind.
|
|
@@ -17,7 +28,6 @@ import type { SpaceId } from './space-id';
|
|
|
17
28
|
* '@' in the place of the space id is used to denote that the DXN should be resolved in the local space.
|
|
18
29
|
*
|
|
19
30
|
* @example
|
|
20
|
-
*
|
|
21
31
|
* ```
|
|
22
32
|
* dxn:echo:<space key>:<echo id>
|
|
23
33
|
* dxn:echo:BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE:01J00J9B45YHYSGZQTQMSKMGJ6
|
|
@@ -35,11 +45,15 @@ export class DXN {
|
|
|
35
45
|
* dxn:type:<type name>[:<version>]
|
|
36
46
|
*/
|
|
37
47
|
TYPE: 'type',
|
|
48
|
+
|
|
38
49
|
/**
|
|
39
50
|
* dxn:echo:<space id>:<echo id>
|
|
40
51
|
* dxn:echo:@:<echo id>
|
|
41
52
|
*/
|
|
53
|
+
// TODO(burdon): Rename to OBJECT?
|
|
54
|
+
// TODO(burdon): Add separate Kind for space.
|
|
42
55
|
ECHO: 'echo',
|
|
56
|
+
|
|
43
57
|
/**
|
|
44
58
|
* The subspace tag enables us to partition queues by usage within the context of a space.
|
|
45
59
|
* dxn:queue:<subspace_tag>:<space_id>:<queue_id>[:object_id]
|
|
@@ -53,6 +67,7 @@ export class DXN {
|
|
|
53
67
|
return a.kind === b.kind && a.parts.length === b.parts.length && a.parts.every((part, i) => part === b.parts[i]);
|
|
54
68
|
}
|
|
55
69
|
|
|
70
|
+
// TODO(burdon): Rename isValid.
|
|
56
71
|
static isDXNString(dxn: string) {
|
|
57
72
|
return dxn.startsWith('dxn:');
|
|
58
73
|
}
|
|
@@ -75,7 +90,7 @@ export class DXN {
|
|
|
75
90
|
return new DXN(kind, parts);
|
|
76
91
|
}
|
|
77
92
|
|
|
78
|
-
static tryParse(dxn: string) {
|
|
93
|
+
static tryParse(dxn: string): DXN | undefined {
|
|
79
94
|
try {
|
|
80
95
|
return DXN.parse(dxn);
|
|
81
96
|
} catch (error) {
|
|
@@ -86,16 +101,16 @@ export class DXN {
|
|
|
86
101
|
/**
|
|
87
102
|
* @example `dxn:type:example.com/type/Contact`
|
|
88
103
|
*/
|
|
89
|
-
static fromTypename(
|
|
90
|
-
return new DXN(DXN.kind.TYPE, [
|
|
104
|
+
static fromTypename(typename: string) {
|
|
105
|
+
return new DXN(DXN.kind.TYPE, [typename]);
|
|
91
106
|
}
|
|
92
107
|
|
|
93
108
|
/**
|
|
94
109
|
* @example `dxn:type:example.com/type/Contact:0.1.0`
|
|
95
110
|
*/
|
|
96
111
|
// TODO(dmaretskyi): Consider using @ as the version separator.
|
|
97
|
-
static fromTypenameAndVersion(
|
|
98
|
-
return new DXN(DXN.kind.TYPE, [
|
|
112
|
+
static fromTypenameAndVersion(typename: string, version: string) {
|
|
113
|
+
return new DXN(DXN.kind.TYPE, [typename, version]);
|
|
99
114
|
}
|
|
100
115
|
|
|
101
116
|
/**
|
|
@@ -138,7 +153,7 @@ export class DXN {
|
|
|
138
153
|
return this.#parts;
|
|
139
154
|
}
|
|
140
155
|
|
|
141
|
-
|
|
156
|
+
get typename() {
|
|
142
157
|
invariant(this.#kind === DXN.kind.TYPE);
|
|
143
158
|
return this.#parts[0];
|
|
144
159
|
}
|
|
@@ -147,6 +162,10 @@ export class DXN {
|
|
|
147
162
|
return this.#kind === DXN.kind.TYPE && this.#parts.length === 1 && this.#parts[0] === typename;
|
|
148
163
|
}
|
|
149
164
|
|
|
165
|
+
isLocalObjectId() {
|
|
166
|
+
return this.#kind === DXN.kind.ECHO && this.#parts[0] === LOCAL_SPACE_TAG && this.#parts.length === 2;
|
|
167
|
+
}
|
|
168
|
+
|
|
150
169
|
asTypeDXN(): DXN.TypeDXN | undefined {
|
|
151
170
|
if (this.kind !== DXN.kind.TYPE) {
|
|
152
171
|
return undefined;
|
|
@@ -189,12 +208,8 @@ export class DXN {
|
|
|
189
208
|
};
|
|
190
209
|
}
|
|
191
210
|
|
|
192
|
-
|
|
193
|
-
return this.#kind
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
toString() {
|
|
197
|
-
return `dxn:${this.#kind}:${this.#parts.join(':')}`;
|
|
211
|
+
toString(): DXN.String {
|
|
212
|
+
return `dxn:${this.#kind}:${this.#parts.join(':')}` as DXN.String;
|
|
198
213
|
}
|
|
199
214
|
|
|
200
215
|
/**
|
|
@@ -211,6 +226,9 @@ export class DXN {
|
|
|
211
226
|
}
|
|
212
227
|
}
|
|
213
228
|
|
|
229
|
+
/**
|
|
230
|
+
* API namespace.
|
|
231
|
+
*/
|
|
214
232
|
export declare namespace DXN {
|
|
215
233
|
export type TypeDXN = {
|
|
216
234
|
type: string;
|
|
@@ -219,6 +237,7 @@ export declare namespace DXN {
|
|
|
219
237
|
|
|
220
238
|
export type EchoDXN = {
|
|
221
239
|
spaceId?: SpaceId;
|
|
240
|
+
// TODO(burdon): Rename objectId.
|
|
222
241
|
echoId: string; // TODO(dmaretskyi): ObjectId.
|
|
223
242
|
};
|
|
224
243
|
|
|
@@ -228,14 +247,12 @@ export declare namespace DXN {
|
|
|
228
247
|
queueId: string; // TODO(dmaretskyi): ObjectId.
|
|
229
248
|
objectId?: string; // TODO(dmaretskyi): ObjectId.
|
|
230
249
|
};
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
/**
|
|
234
|
-
* Tags for ECHO DXNs that should resolve the object ID in the local space.
|
|
235
|
-
*/
|
|
236
|
-
export const LOCAL_SPACE_TAG = '@';
|
|
237
250
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
}
|
|
251
|
+
/**
|
|
252
|
+
* DXN represented as a javascript string.
|
|
253
|
+
*/
|
|
254
|
+
export type String = string & { __DXNString: never };
|
|
255
|
+
// TODO(burdon): Make brand.
|
|
256
|
+
// export const String = S.String.pipe(S.brand('DXN'));
|
|
257
|
+
// export type String = S.To(typoeof String);
|
|
258
|
+
}
|
package/src/space-id.ts
CHANGED
|
@@ -14,6 +14,7 @@ import { randomBytes } from './random-bytes';
|
|
|
14
14
|
* Space keys are generated by creating a keypair, and then taking the first 20 bytes of the SHA-256 hash of the public key and encoding them to multibase RFC4648 base-32 format (prefixed with B, see Multibase Table).
|
|
15
15
|
* @example BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE
|
|
16
16
|
*/
|
|
17
|
+
// TODO(burdon): Use effect brand.
|
|
17
18
|
export type SpaceId = string & { __SpaceId: true };
|
|
18
19
|
|
|
19
20
|
export const SpaceId = Object.freeze({
|