@beclab/olaresid 0.1.13 ā 0.2.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/CLI-TREE.md +107 -0
- package/CLI.md +122 -1340
- package/README.md +30 -12
- package/SDK-TREE.md +151 -0
- package/TAG.md +95 -41
- package/config.json +6 -4
- package/dist/abi/TerminusDIDQueryABI.d.ts +397 -0
- package/dist/abi/TerminusDIDQueryABI.d.ts.map +1 -0
- package/dist/abi/TerminusDIDQueryABI.js +519 -0
- package/dist/abi/TerminusDIDQueryABI.js.map +1 -0
- package/dist/business/index.d.ts.map +1 -1
- package/dist/business/index.js +9 -23
- package/dist/business/index.js.map +1 -1
- package/dist/business/tag-context.d.ts +1 -0
- package/dist/business/tag-context.d.ts.map +1 -1
- package/dist/business/tag-context.js +13 -7
- package/dist/business/tag-context.js.map +1 -1
- package/dist/cli.js +177 -76
- package/dist/cli.js.map +1 -1
- package/dist/config/index.d.ts +16 -4
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +28 -14
- package/dist/config/index.js.map +1 -1
- package/dist/domain/core.d.ts +65 -0
- package/dist/domain/core.d.ts.map +1 -0
- package/dist/domain/core.js +317 -0
- package/dist/domain/core.js.map +1 -0
- package/dist/domain/index.d.ts +104 -57
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js +188 -428
- package/dist/domain/index.js.map +1 -1
- package/dist/domain/types.d.ts +56 -0
- package/dist/domain/types.d.ts.map +1 -0
- package/dist/domain/types.js +3 -0
- package/dist/domain/types.js.map +1 -0
- package/dist/index.d.ts +81 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +158 -143
- package/dist/index.js.map +1 -1
- package/dist/utils/crypto-utils.d.ts +110 -0
- package/dist/utils/crypto-utils.d.ts.map +1 -1
- package/dist/utils/crypto-utils.js +127 -8
- package/dist/utils/crypto-utils.js.map +1 -1
- package/dist/utils/error-parser.d.ts.map +1 -1
- package/dist/utils/error-parser.js +2 -1
- package/dist/utils/error-parser.js.map +1 -1
- package/dist/utils/event-parser.d.ts +161 -0
- package/dist/utils/event-parser.d.ts.map +1 -0
- package/dist/utils/event-parser.js +140 -0
- package/dist/utils/event-parser.js.map +1 -0
- package/dist/utils/tag-type-builder.d.ts +43 -0
- package/dist/utils/tag-type-builder.d.ts.map +1 -1
- package/dist/utils/tag-type-builder.js +122 -0
- package/dist/utils/tag-type-builder.js.map +1 -1
- package/dist/utils/tag-type-parser.d.ts +70 -0
- package/dist/utils/tag-type-parser.d.ts.map +1 -0
- package/dist/utils/tag-type-parser.js +190 -0
- package/dist/utils/tag-type-parser.js.map +1 -0
- package/examples/create-with-rpc-demo.ts +142 -0
- package/examples/fetch-all-flat-demo.ts +159 -0
- package/examples/fetch-by-indices-demo.ts +235 -0
- package/examples/fetch-domain-demo.ts +137 -0
- package/examples/fetch-domains-demo.ts +221 -0
- package/examples/frontend-demo/index.html +2 -2
- package/examples/frontend-demo/package-lock.json +4 -1
- package/examples/index.ts +3 -5
- package/jest.config.js +25 -0
- package/package.json +6 -2
- package/src/abi/TerminusDIDQueryABI.ts +516 -0
- package/src/business/index.ts +9 -33
- package/src/business/tag-context.ts +35 -7
- package/src/cli.ts +253 -90
- package/src/config/index.ts +34 -19
- package/src/domain/core.ts +382 -0
- package/src/domain/index.ts +271 -641
- package/src/domain/types.ts +59 -0
- package/src/index.ts +230 -207
- package/src/utils/crypto-utils.ts +205 -2
- package/src/utils/error-parser.ts +2 -1
- package/src/utils/event-parser.ts +353 -0
- package/src/utils/tag-type-builder.ts +138 -0
- package/src/utils/tag-type-parser.ts +246 -0
- package/tests/unit/crypto-utils.test.ts +338 -0
- package/tests/unit/ed25519-jwk.test.ts +201 -0
- package/tests/unit/event-parser.test.ts +690 -0
- package/tests/unit/generate-mnemonic.test.ts +268 -0
- package/tests/unit/olares-id-format.test.ts +321 -0
- package/tests/unit/tag-type-parser.test.ts +802 -0
- package/tests/unit/tag-types.test.ts +821 -0
- package/tests/unit/version.test.ts +14 -0
- package/tsconfig.json +3 -2
- package/dist/abi/ABITypeABI.d.ts +0 -88
- package/dist/abi/ABITypeABI.d.ts.map +0 -1
- package/dist/abi/ABITypeABI.js +0 -382
- package/dist/abi/ABITypeABI.js.map +0 -1
- package/dist/abi/RegistryABI.d.ts +0 -77
- package/dist/abi/RegistryABI.d.ts.map +0 -1
- package/dist/abi/RegistryABI.js +0 -462
- package/dist/abi/RegistryABI.js.map +0 -1
- package/dist/tag/address.d.ts +0 -11
- package/dist/tag/address.d.ts.map +0 -1
- package/dist/tag/address.js +0 -44
- package/dist/tag/address.js.map +0 -1
- package/dist/tag/array.d.ts +0 -14
- package/dist/tag/array.d.ts.map +0 -1
- package/dist/tag/array.js +0 -72
- package/dist/tag/array.js.map +0 -1
- package/dist/tag/bool.d.ts +0 -11
- package/dist/tag/bool.d.ts.map +0 -1
- package/dist/tag/bool.js +0 -43
- package/dist/tag/bool.js.map +0 -1
- package/dist/tag/bytes.d.ts +0 -11
- package/dist/tag/bytes.d.ts.map +0 -1
- package/dist/tag/bytes.js +0 -37
- package/dist/tag/bytes.js.map +0 -1
- package/dist/tag/flarray.d.ts +0 -15
- package/dist/tag/flarray.d.ts.map +0 -1
- package/dist/tag/flarray.js +0 -81
- package/dist/tag/flarray.js.map +0 -1
- package/dist/tag/flbytes.d.ts +0 -11
- package/dist/tag/flbytes.d.ts.map +0 -1
- package/dist/tag/flbytes.js +0 -47
- package/dist/tag/flbytes.js.map +0 -1
- package/dist/tag/index.d.ts +0 -32
- package/dist/tag/index.d.ts.map +0 -1
- package/dist/tag/index.js +0 -121
- package/dist/tag/index.js.map +0 -1
- package/dist/tag/int.d.ts +0 -12
- package/dist/tag/int.d.ts.map +0 -1
- package/dist/tag/int.js +0 -49
- package/dist/tag/int.js.map +0 -1
- package/dist/tag/string.d.ts +0 -11
- package/dist/tag/string.d.ts.map +0 -1
- package/dist/tag/string.js +0 -37
- package/dist/tag/string.js.map +0 -1
- package/dist/tag/tag.d.ts +0 -67
- package/dist/tag/tag.d.ts.map +0 -1
- package/dist/tag/tag.js +0 -157
- package/dist/tag/tag.js.map +0 -1
- package/dist/tag/tuple.d.ts +0 -17
- package/dist/tag/tuple.d.ts.map +0 -1
- package/dist/tag/tuple.js +0 -162
- package/dist/tag/tuple.js.map +0 -1
- package/dist/tag/uint.d.ts +0 -12
- package/dist/tag/uint.d.ts.map +0 -1
- package/dist/tag/uint.js +0 -49
- package/dist/tag/uint.js.map +0 -1
- package/dist/test/did.d.ts +0 -2
- package/dist/test/did.d.ts.map +0 -1
- package/dist/test/did.js +0 -177
- package/dist/test/did.js.map +0 -1
- package/dist/utils/tag-abi-codec.d.ts +0 -69
- package/dist/utils/tag-abi-codec.d.ts.map +0 -1
- package/dist/utils/tag-abi-codec.js +0 -144
- package/dist/utils/tag-abi-codec.js.map +0 -1
- package/examples/crypto-utilities.ts +0 -140
- package/examples/ed25519-jwk.ts +0 -73
- package/examples/generate-mnemonic.ts +0 -149
- package/examples/legacy.ts +0 -33
- package/examples/olares-id-format.ts +0 -197
- package/examples/tag-builder.ts +0 -235
- package/examples/tag-nested-tuple.ts +0 -190
- package/examples/tag-simple.ts +0 -149
- package/examples/tag-tagger.ts +0 -217
- package/examples/test-nested-tuple-conversion.ts +0 -143
- package/examples/test-type-bytes-parser.ts +0 -70
- package/src/abi/ABITypeABI.ts +0 -379
- package/src/abi/RegistryABI.ts +0 -459
- package/src/tag/address.ts +0 -48
- package/src/tag/array.ts +0 -80
- package/src/tag/bool.ts +0 -43
- package/src/tag/bytes.ts +0 -38
- package/src/tag/flarray.ts +0 -99
- package/src/tag/flbytes.ts +0 -48
- package/src/tag/index.ts +0 -170
- package/src/tag/int.ts +0 -51
- package/src/tag/string.ts +0 -38
- package/src/tag/tag.ts +0 -229
- package/src/tag/tuple.ts +0 -193
- package/src/tag/uint.ts +0 -51
- package/src/test/did.ts +0 -346
- package/src/utils/tag-abi-codec.ts +0 -158
package/dist/cli.js
CHANGED
|
@@ -65,7 +65,8 @@ function parseArgs() {
|
|
|
65
65
|
'is-owner',
|
|
66
66
|
'transfer',
|
|
67
67
|
'fetch',
|
|
68
|
-
'fetch-domain'
|
|
68
|
+
'fetch-domain',
|
|
69
|
+
'fetch-all'
|
|
69
70
|
];
|
|
70
71
|
for (let i = 0; i < args.length; i++) {
|
|
71
72
|
const arg = args[i];
|
|
@@ -79,6 +80,9 @@ function parseArgs() {
|
|
|
79
80
|
else if (arg === '--network' || arg === '-n') {
|
|
80
81
|
options.network = args[++i] || 'mainnet';
|
|
81
82
|
}
|
|
83
|
+
else if (arg === '--from') {
|
|
84
|
+
options.from = args[++i];
|
|
85
|
+
}
|
|
82
86
|
else if (arg === '--rpc') {
|
|
83
87
|
options.rpc = args[++i];
|
|
84
88
|
}
|
|
@@ -138,6 +142,18 @@ function parseArgs() {
|
|
|
138
142
|
}
|
|
139
143
|
return { command, subCommand, domain, value, options };
|
|
140
144
|
}
|
|
145
|
+
function normalizeTagFromDomain(from, toDomain) {
|
|
146
|
+
if (!from) {
|
|
147
|
+
return toDomain;
|
|
148
|
+
}
|
|
149
|
+
const normalized = from.trim().toLowerCase();
|
|
150
|
+
if (normalized === 'root' ||
|
|
151
|
+
normalized === ':root' ||
|
|
152
|
+
normalized === '""') {
|
|
153
|
+
return '';
|
|
154
|
+
}
|
|
155
|
+
return (0, olares_id_1.normalizeToDomain)(from);
|
|
156
|
+
}
|
|
141
157
|
function showHelp() {
|
|
142
158
|
console.log(`
|
|
143
159
|
DID CLI Tool v${CLI_VERSION}
|
|
@@ -191,15 +207,18 @@ COMMANDS:
|
|
|
191
207
|
Define a new tag type (requires PRIVATE_KEY_OR_MNEMONIC)
|
|
192
208
|
Supported types: string, uint8, uint256, int8, int256, bool, address, bytes, bytes32
|
|
193
209
|
Array types: string[], uint8[], etc.
|
|
194
|
-
|
|
210
|
+
tag set <domain> <tag-name> <value> [--from <domain|root>]
|
|
195
211
|
Set tag value (requires PRIVATE_KEY_OR_MNEMONIC)
|
|
196
|
-
|
|
197
|
-
|
|
212
|
+
Value can be a string or JSON for arrays/objects
|
|
213
|
+
--from specifies where tag type is defined (default: same as <domain>)
|
|
214
|
+
tag get <domain> <tag-name> [--from <domain|root>]
|
|
198
215
|
Get tag value (read-only)
|
|
199
|
-
|
|
216
|
+
tag remove <domain> <tag-name> [--from <domain|root>]
|
|
200
217
|
Remove tag value (requires PRIVATE_KEY_OR_MNEMONIC)
|
|
201
|
-
|
|
202
|
-
|
|
218
|
+
tag list <domain> [--from <domain|root>]
|
|
219
|
+
List all tags with values for domain (read-only)
|
|
220
|
+
tag list-defined [domain] List all tag types defined by the domain (read-only)
|
|
221
|
+
Omit domain to query tag types defined by root
|
|
203
222
|
tag set-tagger <domain> <tag-name> <address>
|
|
204
223
|
Set tagger address for a tag (requires PRIVATE_KEY_OR_MNEMONIC)
|
|
205
224
|
tag get-tagger <domain> <tag-name>
|
|
@@ -222,7 +241,8 @@ COMMANDS:
|
|
|
222
241
|
config set <key> <value> [--network <network>]
|
|
223
242
|
Set configuration value (default network: mainnet)
|
|
224
243
|
Keys: rpc, contractDid, contractRootResolver,
|
|
225
|
-
contractAbiType, contractRootResolver2,
|
|
244
|
+
contractAbiType, contractRootResolver2,
|
|
245
|
+
supportSvcUrl, queryContract
|
|
226
246
|
|
|
227
247
|
Crypto Utility Commands:
|
|
228
248
|
crypto generate Generate a new mnemonic phrase (--words option)
|
|
@@ -242,12 +262,13 @@ COMMANDS:
|
|
|
242
262
|
|
|
243
263
|
Legacy Commands:
|
|
244
264
|
fetch <domain> Fetch domain information (alias: fetch-domain)
|
|
245
|
-
fetch-all Fetch all domains from contract
|
|
246
|
-
|
|
265
|
+
fetch-all Fetch all domains from contract and save to JSON file
|
|
266
|
+
Use --output to specify file path (default: domains-<network>-<date>.json)
|
|
247
267
|
help Show this help message
|
|
248
268
|
|
|
249
269
|
OPTIONS:
|
|
250
270
|
-n, --network <network> Network to use (sepolia|mainnet) [default: mainnet]
|
|
271
|
+
--from <domain|root> Tag source domain for tag set/get/remove/list (default: target domain)
|
|
251
272
|
--rpc <url> Custom RPC endpoint URL
|
|
252
273
|
--contract-did <address> Custom DID contract address
|
|
253
274
|
--contract-resolver <address> Custom RootResolver contract address
|
|
@@ -293,7 +314,6 @@ EXAMPLES:
|
|
|
293
314
|
# Subdomain management (auto-generate mnemonic for subdomain owner)
|
|
294
315
|
export PRIVATE_KEY_OR_MNEMONIC=0xYOUR_PRIVATE_KEY
|
|
295
316
|
did-cli subdomain register parent.com child
|
|
296
|
-
did-cli subdomain register parent.com child --words 24
|
|
297
317
|
|
|
298
318
|
# Subdomain management (use existing mnemonic for subdomain owner)
|
|
299
319
|
export SUBDOMAIN_OWNER_MNEMONIC="your twelve word mnemonic here"
|
|
@@ -305,7 +325,6 @@ EXAMPLES:
|
|
|
305
325
|
# Transfer domain ownership (auto-generate mnemonic for new owner)
|
|
306
326
|
export PRIVATE_KEY_OR_MNEMONIC=0xYOUR_PRIVATE_KEY
|
|
307
327
|
did-cli transfer example.com
|
|
308
|
-
did-cli transfer example.com --words 24
|
|
309
328
|
|
|
310
329
|
# Transfer domain ownership (use existing mnemonic for new owner)
|
|
311
330
|
export TO_MNEMONIC="your twelve word mnemonic here"
|
|
@@ -313,7 +332,7 @@ EXAMPLES:
|
|
|
313
332
|
|
|
314
333
|
# Crypto utilities
|
|
315
334
|
did-cli crypto generate --words 12
|
|
316
|
-
did-cli crypto generate --
|
|
335
|
+
did-cli crypto generate --output ./custom-path.txt
|
|
317
336
|
export PRIVATE_KEY_OR_MNEMONIC="your twelve word mnemonic here"
|
|
318
337
|
did-cli crypto address
|
|
319
338
|
did-cli crypto did
|
|
@@ -384,8 +403,15 @@ EXAMPLES:
|
|
|
384
403
|
did-cli config list # List all networks
|
|
385
404
|
did-cli config set rpc https://optimism.llamarpc.com # Set mainnet RPC
|
|
386
405
|
did-cli config set contractDid 0x1234... --network sepolia # Set sepolia contract
|
|
406
|
+
did-cli config set queryContract 0x637197... --network sepolia # Set query contract
|
|
387
407
|
did-cli config set rpc https://my-rpc.com --network custom_net # Create new network
|
|
388
408
|
|
|
409
|
+
# Fetch all domains
|
|
410
|
+
did-cli fetch-all # Fetch all mainnet domains (auto-named file)
|
|
411
|
+
did-cli fetch-all --network sepolia # Fetch all sepolia domains
|
|
412
|
+
did-cli fetch-all --output ./my-domains.json # Custom output file path
|
|
413
|
+
did-cli fetch-all --network sepolia --verbose # With progress details
|
|
414
|
+
|
|
389
415
|
# Utilities
|
|
390
416
|
did-cli convert pem-to-der ./public-key.pem
|
|
391
417
|
did-cli convert ip-to-bytes 192.168.1.1
|
|
@@ -413,27 +439,12 @@ async function fetchDomain(domain, options) {
|
|
|
413
439
|
debug_1.debug.enable();
|
|
414
440
|
debug_1.debug.setLevel(options.debugLevel);
|
|
415
441
|
}
|
|
416
|
-
// Get network configuration
|
|
417
|
-
const config = (0, config_1.getNetworkConfig)(options.network);
|
|
418
|
-
if (!config) {
|
|
419
|
-
console.error(`ā Unknown network: ${options.network}`);
|
|
420
|
-
console.error('Available networks:', (0, config_1.getAvailableNetworks)().join(', '));
|
|
421
|
-
process.exit(1);
|
|
422
|
-
}
|
|
423
|
-
// Command line parameters take priority
|
|
424
|
-
const finalConfig = {
|
|
425
|
-
rpc: options.rpc || config.rpc,
|
|
426
|
-
contractDid: options.contractDid || config.contractDid,
|
|
427
|
-
contractRootResolver: options.contractResolver || config.contractRootResolver,
|
|
428
|
-
contractAbiType: options.contractAbi || config.contractAbiType
|
|
429
|
-
};
|
|
430
442
|
if (debug_1.debug.isEnabled()) {
|
|
431
443
|
debug_1.debug.info(`š Fetching domain: ${domain}`);
|
|
432
444
|
debug_1.debug.info(`š Network: ${options.network}`);
|
|
433
|
-
debug_1.debug.info('Using configuration:', finalConfig);
|
|
434
445
|
}
|
|
435
|
-
//
|
|
436
|
-
const olaresId =
|
|
446
|
+
// Use getConsole helper to create console instance
|
|
447
|
+
const olaresId = getConsole(options);
|
|
437
448
|
// Fetch domain data
|
|
438
449
|
const domainData = await olaresId.fetchDomain(domain);
|
|
439
450
|
if (!domainData) {
|
|
@@ -450,6 +461,70 @@ async function fetchDomain(domain, options) {
|
|
|
450
461
|
process.exit(1);
|
|
451
462
|
}
|
|
452
463
|
}
|
|
464
|
+
async function fetchAll(options) {
|
|
465
|
+
try {
|
|
466
|
+
// Set debug options
|
|
467
|
+
if (options.verbose || options.debug) {
|
|
468
|
+
debug_1.debug.enable();
|
|
469
|
+
debug_1.debug.setLevel(options.debugLevel);
|
|
470
|
+
}
|
|
471
|
+
if (debug_1.debug.isEnabled()) {
|
|
472
|
+
debug_1.debug.info('š Fetching all domains');
|
|
473
|
+
debug_1.debug.info(`š Network: ${options.network}`);
|
|
474
|
+
}
|
|
475
|
+
// Use getConsole helper to create console instance
|
|
476
|
+
const olaresId = getConsole(options);
|
|
477
|
+
// Check if query contract is configured
|
|
478
|
+
if (!olaresId.queryContractAddress) {
|
|
479
|
+
console.error('ā Query contract address not configured for this network');
|
|
480
|
+
console.error(` Use: did-cli config set queryContract <address> --network ${options.network}`);
|
|
481
|
+
process.exit(1);
|
|
482
|
+
}
|
|
483
|
+
console.log('š” Fetching all domains from contract...');
|
|
484
|
+
console.log(` Network: ${options.network}`);
|
|
485
|
+
console.log(` Query Contract: ${olaresId.queryContractAddress}`);
|
|
486
|
+
console.log();
|
|
487
|
+
let totalDomains = 0;
|
|
488
|
+
const startTime = Date.now();
|
|
489
|
+
// Fetch all domains with progress
|
|
490
|
+
const domains = await olaresId.fetchAllFlat({
|
|
491
|
+
batchSize: 100,
|
|
492
|
+
onProgress: (current, total) => {
|
|
493
|
+
totalDomains = total;
|
|
494
|
+
const percent = ((current / total) * 100).toFixed(1);
|
|
495
|
+
process.stdout.write(`\rā³ Progress: ${current}/${total} (${percent}%)`);
|
|
496
|
+
}
|
|
497
|
+
});
|
|
498
|
+
const elapsed = ((Date.now() - startTime) / 1000).toFixed(2);
|
|
499
|
+
process.stdout.write('\r' + ' '.repeat(50) + '\r'); // Clear progress line
|
|
500
|
+
console.log(`ā
Fetched ${totalDomains} domains in ${elapsed}s`);
|
|
501
|
+
console.log();
|
|
502
|
+
// Determine output file path
|
|
503
|
+
const timestamp = new Date()
|
|
504
|
+
.toISOString()
|
|
505
|
+
.replace(/[:.]/g, '-')
|
|
506
|
+
.split('T')[0];
|
|
507
|
+
const defaultFilename = `domains-${options.network}-${timestamp}.json`;
|
|
508
|
+
const outputPath = options.output || path.join(process.cwd(), defaultFilename);
|
|
509
|
+
// Save to file
|
|
510
|
+
const jsonContent = JSON.stringify(domains, null, 2);
|
|
511
|
+
fs.writeFileSync(outputPath, jsonContent, 'utf-8');
|
|
512
|
+
console.log(`š¾ Saved to: ${outputPath}`);
|
|
513
|
+
console.log(` File size: ${(jsonContent.length / 1024).toFixed(2)} KB`);
|
|
514
|
+
console.log(` Total domains: ${domains.length}`);
|
|
515
|
+
if (debug_1.debug.isEnabled()) {
|
|
516
|
+
debug_1.debug.info('Fetch all completed successfully');
|
|
517
|
+
debug_1.debug.info(`Output file: ${outputPath}`);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
catch (error) {
|
|
521
|
+
console.error('ā Error fetching all domains:', error instanceof Error ? error.message : String(error));
|
|
522
|
+
if (debug_1.debug.isEnabled()) {
|
|
523
|
+
debug_1.debug.error('Full error details:', error);
|
|
524
|
+
}
|
|
525
|
+
process.exit(1);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
453
528
|
// ============================================================================
|
|
454
529
|
// Helper Functions
|
|
455
530
|
// ============================================================================
|
|
@@ -467,9 +542,10 @@ function getConsole(options) {
|
|
|
467
542
|
contractAbiType: options.contractAbi || networkConfig.contractAbiType,
|
|
468
543
|
contractRootResolver2: options.contractRootResolver2 ||
|
|
469
544
|
networkConfig.contractRootResolver2,
|
|
470
|
-
supportSvcUrl: options.supportSvcUrl || networkConfig.supportSvcUrl
|
|
545
|
+
supportSvcUrl: options.supportSvcUrl || networkConfig.supportSvcUrl,
|
|
546
|
+
queryContract: networkConfig.queryContract
|
|
471
547
|
};
|
|
472
|
-
return index_1.default.createConsole(config.rpc, config.contractDid, config.contractRootResolver, config.contractAbiType, config.contractRootResolver2, config.supportSvcUrl);
|
|
548
|
+
return index_1.default.createConsole(config.rpc, config.contractDid, config.contractRootResolver, config.contractAbiType, config.contractRootResolver2, config.supportSvcUrl, config.queryContract);
|
|
473
549
|
}
|
|
474
550
|
function getPrivateKeyOrMnemonic() {
|
|
475
551
|
const key = process.env.PRIVATE_KEY_OR_MNEMONIC;
|
|
@@ -1550,6 +1626,7 @@ async function configShow(options) {
|
|
|
1550
1626
|
console.log(` Contract ABIType: ${networkConfig.contractAbiType}`);
|
|
1551
1627
|
console.log(` Contract RootResolver2: ${networkConfig.contractRootResolver2}`);
|
|
1552
1628
|
console.log(` Support Service URL: ${networkConfig.supportSvcUrl}`);
|
|
1629
|
+
console.log(` Query Contract: ${networkConfig.queryContract || '(not set)'}`);
|
|
1553
1630
|
console.log(`\nš Configuration file: ${(0, config_1.getConfigFilePath)()}`);
|
|
1554
1631
|
}
|
|
1555
1632
|
}
|
|
@@ -1606,7 +1683,8 @@ async function configSet(key, value, options) {
|
|
|
1606
1683
|
'contractRootResolver',
|
|
1607
1684
|
'contractAbiType',
|
|
1608
1685
|
'contractRootResolver2',
|
|
1609
|
-
'supportSvcUrl'
|
|
1686
|
+
'supportSvcUrl',
|
|
1687
|
+
'queryContract'
|
|
1610
1688
|
];
|
|
1611
1689
|
if (!validKeys.includes(key)) {
|
|
1612
1690
|
console.error(`ā Invalid config key: ${key}`);
|
|
@@ -1727,14 +1805,17 @@ async function tagDefine(domain, tagName, typeString, options) {
|
|
|
1727
1805
|
/**
|
|
1728
1806
|
* Set tag value
|
|
1729
1807
|
*/
|
|
1730
|
-
async function tagSet(
|
|
1808
|
+
async function tagSet(toDomain, fromDomain, tagName, valueStr, options) {
|
|
1731
1809
|
try {
|
|
1732
1810
|
const didConsole = getConsole(options);
|
|
1733
1811
|
const privateKeyOrMnemonic = getPrivateKeyOrMnemonic();
|
|
1734
1812
|
await didConsole.setSigner(privateKeyOrMnemonic);
|
|
1735
|
-
const domainContext = didConsole.domain(
|
|
1813
|
+
const domainContext = didConsole.domain(fromDomain);
|
|
1736
1814
|
const tagCtx = domainContext.tag();
|
|
1737
|
-
|
|
1815
|
+
const fromLabel = fromDomain === '' ? '(root)' : fromDomain;
|
|
1816
|
+
console.log(`\nš Setting tag "${tagName}"`);
|
|
1817
|
+
console.log(` From: ${fromLabel}`);
|
|
1818
|
+
console.log(` To: ${toDomain}`);
|
|
1738
1819
|
console.log(` Value: ${valueStr}`);
|
|
1739
1820
|
// Try to parse value as JSON, otherwise use as string
|
|
1740
1821
|
let value;
|
|
@@ -1744,12 +1825,13 @@ async function tagSet(domain, tagName, valueStr, options) {
|
|
|
1744
1825
|
catch {
|
|
1745
1826
|
value = valueStr;
|
|
1746
1827
|
}
|
|
1747
|
-
const result = await tagCtx.setTag(
|
|
1828
|
+
const result = await tagCtx.setTag(toDomain, tagName, value);
|
|
1748
1829
|
if (result.success) {
|
|
1749
1830
|
if (options.json) {
|
|
1750
1831
|
console.log(JSON.stringify({
|
|
1751
1832
|
success: true,
|
|
1752
|
-
|
|
1833
|
+
from: fromDomain,
|
|
1834
|
+
to: toDomain,
|
|
1753
1835
|
tagName,
|
|
1754
1836
|
value,
|
|
1755
1837
|
transactionHash: result.transactionHash,
|
|
@@ -1779,18 +1861,22 @@ async function tagSet(domain, tagName, valueStr, options) {
|
|
|
1779
1861
|
/**
|
|
1780
1862
|
* Get tag value
|
|
1781
1863
|
*/
|
|
1782
|
-
async function tagGet(
|
|
1864
|
+
async function tagGet(toDomain, fromDomain, tagName, options) {
|
|
1783
1865
|
try {
|
|
1784
1866
|
const didConsole = getConsole(options);
|
|
1785
|
-
const domainContext = didConsole.domain(
|
|
1867
|
+
const domainContext = didConsole.domain(fromDomain);
|
|
1786
1868
|
const tagCtx = domainContext.tag();
|
|
1787
|
-
|
|
1788
|
-
|
|
1869
|
+
const fromLabel = fromDomain === '' ? '(root)' : fromDomain;
|
|
1870
|
+
console.log(`\nš Getting tag "${tagName}"`);
|
|
1871
|
+
console.log(` From: ${fromLabel}`);
|
|
1872
|
+
console.log(` To: ${toDomain}`);
|
|
1873
|
+
const value = await tagCtx.getTag(toDomain, tagName);
|
|
1789
1874
|
if (value !== null && value !== undefined) {
|
|
1790
1875
|
if (options.json) {
|
|
1791
1876
|
console.log(JSON.stringify({
|
|
1792
1877
|
success: true,
|
|
1793
|
-
|
|
1878
|
+
from: fromDomain,
|
|
1879
|
+
to: toDomain,
|
|
1794
1880
|
tagName,
|
|
1795
1881
|
value
|
|
1796
1882
|
}, (_, v) => (typeof v === 'bigint' ? v.toString() : v), 2));
|
|
@@ -1809,7 +1895,8 @@ async function tagGet(domain, tagName, options) {
|
|
|
1809
1895
|
if (options.json) {
|
|
1810
1896
|
console.log(JSON.stringify({
|
|
1811
1897
|
success: true,
|
|
1812
|
-
|
|
1898
|
+
from: fromDomain,
|
|
1899
|
+
to: toDomain,
|
|
1813
1900
|
tagName,
|
|
1814
1901
|
value: null
|
|
1815
1902
|
}));
|
|
@@ -1827,20 +1914,24 @@ async function tagGet(domain, tagName, options) {
|
|
|
1827
1914
|
/**
|
|
1828
1915
|
* Remove tag value
|
|
1829
1916
|
*/
|
|
1830
|
-
async function tagRemove(
|
|
1917
|
+
async function tagRemove(toDomain, fromDomain, tagName, options) {
|
|
1831
1918
|
try {
|
|
1832
1919
|
const didConsole = getConsole(options);
|
|
1833
1920
|
const privateKeyOrMnemonic = getPrivateKeyOrMnemonic();
|
|
1834
1921
|
await didConsole.setSigner(privateKeyOrMnemonic);
|
|
1835
|
-
const domainContext = didConsole.domain(
|
|
1922
|
+
const domainContext = didConsole.domain(fromDomain);
|
|
1836
1923
|
const tagCtx = domainContext.tag();
|
|
1837
|
-
|
|
1838
|
-
|
|
1924
|
+
const fromLabel = fromDomain === '' ? '(root)' : fromDomain;
|
|
1925
|
+
console.log(`\nšļø Removing tag "${tagName}"`);
|
|
1926
|
+
console.log(` From: ${fromLabel}`);
|
|
1927
|
+
console.log(` To: ${toDomain}`);
|
|
1928
|
+
const result = await tagCtx.removeTag(toDomain, tagName);
|
|
1839
1929
|
if (result.success) {
|
|
1840
1930
|
if (options.json) {
|
|
1841
1931
|
console.log(JSON.stringify({
|
|
1842
1932
|
success: true,
|
|
1843
|
-
|
|
1933
|
+
from: fromDomain,
|
|
1934
|
+
to: toDomain,
|
|
1844
1935
|
tagName,
|
|
1845
1936
|
transactionHash: result.transactionHash,
|
|
1846
1937
|
gasUsed: result.gasUsed?.toString(),
|
|
@@ -1869,16 +1960,21 @@ async function tagRemove(domain, tagName, options) {
|
|
|
1869
1960
|
/**
|
|
1870
1961
|
* List all tags for a domain
|
|
1871
1962
|
*/
|
|
1872
|
-
async function tagList(
|
|
1963
|
+
async function tagList(toDomain, fromDomain, options) {
|
|
1873
1964
|
try {
|
|
1874
1965
|
const didConsole = getConsole(options);
|
|
1875
|
-
const domainContext = didConsole.domain(
|
|
1876
|
-
|
|
1877
|
-
const
|
|
1966
|
+
const domainContext = didConsole.domain(fromDomain);
|
|
1967
|
+
const tagCtx = domainContext.tag();
|
|
1968
|
+
const fromLabel = fromDomain === '' ? '(root)' : fromDomain;
|
|
1969
|
+
console.log(`\nš Listing all tags`);
|
|
1970
|
+
console.log(` From: ${fromLabel}`);
|
|
1971
|
+
console.log(` To: ${toDomain}`);
|
|
1972
|
+
const tags = await tagCtx.getAllTags(toDomain);
|
|
1878
1973
|
if (options.json) {
|
|
1879
1974
|
console.log(JSON.stringify({
|
|
1880
1975
|
success: true,
|
|
1881
|
-
|
|
1976
|
+
from: fromDomain,
|
|
1977
|
+
to: toDomain,
|
|
1882
1978
|
count: tags.length,
|
|
1883
1979
|
tags
|
|
1884
1980
|
}, (_, v) => (typeof v === 'bigint' ? v.toString() : v), 2));
|
|
@@ -1908,7 +2004,8 @@ async function tagListDefined(domain, options) {
|
|
|
1908
2004
|
try {
|
|
1909
2005
|
const didConsole = getConsole(options);
|
|
1910
2006
|
const domainContext = didConsole.domain(domain);
|
|
1911
|
-
|
|
2007
|
+
const domainLabel = domain === '' ? '(root)' : domain;
|
|
2008
|
+
console.log(`\nš Listing tag types defined by: ${domainLabel}`);
|
|
1912
2009
|
const tags = await domainContext.getDefinedTags();
|
|
1913
2010
|
if (options.json) {
|
|
1914
2011
|
console.log(JSON.stringify({
|
|
@@ -2221,8 +2318,9 @@ async function main() {
|
|
|
2221
2318
|
}
|
|
2222
2319
|
else {
|
|
2223
2320
|
console.error('ā Error: Usage: did-cli config set <key> <value> [--network <network>]');
|
|
2224
|
-
console.error(' Valid keys: rpc, contractDid, contractRootResolver, contractAbiType, contractRootResolver2, supportSvcUrl');
|
|
2321
|
+
console.error(' Valid keys: rpc, contractDid, contractRootResolver, contractAbiType, contractRootResolver2, supportSvcUrl, queryContract');
|
|
2225
2322
|
console.error('\n Example: did-cli config set rpc https://optimism.llamarpc.com --network mainnet');
|
|
2323
|
+
console.error(' Example: did-cli config set queryContract 0xAf0430AB9f2450c52E7401846C7CA702D53eCFC2 --network sepolia');
|
|
2226
2324
|
process.exit(1);
|
|
2227
2325
|
}
|
|
2228
2326
|
break;
|
|
@@ -2371,7 +2469,7 @@ async function main() {
|
|
|
2371
2469
|
case 'set':
|
|
2372
2470
|
if (!domain || !value) {
|
|
2373
2471
|
console.error('ā Error: tag set requires <domain>, <tag-name> and <value>');
|
|
2374
|
-
console.error('Usage: did-cli tag set <domain> <tag-name> <value>');
|
|
2472
|
+
console.error('Usage: did-cli tag set <domain> <tag-name> <value> [--from <domain|root>]');
|
|
2375
2473
|
console.error(' Value can be a string or JSON (e.g., \'["item1","item2"]\' for arrays)');
|
|
2376
2474
|
console.error('\nNote: Set PRIVATE_KEY_OR_MNEMONIC environment variable first');
|
|
2377
2475
|
process.exit(1);
|
|
@@ -2380,14 +2478,15 @@ async function main() {
|
|
|
2380
2478
|
const args = process.argv.slice(2);
|
|
2381
2479
|
const setIdx = args.indexOf('set');
|
|
2382
2480
|
if (setIdx >= 0 && args.length > setIdx + 3) {
|
|
2383
|
-
const actualDomain = args[setIdx + 1];
|
|
2481
|
+
const actualDomain = (0, olares_id_1.normalizeToDomain)(args[setIdx + 1]);
|
|
2482
|
+
const fromDomain = normalizeTagFromDomain(options.from, actualDomain);
|
|
2384
2483
|
const tagName = args[setIdx + 2];
|
|
2385
2484
|
const valueStr = args[setIdx + 3];
|
|
2386
|
-
await tagSet(actualDomain, tagName, valueStr, options);
|
|
2485
|
+
await tagSet(actualDomain, fromDomain, tagName, valueStr, options);
|
|
2387
2486
|
}
|
|
2388
2487
|
else {
|
|
2389
2488
|
console.error('ā Error: Missing arguments for tag set');
|
|
2390
|
-
console.error('Usage: did-cli tag set <domain> <tag-name> <value>');
|
|
2489
|
+
console.error('Usage: did-cli tag set <domain> <tag-name> <value> [--from <domain|root>]');
|
|
2391
2490
|
process.exit(1);
|
|
2392
2491
|
}
|
|
2393
2492
|
}
|
|
@@ -2395,20 +2494,21 @@ async function main() {
|
|
|
2395
2494
|
case 'get':
|
|
2396
2495
|
if (!domain) {
|
|
2397
2496
|
console.error('ā Error: tag get requires <domain> and <tag-name>');
|
|
2398
|
-
console.error('Usage: did-cli tag get <domain> <tag-name>');
|
|
2497
|
+
console.error('Usage: did-cli tag get <domain> <tag-name> [--from <domain|root>]');
|
|
2399
2498
|
process.exit(1);
|
|
2400
2499
|
}
|
|
2401
2500
|
{
|
|
2402
2501
|
const args = process.argv.slice(2);
|
|
2403
2502
|
const getIdx = args.indexOf('get');
|
|
2404
2503
|
if (getIdx >= 0 && args.length > getIdx + 2) {
|
|
2405
|
-
const actualDomain = args[getIdx + 1];
|
|
2504
|
+
const actualDomain = (0, olares_id_1.normalizeToDomain)(args[getIdx + 1]);
|
|
2505
|
+
const fromDomain = normalizeTagFromDomain(options.from, actualDomain);
|
|
2406
2506
|
const tagName = args[getIdx + 2];
|
|
2407
|
-
await tagGet(actualDomain, tagName, options);
|
|
2507
|
+
await tagGet(actualDomain, fromDomain, tagName, options);
|
|
2408
2508
|
}
|
|
2409
2509
|
else {
|
|
2410
2510
|
console.error('ā Error: Missing arguments for tag get');
|
|
2411
|
-
console.error('Usage: did-cli tag get <domain> <tag-name>');
|
|
2511
|
+
console.error('Usage: did-cli tag get <domain> <tag-name> [--from <domain|root>]');
|
|
2412
2512
|
process.exit(1);
|
|
2413
2513
|
}
|
|
2414
2514
|
}
|
|
@@ -2416,7 +2516,7 @@ async function main() {
|
|
|
2416
2516
|
case 'remove':
|
|
2417
2517
|
if (!domain) {
|
|
2418
2518
|
console.error('ā Error: tag remove requires <domain> and <tag-name>');
|
|
2419
|
-
console.error('Usage: did-cli tag remove <domain> <tag-name>');
|
|
2519
|
+
console.error('Usage: did-cli tag remove <domain> <tag-name> [--from <domain|root>]');
|
|
2420
2520
|
console.error('\nNote: Set PRIVATE_KEY_OR_MNEMONIC environment variable first');
|
|
2421
2521
|
process.exit(1);
|
|
2422
2522
|
}
|
|
@@ -2424,13 +2524,14 @@ async function main() {
|
|
|
2424
2524
|
const args = process.argv.slice(2);
|
|
2425
2525
|
const removeIdx = args.indexOf('remove');
|
|
2426
2526
|
if (removeIdx >= 0 && args.length > removeIdx + 2) {
|
|
2427
|
-
const actualDomain = args[removeIdx + 1];
|
|
2527
|
+
const actualDomain = (0, olares_id_1.normalizeToDomain)(args[removeIdx + 1]);
|
|
2528
|
+
const fromDomain = normalizeTagFromDomain(options.from, actualDomain);
|
|
2428
2529
|
const tagName = args[removeIdx + 2];
|
|
2429
|
-
await tagRemove(actualDomain, tagName, options);
|
|
2530
|
+
await tagRemove(actualDomain, fromDomain, tagName, options);
|
|
2430
2531
|
}
|
|
2431
2532
|
else {
|
|
2432
2533
|
console.error('ā Error: Missing arguments for tag remove');
|
|
2433
|
-
console.error('Usage: did-cli tag remove <domain> <tag-name>');
|
|
2534
|
+
console.error('Usage: did-cli tag remove <domain> <tag-name> [--from <domain|root>]');
|
|
2434
2535
|
process.exit(1);
|
|
2435
2536
|
}
|
|
2436
2537
|
}
|
|
@@ -2438,18 +2539,15 @@ async function main() {
|
|
|
2438
2539
|
case 'list':
|
|
2439
2540
|
if (!domain) {
|
|
2440
2541
|
console.error('ā Error: Domain argument is required');
|
|
2441
|
-
console.error('Usage: did-cli tag list <domain>');
|
|
2542
|
+
console.error('Usage: did-cli tag list <domain> [--from <domain|root>]');
|
|
2442
2543
|
process.exit(1);
|
|
2443
2544
|
}
|
|
2444
|
-
|
|
2545
|
+
const fromDomain = normalizeTagFromDomain(options.from, domain);
|
|
2546
|
+
await tagList(domain, fromDomain, options);
|
|
2445
2547
|
break;
|
|
2446
2548
|
case 'list-defined':
|
|
2447
|
-
|
|
2448
|
-
|
|
2449
|
-
console.error('Usage: did-cli tag list-defined <domain>');
|
|
2450
|
-
process.exit(1);
|
|
2451
|
-
}
|
|
2452
|
-
await tagListDefined(domain, options);
|
|
2549
|
+
// domain defaults to "" (root) when not provided
|
|
2550
|
+
await tagListDefined(domain ?? '', options);
|
|
2453
2551
|
break;
|
|
2454
2552
|
case 'set-tagger':
|
|
2455
2553
|
if (!domain || !value) {
|
|
@@ -2513,6 +2611,9 @@ async function main() {
|
|
|
2513
2611
|
}
|
|
2514
2612
|
await fetchDomain(domain, options);
|
|
2515
2613
|
break;
|
|
2614
|
+
case 'fetch-all':
|
|
2615
|
+
await fetchAll(options);
|
|
2616
|
+
break;
|
|
2516
2617
|
default:
|
|
2517
2618
|
console.error(`ā Unknown command: ${command}`);
|
|
2518
2619
|
console.error('Run "did-cli help" for usage information');
|