@proappstore/cli 2.6.32 → 2.6.34
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/create.d.ts +2 -0
- package/dist/create.d.ts.map +1 -1
- package/dist/create.js +11 -2
- package/dist/create.js.map +1 -1
- package/dist/hook.d.ts +3 -0
- package/dist/hook.d.ts.map +1 -0
- package/dist/hook.js +57 -0
- package/dist/hook.js.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/publish.test.js +1 -0
- package/dist/publish.test.js.map +1 -1
- package/dist/schedule.d.ts +3 -0
- package/dist/schedule.d.ts.map +1 -0
- package/dist/schedule.js +47 -0
- package/dist/schedule.js.map +1 -0
- package/dist/secret.d.ts +10 -0
- package/dist/secret.d.ts.map +1 -1
- package/dist/secret.js +77 -4
- package/dist/secret.js.map +1 -1
- package/dist/worker.d.ts +15 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +108 -0
- package/dist/worker.js.map +1 -0
- package/dist/worker.test.d.ts +2 -0
- package/dist/worker.test.d.ts.map +1 -0
- package/dist/worker.test.js +140 -0
- package/dist/worker.test.js.map +1 -0
- package/package.json +1 -1
- package/templates/worker/package.json +16 -0
- package/templates/worker/src/index.ts +27 -0
- package/templates/worker/tsconfig.json +12 -0
package/dist/create.d.ts
CHANGED
|
@@ -19,6 +19,8 @@ interface CreateOptions {
|
|
|
19
19
|
skipProvision?: boolean;
|
|
20
20
|
token?: string;
|
|
21
21
|
repo?: string;
|
|
22
|
+
/** #261: add `worker/` (an app worker, ADR-009) to the workspace. */
|
|
23
|
+
withWorker?: boolean;
|
|
22
24
|
}
|
|
23
25
|
export declare function createApp(appId: string, opts?: CreateOptions): Promise<void>;
|
|
24
26
|
export {};
|
package/dist/create.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAwBA;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,GAAE,OAAO,KAAa,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAkB5K;AAUD,UAAU,aAAa;IACrB,iGAAiG;IACjG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAMD,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6ItF"}
|
package/dist/create.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
|
-
import { access, readdir, readFile, rm, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { access, appendFile, cp, readdir, readFile, rm, writeFile } from 'node:fs/promises';
|
|
3
3
|
import { writeFileSync, readFileSync } from 'node:fs';
|
|
4
|
-
import { extname, join, resolve } from 'node:path';
|
|
4
|
+
import { dirname, extname, join, resolve } from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
5
6
|
import { resolveToken } from './lib/config.js';
|
|
6
7
|
import { writeOgImage } from './og-image.js';
|
|
7
8
|
const TEMPLATE_REPO = 'proappstore-online/template-app';
|
|
8
9
|
/** #178: the public approved-template catalogue (published by the docs build). */
|
|
9
10
|
const CATALOGUE_URL = 'https://docs.proappstore.online/templates/catalogue.json';
|
|
10
11
|
const DEFAULT_TEMPLATE_ID = 'template-app';
|
|
12
|
+
/** #261: the optional app-worker scaffold, shipped with the CLI so apps without a worker carry none. */
|
|
13
|
+
const WORKER_TEMPLATE_DIR = join(dirname(fileURLToPath(import.meta.url)), '..', 'templates', 'worker');
|
|
11
14
|
/**
|
|
12
15
|
* Resolve the template to scaffold from against the public catalogue (#178).
|
|
13
16
|
* Unknown/withdrawn ids are refused with the approved list; deprecated ones
|
|
@@ -73,6 +76,12 @@ export async function createApp(appId, opts = {}) {
|
|
|
73
76
|
// #178: provenance is recorded locally regardless of provisioning, so a later
|
|
74
77
|
// `pas publish` can forward the template id + revision to the platform.
|
|
75
78
|
writePasConfig(targetDir, { appId, template: template.id, templateRev });
|
|
79
|
+
// #261: the deploy workflow builds and uploads worker/ only when worker/package.json exists.
|
|
80
|
+
if (opts.withWorker) {
|
|
81
|
+
await cp(WORKER_TEMPLATE_DIR, join(targetDir, 'worker'), { recursive: true });
|
|
82
|
+
await appendFile(join(targetDir, 'pnpm-workspace.yaml'), ' - worker\n');
|
|
83
|
+
process.stdout.write(` added worker/ (app worker — runs once a platform admin enables it for ${appId})\n`);
|
|
84
|
+
}
|
|
76
85
|
// Step 2: Replace APPNAME placeholders
|
|
77
86
|
process.stdout.write(` [2/4] Configuring for ${appId}...\n`);
|
|
78
87
|
const substitutionCount = await substituteAppName(targetDir, appId, appName);
|
package/dist/create.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
|
package/dist/hook.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BpC,eAAO,MAAM,WAAW,SA0DrB,CAAC"}
|
package/dist/hook.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { ownerApi, requireSession, resolveAppIdOrExit } from './secret.js';
|
|
3
|
+
const DELIVERY_STATUSES = ['received', 'delivered', 'failed', 'quota_exceeded'];
|
|
4
|
+
export const hookCommand = new Command('hook')
|
|
5
|
+
.description('Inspect inbound webhooks (list, deliveries).')
|
|
6
|
+
.addCommand(new Command('list')
|
|
7
|
+
.alias('ls')
|
|
8
|
+
.description('Registered hooks: public URL, verifier and whether its secret is set.')
|
|
9
|
+
.option('--app <id>', 'app id (defaults to package.json name in cwd)')
|
|
10
|
+
.option('--json', 'Output JSON.')
|
|
11
|
+
.action(async (opts) => {
|
|
12
|
+
const cfg = await requireSession();
|
|
13
|
+
const appId = await resolveAppIdOrExit(opts.app);
|
|
14
|
+
const { hooks } = await ownerApi(cfg, 'GET', `/v1/apps/${appId}/hooks`, 'list hooks');
|
|
15
|
+
if (opts.json) {
|
|
16
|
+
process.stdout.write(`${JSON.stringify(hooks, null, 2)}\n`);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (hooks.length === 0) {
|
|
20
|
+
process.stdout.write(`No hooks for ${appId}. Declare them under "hooks" in mcp.json.\n`);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
for (const h of hooks) {
|
|
24
|
+
const secret = h.secret_name ? `${h.secret_name} ${h.secret_set ? 'set' : 'MISSING — pas secret set ' + h.secret_name}` : 'no secret';
|
|
25
|
+
const to = h.to === 'worker' ? 'worker' : `action ${h.to.action}`;
|
|
26
|
+
process.stdout.write(`${h.name.padEnd(20)} ${h.verify_kind.padEnd(20)} → ${to}\n ${h.url ?? '(fed by the platform GitHub App)'}\n secret: ${secret}\n`);
|
|
27
|
+
}
|
|
28
|
+
}))
|
|
29
|
+
.addCommand(new Command('deliveries')
|
|
30
|
+
.description('Recent deliveries of one hook, newest first (never the body).')
|
|
31
|
+
.argument('<name>', 'hook name')
|
|
32
|
+
.option('--status <status>', `only ${DELIVERY_STATUSES.join(' | ')}`)
|
|
33
|
+
.option('--limit <n>', 'how many (max 200)', '50')
|
|
34
|
+
.option('--app <id>', 'app id (defaults to package.json name in cwd)')
|
|
35
|
+
.option('--json', 'Output JSON.')
|
|
36
|
+
.action(async (name, opts) => {
|
|
37
|
+
if (opts.status && !DELIVERY_STATUSES.includes(opts.status)) {
|
|
38
|
+
process.stderr.write(`pas: --status must be one of ${DELIVERY_STATUSES.join(', ')}\n`);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
const cfg = await requireSession();
|
|
42
|
+
const appId = await resolveAppIdOrExit(opts.app);
|
|
43
|
+
const q = new URLSearchParams({ hook: name, limit: opts.limit, ...(opts.status ? { status: opts.status } : {}) });
|
|
44
|
+
const { deliveries } = await ownerApi(cfg, 'GET', `/v1/apps/${appId}/hook-deliveries?${q}`, 'list deliveries');
|
|
45
|
+
if (opts.json) {
|
|
46
|
+
process.stdout.write(`${JSON.stringify(deliveries, null, 2)}\n`);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (deliveries.length === 0) {
|
|
50
|
+
process.stdout.write(`No ${opts.status ? `${opts.status} ` : ''}deliveries for ${name}.\n`);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
for (const d of deliveries) {
|
|
54
|
+
process.stdout.write(`${new Date(d.received_at).toISOString()} ${d.status.padEnd(14)} attempts ${d.attempts} ${d.delivery_id}${d.event ? ` (${d.event})` : ''}${d.error ? `\n ${d.error}` : ''}\n`);
|
|
55
|
+
}
|
|
56
|
+
}));
|
|
57
|
+
//# sourceMappingURL=hook.js.map
|
package/dist/hook.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -13,6 +13,9 @@ import { publishApp } from './publish.js';
|
|
|
13
13
|
import { secretCommand } from './secret.js';
|
|
14
14
|
import { proxyCommand } from './proxy.js';
|
|
15
15
|
import { integrateCommand } from './integrate.js';
|
|
16
|
+
import { workerCommand } from './worker.js';
|
|
17
|
+
import { hookCommand } from './hook.js';
|
|
18
|
+
import { scheduleCommand } from './schedule.js';
|
|
16
19
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
17
20
|
const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf8'));
|
|
18
21
|
const program = new Command();
|
|
@@ -29,6 +32,7 @@ program
|
|
|
29
32
|
.option('--token <token>', 'Session token (or set PAS_SESSION_TOKEN env var)')
|
|
30
33
|
.option('--repo <owner/name>', 'Create a GitHub repo and push (e.g. my-org/my-app)')
|
|
31
34
|
.option('--template <id>', 'Approved template id from https://docs.proappstore.online/templates/ (default: template-app)')
|
|
35
|
+
.option('--with-worker', 'Add worker/ — an app worker for schedules, webhooks and server routes (enabled per app by a platform admin)')
|
|
32
36
|
.action(async (appId, opts) => {
|
|
33
37
|
await createApp(appId, opts);
|
|
34
38
|
});
|
|
@@ -53,6 +57,9 @@ program.addCommand(domainCommand);
|
|
|
53
57
|
program.addCommand(secretCommand);
|
|
54
58
|
program.addCommand(proxyCommand);
|
|
55
59
|
program.addCommand(integrateCommand);
|
|
60
|
+
program.addCommand(workerCommand);
|
|
61
|
+
program.addCommand(hookCommand);
|
|
62
|
+
program.addCommand(scheduleCommand);
|
|
56
63
|
program.parseAsync().catch((err) => {
|
|
57
64
|
const msg = err instanceof Error ? err.message : String(err);
|
|
58
65
|
process.stderr.write(`pas: ${msg}\n`);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/publish.test.js
CHANGED
|
@@ -15,6 +15,7 @@ const MANIFEST = {
|
|
|
15
15
|
operator_view: { version: 1, resources: [], actions: [] },
|
|
16
16
|
visibility: { mode: 'private', roles: ['viewer'] },
|
|
17
17
|
worker: { secrets: ['GITHUB_TOKEN'] },
|
|
18
|
+
hooks: [{ name: 'github', verify: { kind: 'github-hmac-sha256', secret: 'GITHUB_WEBHOOK_SECRET' }, to: 'worker' }],
|
|
18
19
|
};
|
|
19
20
|
let dir;
|
|
20
21
|
let cwd;
|
package/dist/publish.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.test.js","sourceRoot":"","sources":["../src/publish.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,8EAA8E;AAC9E,yEAAyE;AACzE,8EAA8E;AAC9E,8DAA8D;AAE9D,MAAM,QAAQ,GAAG;IACf,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,iCAAiC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;IACjJ,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAChE,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;IACjC,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE;IAChD,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IACzD,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE;IAClD,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,cAAc,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"publish.test.js","sourceRoot":"","sources":["../src/publish.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,eAAO,MAAM,eAAe,SA6CzB,CAAC"}
|
package/dist/schedule.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { ownerApi, requireSession, resolveAppIdOrExit } from './secret.js';
|
|
3
|
+
const RUN_STATUSES = ['due', 'claimed', 'succeeded', 'failed'];
|
|
4
|
+
const WORKER_RUN_PREFIX = 'worker:';
|
|
5
|
+
export const scheduleCommand = new Command('schedule')
|
|
6
|
+
.description('Scheduled runs: history, and running a worker schedule now.')
|
|
7
|
+
.addCommand(new Command('runs')
|
|
8
|
+
.description('Recent scheduled-action and worker-schedule runs, newest first.')
|
|
9
|
+
.option('--status <status>', `only ${RUN_STATUSES.join(' | ')}`)
|
|
10
|
+
.option('--limit <n>', 'how many (max 200)', '50')
|
|
11
|
+
.option('--app <id>', 'app id (defaults to package.json name in cwd)')
|
|
12
|
+
.option('--json', 'Output JSON.')
|
|
13
|
+
.action(async (opts) => {
|
|
14
|
+
if (opts.status && !RUN_STATUSES.includes(opts.status)) {
|
|
15
|
+
process.stderr.write(`pas: --status must be one of ${RUN_STATUSES.join(', ')}\n`);
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
const cfg = await requireSession();
|
|
19
|
+
const appId = await resolveAppIdOrExit(opts.app);
|
|
20
|
+
const q = new URLSearchParams({ limit: opts.limit, ...(opts.status ? { status: opts.status } : {}) });
|
|
21
|
+
const { runs } = await ownerApi(cfg, 'GET', `/v1/apps/${appId}/scheduled-runs?${q}`, 'list runs');
|
|
22
|
+
if (opts.json) {
|
|
23
|
+
process.stdout.write(`${JSON.stringify(runs, null, 2)}\n`);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (runs.length === 0) {
|
|
27
|
+
process.stdout.write(`No ${opts.status ? `${opts.status} ` : ''}runs for ${appId}.\n`);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
for (const r of runs) {
|
|
31
|
+
const what = r.action_name.startsWith(WORKER_RUN_PREFIX) ? `worker ${r.action_name.slice(WORKER_RUN_PREFIX.length)}` : `action ${r.action_name}`;
|
|
32
|
+
// due/claimed/queued have not finished: shown as in progress.
|
|
33
|
+
const status = r.status === 'succeeded' || r.status === 'failed' ? r.status : `in progress (${r.status})`;
|
|
34
|
+
process.stdout.write(`${new Date(r.due_at).toISOString()} ${what.padEnd(32)} ${status}${r.error ? `\n ${r.error}` : ''}\n`);
|
|
35
|
+
}
|
|
36
|
+
}))
|
|
37
|
+
.addCommand(new Command('run')
|
|
38
|
+
.description('Run a worker schedule now: the next platform tick (≤ 5 min) starts it.')
|
|
39
|
+
.argument('<name>', 'worker schedule name from mcp.json worker.schedules')
|
|
40
|
+
.option('--app <id>', 'app id (defaults to package.json name in cwd)')
|
|
41
|
+
.action(async (name, opts) => {
|
|
42
|
+
const cfg = await requireSession();
|
|
43
|
+
const appId = await resolveAppIdOrExit(opts.app);
|
|
44
|
+
const r = await ownerApi(cfg, 'POST', `/v1/apps/${appId}/worker/schedules/${encodeURIComponent(name)}/run`, `run ${name}`);
|
|
45
|
+
process.stdout.write(`✓ queued ${name} (run ${r.run_id}); it starts on the next platform tick. Follow it: pas schedule runs\n`);
|
|
46
|
+
}));
|
|
47
|
+
//# sourceMappingURL=schedule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"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"}
|
package/dist/secret.d.ts
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import { type CliConfig } from './lib/config.js';
|
|
3
3
|
export declare const secretCommand: Command;
|
|
4
|
+
/**
|
|
5
|
+
* The value for `pas secret set` (#261), never from argv by default: a hidden TTY
|
|
6
|
+
* prompt, or stdin with --stdin. A positional value still works for one release,
|
|
7
|
+
* with a deprecation warning.
|
|
8
|
+
*/
|
|
9
|
+
export declare function readSecretValue(name: string, positional: string | undefined, opts: {
|
|
10
|
+
stdin?: boolean;
|
|
11
|
+
}, input?: NodeJS.ReadStream): Promise<string>;
|
|
4
12
|
export declare function requireSession(): Promise<CliConfig>;
|
|
5
13
|
export declare function bearer(cfg: CliConfig): Record<string, string>;
|
|
6
14
|
export declare function resolveAppIdOrExit(explicit: string | undefined): Promise<string>;
|
|
15
|
+
/** An owner-authenticated API call; exits with the server's error on a non-2xx. */
|
|
16
|
+
export declare function ownerApi<T>(cfg: CliConfig, method: string, path: string, action: string): Promise<T>;
|
|
7
17
|
export declare function dieFromHttp(res: Response, action: string): Promise<never>;
|
|
8
18
|
//# sourceMappingURL=secret.d.ts.map
|
package/dist/secret.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret.d.ts","sourceRoot":"","sources":["../src/secret.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,iBAAiB,CAAC;AAQ7D,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"secret.d.ts","sourceRoot":"","sources":["../src/secret.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,iBAAiB,CAAC;AAQ7D,eAAO,MAAM,aAAa,SAkEvB,CAAC;AAEJ;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EACzB,KAAK,GAAE,MAAM,CAAC,UAA0B,GACvC,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAgCD,wBAAsB,cAAc,IAAI,OAAO,CAAC,SAAS,CAAC,CAOzD;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK7D;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBtF;AAED,mFAAmF;AACnF,wBAAsB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAI1G;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAS/E"}
|
package/dist/secret.js
CHANGED
|
@@ -7,11 +7,13 @@ export const secretCommand = new Command('secret')
|
|
|
7
7
|
.addCommand(new Command('set')
|
|
8
8
|
.description('Store or replace an encrypted API key for an app.')
|
|
9
9
|
.argument('<name>', 'secret name (uppercase + underscores, e.g. AMADEUS_CLIENT_ID)')
|
|
10
|
-
.argument('
|
|
10
|
+
.argument('[value]', 'DEPRECATED — lands in shell history and `ps`; omit it to be prompted, or pipe it with --stdin')
|
|
11
|
+
.option('--stdin', 'read the value from stdin (for scripts; no TTY needed)')
|
|
11
12
|
.option('--app <id>', 'app id (defaults to package.json name in cwd)')
|
|
12
|
-
.action(async (name,
|
|
13
|
+
.action(async (name, positional, opts) => {
|
|
13
14
|
const cfg = await requireSession();
|
|
14
15
|
const appId = await resolveAppIdOrExit(opts.app);
|
|
16
|
+
const value = await readSecretValue(name, positional, opts);
|
|
15
17
|
const res = await fetch(`${cfg.apiBase}/v1/apps/${appId}/secrets/${name}`, {
|
|
16
18
|
method: 'PUT',
|
|
17
19
|
headers: bearer(cfg),
|
|
@@ -19,7 +21,7 @@ export const secretCommand = new Command('secret')
|
|
|
19
21
|
});
|
|
20
22
|
if (!res.ok)
|
|
21
23
|
await dieFromHttp(res, `set ${name}`);
|
|
22
|
-
process.stdout.write(`✓ stored ${name} for ${appId}\n`);
|
|
24
|
+
process.stdout.write(`✓ stored ${name} for ${appId} (${value.length} characters)\n`);
|
|
23
25
|
}))
|
|
24
26
|
.addCommand(new Command('list')
|
|
25
27
|
.alias('ls')
|
|
@@ -64,7 +66,71 @@ export const secretCommand = new Command('secret')
|
|
|
64
66
|
await dieFromHttp(res, `rm ${name}`);
|
|
65
67
|
process.stdout.write(`✓ removed ${name} from ${appId}\n`);
|
|
66
68
|
}));
|
|
67
|
-
|
|
69
|
+
/**
|
|
70
|
+
* The value for `pas secret set` (#261), never from argv by default: a hidden TTY
|
|
71
|
+
* prompt, or stdin with --stdin. A positional value still works for one release,
|
|
72
|
+
* with a deprecation warning.
|
|
73
|
+
*/
|
|
74
|
+
export async function readSecretValue(name, positional, opts, input = process.stdin) {
|
|
75
|
+
let value;
|
|
76
|
+
if (positional !== undefined) {
|
|
77
|
+
process.stderr.write('pas: warning: passing a secret value as an argument is deprecated and will be removed — it is saved in shell history and visible in `ps`. Omit it to be prompted, or use --stdin.\n');
|
|
78
|
+
value = positional;
|
|
79
|
+
}
|
|
80
|
+
else if (opts.stdin) {
|
|
81
|
+
let raw = '';
|
|
82
|
+
input.setEncoding('utf8');
|
|
83
|
+
for await (const chunk of input)
|
|
84
|
+
raw += chunk;
|
|
85
|
+
value = raw.replace(/\r?\n$/, '');
|
|
86
|
+
}
|
|
87
|
+
else if (input.isTTY) {
|
|
88
|
+
value = await promptHidden(`Value for ${name} (input hidden): `, input);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
process.stderr.write('pas: stdin is not a terminal. Pipe the value with --stdin.\n');
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
if (!value) {
|
|
95
|
+
process.stderr.write('pas: empty value; nothing stored.\n');
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
return value;
|
|
99
|
+
}
|
|
100
|
+
/** Read one line from a TTY without echoing it. */
|
|
101
|
+
function promptHidden(question, input) {
|
|
102
|
+
process.stderr.write(question);
|
|
103
|
+
input.setRawMode(true);
|
|
104
|
+
input.setEncoding('utf8');
|
|
105
|
+
input.resume();
|
|
106
|
+
return new Promise((resolveValue, reject) => {
|
|
107
|
+
let value = '';
|
|
108
|
+
const finish = (err) => {
|
|
109
|
+
input.off('data', onData);
|
|
110
|
+
input.setRawMode(false);
|
|
111
|
+
input.pause();
|
|
112
|
+
process.stderr.write('\n');
|
|
113
|
+
if (err)
|
|
114
|
+
reject(err);
|
|
115
|
+
else
|
|
116
|
+
resolveValue(value);
|
|
117
|
+
};
|
|
118
|
+
const onData = (chunk) => {
|
|
119
|
+
for (const ch of chunk) {
|
|
120
|
+
if (ch === '\r' || ch === '\n')
|
|
121
|
+
return finish();
|
|
122
|
+
if (ch === '\u0003')
|
|
123
|
+
return finish(new Error('cancelled'));
|
|
124
|
+
if (ch === '\u007f' || ch === '\b')
|
|
125
|
+
value = value.slice(0, -1);
|
|
126
|
+
else
|
|
127
|
+
value += ch;
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
input.on('data', onData);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
// Shared helpers (also used by proxy.ts, worker.ts, hook.ts, schedule.ts)
|
|
68
134
|
export async function requireSession() {
|
|
69
135
|
const cfg = await readConfig();
|
|
70
136
|
if (!cfg.session?.token) {
|
|
@@ -97,6 +163,13 @@ export async function resolveAppIdOrExit(explicit) {
|
|
|
97
163
|
process.stderr.write('pas: no app id. Pass --app <id> or run from a directory whose package.json `name` is the app id.\n');
|
|
98
164
|
process.exit(1);
|
|
99
165
|
}
|
|
166
|
+
/** An owner-authenticated API call; exits with the server's error on a non-2xx. */
|
|
167
|
+
export async function ownerApi(cfg, method, path, action) {
|
|
168
|
+
const res = await fetch(`${cfg.apiBase}${path}`, { method, headers: bearer(cfg) });
|
|
169
|
+
if (!res.ok)
|
|
170
|
+
await dieFromHttp(res, action);
|
|
171
|
+
return (await res.json());
|
|
172
|
+
}
|
|
100
173
|
export async function dieFromHttp(res, action) {
|
|
101
174
|
const text = await res.text();
|
|
102
175
|
let msg = text;
|
package/dist/secret.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret.js","sourceRoot":"","sources":["../src/secret.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAkB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAQ7D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,uDAAuD,CAAC;KACpE,UAAU,CACT,IAAI,OAAO,CAAC,KAAK,CAAC;KACf,WAAW,CAAC,mDAAmD,CAAC;KAChE,QAAQ,CAAC,QAAQ,EAAE,+DAA+D,CAAC;KACnF,QAAQ,CAAC,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"secret.js","sourceRoot":"","sources":["../src/secret.ts"],"names":[],"mappings":"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"}
|
package/dist/worker.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { type CliConfig } from './lib/config.js';
|
|
3
|
+
/** `30s`, `10m`, `1h`, `2d` → milliseconds. */
|
|
4
|
+
export declare function parseSince(raw: string): number;
|
|
5
|
+
/**
|
|
6
|
+
* The worker's `PAS.log` lines and its invocation outcomes after `since`, oldest
|
|
7
|
+
* first, as printable lines keyed for de-duplication across polls.
|
|
8
|
+
*/
|
|
9
|
+
export declare function workerLogLines(cfg: CliConfig, appId: string, since: number): Promise<{
|
|
10
|
+
key: string;
|
|
11
|
+
ts: number;
|
|
12
|
+
line: string;
|
|
13
|
+
}[]>;
|
|
14
|
+
export declare const workerCommand: Command;
|
|
15
|
+
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAoCjD,+CAA+C;AAC/C,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI9C;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAkBvI;AAID,eAAO,MAAM,aAAa,SAsEvB,CAAC"}
|
package/dist/worker.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import {} from './lib/config.js';
|
|
3
|
+
import { ownerApi, requireSession, resolveAppIdOrExit } from './secret.js';
|
|
4
|
+
const iso = (ms) => new Date(ms).toISOString();
|
|
5
|
+
/** `30s`, `10m`, `1h`, `2d` → milliseconds. */
|
|
6
|
+
export function parseSince(raw) {
|
|
7
|
+
const m = /^(\d+)([smhd])$/.exec(raw.trim());
|
|
8
|
+
if (!m)
|
|
9
|
+
throw new Error(`--since must look like 30s, 10m, 1h or 2d (got "${raw}")`);
|
|
10
|
+
return Number(m[1]) * { s: 1_000, m: 60_000, h: 3_600_000, d: 86_400_000 }[m[2]];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The worker's `PAS.log` lines and its invocation outcomes after `since`, oldest
|
|
14
|
+
* first, as printable lines keyed for de-duplication across polls.
|
|
15
|
+
*/
|
|
16
|
+
export async function workerLogLines(cfg, appId, since) {
|
|
17
|
+
const [{ logs }, status] = await Promise.all([
|
|
18
|
+
ownerApi(cfg, 'GET', `/v1/apps/${appId}/logs?category=worker&since=${since}&limit=500`, 'read worker logs'),
|
|
19
|
+
ownerApi(cfg, 'GET', `/v1/apps/${appId}/worker`, 'read worker status'),
|
|
20
|
+
]);
|
|
21
|
+
const lines = logs.map((l) => ({
|
|
22
|
+
key: `log:${l.ts}:${l.message}`,
|
|
23
|
+
ts: l.ts,
|
|
24
|
+
line: `${iso(l.ts)} ${l.level.padEnd(5)} ${l.message}${l.data == null ? '' : ` ${JSON.stringify(l.data)}`}`,
|
|
25
|
+
}));
|
|
26
|
+
for (const inv of status.invocations) {
|
|
27
|
+
// A running invocation is printed once it finishes.
|
|
28
|
+
if (inv.finished_at == null || inv.finished_at < since)
|
|
29
|
+
continue;
|
|
30
|
+
const what = `${inv.type}${inv.name ? ` ${inv.name}` : ''} attempt ${inv.attempt}`;
|
|
31
|
+
const outcome = `${inv.status}${inv.http_status ? ` (${inv.http_status})` : ''}${inv.error ? `: ${inv.error}` : ''}`;
|
|
32
|
+
lines.push({ key: `run:${inv.id}`, ts: inv.finished_at, line: `${iso(inv.finished_at)} run ${what} ${outcome}` });
|
|
33
|
+
}
|
|
34
|
+
return lines.sort((a, b) => a.ts - b.ts);
|
|
35
|
+
}
|
|
36
|
+
const FOLLOW_INTERVAL_MS = 5_000;
|
|
37
|
+
export const workerCommand = new Command('worker')
|
|
38
|
+
.description('Inspect and manage the app worker (status, logs, key rotation).')
|
|
39
|
+
.addCommand(new Command('status')
|
|
40
|
+
.description('Enabled flag, last deploy, schedules and recent invocations.')
|
|
41
|
+
.option('--app <id>', 'app id (defaults to package.json name in cwd)')
|
|
42
|
+
.option('--json', 'Output JSON.')
|
|
43
|
+
.action(async (opts) => {
|
|
44
|
+
const cfg = await requireSession();
|
|
45
|
+
const appId = await resolveAppIdOrExit(opts.app);
|
|
46
|
+
const s = await ownerApi(cfg, 'GET', `/v1/apps/${appId}/worker`, 'read worker status');
|
|
47
|
+
if (opts.json) {
|
|
48
|
+
process.stdout.write(`${JSON.stringify(s, null, 2)}\n`);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const w = s.worker;
|
|
52
|
+
const out = [`${appId}: app worker ${w.enabled ? 'enabled' : 'not enabled (a platform admin enables it)'}`];
|
|
53
|
+
if (w.backend)
|
|
54
|
+
out.push(` backend ${w.backend}`);
|
|
55
|
+
if (w.deployed_at)
|
|
56
|
+
out.push(` deployed ${w.deployed_sha?.slice(0, 12) ?? '?'} (${w.deployed_ref ?? '?'}) at ${iso(w.deployed_at)}`);
|
|
57
|
+
if (s.last_deploy)
|
|
58
|
+
out.push(` last deploy ${s.last_deploy.status} at ${iso(s.last_deploy.created_at)}${s.last_deploy.detail ? ` — ${s.last_deploy.detail}` : ''}`);
|
|
59
|
+
if (w.rotation_overlap_until && w.rotation_overlap_until > Date.now())
|
|
60
|
+
out.push(` key rotation overlap until ${iso(w.rotation_overlap_until)}`);
|
|
61
|
+
if (s.schedules.length) {
|
|
62
|
+
out.push(' schedules');
|
|
63
|
+
for (const sch of s.schedules) {
|
|
64
|
+
const state = sch.schedule_disabled_at ? `DISABLED after ${sch.consecutive_failures} failures — redeploy mcp.json to re-enable` : 'active';
|
|
65
|
+
out.push(` ${sch.name.padEnd(24)} ${sch.cron.padEnd(16)} ${state}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (s.invocations.length) {
|
|
69
|
+
out.push(' recent invocations');
|
|
70
|
+
for (const inv of s.invocations) {
|
|
71
|
+
out.push(` ${iso(inv.started_at)} ${`${inv.type}${inv.name ? ` ${inv.name}` : ''}`.padEnd(24)} ${inv.status}${inv.error ? `: ${inv.error}` : ''}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
process.stdout.write(`${out.join('\n')}\n`);
|
|
75
|
+
}))
|
|
76
|
+
.addCommand(new Command('logs')
|
|
77
|
+
.description("The worker's PAS.log lines and invocation outcomes.")
|
|
78
|
+
.option('--since <window>', 'how far back: 30s, 10m, 1h, 2d', '1h')
|
|
79
|
+
.option('-f, --follow', `keep polling every ${FOLLOW_INTERVAL_MS / 1000} s`)
|
|
80
|
+
.option('--app <id>', 'app id (defaults to package.json name in cwd)')
|
|
81
|
+
.action(async (opts) => {
|
|
82
|
+
const cfg = await requireSession();
|
|
83
|
+
const appId = await resolveAppIdOrExit(opts.app);
|
|
84
|
+
let since = Date.now() - parseSince(opts.since);
|
|
85
|
+
const seen = new Set();
|
|
86
|
+
for (;;) {
|
|
87
|
+
for (const l of await workerLogLines(cfg, appId, since)) {
|
|
88
|
+
if (seen.has(l.key))
|
|
89
|
+
continue;
|
|
90
|
+
seen.add(l.key);
|
|
91
|
+
since = Math.max(since, l.ts);
|
|
92
|
+
process.stdout.write(`${l.line}\n`);
|
|
93
|
+
}
|
|
94
|
+
if (!opts.follow)
|
|
95
|
+
return;
|
|
96
|
+
await new Promise((r) => setTimeout(r, FOLLOW_INTERVAL_MS));
|
|
97
|
+
}
|
|
98
|
+
}))
|
|
99
|
+
.addCommand(new Command('rotate')
|
|
100
|
+
.description('Rotate the worker token and event key (the old pair keeps working for a short overlap).')
|
|
101
|
+
.option('--app <id>', 'app id (defaults to package.json name in cwd)')
|
|
102
|
+
.action(async (opts) => {
|
|
103
|
+
const cfg = await requireSession();
|
|
104
|
+
const appId = await resolveAppIdOrExit(opts.app);
|
|
105
|
+
const r = await ownerApi(cfg, 'POST', `/v1/apps/${appId}/worker/rotate`, 'rotate worker keys');
|
|
106
|
+
process.stdout.write(`✓ rotated worker keys for ${appId} (config version ${r.config_version})\n`);
|
|
107
|
+
}));
|
|
108
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.test.d.ts","sourceRoot":"","sources":["../src/worker.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { PassThrough } from 'node:stream';
|
|
2
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
3
|
+
// #261: the owner CLI for app workers — `pas worker|hook|schedule` — and
|
|
4
|
+
// `pas secret set` reading the value from a hidden prompt or stdin, not argv.
|
|
5
|
+
vi.mock('./lib/config.js', () => ({
|
|
6
|
+
readConfig: async () => ({ apiBase: 'https://api.test', session: { token: 'tok' } }),
|
|
7
|
+
}));
|
|
8
|
+
const { readSecretValue } = await import('./secret.js');
|
|
9
|
+
const { parseSince, workerLogLines, workerCommand } = await import('./worker.js');
|
|
10
|
+
const { hookCommand } = await import('./hook.js');
|
|
11
|
+
const { scheduleCommand } = await import('./schedule.js');
|
|
12
|
+
let out;
|
|
13
|
+
let err;
|
|
14
|
+
let calls;
|
|
15
|
+
let routes;
|
|
16
|
+
beforeEach(() => {
|
|
17
|
+
out = [];
|
|
18
|
+
err = [];
|
|
19
|
+
calls = [];
|
|
20
|
+
routes = {};
|
|
21
|
+
vi.spyOn(process.stdout, 'write').mockImplementation((s) => { out.push(String(s)); return true; });
|
|
22
|
+
vi.spyOn(process.stderr, 'write').mockImplementation((s) => { err.push(String(s)); return true; });
|
|
23
|
+
vi.spyOn(process, 'exit').mockImplementation(((code) => { throw new Error(`exit ${code}`); }));
|
|
24
|
+
vi.stubGlobal('fetch', vi.fn(async (url, init = {}) => {
|
|
25
|
+
const method = init.method ?? 'GET';
|
|
26
|
+
calls.push({ method, url });
|
|
27
|
+
expect(new Headers(init.headers).get('Authorization')).toBe('Bearer tok');
|
|
28
|
+
const path = new URL(url).pathname;
|
|
29
|
+
const body = routes[`${method} ${path}`];
|
|
30
|
+
return body === undefined ? Response.json({ error: 'not found' }, { status: 404 }) : Response.json(body, { status: method === 'POST' ? 202 : 200 });
|
|
31
|
+
}));
|
|
32
|
+
});
|
|
33
|
+
afterEach(() => {
|
|
34
|
+
vi.restoreAllMocks();
|
|
35
|
+
vi.unstubAllGlobals();
|
|
36
|
+
});
|
|
37
|
+
function tty() {
|
|
38
|
+
return Object.assign(new PassThrough(), { isTTY: true, setRawMode: vi.fn() });
|
|
39
|
+
}
|
|
40
|
+
describe('pas secret set input (#261)', () => {
|
|
41
|
+
it('prompts on a TTY with raw mode (no echo) and returns what was typed, honouring backspace', async () => {
|
|
42
|
+
const input = tty();
|
|
43
|
+
const value = readSecretValue('FOO', undefined, {}, input);
|
|
44
|
+
input.write('s3crx\u007ft\r');
|
|
45
|
+
expect(await value).toBe('s3crt');
|
|
46
|
+
expect(input.setRawMode.mock.calls).toEqual([[true], [false]]);
|
|
47
|
+
expect(err.join('')).not.toContain('s3cr');
|
|
48
|
+
expect(err.join('')).toContain('input hidden');
|
|
49
|
+
});
|
|
50
|
+
it('reads --stdin to the end, dropping one trailing newline', async () => {
|
|
51
|
+
const input = new PassThrough();
|
|
52
|
+
const value = readSecretValue('FOO', undefined, { stdin: true }, input);
|
|
53
|
+
input.end('v-from-pipe\n');
|
|
54
|
+
expect(await value).toBe('v-from-pipe');
|
|
55
|
+
});
|
|
56
|
+
it('still takes a positional value, with a deprecation warning on stderr', async () => {
|
|
57
|
+
expect(await readSecretValue('FOO', 'legacy', {}, new PassThrough())).toBe('legacy');
|
|
58
|
+
expect(err.join('')).toMatch(/deprecated/);
|
|
59
|
+
});
|
|
60
|
+
it('refuses a non-TTY without --stdin, and an empty value', async () => {
|
|
61
|
+
await expect(readSecretValue('FOO', undefined, {}, new PassThrough())).rejects.toThrow('exit 1');
|
|
62
|
+
expect(err.join('')).toMatch(/--stdin/);
|
|
63
|
+
const input = new PassThrough();
|
|
64
|
+
const value = readSecretValue('FOO', undefined, { stdin: true }, input);
|
|
65
|
+
input.end('\n');
|
|
66
|
+
await expect(value).rejects.toThrow('exit 1');
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe('pas worker logs (#261)', () => {
|
|
70
|
+
it('parses --since windows', () => {
|
|
71
|
+
expect(parseSince('30s')).toBe(30_000);
|
|
72
|
+
expect(parseSince('10m')).toBe(600_000);
|
|
73
|
+
expect(parseSince('1h')).toBe(3_600_000);
|
|
74
|
+
expect(parseSince('2d')).toBe(172_800_000);
|
|
75
|
+
expect(() => parseSince('1w')).toThrow(/--since/);
|
|
76
|
+
});
|
|
77
|
+
it('merges PAS.log lines and finished invocations after since, oldest first', async () => {
|
|
78
|
+
routes['GET /v1/apps/demo/logs'] = { logs: [{ ts: 3000, level: 'info', message: 'synced', data: { count: 2 } }] };
|
|
79
|
+
routes['GET /v1/apps/demo/worker'] = {
|
|
80
|
+
worker: { enabled: 1 }, last_deploy: null, schedules: [],
|
|
81
|
+
invocations: [
|
|
82
|
+
{ id: 'a', type: 'schedule', name: 'sync', attempt: 1, status: 'failed', http_status: 500, started_at: 1000, finished_at: 2000, error: 'upstream 502' },
|
|
83
|
+
{ id: 'b', type: 'hook', name: 'github', attempt: 1, status: 'running', http_status: null, started_at: 4000, finished_at: null, error: null },
|
|
84
|
+
{ id: 'c', type: 'http', name: null, attempt: 1, status: 'succeeded', http_status: 200, started_at: 10, finished_at: 20, error: null },
|
|
85
|
+
],
|
|
86
|
+
};
|
|
87
|
+
const lines = await workerLogLines({ apiBase: 'https://api.test', session: { token: 'tok' } }, 'demo', 1000);
|
|
88
|
+
expect(lines.map((l) => l.line)).toEqual([
|
|
89
|
+
`${new Date(2000).toISOString()} run schedule sync attempt 1 failed (500): upstream 502`,
|
|
90
|
+
`${new Date(3000).toISOString()} info synced {"count":2}`,
|
|
91
|
+
]);
|
|
92
|
+
expect(calls[0].url).toBe('https://api.test/v1/apps/demo/logs?category=worker&since=1000&limit=500');
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
describe('owner commands (#261)', () => {
|
|
96
|
+
const run = (cmd, args) => cmd.parseAsync(['node', cmd.name(), ...args, '--app', 'demo']);
|
|
97
|
+
it('pas schedule run <name> queues a run; pas schedule runs labels worker runs and in-progress ones', async () => {
|
|
98
|
+
routes['POST /v1/apps/demo/worker/schedules/reconcile/run'] = { run_id: 'r1', status: 'due' };
|
|
99
|
+
await run(scheduleCommand, ['run', 'reconcile']);
|
|
100
|
+
expect(out.join('')).toContain('queued reconcile (run r1)');
|
|
101
|
+
routes['GET /v1/apps/demo/scheduled-runs'] = { runs: [
|
|
102
|
+
{ run_id: 'r1', action_name: 'worker:reconcile', due_at: 0, finished_at: null, status: 'due', changes: null, error: null },
|
|
103
|
+
{ run_id: 'r0', action_name: 'digest', due_at: 0, finished_at: 1, status: 'failed', changes: null, error: 'boom' },
|
|
104
|
+
] };
|
|
105
|
+
await run(scheduleCommand, ['runs', '--status', 'failed']);
|
|
106
|
+
expect(calls.at(-1).url).toBe('https://api.test/v1/apps/demo/scheduled-runs?limit=50&status=failed');
|
|
107
|
+
expect(out.join('')).toMatch(/worker reconcile\s+in progress \(due\)/);
|
|
108
|
+
expect(out.join('')).toMatch(/action digest\s+failed\n {2}boom/);
|
|
109
|
+
});
|
|
110
|
+
it('pas hook deliveries <name> --status failed filters on the server; hook list flags a missing secret', async () => {
|
|
111
|
+
routes['GET /v1/apps/demo/hook-deliveries'] = { deliveries: [
|
|
112
|
+
{ id: 'd', hook: 'github', delivery_id: 'gh-1', event: 'push', received_at: 0, status: 'failed', attempts: 2, finished_at: 1, error: 'worker answered 500' },
|
|
113
|
+
] };
|
|
114
|
+
await run(hookCommand, ['deliveries', 'github', '--status', 'failed']);
|
|
115
|
+
expect(calls.at(-1).url).toBe('https://api.test/v1/apps/demo/hook-deliveries?hook=github&limit=50&status=failed');
|
|
116
|
+
expect(out.join('')).toContain('worker answered 500');
|
|
117
|
+
routes['GET /v1/apps/demo/hooks'] = { hooks: [
|
|
118
|
+
{ name: 'github', url: 'https://api.test/v1/apps/demo/hooks/github', verify_kind: 'github-hmac-sha256', secret_name: 'GH_SECRET', secret_set: false, to: 'worker' },
|
|
119
|
+
] };
|
|
120
|
+
await run(hookCommand, ['list']);
|
|
121
|
+
expect(out.join('')).toContain('GH_SECRET MISSING');
|
|
122
|
+
await expect(run(hookCommand, ['deliveries', 'github', '--status', 'nope'])).rejects.toThrow('exit 1');
|
|
123
|
+
});
|
|
124
|
+
it('pas worker status shows a breaker-disabled schedule; rotate posts; a server error exits with its message', async () => {
|
|
125
|
+
routes['GET /v1/apps/demo/worker'] = {
|
|
126
|
+
worker: { enabled: 1, backend: 'loader', deployed_sha: 'abcdef1234567890', deployed_ref: 'refs/heads/main', deployed_at: 0 },
|
|
127
|
+
last_deploy: { sha: 'abcdef1234567890', ref: 'refs/heads/main', status: 'deployed', detail: 'redeploy', created_at: 0 },
|
|
128
|
+
invocations: [],
|
|
129
|
+
schedules: [{ name: 'reconcile', cron: '*/15 * * * *', consecutive_failures: 5, schedule_disabled_at: 1 }],
|
|
130
|
+
};
|
|
131
|
+
await run(workerCommand, ['status']);
|
|
132
|
+
expect(out.join('')).toMatch(/reconcile\s+\*\/15 \* \* \* \*\s+DISABLED after 5 failures/);
|
|
133
|
+
routes['POST /v1/apps/demo/worker/rotate'] = { ok: true, config_version: 3 };
|
|
134
|
+
await run(workerCommand, ['rotate']);
|
|
135
|
+
expect(out.join('')).toContain('config version 3');
|
|
136
|
+
await expect(run(scheduleCommand, ['run', 'nope'])).rejects.toThrow('exit 1');
|
|
137
|
+
expect(err.join('')).toContain('run nope failed (404): not found');
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
//# sourceMappingURL=worker.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.test.js","sourceRoot":"","sources":["../src/worker.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@APPNAME/worker",
|
|
3
|
+
"private": true,
|
|
4
|
+
"type": "module",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"build": "esbuild src/index.ts --bundle --format=esm --platform=browser --outfile=dist/app.js",
|
|
7
|
+
"typecheck": "tsc --noEmit"
|
|
8
|
+
},
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"@proappstore/sdk": "^1.16.66"
|
|
11
|
+
},
|
|
12
|
+
"devDependencies": {
|
|
13
|
+
"esbuild": "^0.25.0",
|
|
14
|
+
"typescript": "^5.7.0"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// The APPNAME app worker (ADR-009). Built to dist/app.js and deployed by the
|
|
2
|
+
// platform on push to main, once a platform admin has enabled app workers for
|
|
3
|
+
// this app. Docs: https://docs.proappstore.online/app-workers
|
|
4
|
+
//
|
|
5
|
+
// It has no database, KV or secret bindings: data goes through registered
|
|
6
|
+
// actions whose `callers` include "worker" (mcp.json), secrets through
|
|
7
|
+
// pas.secrets.get() for names listed in mcp.json `worker.secrets`.
|
|
8
|
+
// Delivery is at-least-once: make every handler idempotent on `event.id`.
|
|
9
|
+
import { defineAppWorker } from '@proappstore/sdk/worker';
|
|
10
|
+
|
|
11
|
+
export default defineAppWorker({
|
|
12
|
+
// Runs on a schedule declared in mcp.json:
|
|
13
|
+
// "worker": { "schedules": [{ "name": "sync", "cron": "*/15 * * * *" }] }
|
|
14
|
+
//
|
|
15
|
+
// async scheduled(event, pas) {
|
|
16
|
+
// const token = await pas.secrets.get('GITHUB_TOKEN');
|
|
17
|
+
// const res = await fetch('https://api.github.com/user/repos', { headers: { authorization: `Bearer ${token}`, 'user-agent': 'APPNAME' } });
|
|
18
|
+
// const repos = (await res.json()) as { id: number; full_name: string }[];
|
|
19
|
+
// await pas.actions.batch(repos.map((r) => ({ name: 'upsert_repo', params: { id: r.id, name: r.full_name } })));
|
|
20
|
+
// await pas.log('info', 'synced', { count: repos.length, run: event.id });
|
|
21
|
+
// },
|
|
22
|
+
|
|
23
|
+
// A signed-in user's request to /.pas/worker/* on the app's origin; actions run as that user.
|
|
24
|
+
async fetch(request) {
|
|
25
|
+
return Response.json({ ok: true, path: new URL(request.url).pathname });
|
|
26
|
+
},
|
|
27
|
+
});
|