@execufunction/cli 0.1.0
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/README.md +161 -0
- package/bin/dev.js +13 -0
- package/bin/run.js +13 -0
- package/dist/commands/auth/login.d.ts +14 -0
- package/dist/commands/auth/login.d.ts.map +1 -0
- package/dist/commands/auth/login.js +33 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.d.ts +13 -0
- package/dist/commands/auth/logout.d.ts.map +1 -0
- package/dist/commands/auth/logout.js +20 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/auth/status.d.ts +14 -0
- package/dist/commands/auth/status.d.ts.map +1 -0
- package/dist/commands/auth/status.js +32 -0
- package/dist/commands/auth/status.js.map +1 -0
- package/dist/commands/calendar/create.d.ts +17 -0
- package/dist/commands/calendar/create.d.ts.map +1 -0
- package/dist/commands/calendar/create.js +37 -0
- package/dist/commands/calendar/create.js.map +1 -0
- package/dist/commands/calendar/delete.d.ts +15 -0
- package/dist/commands/calendar/delete.d.ts.map +1 -0
- package/dist/commands/calendar/delete.js +31 -0
- package/dist/commands/calendar/delete.js.map +1 -0
- package/dist/commands/calendar/list.d.ts +14 -0
- package/dist/commands/calendar/list.d.ts.map +1 -0
- package/dist/commands/calendar/list.js +37 -0
- package/dist/commands/calendar/list.js.map +1 -0
- package/dist/commands/calendar/update.d.ts +19 -0
- package/dist/commands/calendar/update.d.ts.map +1 -0
- package/dist/commands/calendar/update.js +41 -0
- package/dist/commands/calendar/update.js.map +1 -0
- package/dist/commands/code/blame.d.ts +15 -0
- package/dist/commands/code/blame.d.ts.map +1 -0
- package/dist/commands/code/blame.js +32 -0
- package/dist/commands/code/blame.js.map +1 -0
- package/dist/commands/code/expertise.d.ts +14 -0
- package/dist/commands/code/expertise.d.ts.map +1 -0
- package/dist/commands/code/expertise.js +25 -0
- package/dist/commands/code/expertise.js.map +1 -0
- package/dist/commands/code/history.d.ts +16 -0
- package/dist/commands/code/history.d.ts.map +1 -0
- package/dist/commands/code/history.js +37 -0
- package/dist/commands/code/history.js.map +1 -0
- package/dist/commands/code/link.d.ts +18 -0
- package/dist/commands/code/link.d.ts.map +1 -0
- package/dist/commands/code/link.js +34 -0
- package/dist/commands/code/link.js.map +1 -0
- package/dist/commands/code/memory/delete.d.ts +15 -0
- package/dist/commands/code/memory/delete.d.ts.map +1 -0
- package/dist/commands/code/memory/delete.js +31 -0
- package/dist/commands/code/memory/delete.js.map +1 -0
- package/dist/commands/code/memory/list.d.ts +13 -0
- package/dist/commands/code/memory/list.d.ts.map +1 -0
- package/dist/commands/code/memory/list.js +34 -0
- package/dist/commands/code/memory/list.js.map +1 -0
- package/dist/commands/code/memory/search.d.ts +17 -0
- package/dist/commands/code/memory/search.d.ts.map +1 -0
- package/dist/commands/code/memory/search.js +43 -0
- package/dist/commands/code/memory/search.js.map +1 -0
- package/dist/commands/code/memory/store.d.ts +15 -0
- package/dist/commands/code/memory/store.d.ts.map +1 -0
- package/dist/commands/code/memory/store.js +36 -0
- package/dist/commands/code/memory/store.js.map +1 -0
- package/dist/commands/code/who-knows.d.ts +16 -0
- package/dist/commands/code/who-knows.d.ts.map +1 -0
- package/dist/commands/code/who-knows.js +34 -0
- package/dist/commands/code/who-knows.js.map +1 -0
- package/dist/commands/codebase/delete.d.ts +15 -0
- package/dist/commands/codebase/delete.d.ts.map +1 -0
- package/dist/commands/codebase/delete.js +31 -0
- package/dist/commands/codebase/delete.js.map +1 -0
- package/dist/commands/codebase/index.d.ts +18 -0
- package/dist/commands/codebase/index.d.ts.map +1 -0
- package/dist/commands/codebase/index.js +52 -0
- package/dist/commands/codebase/index.js.map +1 -0
- package/dist/commands/codebase/list.d.ts +11 -0
- package/dist/commands/codebase/list.d.ts.map +1 -0
- package/dist/commands/codebase/list.js +28 -0
- package/dist/commands/codebase/list.js.map +1 -0
- package/dist/commands/codebase/register.d.ts +15 -0
- package/dist/commands/codebase/register.d.ts.map +1 -0
- package/dist/commands/codebase/register.js +31 -0
- package/dist/commands/codebase/register.js.map +1 -0
- package/dist/commands/codebase/search.d.ts +18 -0
- package/dist/commands/codebase/search.d.ts.map +1 -0
- package/dist/commands/codebase/search.js +50 -0
- package/dist/commands/codebase/search.js.map +1 -0
- package/dist/commands/codebase/snapshot.d.ts +16 -0
- package/dist/commands/codebase/snapshot.d.ts.map +1 -0
- package/dist/commands/codebase/snapshot.js +52 -0
- package/dist/commands/codebase/snapshot.js.map +1 -0
- package/dist/commands/codebase/status.d.ts +14 -0
- package/dist/commands/codebase/status.d.ts.map +1 -0
- package/dist/commands/codebase/status.js +34 -0
- package/dist/commands/codebase/status.js.map +1 -0
- package/dist/commands/documents/upload.d.ts +17 -0
- package/dist/commands/documents/upload.d.ts.map +1 -0
- package/dist/commands/documents/upload.js +37 -0
- package/dist/commands/documents/upload.js.map +1 -0
- package/dist/commands/notes/create.d.ts +15 -0
- package/dist/commands/notes/create.d.ts.map +1 -0
- package/dist/commands/notes/create.js +35 -0
- package/dist/commands/notes/create.js.map +1 -0
- package/dist/commands/notes/delete.d.ts +15 -0
- package/dist/commands/notes/delete.d.ts.map +1 -0
- package/dist/commands/notes/delete.js +31 -0
- package/dist/commands/notes/delete.js.map +1 -0
- package/dist/commands/notes/get.d.ts +14 -0
- package/dist/commands/notes/get.d.ts.map +1 -0
- package/dist/commands/notes/get.js +38 -0
- package/dist/commands/notes/get.js.map +1 -0
- package/dist/commands/notes/list.d.ts +14 -0
- package/dist/commands/notes/list.d.ts.map +1 -0
- package/dist/commands/notes/list.js +39 -0
- package/dist/commands/notes/list.js.map +1 -0
- package/dist/commands/notes/search.d.ts +16 -0
- package/dist/commands/notes/search.d.ts.map +1 -0
- package/dist/commands/notes/search.js +37 -0
- package/dist/commands/notes/search.js.map +1 -0
- package/dist/commands/notes/update.d.ts +17 -0
- package/dist/commands/notes/update.d.ts.map +1 -0
- package/dist/commands/notes/update.js +38 -0
- package/dist/commands/notes/update.js.map +1 -0
- package/dist/commands/people/list.d.ts +12 -0
- package/dist/commands/people/list.d.ts.map +1 -0
- package/dist/commands/people/list.js +30 -0
- package/dist/commands/people/list.js.map +1 -0
- package/dist/commands/people/search.d.ts +15 -0
- package/dist/commands/people/search.d.ts.map +1 -0
- package/dist/commands/people/search.js +33 -0
- package/dist/commands/people/search.js.map +1 -0
- package/dist/commands/projects/archive.d.ts +15 -0
- package/dist/commands/projects/archive.d.ts.map +1 -0
- package/dist/commands/projects/archive.js +31 -0
- package/dist/commands/projects/archive.js.map +1 -0
- package/dist/commands/projects/context.d.ts +14 -0
- package/dist/commands/projects/context.d.ts.map +1 -0
- package/dist/commands/projects/context.js +52 -0
- package/dist/commands/projects/context.js.map +1 -0
- package/dist/commands/projects/create.d.ts +15 -0
- package/dist/commands/projects/create.d.ts.map +1 -0
- package/dist/commands/projects/create.js +35 -0
- package/dist/commands/projects/create.js.map +1 -0
- package/dist/commands/projects/list.d.ts +13 -0
- package/dist/commands/projects/list.d.ts.map +1 -0
- package/dist/commands/projects/list.js +37 -0
- package/dist/commands/projects/list.js.map +1 -0
- package/dist/commands/projects/update.d.ts +18 -0
- package/dist/commands/projects/update.d.ts.map +1 -0
- package/dist/commands/projects/update.js +41 -0
- package/dist/commands/projects/update.js.map +1 -0
- package/dist/commands/tasks/complete.d.ts +14 -0
- package/dist/commands/tasks/complete.d.ts.map +1 -0
- package/dist/commands/tasks/complete.js +25 -0
- package/dist/commands/tasks/complete.js.map +1 -0
- package/dist/commands/tasks/create.d.ts +17 -0
- package/dist/commands/tasks/create.d.ts.map +1 -0
- package/dist/commands/tasks/create.js +41 -0
- package/dist/commands/tasks/create.js.map +1 -0
- package/dist/commands/tasks/delete.d.ts +15 -0
- package/dist/commands/tasks/delete.d.ts.map +1 -0
- package/dist/commands/tasks/delete.js +31 -0
- package/dist/commands/tasks/delete.js.map +1 -0
- package/dist/commands/tasks/get.d.ts +14 -0
- package/dist/commands/tasks/get.d.ts.map +1 -0
- package/dist/commands/tasks/get.js +37 -0
- package/dist/commands/tasks/get.js.map +1 -0
- package/dist/commands/tasks/list.d.ts +15 -0
- package/dist/commands/tasks/list.d.ts.map +1 -0
- package/dist/commands/tasks/list.js +45 -0
- package/dist/commands/tasks/list.js.map +1 -0
- package/dist/commands/tasks/update.d.ts +20 -0
- package/dist/commands/tasks/update.d.ts.map +1 -0
- package/dist/commands/tasks/update.js +50 -0
- package/dist/commands/tasks/update.js.map +1 -0
- package/dist/commands/vault/create.d.ts +20 -0
- package/dist/commands/vault/create.d.ts.map +1 -0
- package/dist/commands/vault/create.js +53 -0
- package/dist/commands/vault/create.js.map +1 -0
- package/dist/commands/vault/list.d.ts +14 -0
- package/dist/commands/vault/list.d.ts.map +1 -0
- package/dist/commands/vault/list.js +39 -0
- package/dist/commands/vault/list.js.map +1 -0
- package/dist/commands/vault/read.d.ts +14 -0
- package/dist/commands/vault/read.d.ts.map +1 -0
- package/dist/commands/vault/read.js +33 -0
- package/dist/commands/vault/read.js.map +1 -0
- package/dist/commands/vault/search.d.ts +15 -0
- package/dist/commands/vault/search.d.ts.map +1 -0
- package/dist/commands/vault/search.js +33 -0
- package/dist/commands/vault/search.js.map +1 -0
- package/dist/commands/vault/update.d.ts +19 -0
- package/dist/commands/vault/update.d.ts.map +1 -0
- package/dist/commands/vault/update.js +41 -0
- package/dist/commands/vault/update.js.map +1 -0
- package/dist/hooks/init.d.ts +4 -0
- package/dist/hooks/init.d.ts.map +1 -0
- package/dist/hooks/init.js +8 -0
- package/dist/hooks/init.js.map +1 -0
- package/dist/lib/auth.d.ts +9 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +22 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/base-command.d.ts +31 -0
- package/dist/lib/base-command.d.ts.map +1 -0
- package/dist/lib/base-command.js +76 -0
- package/dist/lib/base-command.js.map +1 -0
- package/dist/lib/config.d.ts +8 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +36 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/output.d.ts +12 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +95 -0
- package/dist/lib/output.js.map +1 -0
- package/oclif.manifest.json +3740 -0
- package/package.json +73 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BaseCommand } from '../../lib/base-command.js';
|
|
2
|
+
export default class VaultRead extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static args: {
|
|
5
|
+
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
};
|
|
7
|
+
static flags: {
|
|
8
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
'api-url': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
'no-input': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<unknown>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/commands/vault/read.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAC;AAGtD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAC,WAAW,SAAoD;IAEtE,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;MAEV;IAEI,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;CAmB9B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
|
+
const base_command_js_1 = require("../../lib/base-command.js");
|
|
5
|
+
const output_js_1 = require("../../lib/output.js");
|
|
6
|
+
class VaultRead extends base_command_js_1.BaseCommand {
|
|
7
|
+
static description = 'Decrypt and read a vault secret (audit-logged)';
|
|
8
|
+
static args = {
|
|
9
|
+
id: core_1.Args.string({ description: 'Vault entry ID', required: true }),
|
|
10
|
+
};
|
|
11
|
+
static flags = {
|
|
12
|
+
...base_command_js_1.BaseCommand.baseFlags,
|
|
13
|
+
};
|
|
14
|
+
async run() {
|
|
15
|
+
const { args, flags } = await this.parse(VaultRead);
|
|
16
|
+
const client = await this.client(flags);
|
|
17
|
+
const response = await client.readVaultSecret(args.id);
|
|
18
|
+
this.handleApiError(response);
|
|
19
|
+
const secret = response.data;
|
|
20
|
+
if (!this.jsonEnabled()) {
|
|
21
|
+
const payload = secret.payload;
|
|
22
|
+
if (payload) {
|
|
23
|
+
(0, output_js_1.renderDetail)(Object.entries(payload).map(([k, v]) => [k, v]));
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this.log(JSON.stringify(secret, null, 2));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return response.data;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.default = VaultRead;
|
|
33
|
+
//# sourceMappingURL=read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/commands/vault/read.ts"],"names":[],"mappings":";;AAAA,sCAAiC;AACjC,+DAAsD;AACtD,mDAAiD;AAEjD,MAAqB,SAAU,SAAQ,6BAAW;IAChD,MAAM,CAAC,WAAW,GAAG,gDAAgD,CAAC;IAEtE,MAAM,CAAC,IAAI,GAAG;QACZ,EAAE,EAAE,WAAI,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;KACjE,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,6BAAW,CAAC,SAAS;KACzB,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAE9B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAA+B,CAAC;QAExD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,MAAM,CAAC,OAA8C,CAAC;YACtE,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAA,wBAAY,EAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;;AA7BH,4BA8BC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BaseCommand } from '../../lib/base-command.js';
|
|
2
|
+
export default class VaultSearch extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static args: {
|
|
5
|
+
query: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
};
|
|
7
|
+
static flags: {
|
|
8
|
+
limit: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
'api-url': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
'no-input': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<unknown>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/commands/vault/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAC;AAGtD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,WAAW,SAA0B;IAE5C,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;;MAGV;IAEI,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;CAmB9B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
|
+
const base_command_js_1 = require("../../lib/base-command.js");
|
|
5
|
+
const output_js_1 = require("../../lib/output.js");
|
|
6
|
+
class VaultSearch extends base_command_js_1.BaseCommand {
|
|
7
|
+
static description = 'Search vault entries';
|
|
8
|
+
static args = {
|
|
9
|
+
query: core_1.Args.string({ description: 'Search query', required: true }),
|
|
10
|
+
};
|
|
11
|
+
static flags = {
|
|
12
|
+
...base_command_js_1.BaseCommand.baseFlags,
|
|
13
|
+
limit: core_1.Flags.integer({ description: 'Maximum number of results' }),
|
|
14
|
+
};
|
|
15
|
+
async run() {
|
|
16
|
+
const { args, flags } = await this.parse(VaultSearch);
|
|
17
|
+
const client = await this.client(flags);
|
|
18
|
+
const response = await client.searchVaultEntries(args.query, flags.limit);
|
|
19
|
+
this.handleApiError(response);
|
|
20
|
+
const entries = this.unwrapList(response, 'entries');
|
|
21
|
+
if (!this.jsonEnabled()) {
|
|
22
|
+
(0, output_js_1.renderTable)(entries, [
|
|
23
|
+
{ key: 'id', header: 'ID' },
|
|
24
|
+
{ key: 'name', header: 'Name' },
|
|
25
|
+
{ key: 'entryType', header: 'Type' },
|
|
26
|
+
{ key: 'category', header: 'Category' },
|
|
27
|
+
]);
|
|
28
|
+
}
|
|
29
|
+
return entries;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.default = VaultSearch;
|
|
33
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/vault/search.ts"],"names":[],"mappings":";;AAAA,sCAAwC;AACxC,+DAAsD;AACtD,mDAAgD;AAEhD,MAAqB,WAAY,SAAQ,6BAAW;IAClD,MAAM,CAAC,WAAW,GAAG,sBAAsB,CAAC;IAE5C,MAAM,CAAC,IAAI,GAAG;QACZ,KAAK,EAAE,WAAI,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;KAClE,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,6BAAW,CAAC,SAAS;QACxB,KAAK,EAAE,YAAK,CAAC,OAAO,CAAC,EAAC,WAAW,EAAE,2BAA2B,EAAC,CAAC;KACjE,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1E,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAE9B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAErD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAA,uBAAW,EAAC,OAAO,EAAE;gBACnB,EAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAC;gBACzB,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAC;gBAC7B,EAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAC;gBAClC,EAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAC;aACtC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;;AA9BH,8BA+BC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BaseCommand } from '../../lib/base-command.js';
|
|
2
|
+
export default class VaultUpdate extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static args: {
|
|
5
|
+
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
};
|
|
7
|
+
static flags: {
|
|
8
|
+
name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
tags: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
category: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
url: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
'api-url': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
'no-input': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
};
|
|
17
|
+
run(): Promise<unknown>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/vault/update.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAC;AAEtD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,WAAW,SAAiC;IAEnD,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;;;;;;MAOV;IAEI,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;CAoB9B"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
|
+
const base_command_js_1 = require("../../lib/base-command.js");
|
|
5
|
+
class VaultUpdate extends base_command_js_1.BaseCommand {
|
|
6
|
+
static description = 'Update vault entry metadata';
|
|
7
|
+
static args = {
|
|
8
|
+
id: core_1.Args.string({ description: 'Vault entry ID', required: true }),
|
|
9
|
+
};
|
|
10
|
+
static flags = {
|
|
11
|
+
...base_command_js_1.BaseCommand.baseFlags,
|
|
12
|
+
name: core_1.Flags.string({ description: 'Entry name' }),
|
|
13
|
+
description: core_1.Flags.string({ description: 'Description' }),
|
|
14
|
+
tags: core_1.Flags.string({ description: 'Comma-separated tags' }),
|
|
15
|
+
category: core_1.Flags.string({ description: 'Category' }),
|
|
16
|
+
url: core_1.Flags.string({ description: 'Associated URL' }),
|
|
17
|
+
};
|
|
18
|
+
async run() {
|
|
19
|
+
const { args, flags } = await this.parse(VaultUpdate);
|
|
20
|
+
const client = await this.client(flags);
|
|
21
|
+
const updates = {};
|
|
22
|
+
if (flags.name !== undefined)
|
|
23
|
+
updates.name = flags.name;
|
|
24
|
+
if (flags.description !== undefined)
|
|
25
|
+
updates.description = flags.description;
|
|
26
|
+
if (flags.tags !== undefined)
|
|
27
|
+
updates.tags = flags.tags.split(',').map(t => t.trim());
|
|
28
|
+
if (flags.category !== undefined)
|
|
29
|
+
updates.category = flags.category;
|
|
30
|
+
if (flags.url !== undefined)
|
|
31
|
+
updates.url = flags.url;
|
|
32
|
+
const response = await client.updateVaultEntry(args.id, updates);
|
|
33
|
+
this.handleApiError(response);
|
|
34
|
+
if (!this.jsonEnabled()) {
|
|
35
|
+
this.log(`Vault entry ${args.id} updated`);
|
|
36
|
+
}
|
|
37
|
+
return response.data;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.default = VaultUpdate;
|
|
41
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/vault/update.ts"],"names":[],"mappings":";;AAAA,sCAAwC;AACxC,+DAAsD;AAEtD,MAAqB,WAAY,SAAQ,6BAAW;IAClD,MAAM,CAAC,WAAW,GAAG,6BAA6B,CAAC;IAEnD,MAAM,CAAC,IAAI,GAAG;QACZ,EAAE,EAAE,WAAI,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;KACjE,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,6BAAW,CAAC,SAAS;QACxB,IAAI,EAAE,YAAK,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,YAAY,EAAC,CAAC;QAC/C,WAAW,EAAE,YAAK,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,aAAa,EAAC,CAAC;QACvD,IAAI,EAAE,YAAK,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,sBAAsB,EAAC,CAAC;QACzD,QAAQ,EAAE,YAAK,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,UAAU,EAAC,CAAC;QACjD,GAAG,EAAE,YAAK,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,gBAAgB,EAAC,CAAC;KACnD,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAExC,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxD,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAC7E,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACtF,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QACpE,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;QAErD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAE9B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;;AAnCH,8BAoCC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/hooks/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,aAAa,CAAC;AAEtC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,CAGtB,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const hook = async function () {
|
|
4
|
+
// Placeholder for update check or initialization logic.
|
|
5
|
+
// Future: check for CLI updates and notify user.
|
|
6
|
+
};
|
|
7
|
+
exports.default = hook;
|
|
8
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/hooks/init.ts"],"names":[],"mappings":";;AAEA,MAAM,IAAI,GAAiB,KAAK;IAC9B,wDAAwD;IACxD,iDAAiD;AACnD,CAAC,CAAC;AAEF,kBAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve token from config file.
|
|
3
|
+
* Note: flag and env var resolution are handled by oclif's Flags.string({ env: 'EXF_TOKEN' }).
|
|
4
|
+
* This function is the final fallback — reads from ~/.config/exf/auth.json.
|
|
5
|
+
*/
|
|
6
|
+
export declare function resolveToken(): string | undefined;
|
|
7
|
+
export declare function storeToken(token: string): void;
|
|
8
|
+
export declare function clearToken(): void;
|
|
9
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAGjD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,UAAU,IAAI,IAAI,CAEjC"}
|
package/dist/lib/auth.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveToken = resolveToken;
|
|
4
|
+
exports.storeToken = storeToken;
|
|
5
|
+
exports.clearToken = clearToken;
|
|
6
|
+
const config_js_1 = require("./config.js");
|
|
7
|
+
/**
|
|
8
|
+
* Resolve token from config file.
|
|
9
|
+
* Note: flag and env var resolution are handled by oclif's Flags.string({ env: 'EXF_TOKEN' }).
|
|
10
|
+
* This function is the final fallback — reads from ~/.config/exf/auth.json.
|
|
11
|
+
*/
|
|
12
|
+
function resolveToken() {
|
|
13
|
+
const config = (0, config_js_1.readConfig)();
|
|
14
|
+
return config?.token;
|
|
15
|
+
}
|
|
16
|
+
function storeToken(token) {
|
|
17
|
+
(0, config_js_1.writeConfig)({ token });
|
|
18
|
+
}
|
|
19
|
+
function clearToken() {
|
|
20
|
+
(0, config_js_1.deleteConfig)();
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":";;AAOA,oCAGC;AAED,gCAEC;AAED,gCAEC;AAlBD,2CAAkE;AAElE;;;;GAIG;AACH,SAAgB,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAC;IAC5B,OAAO,MAAM,EAAE,KAAK,CAAC;AACvB,CAAC;AAED,SAAgB,UAAU,CAAC,KAAa;IACtC,IAAA,uBAAW,EAAC,EAAC,KAAK,EAAC,CAAC,CAAC;AACvB,CAAC;AAED,SAAgB,UAAU;IACxB,IAAA,wBAAY,GAAE,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import { ExfClient } from '@execufunction/mcp-server/dist/exfClient.js';
|
|
3
|
+
export declare abstract class BaseCommand extends Command {
|
|
4
|
+
static enableJsonFlag: boolean;
|
|
5
|
+
static baseFlags: {
|
|
6
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
'api-url': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
'no-input': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
};
|
|
10
|
+
protected client(flags: {
|
|
11
|
+
token?: string;
|
|
12
|
+
'api-url'?: string;
|
|
13
|
+
}): Promise<ExfClient>;
|
|
14
|
+
protected unwrapList(response: {
|
|
15
|
+
data?: unknown;
|
|
16
|
+
}, key: string): Record<string, unknown>[];
|
|
17
|
+
protected unwrapOne(response: {
|
|
18
|
+
data?: unknown;
|
|
19
|
+
}, key: string): Record<string, unknown>;
|
|
20
|
+
protected handleApiError(response: {
|
|
21
|
+
statusCode: number;
|
|
22
|
+
error?: string;
|
|
23
|
+
data?: unknown;
|
|
24
|
+
}): void;
|
|
25
|
+
protected confirmAction(message: string, flags: {
|
|
26
|
+
yes?: boolean;
|
|
27
|
+
'no-input'?: boolean;
|
|
28
|
+
}): Promise<boolean>;
|
|
29
|
+
protected idempotencyKey(): string;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=base-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-command.d.ts","sourceRoot":"","sources":["../../src/lib/base-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAQ,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAC,SAAS,EAAC,MAAM,6CAA6C,CAAC;AAItE,8BAAsB,WAAY,SAAQ,OAAO;IAC/C,MAAM,CAAC,cAAc,UAAQ;IAE7B,MAAM,CAAC,SAAS;;;;MAgBd;cAEc,MAAM,CAAC,KAAK,EAAE;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAYvF,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAKxF,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAKrF,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI;cAsB9E,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE;QAAC,GAAG,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAC,GAC3C,OAAO,CAAC,OAAO,CAAC;IASnB,SAAS,CAAC,cAAc,IAAI,MAAM;CAGnC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseCommand = void 0;
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
const node_crypto_1 = require("node:crypto");
|
|
6
|
+
const exfClient_js_1 = require("@execufunction/mcp-server/dist/exfClient.js");
|
|
7
|
+
const auth_js_1 = require("./auth.js");
|
|
8
|
+
const output_js_1 = require("./output.js");
|
|
9
|
+
class BaseCommand extends core_1.Command {
|
|
10
|
+
static enableJsonFlag = true;
|
|
11
|
+
static baseFlags = {
|
|
12
|
+
token: core_1.Flags.string({
|
|
13
|
+
description: 'Personal access token',
|
|
14
|
+
env: 'EXF_TOKEN',
|
|
15
|
+
helpGroup: 'GLOBAL',
|
|
16
|
+
}),
|
|
17
|
+
'api-url': core_1.Flags.string({
|
|
18
|
+
description: 'API base URL',
|
|
19
|
+
env: 'EXF_API_URL',
|
|
20
|
+
default: 'https://execufunction.com',
|
|
21
|
+
helpGroup: 'GLOBAL',
|
|
22
|
+
}),
|
|
23
|
+
'no-input': core_1.Flags.boolean({
|
|
24
|
+
description: 'Disable interactive prompts',
|
|
25
|
+
helpGroup: 'GLOBAL',
|
|
26
|
+
}),
|
|
27
|
+
};
|
|
28
|
+
async client(flags) {
|
|
29
|
+
const token = flags.token || (0, auth_js_1.resolveToken)();
|
|
30
|
+
if (!token) {
|
|
31
|
+
this.error('No authentication token found. Run `exf auth login` or set EXF_TOKEN.');
|
|
32
|
+
}
|
|
33
|
+
return new exfClient_js_1.ExfClient({
|
|
34
|
+
apiUrl: flags['api-url'] || 'https://execufunction.com',
|
|
35
|
+
pat: token,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
unwrapList(response, key) {
|
|
39
|
+
const data = response.data;
|
|
40
|
+
return (data?.[key] ?? []);
|
|
41
|
+
}
|
|
42
|
+
unwrapOne(response, key) {
|
|
43
|
+
const data = response.data;
|
|
44
|
+
return (data?.[key] ?? data ?? {});
|
|
45
|
+
}
|
|
46
|
+
handleApiError(response) {
|
|
47
|
+
if (response.error) {
|
|
48
|
+
if (response.statusCode === 401) {
|
|
49
|
+
this.error(`Authentication failed: ${response.error}\nRun \`exf auth login\` to authenticate.`);
|
|
50
|
+
}
|
|
51
|
+
if (response.statusCode === 403) {
|
|
52
|
+
this.error(`Permission denied: ${response.error}`);
|
|
53
|
+
}
|
|
54
|
+
if (response.statusCode === 404) {
|
|
55
|
+
this.error(`Not found: ${response.error}`);
|
|
56
|
+
}
|
|
57
|
+
if (response.statusCode === 429) {
|
|
58
|
+
this.error(`Rate limited: ${response.error}\nPlease try again shortly.`);
|
|
59
|
+
}
|
|
60
|
+
this.error(`API error (${response.statusCode}): ${response.error}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async confirmAction(message, flags) {
|
|
64
|
+
if (flags.yes)
|
|
65
|
+
return true;
|
|
66
|
+
if (flags['no-input']) {
|
|
67
|
+
this.error(`${message} Use --yes to confirm in non-interactive mode.`);
|
|
68
|
+
}
|
|
69
|
+
return (0, output_js_1.confirm)(message);
|
|
70
|
+
}
|
|
71
|
+
idempotencyKey() {
|
|
72
|
+
return `cli-${Date.now()}-${(0, node_crypto_1.randomUUID)()}`;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.BaseCommand = BaseCommand;
|
|
76
|
+
//# sourceMappingURL=base-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-command.js","sourceRoot":"","sources":["../../src/lib/base-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface AuthConfig {
|
|
2
|
+
token: string;
|
|
3
|
+
}
|
|
4
|
+
export declare function getConfigDir(): string;
|
|
5
|
+
export declare function readConfig(): AuthConfig | null;
|
|
6
|
+
export declare function writeConfig(config: AuthConfig): void;
|
|
7
|
+
export declare function deleteConfig(): void;
|
|
8
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,UAAU,IAAI,UAAU,GAAG,IAAI,CAO9C;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAGpD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAMnC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getConfigDir = getConfigDir;
|
|
4
|
+
exports.readConfig = readConfig;
|
|
5
|
+
exports.writeConfig = writeConfig;
|
|
6
|
+
exports.deleteConfig = deleteConfig;
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
const node_os_1 = require("node:os");
|
|
10
|
+
const CONFIG_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), '.config', 'exf');
|
|
11
|
+
const AUTH_FILE = (0, node_path_1.join)(CONFIG_DIR, 'auth.json');
|
|
12
|
+
function getConfigDir() {
|
|
13
|
+
return CONFIG_DIR;
|
|
14
|
+
}
|
|
15
|
+
function readConfig() {
|
|
16
|
+
try {
|
|
17
|
+
const content = (0, node_fs_1.readFileSync)(AUTH_FILE, 'utf-8');
|
|
18
|
+
return JSON.parse(content);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function writeConfig(config) {
|
|
25
|
+
(0, node_fs_1.mkdirSync)(CONFIG_DIR, { recursive: true, mode: 0o700 });
|
|
26
|
+
(0, node_fs_1.writeFileSync)(AUTH_FILE, JSON.stringify(config, null, 2), { mode: 0o600 });
|
|
27
|
+
}
|
|
28
|
+
function deleteConfig() {
|
|
29
|
+
try {
|
|
30
|
+
(0, node_fs_1.unlinkSync)(AUTH_FILE);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// Already gone
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":";;AAWA,oCAEC;AAED,gCAOC;AAED,kCAGC;AAED,oCAMC;AAnCD,qCAA2E;AAC3E,yCAA+B;AAC/B,qCAAgC;AAEhC,MAAM,UAAU,GAAG,IAAA,gBAAI,EAAC,IAAA,iBAAO,GAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACrD,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAMhD,SAAgB,YAAY;IAC1B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAgB,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,sBAAY,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,WAAW,CAAC,MAAkB;IAC5C,IAAA,mBAAS,EAAC,UAAU,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC;IACtD,IAAA,uBAAa,EAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAgB,YAAY;IAC1B,IAAI,CAAC;QACH,IAAA,oBAAU,EAAC,SAAS,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface Column {
|
|
2
|
+
key: string;
|
|
3
|
+
header: string;
|
|
4
|
+
get?: (row: Record<string, unknown>) => string;
|
|
5
|
+
}
|
|
6
|
+
export declare function renderTable(data: Record<string, unknown>[], columns: Column[]): void;
|
|
7
|
+
export declare function renderDetail(pairs: [string, unknown][]): void;
|
|
8
|
+
export declare function formatDate(isoString?: string | null): string;
|
|
9
|
+
export declare function formatDateTime(isoString?: string | null): string;
|
|
10
|
+
export declare function confirm(message: string): Promise<boolean>;
|
|
11
|
+
export declare function truncate(str: string, len: number): string;
|
|
12
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;CAChD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CA0BpF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,CAK7D;AAED,wBAAgB,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAG5D;AAED,wBAAgB,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAIhE;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGzD"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.renderTable = renderTable;
|
|
37
|
+
exports.renderDetail = renderDetail;
|
|
38
|
+
exports.formatDate = formatDate;
|
|
39
|
+
exports.formatDateTime = formatDateTime;
|
|
40
|
+
exports.confirm = confirm;
|
|
41
|
+
exports.truncate = truncate;
|
|
42
|
+
const readline = __importStar(require("node:readline"));
|
|
43
|
+
function renderTable(data, columns) {
|
|
44
|
+
if (data.length === 0) {
|
|
45
|
+
console.log('No results found.');
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const getValue = (row, col) => {
|
|
49
|
+
const val = col.get ? col.get(row) : row[col.key];
|
|
50
|
+
return val != null ? String(val) : '—';
|
|
51
|
+
};
|
|
52
|
+
const widths = columns.map(col => {
|
|
53
|
+
const maxData = Math.max(...data.map(row => getValue(row, col).length));
|
|
54
|
+
return Math.max(col.header.length, maxData, 2);
|
|
55
|
+
});
|
|
56
|
+
const header = columns.map((col, i) => col.header.padEnd(widths[i])).join(' ');
|
|
57
|
+
const separator = columns.map((_, i) => '─'.repeat(widths[i])).join(' ');
|
|
58
|
+
console.log(header);
|
|
59
|
+
console.log(separator);
|
|
60
|
+
for (const row of data) {
|
|
61
|
+
const line = columns.map((col, i) => getValue(row, col).padEnd(widths[i])).join(' ');
|
|
62
|
+
console.log(line);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function renderDetail(pairs) {
|
|
66
|
+
const maxKey = Math.max(...pairs.map(([key]) => key.length));
|
|
67
|
+
for (const [key, value] of pairs) {
|
|
68
|
+
console.log(`${key.padEnd(maxKey)} ${value ?? '—'}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function formatDate(isoString) {
|
|
72
|
+
if (!isoString)
|
|
73
|
+
return '—';
|
|
74
|
+
return new Date(isoString).toLocaleDateString();
|
|
75
|
+
}
|
|
76
|
+
function formatDateTime(isoString) {
|
|
77
|
+
if (!isoString)
|
|
78
|
+
return '—';
|
|
79
|
+
const d = new Date(isoString);
|
|
80
|
+
return `${d.toLocaleDateString()} ${d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}`;
|
|
81
|
+
}
|
|
82
|
+
async function confirm(message) {
|
|
83
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
|
|
84
|
+
const answer = await new Promise(resolve => {
|
|
85
|
+
rl.question(`${message} (y/N) `, resolve);
|
|
86
|
+
});
|
|
87
|
+
rl.close();
|
|
88
|
+
return answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes';
|
|
89
|
+
}
|
|
90
|
+
function truncate(str, len) {
|
|
91
|
+
if (str.length <= len)
|
|
92
|
+
return str;
|
|
93
|
+
return str.slice(0, len - 1) + '…';
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
|