@michinarai/cli 0.0.0-stage → 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/LICENSE +202 -0
- package/README.md +150 -2
- package/bin/run.js +4 -0
- package/dist/api/client.d.ts +24 -0
- package/dist/api/client.js +56 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/tool-flag.d.ts +9 -0
- package/dist/api/tool-flag.js +15 -0
- package/dist/api/tool-flag.js.map +1 -0
- package/dist/api/tools.d.ts +17 -0
- package/dist/api/tools.js +39 -0
- package/dist/api/tools.js.map +1 -0
- package/dist/auth/loopback.d.ts +11 -0
- package/dist/auth/loopback.js +54 -0
- package/dist/auth/loopback.js.map +1 -0
- package/dist/auth/oauth.d.ts +52 -0
- package/dist/auth/oauth.js +101 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/auth/session.d.ts +7 -0
- package/dist/auth/session.js +41 -0
- package/dist/auth/session.js.map +1 -0
- package/dist/base-command.d.ts +29 -0
- package/dist/base-command.js +65 -0
- package/dist/base-command.js.map +1 -0
- package/dist/commands/build.d.ts +9 -0
- package/dist/commands/build.js +34 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/dev.d.ts +14 -0
- package/dist/commands/dev.js +55 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/init.d.ts +12 -0
- package/dist/commands/init.js +63 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +10 -0
- package/dist/commands/login.js +37 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +5 -0
- package/dist/commands/logout.js +19 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/tools/list.d.ts +8 -0
- package/dist/commands/tools/list.js +23 -0
- package/dist/commands/tools/list.js.map +1 -0
- package/dist/commands/tools/push.d.ts +11 -0
- package/dist/commands/tools/push.js +53 -0
- package/dist/commands/tools/push.js.map +1 -0
- package/dist/commands/tools/register.d.ts +13 -0
- package/dist/commands/tools/register.js +66 -0
- package/dist/commands/tools/register.js.map +1 -0
- package/dist/commands/tools/tokens/create.d.ts +12 -0
- package/dist/commands/tools/tokens/create.js +26 -0
- package/dist/commands/tools/tokens/create.js.map +1 -0
- package/dist/commands/tools/tokens/list.d.ts +8 -0
- package/dist/commands/tools/tokens/list.js +13 -0
- package/dist/commands/tools/tokens/list.js.map +1 -0
- package/dist/commands/tools/tokens/revoke.d.ts +11 -0
- package/dist/commands/tools/tokens/revoke.js +18 -0
- package/dist/commands/tools/tokens/revoke.js.map +1 -0
- package/dist/commands/validate.d.ts +6 -0
- package/dist/commands/validate.js +27 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands.d.ts +26 -0
- package/dist/commands.js +29 -0
- package/dist/commands.js.map +1 -0
- package/dist/generated/api.d.ts +1499 -0
- package/dist/generated/api.js +6 -0
- package/dist/generated/api.js.map +1 -0
- package/dist/lib/credentials.d.ts +8 -0
- package/dist/lib/credentials.js +45 -0
- package/dist/lib/credentials.js.map +1 -0
- package/dist/lib/deps.d.ts +12 -0
- package/dist/lib/deps.js +23 -0
- package/dist/lib/deps.js.map +1 -0
- package/dist/lib/digest.d.ts +10 -0
- package/dist/lib/digest.js +37 -0
- package/dist/lib/digest.js.map +1 -0
- package/dist/lib/errors.d.ts +26 -0
- package/dist/lib/errors.js +39 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/http.d.ts +2 -0
- package/dist/lib/http.js +11 -0
- package/dist/lib/http.js.map +1 -0
- package/dist/lib/lock.d.ts +4 -0
- package/dist/lib/lock.js +58 -0
- package/dist/lib/lock.js.map +1 -0
- package/dist/lib/output.d.ts +21 -0
- package/dist/lib/output.js +44 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/plan.d.ts +13 -0
- package/dist/lib/plan.js +10 -0
- package/dist/lib/plan.js.map +1 -0
- package/dist/lib/project.d.ts +8 -0
- package/dist/lib/project.js +37 -0
- package/dist/lib/project.js.map +1 -0
- package/package.json +59 -4
- package/templates/tool/.claude/skills/narai-tool/SKILL.md +16 -0
- package/templates/tool/AGENTS.md +30 -0
- package/templates/tool/narai.tool.json +25 -0
- package/templates/tool/package.json +14 -0
- package/templates/tool/scripts/build.mjs +12 -0
- package/templates/tool/src/index.html +19 -0
- package/templates/tool/src/tool.css +2 -0
- package/templates/tool/src/tool.js +21 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { NaraiCommand } from "../base-command.js";
|
|
2
|
+
import { discover, revoke } from "../auth/oauth.js";
|
|
3
|
+
import { deps } from "../lib/deps.js";
|
|
4
|
+
export default class Logout extends NaraiCommand {
|
|
5
|
+
static summary = "Sign out: Narai revokes the session, and the keychain forgets it.";
|
|
6
|
+
async run() {
|
|
7
|
+
const naraiUrl = this.naraiUrl;
|
|
8
|
+
const host = new URL(naraiUrl).host;
|
|
9
|
+
const stored = await deps.credentials.get(naraiUrl);
|
|
10
|
+
if (!stored) {
|
|
11
|
+
this.out.result({ signed_out: host, was_signed_in: false }, () => `not signed in to ${host}`);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
await revoke(await discover(naraiUrl), { naraiUrl, token: stored });
|
|
15
|
+
await deps.credentials.delete(naraiUrl);
|
|
16
|
+
this.out.result({ signed_out: host, was_signed_in: true }, () => `signed out of ${host}`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,YAA2B;IAC7D,MAAM,CAAU,OAAO,GAAG,mEAAmE,CAAC;IAE9F,KAAK,CAAC,GAAG;QACP,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;YAC9F,OAAO;QACT,CAAC;QACD,MAAM,MAAM,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACpE,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { NaraiCommand } from "../../base-command.js";
|
|
2
|
+
export default class ToolsList extends NaraiCommand<typeof ToolsList> {
|
|
3
|
+
static summary: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
publisher: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
+
};
|
|
7
|
+
run(): Promise<void>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Flags } from "@oclif/core";
|
|
2
|
+
import { NaraiCommand } from "../../base-command.js";
|
|
3
|
+
import { ok, registry } from "../../api/client.js";
|
|
4
|
+
import { publishers } from "../../api/tools.js";
|
|
5
|
+
export default class ToolsList extends NaraiCommand {
|
|
6
|
+
static summary = "Your publishers' tools and their versions.";
|
|
7
|
+
static flags = { publisher: Flags.string({ description: "Only this publisher (its slug)." }) };
|
|
8
|
+
async run() {
|
|
9
|
+
const api = registry(this.naraiUrl);
|
|
10
|
+
const host = new URL(this.naraiUrl).host;
|
|
11
|
+
const slugs = (await publishers(api, host)).map((p) => p.slug).filter((s) => Boolean(s))
|
|
12
|
+
.filter((s) => !this.flags.publisher || s === this.flags.publisher);
|
|
13
|
+
const tools = [];
|
|
14
|
+
for (const publisher of slugs) {
|
|
15
|
+
const listed = await ok(api.GET("/api/tools/{publisher}", { params: { path: { publisher } } }), `${publisher}'s tools`);
|
|
16
|
+
for (const t of listed.tools)
|
|
17
|
+
tools.push({ id: t.id_string, versions: t.versions.map((v) => ({ version: v.version, status: v.status, bundle_digest: v.bundle_digest })) });
|
|
18
|
+
}
|
|
19
|
+
this.out.result({ tools }, () => tools.length === 0 ? "no tools yet: narai tools register"
|
|
20
|
+
: tools.map((t) => `${t.id} ${t.versions.map((v) => `${v.version} (${v.status})`).join(", ") || "no versions"}`));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/tools/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,YAA8B;IACnE,MAAM,CAAU,OAAO,GAAG,4CAA4C,CAAC;IACvE,MAAM,CAAU,KAAK,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,iCAAiC,EAAE,CAAC,EAAE,CAAC;IAExG,KAAK,CAAC,GAAG;QACP,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;QACzC,MAAM,KAAK,GAAG,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aAClG,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACtE,MAAM,KAAK,GAAoG,EAAE,CAAC;QAClH,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,wBAAwB,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,SAAS,UAAU,CAAC,CAAC;YACxH,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7K,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,oCAAoC;YACxF,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC;IACvH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { NaraiCommand } from "../../base-command.js";
|
|
2
|
+
export default class ToolsPush extends NaraiCommand<typeof ToolsPush> {
|
|
3
|
+
static summary: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static flags: {
|
|
6
|
+
dir: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
plan: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
"detailed-exitcode": import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
};
|
|
10
|
+
run(): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { Flags } from "@oclif/core";
|
|
4
|
+
import { NaraiCommand } from "../../base-command.js";
|
|
5
|
+
import { found, ok, registry } from "../../api/client.js";
|
|
6
|
+
import { idParts, sealedRelease } from "../../api/tools.js";
|
|
7
|
+
import { NaraiError } from "../../lib/errors.js";
|
|
8
|
+
import { describeChange, planExit, planFlags } from "../../lib/plan.js";
|
|
9
|
+
import { checkedManifest, toolRoot } from "../../lib/project.js";
|
|
10
|
+
export default class ToolsPush extends NaraiCommand {
|
|
11
|
+
static summary = "Upload this build as a draft version: the sealed manifest and every file it lists.";
|
|
12
|
+
static description = "Plans, then uploads after a confirmation. The build is `narai build`'s, checked unchanged. A version is uploaded once: the same build again is nothing to do, a different one under the same version is refused (raise the version).";
|
|
13
|
+
static flags = {
|
|
14
|
+
...planFlags,
|
|
15
|
+
dir: Flags.string({ description: "The sealed build.", default: "dist" }),
|
|
16
|
+
};
|
|
17
|
+
async run() {
|
|
18
|
+
const root = await toolRoot(process.cwd());
|
|
19
|
+
const manifest = await checkedManifest(root);
|
|
20
|
+
const release = await sealedRelease(root, this.flags.dir, manifest);
|
|
21
|
+
const { publisher, name } = idParts(manifest);
|
|
22
|
+
const api = registry(this.naraiUrl);
|
|
23
|
+
const path = { publisher, name };
|
|
24
|
+
const tool = await found(api.GET("/api/tools/{publisher}/{name}", { params: { path } }), manifest.id);
|
|
25
|
+
if (!tool)
|
|
26
|
+
throw new NaraiError(`${manifest.id} isn't registered: run narai tools register`, "not_registered");
|
|
27
|
+
const existing = await found(api.GET("/api/tools/{publisher}/{name}/versions/{version}", { params: { path: { ...path, version: manifest.version } } }), `${manifest.id} ${manifest.version}`);
|
|
28
|
+
if (existing && existing.bundle_digest !== release.bundle_digest) {
|
|
29
|
+
throw new NaraiError(`${manifest.id} ${manifest.version} is uploaded already, as another build (${existing.bundle_digest ?? "?"}): raise the version`, "version_exists", 1, { uploaded: existing.bundle_digest, built: release.bundle_digest });
|
|
30
|
+
}
|
|
31
|
+
const bytes = release.files.reduce((n, f) => n + f.size, 0);
|
|
32
|
+
const changes = existing ? [] : [{ action: "upload", target: `${manifest.id} ${manifest.version}`, detail: `${release.files.length} files, ${bytes} bytes, ${release.bundle_digest}` }];
|
|
33
|
+
const plan = { tool: manifest.id, version: manifest.version, bundle_digest: release.bundle_digest, changes };
|
|
34
|
+
if (this.flags.plan || changes.length === 0) {
|
|
35
|
+
this.out.result({ ...plan, applied: false }, () => changes.length ? ["would change:", ...changes.map(describeChange)] : `${manifest.id} ${manifest.version}: uploaded already; nothing to change`);
|
|
36
|
+
this.exit(this.flags.plan ? planExit(changes, this.flags["detailed-exitcode"]) : 0);
|
|
37
|
+
}
|
|
38
|
+
for (const line of changes.map(describeChange))
|
|
39
|
+
this.out.prompt(line);
|
|
40
|
+
await this.confirm(`Upload ${manifest.id} ${manifest.version} to ${new URL(this.naraiUrl).host}`, plan);
|
|
41
|
+
const form = new FormData();
|
|
42
|
+
form.append("manifest", JSON.stringify(release));
|
|
43
|
+
for (const f of release.files)
|
|
44
|
+
form.append("files", new Blob([await readFile(join(root, this.flags.dir, f.path))]), f.path);
|
|
45
|
+
const uploaded = await ok(api.POST("/api/tools/{publisher}/{name}/versions", {
|
|
46
|
+
params: { path },
|
|
47
|
+
body: { manifest: "" },
|
|
48
|
+
bodySerializer: () => form,
|
|
49
|
+
}), `${manifest.id} ${manifest.version}`);
|
|
50
|
+
this.out.result({ ...plan, applied: true, status: uploaded.status }, () => [...changes.map(describeChange), `${manifest.id} ${manifest.version}: uploaded (${uploaded.status})`]);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/commands/tools/push.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { NaraiCommand } from "../../base-command.js";
|
|
2
|
+
export default class ToolsRegister extends NaraiCommand<typeof ToolsRegister> {
|
|
3
|
+
static summary: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static flags: {
|
|
6
|
+
org: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
plan: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
"detailed-exitcode": import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
};
|
|
10
|
+
run(): Promise<void>;
|
|
11
|
+
/** The organization a new publisher goes on: --org, else the only one without a publisher. */
|
|
12
|
+
private pickOrg;
|
|
13
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Flags } from "@oclif/core";
|
|
2
|
+
import { NaraiCommand } from "../../base-command.js";
|
|
3
|
+
import { found, ok, registry } from "../../api/client.js";
|
|
4
|
+
import { idParts, publishers } from "../../api/tools.js";
|
|
5
|
+
import { NaraiError } from "../../lib/errors.js";
|
|
6
|
+
import { describeChange, planExit, planFlags } from "../../lib/plan.js";
|
|
7
|
+
import { checkedManifest, toolRoot } from "../../lib/project.js";
|
|
8
|
+
export default class ToolsRegister extends NaraiCommand {
|
|
9
|
+
static summary = "Register this tool at Narai: its publisher (once per organization), then the tool.";
|
|
10
|
+
static description = "Plans, then applies after a confirmation. The publisher is the manifest's (`publisher/name` and its name and url); --org says which of your organizations it is, when none has it yet.";
|
|
11
|
+
static flags = {
|
|
12
|
+
...planFlags,
|
|
13
|
+
org: Flags.string({ description: "The organization (id or name) the publisher belongs to, when it isn't set up yet." }),
|
|
14
|
+
};
|
|
15
|
+
async run() {
|
|
16
|
+
const manifest = await checkedManifest(await toolRoot(process.cwd()));
|
|
17
|
+
const { publisher, name } = idParts(manifest);
|
|
18
|
+
const api = registry(this.naraiUrl);
|
|
19
|
+
const orgs = await publishers(api, new URL(this.naraiUrl).host);
|
|
20
|
+
const mine = orgs.find((p) => p.slug === publisher);
|
|
21
|
+
const changes = [];
|
|
22
|
+
let org = mine;
|
|
23
|
+
const wanted = { slug: publisher, name: manifest.publisher.name, url: manifest.publisher.url };
|
|
24
|
+
if (!mine) {
|
|
25
|
+
org = this.pickOrg(orgs, publisher);
|
|
26
|
+
changes.push({ action: "create", target: `publisher ${publisher}`, detail: `for ${org.org_name}: ${wanted.name}, ${wanted.url}` });
|
|
27
|
+
}
|
|
28
|
+
else if (mine.name !== wanted.name || mine.url !== wanted.url) {
|
|
29
|
+
changes.push({ action: "update", target: `publisher ${publisher}`, detail: `${mine.name ?? ""}, ${mine.url ?? ""} → ${wanted.name}, ${wanted.url}` });
|
|
30
|
+
}
|
|
31
|
+
const tool = mine ? await found(api.GET("/api/tools/{publisher}/{name}", { params: { path: { publisher, name } } }), manifest.id) : null;
|
|
32
|
+
if (!tool)
|
|
33
|
+
changes.push({ action: "create", target: `tool ${manifest.id}`, detail: "" });
|
|
34
|
+
const plan = { tool: manifest.id, changes };
|
|
35
|
+
if (this.flags.plan || changes.length === 0) {
|
|
36
|
+
this.out.result({ ...plan, applied: false }, () => changes.length ? ["would change:", ...changes.map(describeChange)] : `${manifest.id}: registered; nothing to change`);
|
|
37
|
+
this.exit(this.flags.plan ? planExit(changes, this.flags["detailed-exitcode"]) : 0);
|
|
38
|
+
}
|
|
39
|
+
for (const line of changes.map(describeChange))
|
|
40
|
+
this.out.prompt(line);
|
|
41
|
+
await this.confirm(`Apply ${changes.length} change${changes.length === 1 ? "" : "s"} at ${new URL(this.naraiUrl).host}`, plan);
|
|
42
|
+
if (changes.some((c) => c.target.startsWith("publisher")) && org) {
|
|
43
|
+
await ok(api.PUT("/api/tools/publishers/{org}", { params: { path: { org: org.org_id } }, body: wanted }), `publisher ${publisher}`);
|
|
44
|
+
}
|
|
45
|
+
if (!tool)
|
|
46
|
+
await ok(api.POST("/api/tools/{publisher}", { params: { path: { publisher } }, body: { name } }), `tool ${manifest.id}`);
|
|
47
|
+
this.out.result({ ...plan, applied: true }, () => [...changes.map(describeChange), `${manifest.id}: registered`]);
|
|
48
|
+
}
|
|
49
|
+
/** The organization a new publisher goes on: --org, else the only one without a publisher. */
|
|
50
|
+
pickOrg(orgs, publisher) {
|
|
51
|
+
const given = this.flags.org;
|
|
52
|
+
if (given) {
|
|
53
|
+
const org = orgs.find((o) => o.org_id === given || o.org_name === given);
|
|
54
|
+
if (!org)
|
|
55
|
+
throw new NaraiError(`no organization ${given} among yours: ${orgs.map((o) => o.org_name).join(", ") || "none"}`, "no_such_org");
|
|
56
|
+
if (org.slug && org.slug !== publisher)
|
|
57
|
+
throw new NaraiError(`${org.org_name} already publishes as ${org.slug}`, "org_has_publisher");
|
|
58
|
+
return org;
|
|
59
|
+
}
|
|
60
|
+
const free = orgs.filter((o) => !o.slug);
|
|
61
|
+
if (free.length === 1 && free[0])
|
|
62
|
+
return free[0];
|
|
63
|
+
throw new NaraiError(free.length === 0 ? `none of your organizations can take the publisher ${publisher}` : `which organization is ${publisher}? --org ${free.map((o) => JSON.stringify(o.org_name)).join(" | ")}`, free.length === 0 ? "no_org" : "org_needed", 2);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/commands/tools/register.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { NaraiCommand } from "../../../base-command.js";
|
|
2
|
+
export default class TokensCreate extends NaraiCommand<typeof TokensCreate> {
|
|
3
|
+
static summary: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static flags: {
|
|
6
|
+
label: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
days: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
scope: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
tool: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Flags } from "@oclif/core";
|
|
2
|
+
import { NaraiCommand } from "../../../base-command.js";
|
|
3
|
+
import { ok, registry } from "../../../api/client.js";
|
|
4
|
+
import { toolFlag, whichTool } from "../../../api/tool-flag.js";
|
|
5
|
+
export default class TokensCreate extends NaraiCommand {
|
|
6
|
+
static summary = "Make a CI token for this tool: it reads and uploads this tool's versions, in this environment only.";
|
|
7
|
+
static description = "The token is printed once, to stdout (--json for a CI secret), and never written anywhere. Store it as the CI secret NARAI_TOKEN.";
|
|
8
|
+
static flags = {
|
|
9
|
+
...toolFlag,
|
|
10
|
+
label: Flags.string({ description: "What it's for (e.g. the CI that holds it)." }),
|
|
11
|
+
days: Flags.integer({ description: "How long it lasts.", options: ["7", "30", "90", "365"], default: 90 }),
|
|
12
|
+
scope: Flags.string({ description: "Narrow it to a scope (repeatable; default: both tool scopes).", multiple: true, options: ["tool:versions.read", "tool:versions.upload"] }),
|
|
13
|
+
};
|
|
14
|
+
async run() {
|
|
15
|
+
const { publisher, name, id } = await whichTool(this.flags.tool);
|
|
16
|
+
const body = { days: this.flags.days };
|
|
17
|
+
if (this.flags.label)
|
|
18
|
+
body.label = this.flags.label;
|
|
19
|
+
if (this.flags.scope?.length)
|
|
20
|
+
body.scopes = this.flags.scope;
|
|
21
|
+
const made = await ok(registry(this.naraiUrl).POST("/api/tools/{publisher}/{name}/ci-tokens", { params: { path: { publisher, name } }, body }), `a CI token for ${id}`);
|
|
22
|
+
this.out.progress(`${id}: a CI token for ${made.env}, ${made.scopes.join(" ")}, until ${made.expires_at}. It's shown once: store it now (NARAI_TOKEN).`);
|
|
23
|
+
this.out.result(made, () => made.token);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/commands/tools/tokens/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEhE,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,YAAiC;IACzE,MAAM,CAAU,OAAO,GAAG,qGAAqG,CAAC;IAChI,MAAM,CAAU,WAAW,GAAG,mIAAmI,CAAC;IAClK,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,QAAQ;QACX,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,4CAA4C,EAAE,CAAC;QAClF,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACnH,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,+DAA+D,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,EAAE,CAAC;KAC/K,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,IAAI,GAAwD,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC5F,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACpD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC7D,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,yCAAyC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACxK,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,oBAAoB,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,UAAU,gDAAgD,CAAC,CAAC;QACzJ,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { NaraiCommand } from "../../../base-command.js";
|
|
2
|
+
export default class TokensList extends NaraiCommand<typeof TokensList> {
|
|
3
|
+
static summary: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
tool: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
+
};
|
|
7
|
+
run(): Promise<void>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { NaraiCommand } from "../../../base-command.js";
|
|
2
|
+
import { ok, registry } from "../../../api/client.js";
|
|
3
|
+
import { toolFlag, whichTool } from "../../../api/tool-flag.js";
|
|
4
|
+
export default class TokensList extends NaraiCommand {
|
|
5
|
+
static summary = "This tool's CI tokens (never the tokens themselves).";
|
|
6
|
+
static flags = { ...toolFlag };
|
|
7
|
+
async run() {
|
|
8
|
+
const { publisher, name, id } = await whichTool(this.flags.tool);
|
|
9
|
+
const { tokens } = await ok(registry(this.naraiUrl).GET("/api/tools/{publisher}/{name}/ci-tokens", { params: { path: { publisher, name } } }), `${id}'s CI tokens`);
|
|
10
|
+
this.out.result({ tool: id, tokens }, () => tokens.length === 0 ? `${id}: no CI tokens` : tokens.map((t) => `${t.id} ${t.label ?? "-"} ${t.env} ${t.scopes.join(" ")} ${t.revoked_at ? `revoked ${t.revoked_at}` : `until ${t.expires_at}`}${t.last_used_at ? ` last used ${t.last_used_at}` : ""}`));
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/tools/tokens/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEhE,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,YAA+B;IACrE,MAAM,CAAU,OAAO,GAAG,sDAAsD,CAAC;IACjF,MAAM,CAAU,KAAK,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;IAExC,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,yCAAyC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;QACpK,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACzG,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACnM,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { NaraiCommand } from "../../../base-command.js";
|
|
2
|
+
export default class TokensRevoke extends NaraiCommand<typeof TokensRevoke> {
|
|
3
|
+
static summary: string;
|
|
4
|
+
static args: {
|
|
5
|
+
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
};
|
|
7
|
+
static flags: {
|
|
8
|
+
tool: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
run(): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Args } from "@oclif/core";
|
|
2
|
+
import { NaraiCommand } from "../../../base-command.js";
|
|
3
|
+
import { refused, registry } from "../../../api/client.js";
|
|
4
|
+
import { toolFlag, whichTool } from "../../../api/tool-flag.js";
|
|
5
|
+
export default class TokensRevoke extends NaraiCommand {
|
|
6
|
+
static summary = "Revoke one of this tool's CI tokens, at once.";
|
|
7
|
+
static args = { id: Args.string({ description: "The token's id (narai tools tokens list).", required: true }) };
|
|
8
|
+
static flags = { ...toolFlag };
|
|
9
|
+
async run() {
|
|
10
|
+
const { publisher, name, id } = await whichTool(this.flags.tool);
|
|
11
|
+
await this.confirm(`Revoke CI token ${this.args.id} of ${id}`, { tool: id, token: this.args.id });
|
|
12
|
+
const { error, response } = await registry(this.naraiUrl).DELETE("/api/tools/{publisher}/{name}/ci-tokens/{token_id}", { params: { path: { publisher, name, token_id: this.args.id } } });
|
|
13
|
+
if (!response.ok)
|
|
14
|
+
throw refused(response, error, `CI token ${this.args.id}`);
|
|
15
|
+
this.out.result({ tool: id, revoked: this.args.id }, () => `${id}: CI token ${this.args.id} revoked`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=revoke.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revoke.js","sourceRoot":"","sources":["../../../../src/commands/tools/tokens/revoke.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEhE,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,YAAiC;IACzE,MAAM,CAAU,OAAO,GAAG,+CAA+C,CAAC;IAC1E,MAAM,CAAU,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,2CAA2C,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACzH,MAAM,CAAU,KAAK,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;IAExC,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAClG,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,oDAAoD,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1L,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,YAAY,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,cAAc,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;IACxG,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { manifestWarnings } from "@michinarai/sdk";
|
|
2
|
+
import { NaraiCommand } from "../base-command.js";
|
|
3
|
+
import { NaraiError } from "../lib/errors.js";
|
|
4
|
+
import { MANIFEST, checkedManifest, readManifest, toolRoot } from "../lib/project.js";
|
|
5
|
+
export default class Validate extends NaraiCommand {
|
|
6
|
+
static summary = `Check ${MANIFEST} against the contract, as Narai's registry does.`;
|
|
7
|
+
static description = "The schema, then what a schema can't say: every payload a manifest names is declared, no answer payload carries a verdict, commands and answers need an embed that runs the SDK, files sorted by path.";
|
|
8
|
+
async run() {
|
|
9
|
+
const root = await toolRoot(process.cwd());
|
|
10
|
+
try {
|
|
11
|
+
const manifest = await checkedManifest(root);
|
|
12
|
+
const warnings = manifestWarnings(await readManifest(root));
|
|
13
|
+
for (const w of warnings)
|
|
14
|
+
this.out.progress(`warning: ${w}`);
|
|
15
|
+
this.out.result({ ok: true, id: manifest.id, version: manifest.version, warnings }, () => `${manifest.id} ${manifest.version}: matches the contract`);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
if (error instanceof NaraiError && Array.isArray(error.details["problems"])) {
|
|
19
|
+
if (!this.out.json)
|
|
20
|
+
for (const p of error.details["problems"])
|
|
21
|
+
this.out.progress(` ${p}`);
|
|
22
|
+
}
|
|
23
|
+
throw error;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEtF,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,YAA6B;IACjE,MAAM,CAAU,OAAO,GAAG,SAAS,QAAQ,kDAAkD,CAAC;IAC9F,MAAM,CAAU,WAAW,GAAG,wMAAwM,CAAC;IAEvO,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5D,KAAK,MAAM,CAAC,IAAI,QAAQ;gBAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC7D,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,OAAO,wBAAwB,CAAC,CAAC;QACxJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;gBAC5E,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;oBAAE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAa;wBAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzG,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import Build from "./commands/build.js";
|
|
2
|
+
import Dev from "./commands/dev.js";
|
|
3
|
+
import Init from "./commands/init.js";
|
|
4
|
+
import Login from "./commands/login.js";
|
|
5
|
+
import Logout from "./commands/logout.js";
|
|
6
|
+
import ToolsList from "./commands/tools/list.js";
|
|
7
|
+
import ToolsPush from "./commands/tools/push.js";
|
|
8
|
+
import ToolsRegister from "./commands/tools/register.js";
|
|
9
|
+
import TokensCreate from "./commands/tools/tokens/create.js";
|
|
10
|
+
import TokensList from "./commands/tools/tokens/list.js";
|
|
11
|
+
import TokensRevoke from "./commands/tools/tokens/revoke.js";
|
|
12
|
+
import Validate from "./commands/validate.js";
|
|
13
|
+
export declare const COMMANDS: {
|
|
14
|
+
login: typeof Login;
|
|
15
|
+
logout: typeof Logout;
|
|
16
|
+
init: typeof Init;
|
|
17
|
+
validate: typeof Validate;
|
|
18
|
+
build: typeof Build;
|
|
19
|
+
dev: typeof Dev;
|
|
20
|
+
"tools:register": typeof ToolsRegister;
|
|
21
|
+
"tools:push": typeof ToolsPush;
|
|
22
|
+
"tools:list": typeof ToolsList;
|
|
23
|
+
"tools:tokens:create": typeof TokensCreate;
|
|
24
|
+
"tools:tokens:list": typeof TokensList;
|
|
25
|
+
"tools:tokens:revoke": typeof TokensRevoke;
|
|
26
|
+
};
|
package/dist/commands.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// Every command, by its id. oclif reads this map (package.json `oclif.commands`, strategy "explicit") instead of
|
|
2
|
+
// scanning a directory, so what ships is exactly what is listed here.
|
|
3
|
+
import Build from "./commands/build.js";
|
|
4
|
+
import Dev from "./commands/dev.js";
|
|
5
|
+
import Init from "./commands/init.js";
|
|
6
|
+
import Login from "./commands/login.js";
|
|
7
|
+
import Logout from "./commands/logout.js";
|
|
8
|
+
import ToolsList from "./commands/tools/list.js";
|
|
9
|
+
import ToolsPush from "./commands/tools/push.js";
|
|
10
|
+
import ToolsRegister from "./commands/tools/register.js";
|
|
11
|
+
import TokensCreate from "./commands/tools/tokens/create.js";
|
|
12
|
+
import TokensList from "./commands/tools/tokens/list.js";
|
|
13
|
+
import TokensRevoke from "./commands/tools/tokens/revoke.js";
|
|
14
|
+
import Validate from "./commands/validate.js";
|
|
15
|
+
export const COMMANDS = {
|
|
16
|
+
login: Login,
|
|
17
|
+
logout: Logout,
|
|
18
|
+
init: Init,
|
|
19
|
+
validate: Validate,
|
|
20
|
+
build: Build,
|
|
21
|
+
dev: Dev,
|
|
22
|
+
"tools:register": ToolsRegister,
|
|
23
|
+
"tools:push": ToolsPush,
|
|
24
|
+
"tools:list": ToolsList,
|
|
25
|
+
"tools:tokens:create": TokensCreate,
|
|
26
|
+
"tools:tokens:list": TokensList,
|
|
27
|
+
"tools:tokens:revoke": TokensRevoke,
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA,iHAAiH;AACjH,sEAAsE;AACtE,OAAO,KAAK,MAAM,qBAAqB,CAAC;AACxC,OAAO,GAAG,MAAM,mBAAmB,CAAC;AACpC,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,KAAK,MAAM,qBAAqB,CAAC;AACxC,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,SAAS,MAAM,0BAA0B,CAAC;AACjD,OAAO,SAAS,MAAM,0BAA0B,CAAC;AACjD,OAAO,aAAa,MAAM,8BAA8B,CAAC;AACzD,OAAO,YAAY,MAAM,mCAAmC,CAAC;AAC7D,OAAO,UAAU,MAAM,iCAAiC,CAAC;AACzD,OAAO,YAAY,MAAM,mCAAmC,CAAC;AAC7D,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAE9C,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,KAAK;IACZ,GAAG,EAAE,GAAG;IACR,gBAAgB,EAAE,aAAa;IAC/B,YAAY,EAAE,SAAS;IACvB,YAAY,EAAE,SAAS;IACvB,qBAAqB,EAAE,YAAY;IACnC,mBAAmB,EAAE,UAAU;IAC/B,qBAAqB,EAAE,YAAY;CACpC,CAAC"}
|