@cat-factory/node-server 0.30.0 → 0.31.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/dist/config.d.ts.map +1 -1
- package/dist/config.js +37 -0
- package/dist/config.js.map +1 -1
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +23 -1
- package/dist/container.js.map +1 -1
- package/dist/db/schema.d.ts +243 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +49 -1
- package/dist/db/schema.js.map +1 -1
- package/dist/repositories/drizzle.d.ts +2 -1
- package/dist/repositories/drizzle.d.ts.map +1 -1
- package/dist/repositories/drizzle.js +95 -2
- package/dist/repositories/drizzle.js.map +1 -1
- package/dist/retention.d.ts +9 -1
- package/dist/retention.d.ts.map +1 -1
- package/dist/retention.js +32 -0
- package/dist/retention.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +6 -1
- package/dist/server.js.map +1 -1
- package/dist/storage/PostgresBinaryBlobBackend.d.ts +11 -0
- package/dist/storage/PostgresBinaryBlobBackend.d.ts.map +1 -0
- package/dist/storage/PostgresBinaryBlobBackend.js +40 -0
- package/dist/storage/PostgresBinaryBlobBackend.js.map +1 -0
- package/drizzle/20260627083558_glossy_shen/migration.sql +23 -0
- package/drizzle/20260627083558_glossy_shen/snapshot.json +12574 -0
- package/drizzle/20260627102927_worthless_celestials/migration.sql +1 -0
- package/drizzle/20260627102927_worthless_celestials/snapshot.json +12587 -0
- package/drizzle/20260627111231_binary_artifacts_created_index/migration.sql +1 -0
- package/drizzle/20260627111231_binary_artifacts_created_index/snapshot.json +12615 -0
- package/drizzle/20260627131842_brave_slayback/snapshot.json +459 -3
- package/package.json +16 -15
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EACL,KAAK,MAAM,EACX,KAAK,eAAe,EAMrB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,EAAE,KAAK,oBAAoB,EAAsB,MAAM,gBAAgB,CAAA;AAoB9E,MAAM,WAAW,mBAAoB,SAAQ,oBAAoB;CAAG;AAEpE,wFAAwF;AACxF,wBAAgB,SAAS,CACvB,SAAS,EAAE,eAAe,EAC1B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,IAAI,CAAC,MAAM,CAAC,CAkBd;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,CAEvE;AAED;;;;GAIG;AACH,wBAAsB,KAAK,CACzB,OAAO,GAAE;IACP,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,eAAe,CAAA;IACnE;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACT,GACL,OAAO,CAAC,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EACL,KAAK,MAAM,EACX,KAAK,eAAe,EAMrB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,EAAE,KAAK,oBAAoB,EAAsB,MAAM,gBAAgB,CAAA;AAoB9E,MAAM,WAAW,mBAAoB,SAAQ,oBAAoB;CAAG;AAEpE,wFAAwF;AACxF,wBAAgB,SAAS,CACvB,SAAS,EAAE,eAAe,EAC1B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,IAAI,CAAC,MAAM,CAAC,CAkBd;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,CAEvE;AAED;;;;GAIG;AACH,wBAAsB,KAAK,CACzB,OAAO,GAAE;IACP,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,eAAe,CAAA;IACnE;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACT,GACL,OAAO,CAAC,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,CA0HnC"}
|
package/dist/server.js
CHANGED
|
@@ -17,7 +17,7 @@ import { startNotificationEscalationSweeper } from './notifications.js';
|
|
|
17
17
|
import { NodeRealtimeHub, attachRealtime } from './realtime.js';
|
|
18
18
|
import { createDrizzleRepositories } from './repositories/drizzle.js';
|
|
19
19
|
import { DrizzleSubscriptionActivationRepository } from './repositories/personalSubscription.js';
|
|
20
|
-
import { startRetentionSweeper } from './retention.js';
|
|
20
|
+
import { startArtifactRetentionSweeper, startRetentionSweeper } from './retention.js';
|
|
21
21
|
import { SystemClock } from './runtime.js';
|
|
22
22
|
/** Build the Hono app around a ready container (shared by `createServer` + `start`). */
|
|
23
23
|
export function createApp(container, env = process.env) {
|
|
@@ -103,6 +103,10 @@ export async function start(options = {}) {
|
|
|
103
103
|
provisioningLogRepository: repos.provisioningLogRepository,
|
|
104
104
|
passwordResetTokenRepository: repos.passwordResetTokenRepository,
|
|
105
105
|
}, container.config.retention, clock, logger);
|
|
106
|
+
// Per-workspace binary-artifact (screenshot) retention; only when blob storage is wired.
|
|
107
|
+
const stopArtifactRetention = container.binaryArtifactStore
|
|
108
|
+
? startArtifactRetentionSweeper(container.binaryArtifactStore, repos.workspaceRepository, repos.workspaceSettingsRepository, clock, logger)
|
|
109
|
+
: () => { };
|
|
106
110
|
// Fire due recurring pipelines on a one-minute timer (the Worker uses cron).
|
|
107
111
|
const stopScheduleSweeper = startScheduleSweeper(container, clock, logger);
|
|
108
112
|
// Tear down expired ephemeral environments (the Worker uses cron); no-op unless the
|
|
@@ -134,6 +138,7 @@ export async function start(options = {}) {
|
|
|
134
138
|
logger.info({ signal }, 'shutting down cat-factory node server');
|
|
135
139
|
stopSweeper();
|
|
136
140
|
stopRetention();
|
|
141
|
+
stopArtifactRetention();
|
|
137
142
|
stopScheduleSweeper();
|
|
138
143
|
stopEnvironmentSweeper();
|
|
139
144
|
stopNotificationEscalation();
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAGL,WAAW,EACX,MAAM,EACN,aAAa,EACb,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAA6B,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACxF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,kCAAkC,EAAE,MAAM,oBAAoB,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,EAAE,uCAAuC,EAAE,MAAM,wCAAwC,CAAA;AAChG,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAGL,WAAW,EACX,MAAM,EACN,aAAa,EACb,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAA6B,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACxF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,kCAAkC,EAAE,MAAM,oBAAoB,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,EAAE,uCAAuC,EAAE,MAAM,wCAAwC,CAAA;AAChG,OAAO,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAQ1C,wFAAwF;AACxF,MAAM,UAAU,SAAS,CACvB,SAA0B,EAC1B,GAAG,GAAsB,OAAO,CAAC,GAAG;IAEpC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAU,CAAA;IAE9B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAA;IAC/F,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAC7B,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;QAC7B,MAAM,IAAI,EAAE,CAAA;IACd,CAAC,CAAC,CAAA;IAEF,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAEnD,mFAAmF;IACnF,2EAA2E;IAC3E,aAAa,CAAC,GAAG,CAAC,CAAA;IAElB,uBAAuB,CAAC,GAAG,CAAC,CAAA;IAC5B,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACxB,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,OAA4B;IACvD,OAAO,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,OAAO,GAiBH,EAAE;IAEN,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAA;IACtC,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAA;IACpC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;IACtE,CAAC;IACD,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,WAAW,CAAC,CAAA;IAChD,MAAM,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IAEvB,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAA;IACpC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;IAElB,6EAA6E;IAC7E,+EAA+E;IAC/E,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAA;IAC/B,MAAM,KAAK,GAAG,yBAAyB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;IAClD,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,kBAAkB,CAAA;IACnE,sFAAsF;IACtF,kFAAkF;IAClF,mFAAmF;IACnF,+EAA+E;IAC/E,kDAAkD;IAClD,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAA;IACzC,MAAM,SAAS,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;IAEvE,wFAAwF;IACxF,wFAAwF;IACxF,6FAA6F;IAC7F,yBAAyB,CAAC;QACxB,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC;KAC1E,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACvD,oFAAoF;IACpF,qEAAqE;IACrE,MAAM,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE;QACjE,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC,CAAA;IACF,kFAAkF;IAClF,uDAAuD;IACvD,MAAM,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE;QACjE,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC,CAAA;IACF,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACjG,uFAAuF;IACvF,iFAAiF;IACjF,kFAAkF;IAClF,MAAM,aAAa,GAAG,qBAAqB,CACzC;QACE,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,uBAAuB,EAAE,KAAK,CAAC,uBAAuB;QACtD,8BAA8B,EAAE,KAAK,CAAC,8BAA8B;QACpE,0BAA0B,EAAE,KAAK,CAAC,0BAA0B;QAC5D,gCAAgC,EAAE,IAAI,uCAAuC,CAAC,EAAE,CAAC;QACjF,yBAAyB,EAAE,KAAK,CAAC,yBAAyB;QAC1D,4BAA4B,EAAE,KAAK,CAAC,4BAA4B;KACjE,EACD,SAAS,CAAC,MAAM,CAAC,SAAS,EAC1B,KAAK,EACL,MAAM,CACP,CAAA;IACD,yFAAyF;IACzF,MAAM,qBAAqB,GAAG,SAAS,CAAC,mBAAmB;QACzD,CAAC,CAAC,6BAA6B,CAC3B,SAAS,CAAC,mBAAmB,EAC7B,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,2BAA2B,EACjC,KAAK,EACL,MAAM,CACP;QACH,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC,CAAA;IACZ,6EAA6E;IAC7E,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IAC1E,oFAAoF;IACpF,qCAAqC;IACrC,MAAM,sBAAsB,GAAG,uBAAuB,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IAChF,+EAA+E;IAC/E,uEAAuE;IACvE,MAAM,0BAA0B,GAAG,kCAAkC,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IAC/F,kFAAkF;IAClF,sCAAsC;IACtC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IAEtE,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,SAAS,CAAA;IAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IACrF,qFAAqF;IACrF,kFAAkF;IAClF,oFAAoF;IACpF,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACvF,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,SAAS,EAAE,EAAE,mCAAmC,CAAC,CAAA;IAEnF,oFAAoF;IACpF,mFAAmF;IACnF,+EAA+E;IAC/E,IAAI,YAAY,GAAG,KAAK,CAAA;IACxB,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;QACxC,IAAI,YAAY;YAAE,OAAM;QACxB,YAAY,GAAG,IAAI,CAAA;QACnB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,uCAAuC,CAAC,CAAA;QAChE,WAAW,EAAE,CAAA;QACb,aAAa,EAAE,CAAA;QACf,qBAAqB,EAAE,CAAA;QACvB,mBAAmB,EAAE,CAAA;QACrB,sBAAsB,EAAE,CAAA;QACxB,0BAA0B,EAAE,CAAA;QAC5B,iBAAiB,EAAE,CAAA;QACnB,YAAY,EAAE,CAAA;QACd,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QACnE,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;YACjB,MAAM,IAAI,CAAC,GAAG,EAAE,CAAA;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAA;QAC3F,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAA;IACD,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;IACvD,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;IAErD,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { BinaryBlobBackend } from '@cat-factory/kernel';
|
|
2
|
+
import type { DrizzleDb } from '../db/client.js';
|
|
3
|
+
export declare class PostgresBinaryBlobBackend implements BinaryBlobBackend {
|
|
4
|
+
private readonly db;
|
|
5
|
+
readonly kind: 'db';
|
|
6
|
+
constructor(db: DrizzleDb);
|
|
7
|
+
put(key: string, bytes: Uint8Array, _contentType: string): Promise<void>;
|
|
8
|
+
get(key: string): Promise<Uint8Array | null>;
|
|
9
|
+
delete(key: string): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=PostgresBinaryBlobBackend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PostgresBinaryBlobBackend.d.ts","sourceRoot":"","sources":["../../src/storage/PostgresBinaryBlobBackend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAahD,qBAAa,yBAA0B,YAAW,iBAAiB;IAGrD,OAAO,CAAC,QAAQ,CAAC,EAAE;IAF/B,QAAQ,CAAC,IAAI,EAAG,IAAI,CAAS;IAE7B,YAA6B,EAAE,EAAE,SAAS,EAAI;IAExC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW7E;IAEK,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAOjD;IAEK,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvC;CACF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { eq } from 'drizzle-orm';
|
|
2
|
+
import { binaryArtifactBlobs } from '../db/schema.js';
|
|
3
|
+
/**
|
|
4
|
+
* Default Node/local blob backend: store the bytes in a Postgres `bytea` table
|
|
5
|
+
* (`binary_artifact_blobs`). Used when `BINARY_STORAGE_BACKEND=db`. There is no
|
|
6
|
+
* Cloudflare equivalent — D1 can't hold large values, so the Worker uses R2.
|
|
7
|
+
*
|
|
8
|
+
* Postgres tolerates large `bytea` values, but a screenshot store should not become
|
|
9
|
+
* an accidental large-object dump, so the backend guards against absurd blobs.
|
|
10
|
+
*/
|
|
11
|
+
const MAX_DB_BLOB_BYTES = 16 * 1024 * 1024; // 16 MiB — generous for a PNG, a hard ceiling.
|
|
12
|
+
export class PostgresBinaryBlobBackend {
|
|
13
|
+
db;
|
|
14
|
+
kind = 'db';
|
|
15
|
+
constructor(db) {
|
|
16
|
+
this.db = db;
|
|
17
|
+
}
|
|
18
|
+
async put(key, bytes, _contentType) {
|
|
19
|
+
if (bytes.byteLength > MAX_DB_BLOB_BYTES) {
|
|
20
|
+
throw new Error(`Binary artifact (${bytes.byteLength} bytes) exceeds the ${MAX_DB_BLOB_BYTES}-byte ` +
|
|
21
|
+
'limit for the Postgres DB blob backend; configure R2/S3 storage for large artifacts.');
|
|
22
|
+
}
|
|
23
|
+
await this.db
|
|
24
|
+
.insert(binaryArtifactBlobs)
|
|
25
|
+
.values({ storage_key: key, bytes })
|
|
26
|
+
.onConflictDoUpdate({ target: binaryArtifactBlobs.storage_key, set: { bytes } });
|
|
27
|
+
}
|
|
28
|
+
async get(key) {
|
|
29
|
+
const rows = await this.db
|
|
30
|
+
.select()
|
|
31
|
+
.from(binaryArtifactBlobs)
|
|
32
|
+
.where(eq(binaryArtifactBlobs.storage_key, key))
|
|
33
|
+
.limit(1);
|
|
34
|
+
return rows[0] ? rows[0].bytes : null;
|
|
35
|
+
}
|
|
36
|
+
async delete(key) {
|
|
37
|
+
await this.db.delete(binaryArtifactBlobs).where(eq(binaryArtifactBlobs.storage_key, key));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=PostgresBinaryBlobBackend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PostgresBinaryBlobBackend.js","sourceRoot":"","sources":["../../src/storage/PostgresBinaryBlobBackend.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAErD;;;;;;;GAOG;AACH,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA,CAAC,+CAA+C;AAE1F,MAAM,OAAO,yBAAyB;IAGP,EAAE;IAFtB,IAAI,GAAG,IAAa,CAAA;IAE7B,YAA6B,EAAa;kBAAb,EAAE;IAAc,CAAC;IAE9C,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAiB,EAAE,YAAoB;QAC5D,IAAI,KAAK,CAAC,UAAU,GAAG,iBAAiB,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACb,oBAAoB,KAAK,CAAC,UAAU,uBAAuB,iBAAiB,QAAQ;gBAClF,sFAAsF,CACzF,CAAA;QACH,CAAC;QACD,MAAM,IAAI,CAAC,EAAE;aACV,MAAM,CAAC,mBAAmB,CAAC;aAC3B,MAAM,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;aACnC,kBAAkB,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;IACpF,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE;aACvB,MAAM,EAAE;aACR,IAAI,CAAC,mBAAmB,CAAC;aACzB,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;aAC/C,KAAK,CAAC,CAAC,CAAC,CAAA;QACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IACvC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAA;IAC3F,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
CREATE TABLE "binary_artifact_blobs" (
|
|
2
|
+
"storage_key" text PRIMARY KEY,
|
|
3
|
+
"bytes" bytea NOT NULL
|
|
4
|
+
);
|
|
5
|
+
--> statement-breakpoint
|
|
6
|
+
CREATE TABLE "binary_artifacts" (
|
|
7
|
+
"workspace_id" text,
|
|
8
|
+
"id" text,
|
|
9
|
+
"execution_id" text,
|
|
10
|
+
"block_id" text,
|
|
11
|
+
"kind" text NOT NULL,
|
|
12
|
+
"view" text,
|
|
13
|
+
"content_type" text NOT NULL,
|
|
14
|
+
"byte_size" integer NOT NULL,
|
|
15
|
+
"hash" text NOT NULL,
|
|
16
|
+
"storage" text NOT NULL,
|
|
17
|
+
"storage_key" text NOT NULL,
|
|
18
|
+
"created_at" bigint NOT NULL,
|
|
19
|
+
CONSTRAINT "binary_artifacts_pkey" PRIMARY KEY("workspace_id","id")
|
|
20
|
+
);
|
|
21
|
+
--> statement-breakpoint
|
|
22
|
+
CREATE INDEX "idx_binary_artifacts_execution" ON "binary_artifacts" ("workspace_id","execution_id");--> statement-breakpoint
|
|
23
|
+
CREATE INDEX "idx_binary_artifacts_block" ON "binary_artifacts" ("workspace_id","block_id");
|