Filter by arbitrary attributes #40

Merged
telackey merged 3 commits from telackey/filterany into main 2023-11-28 23:22:58 +00:00
Showing only changes of commit d3fc1658c9 - Show all commits

View File

@ -9,6 +9,12 @@ export const command = 'list';
export const desc = 'List records.';
export const builder = {
'bond-id': {
type: 'string'
},
owner: {
type: 'string'
},
type: {
type: 'string'
},
@ -24,7 +30,7 @@ export const builder = {
export const handler = async (argv: Arguments) => {
const { services: { cns: cnsConfig } } = getConfig(argv.config as string)
const { restEndpoint, gqlEndpoint, chainId } = getConnectionInfo(argv, cnsConfig);
const { type, name, all } = argv;
const { type, name, bondId, owner, all } = argv;
const filters: any = {};
const filterArgs = argv._.slice(3);
@ -38,15 +44,25 @@ export const handler = async (argv: Arguments) => {
const registry = new Registry(gqlEndpoint, restEndpoint, chainId);
let result: any[];
try {
const result = await registry.queryRecords({...filters, type, name}, all as boolean);
queryOutput(result, argv.output)
result = await registry.queryRecords({...filters, type, name}, all as boolean);
} catch (e) {
// https://git.vdb.to/cerc-io/laconicd/issues/118
if (Array.isArray(e) && (e as []).length && e[0].message?.includes("store doesn't have key")) {
queryOutput([], argv.output)
result = [];
} else {
throw e;
}
}
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)
}