@bcts/known-values 1.0.0-alpha.9 → 1.0.0-beta.1

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/src/index.ts CHANGED
@@ -1,6 +1,133 @@
1
+ /**
2
+ * Copyright © 2023-2026 Blockchain Commons, LLC
3
+ * Copyright © 2025-2026 Parity Technologies
4
+ *
5
+ */
6
+
1
7
  export { KnownValue, TAG_KNOWN_VALUE, KNOWN_VALUE_TAG, type KnownValueInput } from "./known-value";
2
8
  export { KnownValuesStore } from "./known-values-store";
9
+ export { loadBundledRegistries, type RegistryEntry, type RegistryFile } from "./bundled-registries";
3
10
  export {
11
+ // =============================================================================
12
+ // Raw Value Constants (_RAW)
13
+ // =============================================================================
14
+ // General
15
+ UNIT_RAW,
16
+ IS_A_RAW,
17
+ ID_RAW,
18
+ SIGNED_RAW,
19
+ NOTE_RAW,
20
+ HAS_RECIPIENT_RAW,
21
+ SSKR_SHARE_RAW,
22
+ CONTROLLER_RAW,
23
+ KEY_RAW,
24
+ DEREFERENCE_VIA_RAW,
25
+ ENTITY_RAW,
26
+ NAME_RAW,
27
+ LANGUAGE_RAW,
28
+ ISSUER_RAW,
29
+ HOLDER_RAW,
30
+ SALT_RAW,
31
+ DATE_RAW,
32
+ UNKNOWN_VALUE_RAW,
33
+ VERSION_VALUE_RAW,
34
+ HAS_SECRET_RAW,
35
+ DIFF_EDITS_RAW,
36
+ VALID_FROM_RAW,
37
+ VALID_UNTIL_RAW,
38
+ POSITION_RAW,
39
+ NICKNAME_RAW,
40
+ VALUE_RAW,
41
+ ATTESTATION_RAW,
42
+ VERIFIABLE_AT_RAW,
43
+ // Attachments
44
+ ATTACHMENT_RAW,
45
+ VENDOR_RAW,
46
+ CONFORMS_TO_RAW,
47
+ // XID Documents
48
+ ALLOW_RAW,
49
+ DENY_RAW,
50
+ ENDPOINT_RAW,
51
+ DELEGATE_RAW,
52
+ PROVENANCE_RAW,
53
+ PRIVATE_KEY_RAW,
54
+ SERVICE_RAW,
55
+ CAPABILITY_RAW,
56
+ PROVENANCE_GENERATOR_RAW,
57
+ // XID Privileges
58
+ PRIVILEGE_ALL_RAW,
59
+ PRIVILEGE_AUTH_RAW,
60
+ PRIVILEGE_SIGN_RAW,
61
+ PRIVILEGE_ENCRYPT_RAW,
62
+ PRIVILEGE_ELIDE_RAW,
63
+ PRIVILEGE_ISSUE_RAW,
64
+ PRIVILEGE_ACCESS_RAW,
65
+ PRIVILEGE_DELEGATE_RAW,
66
+ PRIVILEGE_VERIFY_RAW,
67
+ PRIVILEGE_UPDATE_RAW,
68
+ PRIVILEGE_TRANSFER_RAW,
69
+ PRIVILEGE_ELECT_RAW,
70
+ PRIVILEGE_BURN_RAW,
71
+ PRIVILEGE_REVOKE_RAW,
72
+ // Expression and Function Calls
73
+ BODY_RAW,
74
+ RESULT_RAW,
75
+ ERROR_RAW,
76
+ OK_VALUE_RAW,
77
+ PROCESSING_VALUE_RAW,
78
+ SENDER_RAW,
79
+ SENDER_CONTINUATION_RAW,
80
+ RECIPIENT_CONTINUATION_RAW,
81
+ CONTENT_RAW,
82
+ // Cryptography
83
+ SEED_TYPE_RAW,
84
+ PRIVATE_KEY_TYPE_RAW,
85
+ PUBLIC_KEY_TYPE_RAW,
86
+ MASTER_KEY_TYPE_RAW,
87
+ // Cryptocurrency Assets
88
+ ASSET_RAW,
89
+ BITCOIN_VALUE_RAW,
90
+ ETHEREUM_VALUE_RAW,
91
+ TEZOS_VALUE_RAW,
92
+ // Cryptocurrency Networks
93
+ NETWORK_RAW,
94
+ MAIN_NET_VALUE_RAW,
95
+ TEST_NET_VALUE_RAW,
96
+ // Bitcoin
97
+ BIP32_KEY_TYPE_RAW,
98
+ CHAIN_CODE_RAW,
99
+ DERIVATION_PATH_TYPE_RAW,
100
+ PARENT_PATH_RAW,
101
+ CHILDREN_PATH_RAW,
102
+ PARENT_FINGERPRINT_RAW,
103
+ PSBT_TYPE_RAW,
104
+ OUTPUT_DESCRIPTOR_TYPE_RAW,
105
+ OUTPUT_DESCRIPTOR_RAW,
106
+ // Graphs
107
+ GRAPH_RAW,
108
+ SOURCE_TARGET_GRAPH_RAW,
109
+ PARENT_CHILD_GRAPH_RAW,
110
+ DIGRAPH_RAW,
111
+ ACYCLIC_GRAPH_RAW,
112
+ MULTIGRAPH_RAW,
113
+ PSEUDOGRAPH_RAW,
114
+ GRAPH_FRAGMENT_RAW,
115
+ DAG_RAW,
116
+ TREE_RAW,
117
+ FOREST_RAW,
118
+ COMPOUND_GRAPH_RAW,
119
+ HYPERGRAPH_RAW,
120
+ DIHYPERGRAPH_RAW,
121
+ NODE_RAW,
122
+ EDGE_RAW,
123
+ SOURCE_RAW,
124
+ TARGET_RAW,
125
+ PARENT_RAW,
126
+ CHILD_RAW,
127
+ SELF_RAW,
128
+ // =============================================================================
129
+ // KnownValue Constants
130
+ // =============================================================================
4
131
  // General
5
132
  UNIT,
6
133
  IS_A,
@@ -27,6 +154,9 @@ export {
27
154
  VALID_UNTIL,
28
155
  POSITION,
29
156
  NICKNAME,
157
+ VALUE,
158
+ ATTESTATION,
159
+ VERIFIABLE_AT,
30
160
  // Attachments
31
161
  ATTACHMENT,
32
162
  VENDOR,
@@ -111,5 +241,8 @@ export {
111
241
  TARGET,
112
242
  PARENT,
113
243
  CHILD,
244
+ SELF,
245
+ // Registry
114
246
  KNOWN_VALUES,
247
+ LazyKnownValues,
115
248
  } from "./known-values-registry";
@@ -1,4 +1,8 @@
1
1
  /**
2
+ * Copyright © 2023-2026 Blockchain Commons, LLC
3
+ * Copyright © 2025-2026 Parity Technologies
4
+ *
5
+ *
2
6
  * A value in a namespace of unsigned integers that represents a stand-alone
3
7
  * ontological concept.
4
8
  *
@@ -68,7 +72,7 @@ import {
68
72
  decodeCbor,
69
73
  MajorType,
70
74
  } from "@bcts/dcbor";
71
- import { KNOWN_VALUE } from "@bcts/components";
75
+ import { KNOWN_VALUE, Digest, type DigestProvider } from "@bcts/components";
72
76
 
73
77
  /**
74
78
  * The numeric value for the CBOR tag used for Known Values.
@@ -88,7 +92,9 @@ export const KNOWN_VALUE_TAG: Tag = KNOWN_VALUE;
88
92
  */
89
93
  export type KnownValueInput = number | bigint;
90
94
 
91
- export class KnownValue implements CborTaggedEncodable, CborTaggedDecodable<KnownValue> {
95
+ export class KnownValue
96
+ implements CborTaggedEncodable, CborTaggedDecodable<KnownValue>, DigestProvider
97
+ {
92
98
  private readonly _value: bigint;
93
99
  private readonly _assignedName: string | undefined;
94
100
 
@@ -223,6 +229,32 @@ export class KnownValue implements CborTaggedEncodable, CborTaggedDecodable<Know
223
229
  return Number(this._value & BigInt(0xffffffff));
224
230
  }
225
231
 
232
+ // ===========================================================================
233
+ // DigestProvider Implementation
234
+ // ===========================================================================
235
+
236
+ /**
237
+ * Returns the cryptographic digest of this KnownValue.
238
+ *
239
+ * The digest is computed from the tagged CBOR encoding of the value,
240
+ * providing a unique content-addressable identifier.
241
+ *
242
+ * This is used for Envelope integration where KnownValues are hashed
243
+ * for tree construction.
244
+ *
245
+ * @returns A Digest of the tagged CBOR encoding
246
+ *
247
+ * @example
248
+ * ```typescript
249
+ * const kv = new KnownValue(1, "isA");
250
+ * const digest = kv.digest();
251
+ * console.log(digest.hex()); // SHA-256 hash of the CBOR encoding
252
+ * ```
253
+ */
254
+ digest(): Digest {
255
+ return Digest.fromImage(this.toCborData());
256
+ }
257
+
226
258
  /**
227
259
  * String representation of the KnownValue.
228
260
  *
@@ -353,7 +385,7 @@ export class KnownValue implements CborTaggedEncodable, CborTaggedDecodable<Know
353
385
  if (cborValue.type !== MajorType.Unsigned) {
354
386
  throw new Error(`Expected unsigned integer for KnownValue, got major type ${cborValue.type}`);
355
387
  }
356
- const numValue = cborValue.value as number | bigint;
388
+ const numValue = cborValue.value;
357
389
  return new KnownValue(typeof numValue === "bigint" ? numValue : BigInt(numValue));
358
390
  }
359
391
 
@@ -1,8 +1,149 @@
1
+ /**
2
+ * Copyright © 2023-2026 Blockchain Commons, LLC
3
+ * Copyright © 2025-2026 Parity Technologies
4
+ *
5
+ */
6
+
1
7
  import { KnownValue } from "./known-value";
8
+ import { loadBundledRegistries } from "./bundled-registries";
2
9
  import { KnownValuesStore } from "./known-values-store";
3
10
 
4
11
  // For definitions see: https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2023-002-known-value.md#appendix-a-registry
5
12
 
13
+ // =============================================================================
14
+ // Raw Value Constants (_RAW)
15
+ // =============================================================================
16
+ // These constants provide direct access to the raw numeric values for pattern
17
+ // matching scenarios. They mirror the Rust implementation which creates both
18
+ // XXX_RAW and XXX constants for each known value.
19
+
20
+ // General
21
+ export const UNIT_RAW = 0n;
22
+ export const IS_A_RAW = 1n;
23
+ export const ID_RAW = 2n;
24
+ export const SIGNED_RAW = 3n;
25
+ export const NOTE_RAW = 4n;
26
+ export const HAS_RECIPIENT_RAW = 5n;
27
+ export const SSKR_SHARE_RAW = 6n;
28
+ export const CONTROLLER_RAW = 7n;
29
+ export const KEY_RAW = 8n;
30
+ export const DEREFERENCE_VIA_RAW = 9n;
31
+ export const ENTITY_RAW = 10n;
32
+ export const NAME_RAW = 11n;
33
+ export const LANGUAGE_RAW = 12n;
34
+ export const ISSUER_RAW = 13n;
35
+ export const HOLDER_RAW = 14n;
36
+ export const SALT_RAW = 15n;
37
+ export const DATE_RAW = 16n;
38
+ export const UNKNOWN_VALUE_RAW = 17n;
39
+ export const VERSION_VALUE_RAW = 18n;
40
+ export const HAS_SECRET_RAW = 19n;
41
+ export const DIFF_EDITS_RAW = 20n;
42
+ export const VALID_FROM_RAW = 21n;
43
+ export const VALID_UNTIL_RAW = 22n;
44
+ export const POSITION_RAW = 23n;
45
+ export const NICKNAME_RAW = 24n;
46
+ export const VALUE_RAW = 25n;
47
+ export const ATTESTATION_RAW = 26n;
48
+ export const VERIFIABLE_AT_RAW = 27n;
49
+
50
+ // Attachments
51
+ export const ATTACHMENT_RAW = 50n;
52
+ export const VENDOR_RAW = 51n;
53
+ export const CONFORMS_TO_RAW = 52n;
54
+
55
+ // XID Documents
56
+ export const ALLOW_RAW = 60n;
57
+ export const DENY_RAW = 61n;
58
+ export const ENDPOINT_RAW = 62n;
59
+ export const DELEGATE_RAW = 63n;
60
+ export const PROVENANCE_RAW = 64n;
61
+ export const PRIVATE_KEY_RAW = 65n;
62
+ export const SERVICE_RAW = 66n;
63
+ export const CAPABILITY_RAW = 67n;
64
+ export const PROVENANCE_GENERATOR_RAW = 68n;
65
+
66
+ // XID Privileges
67
+ export const PRIVILEGE_ALL_RAW = 70n;
68
+ export const PRIVILEGE_AUTH_RAW = 71n;
69
+ export const PRIVILEGE_SIGN_RAW = 72n;
70
+ export const PRIVILEGE_ENCRYPT_RAW = 73n;
71
+ export const PRIVILEGE_ELIDE_RAW = 74n;
72
+ export const PRIVILEGE_ISSUE_RAW = 75n;
73
+ export const PRIVILEGE_ACCESS_RAW = 76n;
74
+ export const PRIVILEGE_DELEGATE_RAW = 80n;
75
+ export const PRIVILEGE_VERIFY_RAW = 81n;
76
+ export const PRIVILEGE_UPDATE_RAW = 82n;
77
+ export const PRIVILEGE_TRANSFER_RAW = 83n;
78
+ export const PRIVILEGE_ELECT_RAW = 84n;
79
+ export const PRIVILEGE_BURN_RAW = 85n;
80
+ export const PRIVILEGE_REVOKE_RAW = 86n;
81
+
82
+ // Expression and Function Calls
83
+ export const BODY_RAW = 100n;
84
+ export const RESULT_RAW = 101n;
85
+ export const ERROR_RAW = 102n;
86
+ export const OK_VALUE_RAW = 103n;
87
+ export const PROCESSING_VALUE_RAW = 104n;
88
+ export const SENDER_RAW = 105n;
89
+ export const SENDER_CONTINUATION_RAW = 106n;
90
+ export const RECIPIENT_CONTINUATION_RAW = 107n;
91
+ export const CONTENT_RAW = 108n;
92
+
93
+ // Cryptography
94
+ export const SEED_TYPE_RAW = 200n;
95
+ export const PRIVATE_KEY_TYPE_RAW = 201n;
96
+ export const PUBLIC_KEY_TYPE_RAW = 202n;
97
+ export const MASTER_KEY_TYPE_RAW = 203n;
98
+
99
+ // Cryptocurrency Assets
100
+ export const ASSET_RAW = 300n;
101
+ export const BITCOIN_VALUE_RAW = 301n;
102
+ export const ETHEREUM_VALUE_RAW = 302n;
103
+ export const TEZOS_VALUE_RAW = 303n;
104
+
105
+ // Cryptocurrency Networks
106
+ export const NETWORK_RAW = 400n;
107
+ export const MAIN_NET_VALUE_RAW = 401n;
108
+ export const TEST_NET_VALUE_RAW = 402n;
109
+
110
+ // Bitcoin
111
+ export const BIP32_KEY_TYPE_RAW = 500n;
112
+ export const CHAIN_CODE_RAW = 501n;
113
+ export const DERIVATION_PATH_TYPE_RAW = 502n;
114
+ export const PARENT_PATH_RAW = 503n;
115
+ export const CHILDREN_PATH_RAW = 504n;
116
+ export const PARENT_FINGERPRINT_RAW = 505n;
117
+ export const PSBT_TYPE_RAW = 506n;
118
+ export const OUTPUT_DESCRIPTOR_TYPE_RAW = 507n;
119
+ export const OUTPUT_DESCRIPTOR_RAW = 508n;
120
+
121
+ // Graphs
122
+ export const GRAPH_RAW = 600n;
123
+ export const SOURCE_TARGET_GRAPH_RAW = 601n;
124
+ export const PARENT_CHILD_GRAPH_RAW = 602n;
125
+ export const DIGRAPH_RAW = 603n;
126
+ export const ACYCLIC_GRAPH_RAW = 604n;
127
+ export const MULTIGRAPH_RAW = 605n;
128
+ export const PSEUDOGRAPH_RAW = 606n;
129
+ export const GRAPH_FRAGMENT_RAW = 607n;
130
+ export const DAG_RAW = 608n;
131
+ export const TREE_RAW = 609n;
132
+ export const FOREST_RAW = 610n;
133
+ export const COMPOUND_GRAPH_RAW = 611n;
134
+ export const HYPERGRAPH_RAW = 612n;
135
+ export const DIHYPERGRAPH_RAW = 613n;
136
+ export const NODE_RAW = 700n;
137
+ export const EDGE_RAW = 701n;
138
+ export const SOURCE_RAW = 702n;
139
+ export const TARGET_RAW = 703n;
140
+ export const PARENT_RAW = 704n;
141
+ export const CHILD_RAW = 705n;
142
+
143
+ // =============================================================================
144
+ // KnownValue Constants
145
+ // =============================================================================
146
+
6
147
  //
7
148
  // General
8
149
  //
@@ -32,7 +173,10 @@ export const VALID_FROM = new KnownValue(21, "validFrom");
32
173
  export const VALID_UNTIL = new KnownValue(22, "validUntil");
33
174
  export const POSITION = new KnownValue(23, "position");
34
175
  export const NICKNAME = new KnownValue(24, "nickname");
35
- // 25-49 *unassigned*
176
+ export const VALUE = new KnownValue(25, "value");
177
+ export const ATTESTATION = new KnownValue(26, "attestation");
178
+ export const VERIFIABLE_AT = new KnownValue(27, "verifiableAt");
179
+ // 28-49 *unassigned*
36
180
 
37
181
  //
38
182
  // Attachments
@@ -63,7 +207,7 @@ export const PROVENANCE_GENERATOR = new KnownValue(68, "provenanceGenerator");
63
207
  //
64
208
 
65
209
  export const PRIVILEGE_ALL = new KnownValue(70, "All");
66
- export const PRIVILEGE_AUTH = new KnownValue(71, "Auth");
210
+ export const PRIVILEGE_AUTH = new KnownValue(71, "Authorize");
67
211
  export const PRIVILEGE_SIGN = new KnownValue(72, "Sign");
68
212
  export const PRIVILEGE_ENCRYPT = new KnownValue(73, "Encrypt");
69
213
  export const PRIVILEGE_ELIDE = new KnownValue(74, "Elide");
@@ -109,9 +253,9 @@ export const MASTER_KEY_TYPE = new KnownValue(203, "MasterKey");
109
253
  //
110
254
 
111
255
  export const ASSET = new KnownValue(300, "asset");
112
- export const BITCOIN_VALUE = new KnownValue(301, "BTC");
113
- export const ETHEREUM_VALUE = new KnownValue(302, "ETH");
114
- export const TEZOS_VALUE = new KnownValue(303, "XTZ");
256
+ export const BITCOIN_VALUE = new KnownValue(301, "Bitcoin");
257
+ export const ETHEREUM_VALUE = new KnownValue(302, "Ethereum");
258
+ export const TEZOS_VALUE = new KnownValue(303, "Tezos");
115
259
  // 304-399 *unassigned*
116
260
 
117
261
  //
@@ -130,8 +274,8 @@ export const TEST_NET_VALUE = new KnownValue(402, "TestNet");
130
274
  export const BIP32_KEY_TYPE = new KnownValue(500, "BIP32Key");
131
275
  export const CHAIN_CODE = new KnownValue(501, "chainCode");
132
276
  export const DERIVATION_PATH_TYPE = new KnownValue(502, "DerivationPath");
133
- export const PARENT_PATH = new KnownValue(503, "parent");
134
- export const CHILDREN_PATH = new KnownValue(504, "children");
277
+ export const PARENT_PATH = new KnownValue(503, "parentPath");
278
+ export const CHILDREN_PATH = new KnownValue(504, "childrenPath");
135
279
  export const PARENT_FINGERPRINT = new KnownValue(505, "parentFingerprint");
136
280
  export const PSBT_TYPE = new KnownValue(506, "PSBT");
137
281
  export const OUTPUT_DESCRIPTOR_TYPE = new KnownValue(507, "OutputDescriptor");
@@ -142,7 +286,7 @@ export const OUTPUT_DESCRIPTOR = new KnownValue(508, "outputDescriptor");
142
286
  // Graphs
143
287
  //
144
288
 
145
- export const GRAPH = new KnownValue(600, "graph");
289
+ export const GRAPH = new KnownValue(600, "Graph");
146
290
  export const SOURCE_TARGET_GRAPH = new KnownValue(601, "SourceTargetGraph");
147
291
  export const PARENT_CHILD_GRAPH = new KnownValue(602, "ParentChildGraph");
148
292
  export const DIGRAPH = new KnownValue(603, "Digraph");
@@ -163,7 +307,9 @@ export const SOURCE = new KnownValue(702, "source");
163
307
  export const TARGET = new KnownValue(703, "target");
164
308
  export const PARENT = new KnownValue(704, "parent");
165
309
  export const CHILD = new KnownValue(705, "child");
166
- // 706-... *unassigned*
310
+ export const SELF_RAW = 706n;
311
+ export const SELF = new KnownValue(706, "Self");
312
+ // 707-... *unassigned*
167
313
 
168
314
  /**
169
315
  * A lazily initialized singleton that holds the global registry of known
@@ -178,7 +324,7 @@ export const CHILD = new KnownValue(705, "child");
178
324
  * users of the API, who should access Known Values through the constants
179
325
  * exposed in the `known_values` module.
180
326
  */
181
- class LazyKnownValues {
327
+ export class LazyKnownValues {
182
328
  private _data: KnownValuesStore | undefined;
183
329
 
184
330
  /**
@@ -187,108 +333,122 @@ class LazyKnownValues {
187
333
  * This method guarantees that initialization occurs exactly once.
188
334
  */
189
335
  get(): KnownValuesStore {
190
- this._data ??= new KnownValuesStore([
191
- UNIT,
192
- IS_A,
193
- ID,
194
- SIGNED,
195
- NOTE,
196
- HAS_RECIPIENT,
197
- SSKR_SHARE,
198
- CONTROLLER,
199
- KEY,
200
- DEREFERENCE_VIA,
201
- ENTITY,
202
- NAME,
203
- LANGUAGE,
204
- ISSUER,
205
- HOLDER,
206
- SALT,
207
- DATE,
208
- UNKNOWN_VALUE,
209
- VERSION_VALUE,
210
- HAS_SECRET,
211
- DIFF_EDITS,
212
- VALID_FROM,
213
- VALID_UNTIL,
214
- POSITION,
215
- NICKNAME,
216
- ATTACHMENT,
217
- VENDOR,
218
- CONFORMS_TO,
219
- ALLOW,
220
- DENY,
221
- ENDPOINT,
222
- DELEGATE,
223
- PROVENANCE,
224
- PRIVATE_KEY,
225
- SERVICE,
226
- CAPABILITY,
227
- PROVENANCE_GENERATOR,
228
- PRIVILEGE_ALL,
229
- PRIVILEGE_AUTH,
230
- PRIVILEGE_SIGN,
231
- PRIVILEGE_ENCRYPT,
232
- PRIVILEGE_ELIDE,
233
- PRIVILEGE_ISSUE,
234
- PRIVILEGE_ACCESS,
235
- PRIVILEGE_DELEGATE,
236
- PRIVILEGE_VERIFY,
237
- PRIVILEGE_UPDATE,
238
- PRIVILEGE_TRANSFER,
239
- PRIVILEGE_ELECT,
240
- PRIVILEGE_BURN,
241
- PRIVILEGE_REVOKE,
242
- BODY,
243
- RESULT,
244
- ERROR,
245
- OK_VALUE,
246
- PROCESSING_VALUE,
247
- SENDER,
248
- SENDER_CONTINUATION,
249
- RECIPIENT_CONTINUATION,
250
- CONTENT,
251
- SEED_TYPE,
252
- PRIVATE_KEY_TYPE,
253
- PUBLIC_KEY_TYPE,
254
- MASTER_KEY_TYPE,
255
- ASSET,
256
- BITCOIN_VALUE,
257
- ETHEREUM_VALUE,
258
- TEZOS_VALUE,
259
- NETWORK,
260
- MAIN_NET_VALUE,
261
- TEST_NET_VALUE,
262
- BIP32_KEY_TYPE,
263
- CHAIN_CODE,
264
- DERIVATION_PATH_TYPE,
265
- PARENT_PATH,
266
- CHILDREN_PATH,
267
- PARENT_FINGERPRINT,
268
- PSBT_TYPE,
269
- OUTPUT_DESCRIPTOR_TYPE,
270
- OUTPUT_DESCRIPTOR,
271
- GRAPH,
272
- SOURCE_TARGET_GRAPH,
273
- PARENT_CHILD_GRAPH,
274
- DIGRAPH,
275
- ACYCLIC_GRAPH,
276
- MULTIGRAPH,
277
- PSEUDOGRAPH,
278
- GRAPH_FRAGMENT,
279
- DAG,
280
- TREE,
281
- FOREST,
282
- COMPOUND_GRAPH,
283
- HYPERGRAPH,
284
- DIHYPERGRAPH,
285
- NODE,
286
- EDGE,
287
- SOURCE,
288
- TARGET,
289
- PARENT,
290
- CHILD,
291
- ]);
336
+ if (this._data === undefined) {
337
+ const store = new KnownValuesStore([
338
+ UNIT,
339
+ IS_A,
340
+ ID,
341
+ SIGNED,
342
+ NOTE,
343
+ HAS_RECIPIENT,
344
+ SSKR_SHARE,
345
+ CONTROLLER,
346
+ KEY,
347
+ DEREFERENCE_VIA,
348
+ ENTITY,
349
+ NAME,
350
+ LANGUAGE,
351
+ ISSUER,
352
+ HOLDER,
353
+ SALT,
354
+ DATE,
355
+ UNKNOWN_VALUE,
356
+ VERSION_VALUE,
357
+ HAS_SECRET,
358
+ DIFF_EDITS,
359
+ VALID_FROM,
360
+ VALID_UNTIL,
361
+ POSITION,
362
+ NICKNAME,
363
+ VALUE,
364
+ ATTESTATION,
365
+ VERIFIABLE_AT,
366
+ ATTACHMENT,
367
+ VENDOR,
368
+ CONFORMS_TO,
369
+ ALLOW,
370
+ DENY,
371
+ ENDPOINT,
372
+ DELEGATE,
373
+ PROVENANCE,
374
+ PRIVATE_KEY,
375
+ SERVICE,
376
+ CAPABILITY,
377
+ PROVENANCE_GENERATOR,
378
+ PRIVILEGE_ALL,
379
+ PRIVILEGE_AUTH,
380
+ PRIVILEGE_SIGN,
381
+ PRIVILEGE_ENCRYPT,
382
+ PRIVILEGE_ELIDE,
383
+ PRIVILEGE_ISSUE,
384
+ PRIVILEGE_ACCESS,
385
+ PRIVILEGE_DELEGATE,
386
+ PRIVILEGE_VERIFY,
387
+ PRIVILEGE_UPDATE,
388
+ PRIVILEGE_TRANSFER,
389
+ PRIVILEGE_ELECT,
390
+ PRIVILEGE_BURN,
391
+ PRIVILEGE_REVOKE,
392
+ BODY,
393
+ RESULT,
394
+ ERROR,
395
+ OK_VALUE,
396
+ PROCESSING_VALUE,
397
+ SENDER,
398
+ SENDER_CONTINUATION,
399
+ RECIPIENT_CONTINUATION,
400
+ CONTENT,
401
+ SEED_TYPE,
402
+ PRIVATE_KEY_TYPE,
403
+ PUBLIC_KEY_TYPE,
404
+ MASTER_KEY_TYPE,
405
+ ASSET,
406
+ BITCOIN_VALUE,
407
+ ETHEREUM_VALUE,
408
+ TEZOS_VALUE,
409
+ NETWORK,
410
+ MAIN_NET_VALUE,
411
+ TEST_NET_VALUE,
412
+ BIP32_KEY_TYPE,
413
+ CHAIN_CODE,
414
+ DERIVATION_PATH_TYPE,
415
+ PARENT_PATH,
416
+ CHILDREN_PATH,
417
+ PARENT_FINGERPRINT,
418
+ PSBT_TYPE,
419
+ OUTPUT_DESCRIPTOR_TYPE,
420
+ OUTPUT_DESCRIPTOR,
421
+ GRAPH,
422
+ SOURCE_TARGET_GRAPH,
423
+ PARENT_CHILD_GRAPH,
424
+ DIGRAPH,
425
+ ACYCLIC_GRAPH,
426
+ MULTIGRAPH,
427
+ PSEUDOGRAPH,
428
+ GRAPH_FRAGMENT,
429
+ DAG,
430
+ TREE,
431
+ FOREST,
432
+ COMPOUND_GRAPH,
433
+ HYPERGRAPH,
434
+ DIHYPERGRAPH,
435
+ NODE,
436
+ EDGE,
437
+ SOURCE,
438
+ TARGET,
439
+ PARENT,
440
+ CHILD,
441
+ ]);
442
+
443
+ // Load bundled registry values from JSON data files.
444
+ // These are embedded at build time and available in all environments.
445
+ // Matching Rust behavior: later inserts overwrite earlier ones.
446
+ for (const value of loadBundledRegistries()) {
447
+ store.insert(value);
448
+ }
449
+
450
+ this._data = store;
451
+ }
292
452
  return this._data;
293
453
  }
294
454
  }
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Copyright © 2023-2026 Blockchain Commons, LLC
3
+ * Copyright © 2025-2026 Parity Technologies
4
+ *
5
+ */
6
+
1
7
  import { KnownValue, type KnownValueInput } from "./known-value";
2
8
 
3
9
  /**
@@ -318,6 +324,16 @@ export class KnownValuesStore {
318
324
  * Internal helper method to insert a KnownValue into the store's maps.
319
325
  */
320
326
  private _insert(knownValue: KnownValue): void {
327
+ // If there's an existing value with the same codepoint, remove its name
328
+ // from the name index to avoid stale entries
329
+ const existing = this.knownValuesByRawValue.get(knownValue.valueBigInt());
330
+ if (existing !== undefined) {
331
+ const oldName = existing.assignedName();
332
+ if (oldName !== undefined && oldName !== "") {
333
+ this.knownValuesByAssignedName.delete(oldName);
334
+ }
335
+ }
336
+
321
337
  this.knownValuesByRawValue.set(knownValue.valueBigInt(), knownValue);
322
338
  const assignedName = knownValue.assignedName();
323
339
  if (assignedName !== undefined && assignedName !== "") {