@cloud-cli/on 1.62.1 ā 1.63.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/dist/api-key-repository.d.ts +2 -2
- package/dist/api-key-repository.d.ts.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/oidc-user-repository-BNQF3qnb.js +2 -0
- package/dist/oidc-user-repository-CiprwzOj.js +24 -0
- package/dist/oidc-user-repository.d.ts +9 -0
- package/dist/oidc-user-repository.d.ts.map +1 -0
- package/dist/oidc.d.ts +2 -0
- package/dist/oidc.d.ts.map +1 -1
- package/dist/on.js +25 -14
- package/dist/{server-Bsv8pJk2.js ā server-DwdQsiqw.js} +2722 -2711
- package/dist/server.d.ts +1 -0
- package/dist/server.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const API_KEY_SCOPES: readonly ["workflows:read", "workflows:write", "logs:read", "artifacts:read", "runs:control", "runs:dispatch", "workers:read"];
|
|
1
|
+
export declare const API_KEY_SCOPES: readonly ["workflows:read", "workflows:write", "logs:read", "artifacts:read", "runs:control", "runs:dispatch", "workers:read", "secrets:read", "secrets:write"];
|
|
2
2
|
export type ApiKeyScope = (typeof API_KEY_SCOPES)[number];
|
|
3
3
|
export declare class ApiKeyRepository {
|
|
4
4
|
init(): Promise<void>;
|
|
@@ -6,7 +6,7 @@ export declare class ApiKeyRepository {
|
|
|
6
6
|
issue(name: string, scopes: string[]): Promise<{
|
|
7
7
|
id: `${string}-${string}-${string}-${string}-${string}`;
|
|
8
8
|
name: string;
|
|
9
|
-
scopes: ("workflows:read" | "workflows:write" | "logs:read" | "artifacts:read" | "runs:control" | "runs:dispatch" | "workers:read")[];
|
|
9
|
+
scopes: ("workflows:read" | "workflows:write" | "logs:read" | "artifacts:read" | "runs:control" | "runs:dispatch" | "workers:read" | "secrets:read" | "secrets:write")[];
|
|
10
10
|
token: string;
|
|
11
11
|
}>;
|
|
12
12
|
scopesForToken(token: string): Promise<string[] | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-key-repository.d.ts","sourceRoot":"","sources":["../src/api-key-repository.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"api-key-repository.d.ts","sourceRoot":"","sources":["../src/api-key-repository.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc,iKAAkK,CAAC;AAC9L,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,qBAAa,gBAAgB;IACrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAYrB,IAAI;IAKJ,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;;;;;;IAUpC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;IAQvD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAI3C"}
|
package/dist/config.d.ts
CHANGED
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGjE,wBAAsB,UAAU,CAAC,MAAM,KAAA,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAuBrE;AAED,wBAAgB,aAAa,CAAC,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,GAAG,YAAY,CAqC7G;AAED,wBAAgB,SAAS,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGjE,wBAAsB,UAAU,CAAC,MAAM,KAAA,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAuBrE;AAED,wBAAgB,aAAa,CAAC,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,GAAG,YAAY,CAqC7G;AAED,wBAAgB,SAAS,SAwBxB;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAyBhH"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { t as e } from "./db-client-BvMkK1lx.js";
|
|
2
|
+
//#region src/oidc-user-repository.ts
|
|
3
|
+
var t = class {
|
|
4
|
+
async init() {
|
|
5
|
+
await e.exec("CREATE TABLE IF NOT EXISTS oidc_users (\n subject TEXT PRIMARY KEY, email TEXT, name TEXT, photo TEXT,\n role TEXT NOT NULL DEFAULT 'user',\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n updated_at DATETIME DEFAULT CURRENT_TIMESTAMP\n )");
|
|
6
|
+
}
|
|
7
|
+
async upsert(t) {
|
|
8
|
+
await e.run("INSERT INTO oidc_users (subject, email, name, photo) VALUES (?, ?, ?, ?)\n ON CONFLICT(subject) DO UPDATE SET email = excluded.email, name = excluded.name, photo = excluded.photo, updated_at = CURRENT_TIMESTAMP", [
|
|
9
|
+
t.id,
|
|
10
|
+
t.email || null,
|
|
11
|
+
t.name || null,
|
|
12
|
+
t.photo || null
|
|
13
|
+
]);
|
|
14
|
+
}
|
|
15
|
+
async role(t) {
|
|
16
|
+
return (await e.get("SELECT role FROM oidc_users WHERE subject = ?", [t]))?.role === "admin" ? "admin" : "user";
|
|
17
|
+
}
|
|
18
|
+
async promote(t) {
|
|
19
|
+
let n = await e.run("UPDATE oidc_users SET role = 'admin', updated_at = CURRENT_TIMESTAMP WHERE subject = ?", [t]);
|
|
20
|
+
return Number(n?.changes || 0) > 0;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
//#endregion
|
|
24
|
+
export { t };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { OidcUser } from './oidc.js';
|
|
2
|
+
export type OidcRole = 'user' | 'admin';
|
|
3
|
+
export declare class OidcUserRepository {
|
|
4
|
+
init(): Promise<void>;
|
|
5
|
+
upsert(user: OidcUser): Promise<void>;
|
|
6
|
+
role(subject: string): Promise<OidcRole>;
|
|
7
|
+
promote(subject: string): Promise<boolean>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=oidc-user-repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oidc-user-repository.d.ts","sourceRoot":"","sources":["../src/oidc-user-repository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAExC,qBAAa,kBAAkB;IACvB,IAAI;IASJ,MAAM,CAAC,IAAI,EAAE,QAAQ;IAMrB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAKxC,OAAO,CAAC,OAAO,EAAE,MAAM;CAI9B"}
|
package/dist/oidc.d.ts
CHANGED
|
@@ -24,6 +24,8 @@ export declare class OidcClient {
|
|
|
24
24
|
cookie: string;
|
|
25
25
|
}>;
|
|
26
26
|
userFromCookie(cookieHeader: string | undefined): OidcUser | undefined;
|
|
27
|
+
setRole(cookieHeader: string, role: 'user' | 'admin'): void;
|
|
28
|
+
roleFromCookie(cookieHeader: string | undefined): "user" | "admin" | undefined;
|
|
27
29
|
accessTokenFromCookie(cookieHeader: string | undefined): {
|
|
28
30
|
accessToken: string;
|
|
29
31
|
expiresAt: number;
|
package/dist/oidc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oidc.d.ts","sourceRoot":"","sources":["../src/oidc.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;
|
|
1
|
+
{"version":3,"file":"oidc.d.ts","sourceRoot":"","sources":["../src/oidc.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAoBD,qBAAa,UAAU;IACrB,OAAO,CAAC,qBAAqB,CAAC,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;gBAE3C,MAAM,EAAE,UAAU;IAI9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IAEpC,IAAI,OAAO,YAEV;IAED,IAAI,QAAQ,WAEX;IAEK,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYhE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAgCpH,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS;IAKtE,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAMpD,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS;IAI/C,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS;;;;IAMhD,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;IAUvD,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,EAAE,WAAW,CAAC,EAAE,MAAM;IAUlH,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS;IAM5C,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,WAAW;YAOL,cAAc;IAa5B,OAAO,CAAC,KAAK;CAKd"}
|
package/dist/on.js
CHANGED
|
@@ -41,7 +41,7 @@ function u(e, t) {
|
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
43
|
function d() {
|
|
44
|
-
console.log("\nš Runner CLI š\n\nUsage:\n npx -y @cloud-cli/on <command> [options]\n pnpm dlx -y @cloud-cli/on <command> [options]\n\nCommands:\n start-server Runs Webhook Ingress Server only (API Gateway mode)\n start-scheduler Runs cron and solar workflow triggers\n start-workers Runs event-driven workers (Scalable Worker mode)\n\nOptions:\n -c, --config Path to runner.config.mjs (default: ./runner.config.mjs, env: RUNNER_CONFIG_PATH)\n -d, --database Node.js database module URL (env: DATABASE_URL)\n -p, --port Port for Webhook Ingress Server (default: 11235, env: PORT)\n -k, --workers Maximum concurrent jobs (default: 5, env: RUNNER_WORKERS)\n Worker tags (comma-separated env: RUNNER_TAGS)\n Webhook server URL (env: RUNNER_SERVER_URL)\n OIDC settings (env: RUNNER_OIDC_PROVIDER_URL, RUNNER_OIDC_CLIENT_ID, RUNNER_OIDC_CLIENT_SECRET)\n -h, --help Show this help message\n ");
|
|
44
|
+
console.log("\nš Runner CLI š\n\nUsage:\n npx -y @cloud-cli/on <command> [options]\n pnpm dlx -y @cloud-cli/on <command> [options]\n\nCommands:\n start-server Runs Webhook Ingress Server only (API Gateway mode)\n start-scheduler Runs cron and solar workflow triggers\n start-workers Runs event-driven workers (Scalable Worker mode)\n promote-admin Promote an existing OIDC user (requires --subject)\n\nOptions:\n -c, --config Path to runner.config.mjs (default: ./runner.config.mjs, env: RUNNER_CONFIG_PATH)\n -d, --database Node.js database module URL (env: DATABASE_URL)\n -p, --port Port for Webhook Ingress Server (default: 11235, env: PORT)\n -k, --workers Maximum concurrent jobs (default: 5, env: RUNNER_WORKERS)\n Worker tags (comma-separated env: RUNNER_TAGS)\n Webhook server URL (env: RUNNER_SERVER_URL)\n OIDC settings (env: RUNNER_OIDC_PROVIDER_URL, RUNNER_OIDC_CLIENT_ID, RUNNER_OIDC_CLIENT_SECRET)\n -h, --help Show this help message\n ");
|
|
45
45
|
}
|
|
46
46
|
async function f() {
|
|
47
47
|
let { values: e, positionals: t } = c({
|
|
@@ -64,6 +64,7 @@ async function f() {
|
|
|
64
64
|
type: "string",
|
|
65
65
|
short: "k"
|
|
66
66
|
},
|
|
67
|
+
subject: { type: "string" },
|
|
67
68
|
help: {
|
|
68
69
|
type: "boolean",
|
|
69
70
|
short: "h"
|
|
@@ -72,7 +73,8 @@ async function f() {
|
|
|
72
73
|
});
|
|
73
74
|
return e.help && (d(), process.exit(0)), {
|
|
74
75
|
config: await l(e),
|
|
75
|
-
command: t[0] || "start"
|
|
76
|
+
command: t[0] || "start",
|
|
77
|
+
subject: e.subject
|
|
76
78
|
};
|
|
77
79
|
}
|
|
78
80
|
//#endregion
|
|
@@ -94,37 +96,46 @@ function p() {
|
|
|
94
96
|
//#region src/index.ts
|
|
95
97
|
async function m() {
|
|
96
98
|
p();
|
|
97
|
-
let { config: e, command: t } = await f();
|
|
99
|
+
let { config: e, command: t, subject: n } = await f();
|
|
98
100
|
if (!e) {
|
|
99
101
|
process.exitCode = 1;
|
|
100
102
|
return;
|
|
101
103
|
}
|
|
102
|
-
let [{ QueueManager:
|
|
104
|
+
let [{ QueueManager: r }, { SecretStore: i }, { WebhookServer: a }, { startWorkers: o }, { WorkflowRepository: s }, { WorkflowScheduler: c }, { OidcUserRepository: l }] = await Promise.all([
|
|
103
105
|
import("./queue-DhXXzxm3.js"),
|
|
104
106
|
import("./secrets-DhkqmawU.js"),
|
|
105
|
-
import("./server-
|
|
107
|
+
import("./server-DwdQsiqw.js"),
|
|
106
108
|
import("./worker-BwNyfSpp.js"),
|
|
107
109
|
import("./workflows-DQQIVH7c.js"),
|
|
108
|
-
import("./scheduler-2d1UPcxM.js")
|
|
109
|
-
|
|
110
|
+
import("./scheduler-2d1UPcxM.js"),
|
|
111
|
+
import("./oidc-user-repository-BNQF3qnb.js")
|
|
112
|
+
]);
|
|
113
|
+
if (t === "promote-admin") {
|
|
114
|
+
if (!n) throw Error("Usage: on promote-admin --subject <oidc-subject>");
|
|
115
|
+
let e = new l();
|
|
116
|
+
if (await e.init(), !await e.promote(n)) throw Error(`OIDC user not found: ${n}`);
|
|
117
|
+
console.log(`Promoted OIDC user ${n} to admin.`);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
let u = new i(), m = new r(process.env.WORKER_NAME || "cli");
|
|
110
121
|
switch (t) {
|
|
111
122
|
case "start-server":
|
|
112
|
-
console.log("š Starting Ingress Gateway..."), await
|
|
123
|
+
console.log("š Starting Ingress Gateway..."), await m.init(), await a.withPort({
|
|
113
124
|
config: e,
|
|
114
|
-
queue:
|
|
115
|
-
secrets:
|
|
125
|
+
queue: m,
|
|
126
|
+
secrets: u,
|
|
116
127
|
adminToken: e.adminToken,
|
|
117
128
|
port: e.port
|
|
118
129
|
});
|
|
119
130
|
break;
|
|
120
131
|
case "start-workers":
|
|
121
|
-
console.log(`āļø Starting worker scheduler with ${e.workers} concurrent slot(s)...`), await
|
|
132
|
+
console.log(`āļø Starting worker scheduler with ${e.workers} concurrent slot(s)...`), await m.init(), o(e.workers, m, u, e);
|
|
122
133
|
break;
|
|
123
134
|
case "start-scheduler": {
|
|
124
|
-
console.log("Starting workflow scheduler..."), await
|
|
125
|
-
let t = new
|
|
135
|
+
console.log("Starting workflow scheduler..."), await m.init();
|
|
136
|
+
let t = new s();
|
|
126
137
|
await t.init();
|
|
127
|
-
let n = new
|
|
138
|
+
let n = new c(m, t, e);
|
|
128
139
|
n.start();
|
|
129
140
|
let r = () => {
|
|
130
141
|
n.stop(), process.exit(0);
|