@getstrata/cli 2.2.20 → 2.2.22
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/CHANGELOG.md +8 -0
- package/package.json +3 -3
- package/src/commands/help.ts +17 -2
- package/src/outboxWorker.ts +4 -0
- package/src/queueWorker.ts +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @getstrata/cli changelog
|
|
2
2
|
|
|
3
|
+
## 2.2.22
|
|
4
|
+
|
|
5
|
+
Preserve caller auth, credential sources, request metadata and application async stores through cold/queued native transaction callbacks. Serialize Postgres privilege grants with full provisioning using atomic database-scoped batches, retaining delegated-admin permissions and rollback/retry safety. Add real constrained-pool JSON/HTML bearer/session-CSRF and concurrent grant/atomicity regressions; no automatic workers, auth bypass or production runtime provisioning.
|
|
6
|
+
|
|
7
|
+
## 2.2.21
|
|
8
|
+
|
|
9
|
+
Make registered queue/outbox workers discoverable in CLI help and generated startup guidance. Announce polling after boot and when it stops without claiming dependency health, printing secrets, or starting workers automatically. Preserve explicit process ownership, delivery semantics and graceful lifecycle; cover idle, boot/runtime/cleanup failures and real SIGTERM draining.
|
|
10
|
+
|
|
3
11
|
## 2.2.20
|
|
4
12
|
|
|
5
13
|
Validate complete migration definitions before callbacks, locks or database effects; reject malformed exports and duplicate names with source diagnostics. Refuse fresh with missing applied definitions and rollback with incomplete latest batches; preserve partial forward migration and remove blanket history deletion. Cover physical schema/data/history preservation and reset recovery on real Postgres, MySQL and SQLite, plus loader and preflight regressions; document safe missing-file recovery and unchanged atomicity limits.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getstrata/cli",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.22",
|
|
4
4
|
"description": "Strata CLI: framework commands for Bun apps (dev, start, migrate, run)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
],
|
|
55
55
|
"scripts": {},
|
|
56
56
|
"peerDependencies": {
|
|
57
|
-
"@getstrata/bootstrap": "^2.2.
|
|
58
|
-
"@getstrata/core": "^2.2.
|
|
57
|
+
"@getstrata/bootstrap": "^2.2.22",
|
|
58
|
+
"@getstrata/core": "^2.2.22"
|
|
59
59
|
},
|
|
60
60
|
"publishConfig": {
|
|
61
61
|
"access": "public"
|
package/src/commands/help.ts
CHANGED
|
@@ -1,7 +1,22 @@
|
|
|
1
1
|
function printHelp(commandNames: string[]): void {
|
|
2
2
|
const unique = [...new Set(commandNames)].sort();
|
|
3
|
-
const
|
|
4
|
-
|
|
3
|
+
const descriptions: Record<string, string> = {
|
|
4
|
+
dev: "HTTP development server; workers run separately",
|
|
5
|
+
start: "HTTP server; workers run separately",
|
|
6
|
+
"queue:work": "Poll Redis for queued jobs; requires REDIS_URL",
|
|
7
|
+
"outbox:work":
|
|
8
|
+
"Poll SQL for durable listener deliveries; requires migrations and registered listeners",
|
|
9
|
+
};
|
|
10
|
+
const list = unique
|
|
11
|
+
.map(
|
|
12
|
+
(name) => `- ${name}${Object.hasOwn(descriptions, name) ? ` — ${descriptions[name]}` : ""}`,
|
|
13
|
+
)
|
|
14
|
+
.join("\n");
|
|
15
|
+
const workers = unique.filter((name) => name === "queue:work" || name === "outbox:work");
|
|
16
|
+
const guidance = workers.length
|
|
17
|
+
? `\n\nBackground workers are explicit. Run ${workers.map((name) => `strata ${name}`).join(" and ")} in separate terminals when your app uses those mechanisms. Use the same application configuration as HTTP. dev/start do not start workers. Idle polling is normal; startup output is not a dependency health check.`
|
|
18
|
+
: "";
|
|
19
|
+
console.log(`Available commands:\n${list}${guidance}`);
|
|
5
20
|
}
|
|
6
21
|
|
|
7
22
|
export { printHelp };
|
package/src/outboxWorker.ts
CHANGED
|
@@ -43,6 +43,7 @@ async function runOutboxWorkerCommand(options: OutboxWorkerOptions): Promise<voi
|
|
|
43
43
|
async () => {
|
|
44
44
|
await booting?.catch(() => {});
|
|
45
45
|
await running?.catch(() => {});
|
|
46
|
+
if (running) console.log("[outbox:work] Polling stopped.");
|
|
46
47
|
await options.drain?.();
|
|
47
48
|
},
|
|
48
49
|
"drain",
|
|
@@ -69,6 +70,9 @@ async function runOutboxWorkerCommand(options: OutboxWorkerOptions): Promise<voi
|
|
|
69
70
|
await booting;
|
|
70
71
|
if (!stopping && !lifecycle.isShuttingDown) {
|
|
71
72
|
const outbox = options.outbox ?? new SqlOutbox({ listeners: options.listeners ?? [] });
|
|
73
|
+
console.log(
|
|
74
|
+
"[outbox:work] Starting SQL outbox polling; idle until deliveries are available.",
|
|
75
|
+
);
|
|
72
76
|
running = outbox.work({ signal: admission.signal });
|
|
73
77
|
await running;
|
|
74
78
|
}
|
package/src/queueWorker.ts
CHANGED
|
@@ -38,6 +38,7 @@ async function runQueueWorkerCommand(options: {
|
|
|
38
38
|
// Completion, including failed startup/run, means no admitted worker remains.
|
|
39
39
|
await booting?.catch(() => {});
|
|
40
40
|
await running?.catch(() => {});
|
|
41
|
+
if (running) console.log("[queue:work] Polling stopped.");
|
|
41
42
|
await options.drain?.();
|
|
42
43
|
},
|
|
43
44
|
"drain",
|
|
@@ -78,10 +79,9 @@ async function runQueueWorkerCommand(options: {
|
|
|
78
79
|
await booting;
|
|
79
80
|
if (!stopping && !lifecycle.isShuttingDown) {
|
|
80
81
|
worker = createQueueWorker(redisUrl, options.failedJobs ?? createFailedJobService());
|
|
81
|
-
console.log("[queue:work]
|
|
82
|
+
console.log("[queue:work] Starting Redis queue polling; idle until jobs are available.");
|
|
82
83
|
running = worker.run();
|
|
83
84
|
await running;
|
|
84
|
-
console.log("[queue:work] Worker stopped.");
|
|
85
85
|
}
|
|
86
86
|
} catch (error) {
|
|
87
87
|
failed = true;
|