@superblocksteam/shared 2.0.0-SNAPSHOT.dacafd95ee5ff6bb → 2.0.0-SNAPSHOT.fe3e10d22aff0c65
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/database-lifecycle/appDatabaseCompatibility.d.ts +5 -3
- package/dist/database-lifecycle/appDatabaseCompatibility.d.ts.map +1 -1
- package/dist/database-lifecycle/appDatabaseCompatibility.js.map +1 -1
- package/dist/database-lifecycle/appDatabaseStatus.d.ts +79 -0
- package/dist/database-lifecycle/appDatabaseStatus.d.ts.map +1 -0
- package/dist/database-lifecycle/appDatabaseStatus.js +28 -0
- package/dist/database-lifecycle/appDatabaseStatus.js.map +1 -0
- package/dist/database-lifecycle/appDatabaseStatus.test.d.ts +2 -0
- package/dist/database-lifecycle/appDatabaseStatus.test.d.ts.map +1 -0
- package/dist/database-lifecycle/appDatabaseStatus.test.js +88 -0
- package/dist/database-lifecycle/appDatabaseStatus.test.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/plugins/templates/workflow.d.ts.map +1 -1
- package/dist/plugins/templates/workflow.js +1 -3
- package/dist/plugins/templates/workflow.js.map +1 -1
- package/dist/socket/protocol.d.ts +10 -1
- package/dist/socket/protocol.d.ts.map +1 -1
- package/dist/socket/socketWithClientAuth.d.ts +2 -0
- package/dist/socket/socketWithClientAuth.d.ts.map +1 -1
- package/dist/socket/socketWithClientAuth.js +7 -1
- package/dist/socket/socketWithClientAuth.js.map +1 -1
- package/dist/socket/socketWithClientAuth.test.d.ts +2 -0
- package/dist/socket/socketWithClientAuth.test.d.ts.map +1 -0
- package/dist/socket/socketWithClientAuth.test.js +79 -0
- package/dist/socket/socketWithClientAuth.test.js.map +1 -0
- package/dist/types/reviewPolicy/index.d.ts +1 -1
- package/dist/types/reviewPolicy/index.d.ts.map +1 -1
- package/dist/types/reviewPolicy/index.js +1 -1
- package/dist/types/reviewPolicy/index.js.map +1 -1
- package/dist/utils/attachment-delivery.js +1 -1
- package/dist/utils/attachment-delivery.js.map +1 -1
- package/dist/utils/attachment-delivery.test.js +11 -0
- package/dist/utils/attachment-delivery.test.js.map +1 -1
- package/dist/utils/attachment-upload.d.ts +15 -0
- package/dist/utils/attachment-upload.d.ts.map +1 -1
- package/dist/utils/attachment-upload.js +44 -2
- package/dist/utils/attachment-upload.js.map +1 -1
- package/dist/utils/attachment-upload.test.js +37 -1
- package/dist/utils/attachment-upload.test.js.map +1 -1
- package/dist/utils/attachment-validation.d.ts +18 -1
- package/dist/utils/attachment-validation.d.ts.map +1 -1
- package/dist/utils/attachment-validation.js +38 -5
- package/dist/utils/attachment-validation.js.map +1 -1
- package/dist/utils/attachment-validation.test.js +22 -3
- package/dist/utils/attachment-validation.test.js.map +1 -1
- package/dist-esm/database-lifecycle/appDatabaseCompatibility.d.ts +5 -3
- package/dist-esm/database-lifecycle/appDatabaseCompatibility.d.ts.map +1 -1
- package/dist-esm/database-lifecycle/appDatabaseCompatibility.js.map +1 -1
- package/dist-esm/database-lifecycle/appDatabaseStatus.d.ts +79 -0
- package/dist-esm/database-lifecycle/appDatabaseStatus.d.ts.map +1 -0
- package/dist-esm/database-lifecycle/appDatabaseStatus.js +23 -0
- package/dist-esm/database-lifecycle/appDatabaseStatus.js.map +1 -0
- package/dist-esm/database-lifecycle/appDatabaseStatus.test.d.ts +2 -0
- package/dist-esm/database-lifecycle/appDatabaseStatus.test.d.ts.map +1 -0
- package/dist-esm/database-lifecycle/appDatabaseStatus.test.js +86 -0
- package/dist-esm/database-lifecycle/appDatabaseStatus.test.js.map +1 -0
- package/dist-esm/index.d.ts +1 -0
- package/dist-esm/index.d.ts.map +1 -1
- package/dist-esm/index.js +1 -0
- package/dist-esm/index.js.map +1 -1
- package/dist-esm/plugins/templates/workflow.d.ts.map +1 -1
- package/dist-esm/plugins/templates/workflow.js +1 -3
- package/dist-esm/plugins/templates/workflow.js.map +1 -1
- package/dist-esm/socket/protocol.d.ts +10 -1
- package/dist-esm/socket/protocol.d.ts.map +1 -1
- package/dist-esm/socket/socketWithClientAuth.d.ts +2 -0
- package/dist-esm/socket/socketWithClientAuth.d.ts.map +1 -1
- package/dist-esm/socket/socketWithClientAuth.js +7 -1
- package/dist-esm/socket/socketWithClientAuth.js.map +1 -1
- package/dist-esm/socket/socketWithClientAuth.test.d.ts +2 -0
- package/dist-esm/socket/socketWithClientAuth.test.d.ts.map +1 -0
- package/dist-esm/socket/socketWithClientAuth.test.js +74 -0
- package/dist-esm/socket/socketWithClientAuth.test.js.map +1 -0
- package/dist-esm/types/reviewPolicy/index.d.ts +1 -1
- package/dist-esm/types/reviewPolicy/index.d.ts.map +1 -1
- package/dist-esm/types/reviewPolicy/index.js +1 -1
- package/dist-esm/types/reviewPolicy/index.js.map +1 -1
- package/dist-esm/utils/attachment-delivery.js +2 -2
- package/dist-esm/utils/attachment-delivery.js.map +1 -1
- package/dist-esm/utils/attachment-delivery.test.js +11 -0
- package/dist-esm/utils/attachment-delivery.test.js.map +1 -1
- package/dist-esm/utils/attachment-upload.d.ts +15 -0
- package/dist-esm/utils/attachment-upload.d.ts.map +1 -1
- package/dist-esm/utils/attachment-upload.js +41 -1
- package/dist-esm/utils/attachment-upload.js.map +1 -1
- package/dist-esm/utils/attachment-upload.test.js +38 -2
- package/dist-esm/utils/attachment-upload.test.js.map +1 -1
- package/dist-esm/utils/attachment-validation.d.ts +18 -1
- package/dist-esm/utils/attachment-validation.d.ts.map +1 -1
- package/dist-esm/utils/attachment-validation.js +38 -5
- package/dist-esm/utils/attachment-validation.js.map +1 -1
- package/dist-esm/utils/attachment-validation.test.js +23 -4
- package/dist-esm/utils/attachment-validation.test.js.map +1 -1
- package/package.json +1 -1
- package/src/database-lifecycle/appDatabaseCompatibility.ts +6 -3
- package/src/database-lifecycle/appDatabaseStatus.test.ts +105 -0
- package/src/database-lifecycle/appDatabaseStatus.ts +95 -0
- package/src/index.ts +1 -0
- package/src/plugins/templates/workflow.ts +1 -3
- package/src/socket/protocol.ts +4 -2
- package/src/socket/socketWithClientAuth.test.ts +84 -0
- package/src/socket/socketWithClientAuth.ts +7 -1
- package/src/types/reviewPolicy/index.ts +1 -1
- package/src/utils/attachment-delivery.test.ts +14 -0
- package/src/utils/attachment-delivery.ts +2 -2
- package/src/utils/attachment-upload.test.ts +48 -1
- package/src/utils/attachment-upload.ts +48 -1
- package/src/utils/attachment-validation.test.ts +35 -3
- package/src/utils/attachment-validation.ts +52 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PDFDocument, PDFPageLeaf, PDFPageTree } from 'pdf-lib';
|
|
2
2
|
import { detectAttachmentArchiveType, isDumpAttachment } from './attachment-delivery.js';
|
|
3
|
-
import { getTextAttachmentType, isOfficeXml } from './attachment-upload.js';
|
|
3
|
+
import { getTextAttachmentType, isOfficeXml, isXlsxAttachmentFile } from './attachment-upload.js';
|
|
4
4
|
const ATTACHMENT_UPLOAD_POLICIES = {
|
|
5
5
|
archive: {
|
|
6
6
|
maxBytes: 50 * 1024 * 1024,
|
|
@@ -16,6 +16,16 @@ const ATTACHMENT_UPLOAD_POLICIES = {
|
|
|
16
16
|
advice: 'Produce a smaller dump or split the data before attaching it.',
|
|
17
17
|
invalidContentMessage: 'This database dump could not be read. Re-create it with pg_dump custom format (-Fc) so the file starts with PGDMP, then try again.'
|
|
18
18
|
},
|
|
19
|
+
spreadsheet: {
|
|
20
|
+
// Reading a workbook builds the whole grid in memory: a 6 MB file already
|
|
21
|
+
// costs ~800 MB and a 32 MB one costs ~3 GB, which the editor process
|
|
22
|
+
// cannot absorb. Cap the upload where the conversion stays affordable.
|
|
23
|
+
maxBytes: 5 * 1024 * 1024,
|
|
24
|
+
sizeLabel: '5 MiB',
|
|
25
|
+
label: 'Excel workbook',
|
|
26
|
+
advice: 'Remove unused sheets or split the workbook before attaching it.',
|
|
27
|
+
invalidContentMessage: 'This Excel workbook could not be read. Re-save it as .xlsx without a password and try again.'
|
|
28
|
+
},
|
|
19
29
|
image: {
|
|
20
30
|
maxBytes: 3_750_000,
|
|
21
31
|
sizeLabel: '3.75 MB after conversion',
|
|
@@ -42,16 +52,29 @@ export const MAX_PDF_ATTACHMENT_BYTES = ATTACHMENT_UPLOAD_POLICIES.pdf.maxBytes;
|
|
|
42
52
|
export const MAX_IMAGE_ATTACHMENT_BYTES = ATTACHMENT_UPLOAD_POLICIES.image.maxBytes;
|
|
43
53
|
export const MAX_TEXT_ATTACHMENT_BYTES = ATTACHMENT_UPLOAD_POLICIES.text.maxBytes;
|
|
44
54
|
export const MAX_ARCHIVE_ATTACHMENT_BYTES = ATTACHMENT_UPLOAD_POLICIES.archive.maxBytes;
|
|
55
|
+
export const MAX_SPREADSHEET_ATTACHMENT_BYTES = ATTACHMENT_UPLOAD_POLICIES.spreadsheet.maxBytes;
|
|
45
56
|
export const MAX_PDF_ATTACHMENT_PAGES = 100;
|
|
46
|
-
export function getAttachmentLimitsHelp(
|
|
57
|
+
export function getAttachmentLimitsHelp(flags) {
|
|
47
58
|
const { archive, image, pdf, text } = ATTACHMENT_UPLOAD_POLICIES;
|
|
48
|
-
|
|
59
|
+
const base = `PDFs: ${pdf.sizeLabel} each, ${MAX_PDF_ATTACHMENT_PAGES} pages total. Images: ${image.sizeLabel}. Text/code: ${text.sizeLabel}.`;
|
|
60
|
+
const archivesEnabled = flags.archiveAttachmentsEnabled === true;
|
|
61
|
+
const workbooksEnabled = flags.spreadsheetAttachmentsEnabled === true;
|
|
62
|
+
if (archivesEnabled && workbooksEnabled) {
|
|
63
|
+
return `${base} Supported archives and .dump files: ${archive.sizeLabel}. Excel workbooks (.xlsx): ${ATTACHMENT_UPLOAD_POLICIES.spreadsheet.sizeLabel}.`;
|
|
64
|
+
}
|
|
65
|
+
if (archivesEnabled) {
|
|
66
|
+
return `${base} Supported archives and .dump files: ${archive.sizeLabel}.`;
|
|
67
|
+
}
|
|
68
|
+
if (workbooksEnabled) {
|
|
69
|
+
return `${base} Excel workbooks (.xlsx): ${ATTACHMENT_UPLOAD_POLICIES.spreadsheet.sizeLabel}.`;
|
|
70
|
+
}
|
|
71
|
+
return base;
|
|
49
72
|
}
|
|
50
73
|
const VALIDATION_MESSAGES = {
|
|
51
74
|
invalid_content: 'This file could not be read. Re-export it and try again.',
|
|
52
75
|
too_large: 'This upload is too large. Reduce its size and try again.',
|
|
53
76
|
too_many_pdf_pages: `Clark supports up to ${MAX_PDF_ATTACHMENT_PAGES} PDF pages per request. Remove another PDF or attach fewer pages.`,
|
|
54
|
-
unsupported_type: 'This file type is not supported. Use an image, PDF, text/code file, a supported ZIP, GZIP, or TGZ archive, or a Postgres .dump file.'
|
|
77
|
+
unsupported_type: 'This file type is not supported. Use an image, PDF, text/code file, an Excel workbook (.xlsx), a supported ZIP, GZIP, or TGZ archive, or a Postgres .dump file.'
|
|
55
78
|
};
|
|
56
79
|
export class AttachmentValidationError extends Error {
|
|
57
80
|
reason;
|
|
@@ -72,6 +95,9 @@ function normalizedFileName(fileName) {
|
|
|
72
95
|
return fileName?.trim().toLowerCase() ?? '';
|
|
73
96
|
}
|
|
74
97
|
function getAttachmentKind(input) {
|
|
98
|
+
if (isXlsxAttachmentFile(input)) {
|
|
99
|
+
return 'spreadsheet';
|
|
100
|
+
}
|
|
75
101
|
if (isOfficeXml(input)) {
|
|
76
102
|
throw new AttachmentValidationError('unsupported_type');
|
|
77
103
|
}
|
|
@@ -121,7 +147,7 @@ function getAttachmentKind(input) {
|
|
|
121
147
|
/** Resolve the validated upload policy by MIME, falling back to the extension only when MIME is absent or generic. */
|
|
122
148
|
export function getAttachmentUploadPolicy(input) {
|
|
123
149
|
const kind = getAttachmentKind(input);
|
|
124
|
-
const policy = ATTACHMENT_UPLOAD_POLICIES[kind === 'archive' || kind === 'dump' || kind === 'pdf' || kind === 'text' ? kind : 'image'];
|
|
150
|
+
const policy = ATTACHMENT_UPLOAD_POLICIES[kind === 'archive' || kind === 'dump' || kind === 'pdf' || kind === 'spreadsheet' || kind === 'text' ? kind : 'image'];
|
|
125
151
|
return {
|
|
126
152
|
...policy,
|
|
127
153
|
tooLargeMessage: `This ${policy.label} is too large. The limit is ${policy.sizeLabel}. ${policy.advice}`
|
|
@@ -172,6 +198,11 @@ function validateDump(bytes) {
|
|
|
172
198
|
throw new AttachmentValidationError('invalid_content');
|
|
173
199
|
}
|
|
174
200
|
}
|
|
201
|
+
/** An .xlsx workbook is an OOXML zip, so the zip magic is what has to match. */
|
|
202
|
+
function validateSpreadsheet(bytes) {
|
|
203
|
+
if (!isZip(bytes))
|
|
204
|
+
throw new AttachmentValidationError('invalid_content');
|
|
205
|
+
}
|
|
175
206
|
function validateText(bytes) {
|
|
176
207
|
if (bytes.includes(0) ||
|
|
177
208
|
startsWith(bytes, [0x25, 0x50, 0x44, 0x46, 0x2d]) ||
|
|
@@ -246,6 +277,8 @@ export async function validateAttachmentBytes(input) {
|
|
|
246
277
|
validateArchive(input, input.bytes);
|
|
247
278
|
else if (kind === 'dump')
|
|
248
279
|
validateDump(input.bytes);
|
|
280
|
+
else if (kind === 'spreadsheet')
|
|
281
|
+
validateSpreadsheet(input.bytes);
|
|
249
282
|
else
|
|
250
283
|
validateImage(kind, input.bytes);
|
|
251
284
|
return { pdfPages: 0 };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-validation.js","sourceRoot":"","sources":["../../src/utils/attachment-validation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"attachment-validation.js","sourceRoot":"","sources":["../../src/utils/attachment-validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PDFDocument } from 'pdf-lib';
|
|
2
2
|
import { describe, expect, test } from 'vitest';
|
|
3
|
-
import { AttachmentValidationError, MAX_ARCHIVE_ATTACHMENT_BYTES, MAX_IMAGE_ATTACHMENT_BYTES, MAX_PDF_ATTACHMENT_BYTES, MAX_TEXT_ATTACHMENT_BYTES, assertAttachmentSize, getAttachmentLimitsHelp, getAttachmentUploadPolicy, getAttachmentUploadLimit, validateAttachmentBytes } from './attachment-validation.js';
|
|
3
|
+
import { AttachmentValidationError, MAX_ARCHIVE_ATTACHMENT_BYTES, MAX_SPREADSHEET_ATTACHMENT_BYTES, MAX_IMAGE_ATTACHMENT_BYTES, MAX_PDF_ATTACHMENT_BYTES, MAX_TEXT_ATTACHMENT_BYTES, assertAttachmentSize, getAttachmentLimitsHelp, getAttachmentUploadPolicy, getAttachmentUploadLimit, validateAttachmentBytes } from './attachment-validation.js';
|
|
4
4
|
const encoder = new TextEncoder();
|
|
5
5
|
async function pdfWithPages(pageCount, useObjectStreams = true) {
|
|
6
6
|
const document = await PDFDocument.create();
|
|
@@ -39,7 +39,8 @@ describe('attachment size policy', () => {
|
|
|
39
39
|
['notes.md', 'text/markdown', MAX_TEXT_ATTACHMENT_BYTES],
|
|
40
40
|
['bundle.zip', 'application/zip', MAX_ARCHIVE_ATTACHMENT_BYTES],
|
|
41
41
|
['bundle.tgz', 'application/octet-stream', MAX_ARCHIVE_ATTACHMENT_BYTES],
|
|
42
|
-
['orders_prod.dump', 'application/octet-stream', MAX_ARCHIVE_ATTACHMENT_BYTES]
|
|
42
|
+
['orders_prod.dump', 'application/octet-stream', MAX_ARCHIVE_ATTACHMENT_BYTES],
|
|
43
|
+
['budget.xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', MAX_SPREADSHEET_ATTACHMENT_BYTES]
|
|
43
44
|
])('allows the exact limit and rejects one byte more for %s', (fileName, mimeType, limit) => {
|
|
44
45
|
expect(getAttachmentUploadLimit({ fileName, mimeType })).toBe(limit);
|
|
45
46
|
expect(() => assertAttachmentSize({ fileName, mimeType, sizeBytes: limit })).not.toThrow();
|
|
@@ -67,12 +68,18 @@ describe('attachment size policy', () => {
|
|
|
67
68
|
test('uses the same policy for MIME types and extension fallback without trusting a conflicting extension', () => {
|
|
68
69
|
expect(getAttachmentUploadPolicy({ fileName: 'SPEC.PDF' })).toEqual(getAttachmentUploadPolicy({ mimeType: 'application/pdf' }));
|
|
69
70
|
expect(getAttachmentUploadPolicy({ fileName: 'spec.pdf', mimeType: 'image/png' }).maxBytes).toBe(3_750_000);
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
});
|
|
72
|
+
test('lists limits only for the file families a surface accepts', () => {
|
|
73
|
+
expect(getAttachmentLimitsHelp({})).toBe('PDFs: 4.5 MB each, 100 pages total. Images: 3.75 MB after conversion. Text/code: 5 MiB.');
|
|
74
|
+
expect(getAttachmentLimitsHelp({ spreadsheetAttachmentsEnabled: true })).toBe('PDFs: 4.5 MB each, 100 pages total. Images: 3.75 MB after conversion. Text/code: 5 MiB. Excel workbooks (.xlsx): 5 MiB.');
|
|
75
|
+
expect(getAttachmentLimitsHelp({ archiveAttachmentsEnabled: true })).toBe('PDFs: 4.5 MB each, 100 pages total. Images: 3.75 MB after conversion. Text/code: 5 MiB. Supported archives and .dump files: 50 MiB.');
|
|
76
|
+
expect(getAttachmentLimitsHelp({ archiveAttachmentsEnabled: true, spreadsheetAttachmentsEnabled: true })).toBe('PDFs: 4.5 MB each, 100 pages total. Images: 3.75 MB after conversion. Text/code: 5 MiB. Supported archives and .dump files: 50 MiB. Excel workbooks (.xlsx): 5 MiB.');
|
|
72
77
|
});
|
|
73
78
|
test('rejects unsupported and Office types', () => {
|
|
74
79
|
expectReason(() => getAttachmentUploadLimit({ fileName: 'logo.svg', mimeType: 'image/svg+xml' }), 'unsupported_type');
|
|
75
80
|
expectReason(() => getAttachmentUploadLimit({ fileName: 'report.docx', mimeType: 'text/plain' }), 'unsupported_type');
|
|
81
|
+
expectReason(() => getAttachmentUploadLimit({ fileName: 'macros.xlsm' }), 'unsupported_type');
|
|
82
|
+
expectReason(() => getAttachmentUploadLimit({ fileName: 'inventory.xls', mimeType: 'application/vnd.ms-excel' }), 'unsupported_type');
|
|
76
83
|
expectReason(() => getAttachmentUploadLimit({ fileName: 'notes.txt', mimeType: 'application/octet-stream' }), 'unsupported_type');
|
|
77
84
|
});
|
|
78
85
|
});
|
|
@@ -107,6 +114,18 @@ describe('attachment content validation', () => {
|
|
|
107
114
|
bytes: encoder.encode('not a dump')
|
|
108
115
|
}), 'invalid_content');
|
|
109
116
|
});
|
|
117
|
+
test('accepts Excel workbook magic for .xlsx', async () => {
|
|
118
|
+
await expect(validateAttachmentBytes({
|
|
119
|
+
fileName: 'budget.xlsx',
|
|
120
|
+
mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
121
|
+
bytes: new Uint8Array([0x50, 0x4b, 0x03, 0x04])
|
|
122
|
+
})).resolves.toEqual({ pdfPages: 0 });
|
|
123
|
+
await expectAsyncReason(() => validateAttachmentBytes({
|
|
124
|
+
fileName: 'budget.xlsx',
|
|
125
|
+
mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
126
|
+
bytes: encoder.encode('not a workbook')
|
|
127
|
+
}), 'invalid_content');
|
|
128
|
+
});
|
|
110
129
|
test('accepts dump mime type without a .dump filename', async () => {
|
|
111
130
|
const bytes = encoder.encode('PGDMP\x01\x0e\x00');
|
|
112
131
|
await expect(validateAttachmentBytes({ fileName: 'orders', mimeType: 'application/x-postgresql-dump', bytes })).resolves.toEqual({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-validation.test.js","sourceRoot":"","sources":["../../src/utils/attachment-validation.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"attachment-validation.test.js","sourceRoot":"","sources":["../../src/utils/attachment-validation.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -18,11 +18,14 @@ export type AppDatabaseCompatibilityState = (typeof APP_DATABASE_COMPATIBILITY_S
|
|
|
18
18
|
/** Lifecycle operations an App Database cannot work without. */
|
|
19
19
|
export const APP_DATABASE_REQUIRED_OPERATIONS: readonly LifecycleOperation[] = ['ensure_database', 'migrate_schema'];
|
|
20
20
|
|
|
21
|
-
export type
|
|
22
|
-
/** App view modes that offer this data tag
|
|
21
|
+
export type AppDatabaseTagRef = {
|
|
22
|
+
/** App view modes that offer this data tag. */
|
|
23
23
|
availableModes: ViewMode[];
|
|
24
|
-
missingOperations: LifecycleOperation[];
|
|
25
24
|
profileKey: string;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export type AppDatabaseTagCompatibility = AppDatabaseTagRef & {
|
|
28
|
+
missingOperations: LifecycleOperation[];
|
|
26
29
|
requiredOperations: LifecycleOperation[];
|
|
27
30
|
supportState: AppDatabaseTagSupportState;
|
|
28
31
|
};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
|
|
3
|
+
import { ViewMode } from '../types/event/index.js';
|
|
4
|
+
import { isProductionDatabaseRetirementEligible, type AppDatabaseStatus, type AppDatabaseStatusBinding } from './appDatabaseStatus.js';
|
|
5
|
+
|
|
6
|
+
const binding: AppDatabaseStatusBinding = {
|
|
7
|
+
bindingId: 'binding-1',
|
|
8
|
+
created: '2026-09-14T00:00:00.000Z',
|
|
9
|
+
instance: null,
|
|
10
|
+
integration: null,
|
|
11
|
+
lastActivity: '2026-09-14T00:00:00.000Z',
|
|
12
|
+
lifecycleState: 'ready',
|
|
13
|
+
logicalName: 'app_db',
|
|
14
|
+
migrationDirectory: null,
|
|
15
|
+
migrationState: 'migrated'
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
function status(overrides: Partial<AppDatabaseStatus> = {}): AppDatabaseStatus {
|
|
19
|
+
return {
|
|
20
|
+
applicationId: 'app-1',
|
|
21
|
+
hasAppDatabase: false,
|
|
22
|
+
hasDatabaseCode: false,
|
|
23
|
+
liveVersionHasAppDatabase: false,
|
|
24
|
+
tags: [
|
|
25
|
+
{
|
|
26
|
+
availableModes: [ViewMode.DEPLOYED],
|
|
27
|
+
binding,
|
|
28
|
+
deleted: false,
|
|
29
|
+
displayName: 'Production',
|
|
30
|
+
isDefaultEditor: false,
|
|
31
|
+
profileKey: 'production'
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
...overrides
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
describe('production database retirement eligibility', () => {
|
|
39
|
+
it('offers deletion after a live version that does not need a database and Edit leftovers are gone', () => {
|
|
40
|
+
expect(isProductionDatabaseRetirementEligible(status())).toBe(true);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('refuses deletion while the live version still needs a database', () => {
|
|
44
|
+
expect(isProductionDatabaseRetirementEligible(status({ liveVersionHasAppDatabase: true }))).toBe(false);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it('refuses deletion while an Edit-only database remains', () => {
|
|
48
|
+
expect(
|
|
49
|
+
isProductionDatabaseRetirementEligible(
|
|
50
|
+
status({
|
|
51
|
+
tags: [
|
|
52
|
+
...status().tags,
|
|
53
|
+
{
|
|
54
|
+
availableModes: [ViewMode.EDITOR],
|
|
55
|
+
binding: { ...binding, bindingId: 'edit-binding' },
|
|
56
|
+
deleted: false,
|
|
57
|
+
displayName: 'Staging',
|
|
58
|
+
isDefaultEditor: true,
|
|
59
|
+
profileKey: 'staging'
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
})
|
|
63
|
+
)
|
|
64
|
+
).toBe(false);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('offers deletion of an unassigned leftover after a live version that does not need a database', () => {
|
|
68
|
+
expect(
|
|
69
|
+
isProductionDatabaseRetirementEligible(
|
|
70
|
+
status({
|
|
71
|
+
tags: [
|
|
72
|
+
{
|
|
73
|
+
availableModes: [],
|
|
74
|
+
binding,
|
|
75
|
+
deleted: false,
|
|
76
|
+
displayName: 'Removed production',
|
|
77
|
+
isDefaultEditor: false,
|
|
78
|
+
profileKey: 'removed-production'
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
})
|
|
82
|
+
)
|
|
83
|
+
).toBe(true);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('refuses deletion while the editor default is still live, even when that tag is also deploy-allowed', () => {
|
|
87
|
+
expect(
|
|
88
|
+
isProductionDatabaseRetirementEligible(
|
|
89
|
+
status({
|
|
90
|
+
tags: [
|
|
91
|
+
...status().tags,
|
|
92
|
+
{
|
|
93
|
+
availableModes: [ViewMode.EDITOR, ViewMode.DEPLOYED],
|
|
94
|
+
binding: { ...binding, bindingId: 'edit-binding' },
|
|
95
|
+
deleted: false,
|
|
96
|
+
displayName: 'Staging',
|
|
97
|
+
isDefaultEditor: true,
|
|
98
|
+
profileKey: 'staging'
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
})
|
|
102
|
+
)
|
|
103
|
+
).toBe(false);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { ViewMode } from '../types/event/index.js';
|
|
2
|
+
import type { AppDatabaseTagRef } from './appDatabaseCompatibility.js';
|
|
3
|
+
import type { DatabaseEngine, LifecycleMigrationState, LifecycleState } from './index.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Builder-safe physical instance fields. Pool capacity and the internal
|
|
7
|
+
* instance id stay off this payload: they are org-wide admin facts, and
|
|
8
|
+
* capacity.used counts every application in the org.
|
|
9
|
+
*/
|
|
10
|
+
export type AppDatabaseStatusInstance = {
|
|
11
|
+
engine: DatabaseEngine;
|
|
12
|
+
engineVersion: string | null;
|
|
13
|
+
region: string;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export type AppDatabaseStatusIntegration = {
|
|
17
|
+
apiNames: string[];
|
|
18
|
+
id: string;
|
|
19
|
+
name: string;
|
|
20
|
+
pluginId: string;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export type AppDatabaseStatusBinding = {
|
|
24
|
+
bindingId: string;
|
|
25
|
+
created: string;
|
|
26
|
+
instance: AppDatabaseStatusInstance | null;
|
|
27
|
+
integration: AppDatabaseStatusIntegration | null;
|
|
28
|
+
lastActivity: string;
|
|
29
|
+
lifecycleState: LifecycleState;
|
|
30
|
+
logicalName: string;
|
|
31
|
+
migrationDirectory: string | null;
|
|
32
|
+
migrationState: LifecycleMigrationState;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export type AppDatabaseStatusTag = AppDatabaseTagRef & {
|
|
36
|
+
/** Null when this data tag has no live (non-cancelled) database. */
|
|
37
|
+
binding: AppDatabaseStatusBinding | null;
|
|
38
|
+
/**
|
|
39
|
+
* True when this data tag had a database that was retired. The live
|
|
40
|
+
* binding is omitted so the tag can be provisioned again, but Status
|
|
41
|
+
* still shows Deleted instead of No database.
|
|
42
|
+
*/
|
|
43
|
+
deleted: boolean;
|
|
44
|
+
displayName: string;
|
|
45
|
+
isDefaultEditor: boolean;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export type AppDatabaseStatus = {
|
|
49
|
+
applicationId: string;
|
|
50
|
+
/**
|
|
51
|
+
* Whether the app declares an App Database right now (working-state
|
|
52
|
+
* requirement). Same meaning as AppDatabaseCompatibility.hasAppDatabase.
|
|
53
|
+
* A leftover live binding with no requirement still appears under tags.
|
|
54
|
+
*/
|
|
55
|
+
hasAppDatabase: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Whether leftover App Database code is still in the working tree: SQL
|
|
58
|
+
* in the last known migration folder, or APIs still wired to the app's
|
|
59
|
+
* Postgres integration. Used to offer Clark cleanup after Edit databases
|
|
60
|
+
* are gone. Not a complete scan of every page or helper.
|
|
61
|
+
*/
|
|
62
|
+
hasDatabaseCode: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Whether the currently live published version stamped a database
|
|
65
|
+
* requirement. Working-state (Edit) rows are not this signal: a leftover
|
|
66
|
+
* production database stays undeletable until a version without databases
|
|
67
|
+
* is live.
|
|
68
|
+
*/
|
|
69
|
+
liveVersionHasAppDatabase: boolean;
|
|
70
|
+
tags: AppDatabaseStatusTag[];
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Edit lifecycle membership: tags used for edit provisioning and migrations.
|
|
75
|
+
* That is every editor-only tag, plus the editor default even when that
|
|
76
|
+
* default is also deploy-allowed.
|
|
77
|
+
*/
|
|
78
|
+
export function isEditLifecycleTag(tag: Pick<AppDatabaseStatusTag, 'availableModes'>): boolean {
|
|
79
|
+
return tag.availableModes.includes(ViewMode.EDITOR);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Deploy lifecycle membership for builder-facing grouping: deploy-allowed
|
|
84
|
+
* tags that are not the editor default. Publish still may write the editor
|
|
85
|
+
* default when it is also deploy-allowed; that tag stays an Edit database.
|
|
86
|
+
*/
|
|
87
|
+
export function isDeployLifecycleTag(tag: Pick<AppDatabaseStatusTag, 'availableModes'>): boolean {
|
|
88
|
+
return tag.availableModes.includes(ViewMode.DEPLOYED) && !tag.availableModes.includes(ViewMode.EDITOR);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function isProductionDatabaseRetirementEligible(status: AppDatabaseStatus): boolean {
|
|
92
|
+
const hasEditDatabase = status.tags.some((tag) => tag.binding !== null && isEditLifecycleTag(tag));
|
|
93
|
+
const hasLeftoverProductionDatabase = status.tags.some((tag) => tag.binding !== null && !isEditLifecycleTag(tag));
|
|
94
|
+
return !hasEditDatabase && hasLeftoverProductionDatabase && !status.liveVersionHasAppDatabase;
|
|
95
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -28,5 +28,6 @@ export * from './jwt/index.js';
|
|
|
28
28
|
export * from './org-features/index.js';
|
|
29
29
|
export * from './database-lifecycle/index.js';
|
|
30
30
|
export * from './database-lifecycle/appDatabaseCompatibility.js';
|
|
31
|
+
export * from './database-lifecycle/appDatabaseStatus.js';
|
|
31
32
|
export * from './database-lifecycle/edit-lifecycle-capability.js';
|
|
32
33
|
export * from './environment-compatibility/appEnvironmentCompatibility.js';
|
package/src/socket/protocol.ts
CHANGED
|
@@ -148,9 +148,11 @@ export interface ServerMethods {
|
|
|
148
148
|
>;
|
|
149
149
|
getMessages: ServerMethodSchema<
|
|
150
150
|
{ applicationId: string; branchName?: string | null; limit?: number },
|
|
151
|
-
{ messages: AiChatMessageDto[] }
|
|
151
|
+
{ chatSessionId: string; messages: AiChatMessageDto[] }
|
|
152
152
|
>;
|
|
153
|
-
|
|
153
|
+
/** Id of the active chat session, created if the app has none yet. Reads no messages. */
|
|
154
|
+
getActiveSessionId: ServerMethodSchema<{ applicationId: string }, { chatSessionId: string }>;
|
|
155
|
+
new: ServerMethodSchema<{ applicationId: string; branchName?: string | null }, { chatSessionId: string }>;
|
|
154
156
|
truncateAfterTimestamp: ServerMethodSchema<{ applicationId: string; sinceTimestamp: number }, void>;
|
|
155
157
|
};
|
|
156
158
|
billing: {
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { once } from 'node:events';
|
|
2
|
+
|
|
3
|
+
import { trace } from '@opentelemetry/api';
|
|
4
|
+
import WebSocket from 'isomorphic-ws';
|
|
5
|
+
import { afterEach, describe, expect, it } from 'vitest';
|
|
6
|
+
|
|
7
|
+
import type { SocketMessage } from './socket.js';
|
|
8
|
+
import { ISocketWithClientAuth } from './socketWithClientAuth.js';
|
|
9
|
+
import { connectWebSocket } from './util.js';
|
|
10
|
+
|
|
11
|
+
describe('socket request authorization', () => {
|
|
12
|
+
const servers: WebSocket.Server[] = [];
|
|
13
|
+
const authorizations: Array<string | undefined> = [];
|
|
14
|
+
|
|
15
|
+
async function connect(options: { authorization?: string; getAuthorization?: () => Promise<string> }) {
|
|
16
|
+
const server = new WebSocket.Server({ host: '127.0.0.1', port: 0 });
|
|
17
|
+
servers.push(server);
|
|
18
|
+
server.on('connection', (ws) => {
|
|
19
|
+
ws.on('message', (data) => {
|
|
20
|
+
const message: SocketMessage = JSON.parse(data.toString());
|
|
21
|
+
if (!message.request) throw new Error('Expected a socket request');
|
|
22
|
+
authorizations.push(message.request.setAuthorization);
|
|
23
|
+
ws.send(JSON.stringify({ response: { error: null, id: message.request.id, payload: 'ok' } }));
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
await once(server, 'listening');
|
|
27
|
+
const address = server.address();
|
|
28
|
+
if (!address || typeof address === 'string') throw new Error('Expected a TCP test server');
|
|
29
|
+
const ws = await connectWebSocket(`ws://127.0.0.1:${address.port}`);
|
|
30
|
+
return new ISocketWithClientAuth(ws, options.authorization, {}, [], trace.getTracer('socket-auth-test'), {
|
|
31
|
+
getAuthorization: options.getAuthorization,
|
|
32
|
+
onClose: () => undefined
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
afterEach(async () => {
|
|
37
|
+
authorizations.length = 0;
|
|
38
|
+
for (const server of servers.splice(0)) {
|
|
39
|
+
for (const client of server.clients) client.terminate();
|
|
40
|
+
await new Promise<void>((resolve, reject) => server.close((error) => (error ? reject(error) : resolve())));
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('refreshes authorization before each request and sends only changed credentials', async () => {
|
|
45
|
+
let authorization = 'Bearer first-token';
|
|
46
|
+
const socket = await connect({ authorization: 'Bearer expired-token', getAuthorization: async () => authorization });
|
|
47
|
+
|
|
48
|
+
await expect(socket.request('test.read', {})).resolves.toBe('ok');
|
|
49
|
+
await expect(socket.request('test.read', {})).resolves.toBe('ok');
|
|
50
|
+
authorization = 'Bearer second-token';
|
|
51
|
+
await expect(socket.request('test.read', {})).resolves.toBe('ok');
|
|
52
|
+
|
|
53
|
+
expect(authorizations).toEqual(['Bearer first-token', undefined, 'Bearer second-token']);
|
|
54
|
+
socket.close();
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('sends no request when refreshing authorization fails and allows a later retry', async () => {
|
|
58
|
+
let refreshFailed = true;
|
|
59
|
+
const socket = await connect({
|
|
60
|
+
authorization: 'Bearer expired-token',
|
|
61
|
+
getAuthorization: async () => {
|
|
62
|
+
if (refreshFailed) throw new Error('Refresh unavailable');
|
|
63
|
+
return 'Bearer refreshed-token';
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
await expect(socket.request('test.read', {})).rejects.toThrow('Refresh unavailable');
|
|
68
|
+
refreshFailed = false;
|
|
69
|
+
await expect(socket.request('test.read', {})).resolves.toBe('ok');
|
|
70
|
+
|
|
71
|
+
expect(authorizations).toEqual(['Bearer refreshed-token']);
|
|
72
|
+
socket.close();
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it('preserves static authorization when no provider is supplied', async () => {
|
|
76
|
+
const socket = await connect({ authorization: 'Bearer personal-token' });
|
|
77
|
+
|
|
78
|
+
await expect(socket.request('test.read', {})).resolves.toBe('ok');
|
|
79
|
+
await expect(socket.request('test.read', {})).resolves.toBe('ok');
|
|
80
|
+
|
|
81
|
+
expect(authorizations).toEqual(['Bearer personal-token', undefined]);
|
|
82
|
+
socket.close();
|
|
83
|
+
});
|
|
84
|
+
});
|
|
@@ -15,6 +15,7 @@ export class ISocketWithClientAuth<ImplementedMethods, CallableMethods, RequestC
|
|
|
15
15
|
> {
|
|
16
16
|
private authorization?: string;
|
|
17
17
|
private authorizationVersion = 0;
|
|
18
|
+
private readonly getAuthorization?: () => Promise<string>;
|
|
18
19
|
private hasSentAuth = false;
|
|
19
20
|
|
|
20
21
|
constructor(
|
|
@@ -28,15 +29,20 @@ export class ISocketWithClientAuth<ImplementedMethods, CallableMethods, RequestC
|
|
|
28
29
|
timeouts?: SocketTimeouts;
|
|
29
30
|
logger?: { error: (message?: string) => void; info: (message?: string) => void; warn: (message?: string) => void };
|
|
30
31
|
getAbortSignal?: () => AbortSignal | undefined;
|
|
32
|
+
getAuthorization?: () => Promise<string>;
|
|
31
33
|
}
|
|
32
34
|
) {
|
|
33
35
|
super(ws, requestHandlers, globalMiddlewares, tracer, options);
|
|
34
36
|
this.authorization = authorization;
|
|
37
|
+
this.getAuthorization = options.getAuthorization;
|
|
35
38
|
}
|
|
36
39
|
|
|
37
40
|
// override `request` from the base class to send `authorization` when appropriate
|
|
38
41
|
async request<Params, Result>(method: string, params: Params): Promise<Result> {
|
|
39
|
-
|
|
42
|
+
if (this.getAuthorization) {
|
|
43
|
+
const authorization = await this.getAuthorization();
|
|
44
|
+
if (authorization !== this.authorization) this.setAuthorization(authorization);
|
|
45
|
+
}
|
|
40
46
|
const authorizationVersion = this.authorizationVersion;
|
|
41
47
|
const authorization = this.hasSentAuth ? undefined : this.authorization;
|
|
42
48
|
const result = await super.request<Params, Result>(method, params, authorization);
|
|
@@ -14,7 +14,7 @@ export const SUPERBLOCKS_SECURITY_AGENT_NAME = 'Superblocks Security Agent';
|
|
|
14
14
|
|
|
15
15
|
// Display name of the Superblocks-managed pre-publish dependency CVE check. One per organization;
|
|
16
16
|
// runs synchronously against the vulnerability index, so it needs no runner config to enable.
|
|
17
|
-
export const DEPENDENCY_VULNERABILITY_SCAN_NAME = 'Superblocks
|
|
17
|
+
export const DEPENDENCY_VULNERABILITY_SCAN_NAME = 'Superblocks Vulnerability Detection';
|
|
18
18
|
|
|
19
19
|
export const REVIEW_POLICY_TYPES = ['built_in_security_scan', 'security_agent', 'dependency_vulnerability_scan'] as const;
|
|
20
20
|
export const REVIEW_POLICY_SOURCES = ['admin_configured', 'superblocks_managed'] as const;
|