Filter by arbitrary attributes (#40)
All checks were successful
Tests / sdk_tests (push) Successful in 5m37s
All checks were successful
Tests / sdk_tests (push) Successful in 5m37s
``` laconic cns record list \ --type GeneralRecord \ --value anything-goes-here \ --category filter-by-this \ --bond-id d0094c75e267abb709d631abd7bfaa8d610413f5766ddfc07db735822905d641 \ --owner AB0A17A1EBF47DDCF6AB267CA8E07B7EA836E1AF \ --all ``` Reviewed-on: #40 Co-authored-by: Thomas E Lackey <telackey@bozemanpass.com> Co-committed-by: Thomas E Lackey <telackey@bozemanpass.com>
This commit is contained in:
parent
1fa32a3cc1
commit
6e0829d91f
@ -12,6 +12,9 @@ export const builder = {
|
|||||||
'bond-id': {
|
'bond-id': {
|
||||||
type: 'string'
|
type: 'string'
|
||||||
},
|
},
|
||||||
|
owner: {
|
||||||
|
type: 'string'
|
||||||
|
},
|
||||||
type: {
|
type: {
|
||||||
type: 'string'
|
type: 'string'
|
||||||
},
|
},
|
||||||
@ -27,7 +30,13 @@ export const builder = {
|
|||||||
export const handler = async (argv: Arguments) => {
|
export const handler = async (argv: Arguments) => {
|
||||||
const { services: { cns: cnsConfig } } = getConfig(argv.config as string)
|
const { services: { cns: cnsConfig } } = getConfig(argv.config as string)
|
||||||
const { restEndpoint, gqlEndpoint, chainId } = getConnectionInfo(argv, cnsConfig);
|
const { restEndpoint, gqlEndpoint, chainId } = getConnectionInfo(argv, cnsConfig);
|
||||||
const { type, name, bondId, all } = argv;
|
const { type, name, bondId, owner, all } = argv;
|
||||||
|
const filters: any = {};
|
||||||
|
|
||||||
|
const filterArgs = argv._.slice(3);
|
||||||
|
for (let i = 0; i < filterArgs.length-1; i+=2) {
|
||||||
|
filters[String(filterArgs[i]).replace(/^-+/,"")] = filterArgs[i+1];
|
||||||
|
}
|
||||||
|
|
||||||
assert(restEndpoint, 'Invalid CNS REST endpoint.');
|
assert(restEndpoint, 'Invalid CNS REST endpoint.');
|
||||||
assert(gqlEndpoint, 'Invalid CNS GQL endpoint.');
|
assert(gqlEndpoint, 'Invalid CNS GQL endpoint.');
|
||||||
@ -35,6 +44,16 @@ export const handler = async (argv: Arguments) => {
|
|||||||
|
|
||||||
const registry = new Registry(gqlEndpoint, restEndpoint, chainId);
|
const registry = new Registry(gqlEndpoint, restEndpoint, chainId);
|
||||||
|
|
||||||
const result = await registry.queryRecords({ bondId, type, name }, all as boolean);
|
let result = await registry.queryRecords({...filters, type, name}, all as boolean);
|
||||||
queryOutput(result,argv.output)
|
|
||||||
|
// Apply ex post filters.
|
||||||
|
if (bondId) {
|
||||||
|
result = result.filter(v => v.bondId === bondId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (owner) {
|
||||||
|
result = result.filter(v => v.owners?.find((e: string) => e === owner));
|
||||||
|
}
|
||||||
|
|
||||||
|
queryOutput(result, argv.output)
|
||||||
}
|
}
|
||||||
|
@ -6,5 +6,6 @@ export const desc = 'Record operations.';
|
|||||||
|
|
||||||
exports.builder = (yargs: yargs.Argv) => {
|
exports.builder = (yargs: yargs.Argv) => {
|
||||||
return yargs.commandDir('record-cmds')
|
return yargs.commandDir('record-cmds')
|
||||||
|
.parserConfiguration({'unknown-options-as-args': true})
|
||||||
.demandCommand()
|
.demandCommand()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user