@superblocksteam/shared 0.9614.3 → 0.9615.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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/appDatabaseImport.d.ts +70 -0
- package/dist/database-lifecycle/appDatabaseImport.d.ts.map +1 -0
- package/dist/database-lifecycle/appDatabaseImport.js +111 -0
- package/dist/database-lifecycle/appDatabaseImport.js.map +1 -0
- package/dist/database-lifecycle/appDatabaseImport.test.d.ts +2 -0
- package/dist/database-lifecycle/appDatabaseImport.test.d.ts.map +1 -0
- package/dist/database-lifecycle/appDatabaseImport.test.js +145 -0
- package/dist/database-lifecycle/appDatabaseImport.test.js.map +1 -0
- 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/database-lifecycle/dataImport.d.ts +53 -0
- package/dist/database-lifecycle/dataImport.d.ts.map +1 -0
- package/dist/database-lifecycle/dataImport.js +173 -0
- package/dist/database-lifecycle/dataImport.js.map +1 -0
- package/dist/database-lifecycle/dataImport.test.d.ts +2 -0
- package/dist/database-lifecycle/dataImport.test.d.ts.map +1 -0
- package/dist/database-lifecycle/dataImport.test.js +84 -0
- package/dist/database-lifecycle/dataImport.test.js.map +1 -0
- package/dist/database-lifecycle/index.d.ts +101 -5
- package/dist/database-lifecycle/index.d.ts.map +1 -1
- package/dist/database-lifecycle/index.js +55 -6
- package/dist/database-lifecycle/index.js.map +1 -1
- package/dist/database-lifecycle/index.test.js +18 -6
- package/dist/database-lifecycle/index.test.js.map +1 -1
- 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 +19 -2
- package/dist/socket/protocol.d.ts.map +1 -1
- package/dist/socket/protocol.js.map +1 -1
- package/dist/types/ai/index.d.ts +39 -0
- package/dist/types/ai/index.d.ts.map +1 -1
- package/dist/types/ai/index.js +8 -1
- package/dist/types/ai/index.js.map +1 -1
- package/dist/types/billing/usageSource.d.ts +1 -0
- package/dist/types/billing/usageSource.d.ts.map +1 -1
- package/dist/types/billing/usageSource.js +19 -1
- package/dist/types/billing/usageSource.js.map +1 -1
- package/dist/types/event/index.d.ts +6 -1
- package/dist/types/event/index.d.ts.map +1 -1
- package/dist/types/event/index.js +5 -0
- package/dist/types/event/index.js.map +1 -1
- package/dist/types/policyGate/index.d.ts +11 -0
- package/dist/types/policyGate/index.d.ts.map +1 -1
- package/dist/types/policyGate/index.js +9 -0
- package/dist/types/policyGate/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/appDatabaseImport.d.ts +70 -0
- package/dist-esm/database-lifecycle/appDatabaseImport.d.ts.map +1 -0
- package/dist-esm/database-lifecycle/appDatabaseImport.js +104 -0
- package/dist-esm/database-lifecycle/appDatabaseImport.js.map +1 -0
- package/dist-esm/database-lifecycle/appDatabaseImport.test.d.ts +2 -0
- package/dist-esm/database-lifecycle/appDatabaseImport.test.d.ts.map +1 -0
- package/dist-esm/database-lifecycle/appDatabaseImport.test.js +143 -0
- package/dist-esm/database-lifecycle/appDatabaseImport.test.js.map +1 -0
- 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/database-lifecycle/dataImport.d.ts +53 -0
- package/dist-esm/database-lifecycle/dataImport.d.ts.map +1 -0
- package/dist-esm/database-lifecycle/dataImport.js +165 -0
- package/dist-esm/database-lifecycle/dataImport.js.map +1 -0
- package/dist-esm/database-lifecycle/dataImport.test.d.ts +2 -0
- package/dist-esm/database-lifecycle/dataImport.test.d.ts.map +1 -0
- package/dist-esm/database-lifecycle/dataImport.test.js +82 -0
- package/dist-esm/database-lifecycle/dataImport.test.js.map +1 -0
- package/dist-esm/database-lifecycle/index.d.ts +101 -5
- package/dist-esm/database-lifecycle/index.d.ts.map +1 -1
- package/dist-esm/database-lifecycle/index.js +36 -5
- package/dist-esm/database-lifecycle/index.js.map +1 -1
- package/dist-esm/database-lifecycle/index.test.js +19 -7
- package/dist-esm/database-lifecycle/index.test.js.map +1 -1
- 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 +19 -2
- package/dist-esm/socket/protocol.d.ts.map +1 -1
- package/dist-esm/socket/protocol.js.map +1 -1
- package/dist-esm/types/ai/index.d.ts +39 -0
- package/dist-esm/types/ai/index.d.ts.map +1 -1
- package/dist-esm/types/ai/index.js +6 -0
- package/dist-esm/types/ai/index.js.map +1 -1
- package/dist-esm/types/billing/usageSource.d.ts +1 -0
- package/dist-esm/types/billing/usageSource.d.ts.map +1 -1
- package/dist-esm/types/billing/usageSource.js +18 -0
- package/dist-esm/types/billing/usageSource.js.map +1 -1
- package/dist-esm/types/event/index.d.ts +6 -1
- package/dist-esm/types/event/index.d.ts.map +1 -1
- package/dist-esm/types/event/index.js +5 -0
- package/dist-esm/types/event/index.js.map +1 -1
- package/dist-esm/types/policyGate/index.d.ts +11 -0
- package/dist-esm/types/policyGate/index.d.ts.map +1 -1
- package/dist-esm/types/policyGate/index.js +8 -0
- package/dist-esm/types/policyGate/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/appDatabaseImport.test.ts +185 -0
- package/src/database-lifecycle/appDatabaseImport.ts +205 -0
- package/src/database-lifecycle/appDatabaseStatus.test.ts +105 -0
- package/src/database-lifecycle/appDatabaseStatus.ts +95 -0
- package/src/database-lifecycle/dataImport.test.ts +95 -0
- package/src/database-lifecycle/dataImport.ts +244 -0
- package/src/database-lifecycle/index.test.ts +20 -6
- package/src/database-lifecycle/index.ts +203 -7
- package/src/index.ts +1 -0
- package/src/plugins/templates/workflow.ts +1 -3
- package/src/socket/protocol.ts +14 -2
- package/src/types/ai/index.ts +39 -0
- package/src/types/billing/usageSource.ts +20 -0
- package/src/types/event/index.ts +6 -1
- package/src/types/policyGate/index.ts +14 -0
- 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
|
@@ -14,11 +14,13 @@ export declare const APP_DATABASE_COMPATIBILITY_STATES: readonly ["compatible",
|
|
|
14
14
|
export type AppDatabaseCompatibilityState = (typeof APP_DATABASE_COMPATIBILITY_STATES)[number];
|
|
15
15
|
/** Lifecycle operations an App Database cannot work without. */
|
|
16
16
|
export declare const APP_DATABASE_REQUIRED_OPERATIONS: readonly LifecycleOperation[];
|
|
17
|
-
export type
|
|
18
|
-
/** App view modes that offer this data tag
|
|
17
|
+
export type AppDatabaseTagRef = {
|
|
18
|
+
/** App view modes that offer this data tag. */
|
|
19
19
|
availableModes: ViewMode[];
|
|
20
|
-
missingOperations: LifecycleOperation[];
|
|
21
20
|
profileKey: string;
|
|
21
|
+
};
|
|
22
|
+
export type AppDatabaseTagCompatibility = AppDatabaseTagRef & {
|
|
23
|
+
missingOperations: LifecycleOperation[];
|
|
22
24
|
requiredOperations: LifecycleOperation[];
|
|
23
25
|
supportState: AppDatabaseTagSupportState;
|
|
24
26
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appDatabaseCompatibility.d.ts","sourceRoot":"","sources":["../../src/database-lifecycle/appDatabaseCompatibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;;;;;;GAOG;AACH,eAAO,MAAM,+BAA+B,kEAAmE,CAAC;AAChH,MAAM,MAAM,0BAA0B,GAAG,CAAC,OAAO,+BAA+B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1F,eAAO,MAAM,iCAAiC,oEAAqE,CAAC;AACpH,MAAM,MAAM,6BAA6B,GAAG,CAAC,OAAO,iCAAiC,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/F,gEAAgE;AAChE,eAAO,MAAM,gCAAgC,EAAE,SAAS,kBAAkB,EAA0C,CAAC;AAErH,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"appDatabaseCompatibility.d.ts","sourceRoot":"","sources":["../../src/database-lifecycle/appDatabaseCompatibility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;;;;;;GAOG;AACH,eAAO,MAAM,+BAA+B,kEAAmE,CAAC;AAChH,MAAM,MAAM,0BAA0B,GAAG,CAAC,OAAO,+BAA+B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1F,eAAO,MAAM,iCAAiC,oEAAqE,CAAC;AACpH,MAAM,MAAM,6BAA6B,GAAG,CAAC,OAAO,iCAAiC,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/F,gEAAgE;AAChE,eAAO,MAAM,gCAAgC,EAAE,SAAS,kBAAkB,EAA0C,CAAC;AAErH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,+CAA+C;IAC/C,cAAc,EAAE,QAAQ,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,iBAAiB,GAAG;IAC5D,iBAAiB,EAAE,kBAAkB,EAAE,CAAC;IACxC,kBAAkB,EAAE,kBAAkB,EAAE,CAAC;IACzC,YAAY,EAAE,0BAA0B,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB,yEAAyE;IACzE,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,6BAA6B,CAAC;IAC5C,2EAA2E;IAC3E,IAAI,EAAE,2BAA2B,EAAE,CAAC;CACrC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,SAAS,2BAA2B,EAAE,GAAG;IAC5F,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,6BAA6B,CAAC;CAC7C,CAQA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appDatabaseCompatibility.js","sourceRoot":"","sources":["../../src/database-lifecycle/appDatabaseCompatibility.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"appDatabaseCompatibility.js","sourceRoot":"","sources":["../../src/database-lifecycle/appDatabaseCompatibility.ts"],"names":[],"mappings":";;;AAqDA,wEAWC;AA7DD;;;;;;;GAOG;AACU,QAAA,+BAA+B,GAAG,CAAC,WAAW,EAAE,yBAAyB,EAAE,aAAa,CAAU,CAAC;AAGnG,QAAA,iCAAiC,GAAG,CAAC,YAAY,EAAE,cAAc,EAAE,yBAAyB,CAAU,CAAC;AAGpH,gEAAgE;AACnD,QAAA,gCAAgC,GAAkC,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;AA6BrH;;;;;GAKG;AACH,SAAgB,8BAA8B,CAAC,IAA4C;IAIzF,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,KAAK,aAAa,CAAC,EAAE,CAAC;QAC3D,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;IAChE,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,KAAK,yBAAyB,CAAC,EAAE,CAAC;QACvE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,yBAAyB,EAAE,CAAC;IAC5E,CAAC;IACD,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { DataImportKind } from './dataImport.js';
|
|
2
|
+
export declare const APP_DATABASE_IMPORT_OPERATIONS: readonly ["prepare_import_prefix_upload", "inspect_import_prefix"];
|
|
3
|
+
export declare const APP_DATABASE_IMPORT_STATES: readonly ["requested", "preparing_prefix_upload", "awaiting_prefix_upload", "validating_schema", "schema_validated", "failed", "cancelled"];
|
|
4
|
+
export declare const APP_DATABASE_IMPORT_ERROR_CODES: readonly ["prefix_incomplete", "schema_mismatch", "unsupported_archive_format", "archive_corrupt", "postgres_version_newer_than_target", "unsupported_object", "schema_not_aligned", "missing_bucket_access", "internal", "invalid_input", "size_mismatch"];
|
|
5
|
+
export type AppDatabaseImportKind = Extract<DataImportKind, 'pg_dump_custom'>;
|
|
6
|
+
export type AppDatabaseImportLifecycleOperation = (typeof APP_DATABASE_IMPORT_OPERATIONS)[number];
|
|
7
|
+
export type AppDatabaseImportState = (typeof APP_DATABASE_IMPORT_STATES)[number];
|
|
8
|
+
export type AppDatabaseImportErrorCode = (typeof APP_DATABASE_IMPORT_ERROR_CODES)[number];
|
|
9
|
+
export type AppDatabaseImportValidationMetadata = {
|
|
10
|
+
postgresMajorVersion: number;
|
|
11
|
+
tableNames: string[];
|
|
12
|
+
};
|
|
13
|
+
export type AppDatabaseImportDispatchDetails = {
|
|
14
|
+
importId: string;
|
|
15
|
+
kind: AppDatabaseImportKind;
|
|
16
|
+
prefixSizeBytes: number;
|
|
17
|
+
profileToken: string;
|
|
18
|
+
resourceToken: string;
|
|
19
|
+
};
|
|
20
|
+
type AppDatabaseImportDispatchBase<TDesiredSpec> = {
|
|
21
|
+
applicationId: string;
|
|
22
|
+
bindingId: string;
|
|
23
|
+
bindingKey: string;
|
|
24
|
+
connectionMetadata?: Record<string, string | number | boolean>;
|
|
25
|
+
continuation?: never;
|
|
26
|
+
desiredSpec: TDesiredSpec;
|
|
27
|
+
desiredSpecHash: string;
|
|
28
|
+
environment?: never;
|
|
29
|
+
metadata?: never;
|
|
30
|
+
migrations?: never;
|
|
31
|
+
organizationId: string;
|
|
32
|
+
profile: string;
|
|
33
|
+
provisioningId?: never;
|
|
34
|
+
requestId: string;
|
|
35
|
+
resourceKey: string;
|
|
36
|
+
};
|
|
37
|
+
export type PrepareImportPrefixUploadDispatchPayloadEnvelope<TDesiredSpec> = AppDatabaseImportDispatchBase<TDesiredSpec> & {
|
|
38
|
+
import: AppDatabaseImportDispatchDetails & {
|
|
39
|
+
expectedSizeBytes: number;
|
|
40
|
+
};
|
|
41
|
+
operation: 'prepare_import_prefix_upload';
|
|
42
|
+
};
|
|
43
|
+
export type InspectImportPrefixDispatchPayloadEnvelope<TDesiredSpec> = AppDatabaseImportDispatchBase<TDesiredSpec> & {
|
|
44
|
+
import: AppDatabaseImportDispatchDetails & {
|
|
45
|
+
prefixObjectKey: string;
|
|
46
|
+
};
|
|
47
|
+
operation: 'inspect_import_prefix';
|
|
48
|
+
};
|
|
49
|
+
export type AppDatabaseImportDispatchPayloadEnvelope<TDesiredSpec> = InspectImportPrefixDispatchPayloadEnvelope<TDesiredSpec> | PrepareImportPrefixUploadDispatchPayloadEnvelope<TDesiredSpec>;
|
|
50
|
+
export type PrepareImportPrefixUploadCallbackResult = {
|
|
51
|
+
prefixObjectKey: string;
|
|
52
|
+
prefixUploadHeaders?: Record<string, string>;
|
|
53
|
+
prefixUploadUrl: string;
|
|
54
|
+
result: 'prefix_upload_url';
|
|
55
|
+
};
|
|
56
|
+
export type InspectImportPrefixCallbackResult = {
|
|
57
|
+
inspectedPrefixSizeBytes: number;
|
|
58
|
+
nextPrefixSizeBytes: number;
|
|
59
|
+
result: 'prefix_incomplete';
|
|
60
|
+
} | {
|
|
61
|
+
result: 'schema_validated';
|
|
62
|
+
validationMetadata: AppDatabaseImportValidationMetadata;
|
|
63
|
+
};
|
|
64
|
+
export type AppDatabaseImportCallbackResult = InspectImportPrefixCallbackResult | PrepareImportPrefixUploadCallbackResult;
|
|
65
|
+
export declare function isAppDatabaseImportLifecycleOperation(value: string): value is AppDatabaseImportLifecycleOperation;
|
|
66
|
+
export declare function isAppDatabaseImportDispatchPayload(value: unknown): value is AppDatabaseImportDispatchPayloadEnvelope<Record<string, unknown>>;
|
|
67
|
+
export declare function isAppDatabaseImportCallbackResult(value: unknown): value is AppDatabaseImportCallbackResult;
|
|
68
|
+
export declare function parseAppDatabaseImportValidationMetadata(value: unknown): AppDatabaseImportValidationMetadata | undefined;
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=appDatabaseImport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appDatabaseImport.d.ts","sourceRoot":"","sources":["../../src/database-lifecycle/appDatabaseImport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.APP_DATABASE_IMPORT_ERROR_CODES = exports.APP_DATABASE_IMPORT_STATES = exports.APP_DATABASE_IMPORT_OPERATIONS = void 0;
|
|
4
|
+
exports.isAppDatabaseImportLifecycleOperation = isAppDatabaseImportLifecycleOperation;
|
|
5
|
+
exports.isAppDatabaseImportDispatchPayload = isAppDatabaseImportDispatchPayload;
|
|
6
|
+
exports.isAppDatabaseImportCallbackResult = isAppDatabaseImportCallbackResult;
|
|
7
|
+
exports.parseAppDatabaseImportValidationMetadata = parseAppDatabaseImportValidationMetadata;
|
|
8
|
+
exports.APP_DATABASE_IMPORT_OPERATIONS = ['prepare_import_prefix_upload', 'inspect_import_prefix'];
|
|
9
|
+
// Subset of DATA_IMPORT_STATES. Prefix success is schema_validated, not ready.
|
|
10
|
+
exports.APP_DATABASE_IMPORT_STATES = [
|
|
11
|
+
'requested',
|
|
12
|
+
'preparing_prefix_upload',
|
|
13
|
+
'awaiting_prefix_upload',
|
|
14
|
+
'validating_schema',
|
|
15
|
+
'schema_validated',
|
|
16
|
+
'failed',
|
|
17
|
+
'cancelled'
|
|
18
|
+
];
|
|
19
|
+
exports.APP_DATABASE_IMPORT_ERROR_CODES = [
|
|
20
|
+
'prefix_incomplete',
|
|
21
|
+
'schema_mismatch',
|
|
22
|
+
'unsupported_archive_format',
|
|
23
|
+
'archive_corrupt',
|
|
24
|
+
'postgres_version_newer_than_target',
|
|
25
|
+
'unsupported_object',
|
|
26
|
+
'schema_not_aligned',
|
|
27
|
+
'missing_bucket_access',
|
|
28
|
+
'internal',
|
|
29
|
+
'invalid_input',
|
|
30
|
+
'size_mismatch'
|
|
31
|
+
];
|
|
32
|
+
const importOperations = new Set(exports.APP_DATABASE_IMPORT_OPERATIONS);
|
|
33
|
+
function isAppDatabaseImportLifecycleOperation(value) {
|
|
34
|
+
return importOperations.has(value);
|
|
35
|
+
}
|
|
36
|
+
function isAppDatabaseImportDispatchPayload(value) {
|
|
37
|
+
if (!isUnknownRecord(value) || !hasImportDispatchBase(value)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
if (!isNonEmptyString(value.import.profileToken) || !isNonEmptyString(value.import.resourceToken)) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
if (value.operation === 'prepare_import_prefix_upload') {
|
|
44
|
+
return value.import.prefixObjectKey === undefined && isPositiveInteger(value.import.expectedSizeBytes);
|
|
45
|
+
}
|
|
46
|
+
return (value.operation === 'inspect_import_prefix' &&
|
|
47
|
+
value.import.expectedSizeBytes === undefined &&
|
|
48
|
+
isNonEmptyString(value.import.prefixObjectKey));
|
|
49
|
+
}
|
|
50
|
+
function isAppDatabaseImportCallbackResult(value) {
|
|
51
|
+
if (!isUnknownRecord(value)) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
if (value.result === 'prefix_upload_url') {
|
|
55
|
+
return (isNonEmptyString(value.prefixObjectKey) && isNonEmptyString(value.prefixUploadUrl) && isOptionalStringMap(value.prefixUploadHeaders));
|
|
56
|
+
}
|
|
57
|
+
if (value.result === 'prefix_incomplete') {
|
|
58
|
+
return (isPositiveInteger(value.inspectedPrefixSizeBytes) &&
|
|
59
|
+
isPositiveInteger(value.nextPrefixSizeBytes) &&
|
|
60
|
+
value.nextPrefixSizeBytes > value.inspectedPrefixSizeBytes);
|
|
61
|
+
}
|
|
62
|
+
return value.result === 'schema_validated' && parseAppDatabaseImportValidationMetadata(value.validationMetadata) !== undefined;
|
|
63
|
+
}
|
|
64
|
+
// Rebuild metadata from its allowlisted fields so archive contents, SQL, rows,
|
|
65
|
+
// and other worker-provided details cannot cross this contract boundary.
|
|
66
|
+
function parseAppDatabaseImportValidationMetadata(value) {
|
|
67
|
+
if (!isUnknownRecord(value) ||
|
|
68
|
+
!isPositiveInteger(value.postgresMajorVersion) ||
|
|
69
|
+
!Array.isArray(value.tableNames) ||
|
|
70
|
+
!value.tableNames.every(isNonEmptyString)) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
postgresMajorVersion: value.postgresMajorVersion,
|
|
75
|
+
tableNames: [...value.tableNames]
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function hasImportDispatchBase(value) {
|
|
79
|
+
return (isNonEmptyString(value.applicationId) &&
|
|
80
|
+
isNonEmptyString(value.bindingId) &&
|
|
81
|
+
isNonEmptyString(value.bindingKey) &&
|
|
82
|
+
isUnknownRecord(value.desiredSpec) &&
|
|
83
|
+
isNonEmptyString(value.desiredSpecHash) &&
|
|
84
|
+
isUnknownRecord(value.import) &&
|
|
85
|
+
isNonEmptyString(value.import.importId) &&
|
|
86
|
+
value.import.kind === 'pg_dump_custom' &&
|
|
87
|
+
isPositiveInteger(value.import.prefixSizeBytes) &&
|
|
88
|
+
isNonEmptyString(value.organizationId) &&
|
|
89
|
+
isNonEmptyString(value.profile) &&
|
|
90
|
+
isNonEmptyString(value.requestId) &&
|
|
91
|
+
isNonEmptyString(value.resourceKey));
|
|
92
|
+
}
|
|
93
|
+
function isOptionalStringMap(value) {
|
|
94
|
+
if (value === undefined) {
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
if (!isUnknownRecord(value)) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
return Object.entries(value).every(([key, entry]) => key.length > 0 && typeof entry === 'string' && entry.length > 0);
|
|
101
|
+
}
|
|
102
|
+
function isNonEmptyString(value) {
|
|
103
|
+
return typeof value === 'string' && value.trim().length > 0;
|
|
104
|
+
}
|
|
105
|
+
function isPositiveInteger(value) {
|
|
106
|
+
return typeof value === 'number' && Number.isSafeInteger(value) && value > 0;
|
|
107
|
+
}
|
|
108
|
+
function isUnknownRecord(value) {
|
|
109
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=appDatabaseImport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appDatabaseImport.js","sourceRoot":"","sources":["../../src/database-lifecycle/appDatabaseImport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appDatabaseImport.test.d.ts","sourceRoot":"","sources":["../../src/database-lifecycle/appDatabaseImport.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const appDatabaseImport_js_1 = require("./appDatabaseImport.js");
|
|
5
|
+
(0, vitest_1.describe)('App Database import contracts', () => {
|
|
6
|
+
(0, vitest_1.test)('validates operation-specific dispatch fields', () => {
|
|
7
|
+
const base = {
|
|
8
|
+
applicationId: 'application-id',
|
|
9
|
+
bindingId: 'binding-id',
|
|
10
|
+
bindingKey: 'binding-key',
|
|
11
|
+
desiredSpec: { engine: 'postgres', logicalName: 'Orders DB' },
|
|
12
|
+
desiredSpecHash: 'desired-spec-hash',
|
|
13
|
+
import: {
|
|
14
|
+
importId: 'import-id',
|
|
15
|
+
kind: 'pg_dump_custom',
|
|
16
|
+
prefixSizeBytes: 1_024,
|
|
17
|
+
profileToken: 'profile-token',
|
|
18
|
+
resourceToken: 'resource-token'
|
|
19
|
+
},
|
|
20
|
+
organizationId: 'organization-id',
|
|
21
|
+
profile: 'production',
|
|
22
|
+
requestId: 'request-id',
|
|
23
|
+
resourceKey: 'organization/application/database/profile/default'
|
|
24
|
+
};
|
|
25
|
+
(0, vitest_1.expect)((0, appDatabaseImport_js_1.isAppDatabaseImportDispatchPayload)({
|
|
26
|
+
...base,
|
|
27
|
+
import: { ...base.import, expectedSizeBytes: 10_000 },
|
|
28
|
+
operation: 'prepare_import_prefix_upload'
|
|
29
|
+
})).toBe(true);
|
|
30
|
+
(0, vitest_1.expect)((0, appDatabaseImport_js_1.isAppDatabaseImportDispatchPayload)({
|
|
31
|
+
...base,
|
|
32
|
+
import: base.import,
|
|
33
|
+
operation: 'prepare_import_prefix_upload'
|
|
34
|
+
})).toBe(false);
|
|
35
|
+
(0, vitest_1.expect)((0, appDatabaseImport_js_1.isAppDatabaseImportDispatchPayload)({
|
|
36
|
+
...base,
|
|
37
|
+
import: {
|
|
38
|
+
...base.import,
|
|
39
|
+
expectedSizeBytes: 10_000,
|
|
40
|
+
prefixObjectKey: 'imports/import-id/prefix'
|
|
41
|
+
},
|
|
42
|
+
operation: 'prepare_import_prefix_upload'
|
|
43
|
+
})).toBe(false);
|
|
44
|
+
(0, vitest_1.expect)((0, appDatabaseImport_js_1.isAppDatabaseImportDispatchPayload)({
|
|
45
|
+
...base,
|
|
46
|
+
import: { ...base.import, prefixObjectKey: 'imports/import-id/prefix' },
|
|
47
|
+
operation: 'inspect_import_prefix'
|
|
48
|
+
})).toBe(true);
|
|
49
|
+
(0, vitest_1.expect)((0, appDatabaseImport_js_1.isAppDatabaseImportDispatchPayload)({
|
|
50
|
+
...base,
|
|
51
|
+
import: {
|
|
52
|
+
...base.import,
|
|
53
|
+
expectedSizeBytes: 10_000,
|
|
54
|
+
prefixObjectKey: 'imports/import-id/prefix'
|
|
55
|
+
},
|
|
56
|
+
operation: 'inspect_import_prefix'
|
|
57
|
+
})).toBe(false);
|
|
58
|
+
(0, vitest_1.expect)({
|
|
59
|
+
...base,
|
|
60
|
+
import: { ...base.import, expectedSizeBytes: 10_000 },
|
|
61
|
+
operation: 'prepare_import_prefix_upload'
|
|
62
|
+
}).not.toHaveProperty('import.prefixObjectKey');
|
|
63
|
+
(0, vitest_1.expect)((0, appDatabaseImport_js_1.isAppDatabaseImportDispatchPayload)({
|
|
64
|
+
...base,
|
|
65
|
+
operation: 'inspect_import_prefix'
|
|
66
|
+
})).toBe(false);
|
|
67
|
+
(0, vitest_1.expect)((0, appDatabaseImport_js_1.isAppDatabaseImportDispatchPayload)({
|
|
68
|
+
...base,
|
|
69
|
+
import: { ...base.import, profileToken: '' },
|
|
70
|
+
operation: 'prepare_import_prefix_upload'
|
|
71
|
+
})).toBe(false);
|
|
72
|
+
(0, vitest_1.expect)((0, appDatabaseImport_js_1.isAppDatabaseImportDispatchPayload)({
|
|
73
|
+
...base,
|
|
74
|
+
import: { ...base.import, resourceToken: '' },
|
|
75
|
+
operation: 'prepare_import_prefix_upload'
|
|
76
|
+
})).toBe(false);
|
|
77
|
+
const withoutOrganization = { ...base };
|
|
78
|
+
delete withoutOrganization.organizationId;
|
|
79
|
+
(0, vitest_1.expect)((0, appDatabaseImport_js_1.isAppDatabaseImportDispatchPayload)({
|
|
80
|
+
...withoutOrganization,
|
|
81
|
+
import: { ...base.import, expectedSizeBytes: 10_000 },
|
|
82
|
+
operation: 'prepare_import_prefix_upload'
|
|
83
|
+
})).toBe(false);
|
|
84
|
+
});
|
|
85
|
+
(0, vitest_1.test)('requires prefix growth and narrow nested callback results', () => {
|
|
86
|
+
(0, vitest_1.expect)((0, appDatabaseImport_js_1.isAppDatabaseImportCallbackResult)({
|
|
87
|
+
inspectedPrefixSizeBytes: 1_024,
|
|
88
|
+
nextPrefixSizeBytes: 2_048,
|
|
89
|
+
result: 'prefix_incomplete'
|
|
90
|
+
})).toBe(true);
|
|
91
|
+
(0, vitest_1.expect)((0, appDatabaseImport_js_1.isAppDatabaseImportCallbackResult)({
|
|
92
|
+
inspectedPrefixSizeBytes: 1_024,
|
|
93
|
+
nextPrefixSizeBytes: 1_024,
|
|
94
|
+
result: 'prefix_incomplete'
|
|
95
|
+
})).toBe(false);
|
|
96
|
+
(0, vitest_1.expect)((0, appDatabaseImport_js_1.isAppDatabaseImportCallbackResult)({
|
|
97
|
+
prefixObjectKey: 'imports/import-id/prefix',
|
|
98
|
+
prefixUploadUrl: 'https://uploads.example/prefix',
|
|
99
|
+
result: 'prefix_upload_url'
|
|
100
|
+
})).toBe(true);
|
|
101
|
+
(0, vitest_1.expect)((0, appDatabaseImport_js_1.isAppDatabaseImportCallbackResult)({
|
|
102
|
+
prefixUploadUrl: 'https://uploads.example/prefix',
|
|
103
|
+
result: 'prefix_upload_url'
|
|
104
|
+
})).toBe(false);
|
|
105
|
+
const callback = {
|
|
106
|
+
bindingKey: 'binding-key',
|
|
107
|
+
import: {
|
|
108
|
+
prefixObjectKey: 'imports/import-id/prefix',
|
|
109
|
+
prefixUploadUrl: 'https://uploads.example/prefix',
|
|
110
|
+
result: 'prefix_upload_url'
|
|
111
|
+
},
|
|
112
|
+
lifecycleState: 'ready',
|
|
113
|
+
requestId: 'request-id'
|
|
114
|
+
};
|
|
115
|
+
if (callback.import.result !== 'prefix_upload_url') {
|
|
116
|
+
throw new Error('Expected prefix upload URL callback');
|
|
117
|
+
}
|
|
118
|
+
(0, vitest_1.expect)(callback.import.prefixUploadUrl).toContain('https://');
|
|
119
|
+
(0, vitest_1.expect)((0, appDatabaseImport_js_1.isAppDatabaseImportCallbackResult)({
|
|
120
|
+
result: 'schema_validated',
|
|
121
|
+
validationMetadata: {
|
|
122
|
+
postgresMajorVersion: 16,
|
|
123
|
+
tableNames: ['public.orders']
|
|
124
|
+
}
|
|
125
|
+
})).toBe(true);
|
|
126
|
+
(0, vitest_1.expect)((0, appDatabaseImport_js_1.isAppDatabaseImportCallbackResult)({
|
|
127
|
+
postgresMajorVersion: 16,
|
|
128
|
+
result: 'schema_validated',
|
|
129
|
+
tableNames: ['public.orders']
|
|
130
|
+
})).toBe(false);
|
|
131
|
+
});
|
|
132
|
+
(0, vitest_1.test)('retains only allowlisted validation metadata', () => {
|
|
133
|
+
(0, vitest_1.expect)((0, appDatabaseImport_js_1.parseAppDatabaseImportValidationMetadata)({
|
|
134
|
+
postgresMajorVersion: 16,
|
|
135
|
+
rows: [{ secret: 'value' }],
|
|
136
|
+
sql: 'CREATE TABLE private_data',
|
|
137
|
+
tableNames: ['public.orders', 'public.customers']
|
|
138
|
+
})).toEqual({
|
|
139
|
+
postgresMajorVersion: 16,
|
|
140
|
+
tableNames: ['public.orders', 'public.customers']
|
|
141
|
+
});
|
|
142
|
+
(0, vitest_1.expect)((0, appDatabaseImport_js_1.parseAppDatabaseImportValidationMetadata)({ postgresMajorVersion: 16, tableNames: [''] })).toBeUndefined();
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
//# sourceMappingURL=appDatabaseImport.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appDatabaseImport.test.js","sourceRoot":"","sources":["../../src/database-lifecycle/appDatabaseImport.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { AppDatabaseTagRef } from './appDatabaseCompatibility.js';
|
|
2
|
+
import type { DatabaseEngine, LifecycleMigrationState, LifecycleState } from './index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Builder-safe physical instance fields. Pool capacity and the internal
|
|
5
|
+
* instance id stay off this payload: they are org-wide admin facts, and
|
|
6
|
+
* capacity.used counts every application in the org.
|
|
7
|
+
*/
|
|
8
|
+
export type AppDatabaseStatusInstance = {
|
|
9
|
+
engine: DatabaseEngine;
|
|
10
|
+
engineVersion: string | null;
|
|
11
|
+
region: string;
|
|
12
|
+
};
|
|
13
|
+
export type AppDatabaseStatusIntegration = {
|
|
14
|
+
apiNames: string[];
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
pluginId: string;
|
|
18
|
+
};
|
|
19
|
+
export type AppDatabaseStatusBinding = {
|
|
20
|
+
bindingId: string;
|
|
21
|
+
created: string;
|
|
22
|
+
instance: AppDatabaseStatusInstance | null;
|
|
23
|
+
integration: AppDatabaseStatusIntegration | null;
|
|
24
|
+
lastActivity: string;
|
|
25
|
+
lifecycleState: LifecycleState;
|
|
26
|
+
logicalName: string;
|
|
27
|
+
migrationDirectory: string | null;
|
|
28
|
+
migrationState: LifecycleMigrationState;
|
|
29
|
+
};
|
|
30
|
+
export type AppDatabaseStatusTag = AppDatabaseTagRef & {
|
|
31
|
+
/** Null when this data tag has no live (non-cancelled) database. */
|
|
32
|
+
binding: AppDatabaseStatusBinding | null;
|
|
33
|
+
/**
|
|
34
|
+
* True when this data tag had a database that was retired. The live
|
|
35
|
+
* binding is omitted so the tag can be provisioned again, but Status
|
|
36
|
+
* still shows Deleted instead of No database.
|
|
37
|
+
*/
|
|
38
|
+
deleted: boolean;
|
|
39
|
+
displayName: string;
|
|
40
|
+
isDefaultEditor: boolean;
|
|
41
|
+
};
|
|
42
|
+
export type AppDatabaseStatus = {
|
|
43
|
+
applicationId: string;
|
|
44
|
+
/**
|
|
45
|
+
* Whether the app declares an App Database right now (working-state
|
|
46
|
+
* requirement). Same meaning as AppDatabaseCompatibility.hasAppDatabase.
|
|
47
|
+
* A leftover live binding with no requirement still appears under tags.
|
|
48
|
+
*/
|
|
49
|
+
hasAppDatabase: boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Whether leftover App Database code is still in the working tree: SQL
|
|
52
|
+
* in the last known migration folder, or APIs still wired to the app's
|
|
53
|
+
* Postgres integration. Used to offer Clark cleanup after Edit databases
|
|
54
|
+
* are gone. Not a complete scan of every page or helper.
|
|
55
|
+
*/
|
|
56
|
+
hasDatabaseCode: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Whether the currently live published version stamped a database
|
|
59
|
+
* requirement. Working-state (Edit) rows are not this signal: a leftover
|
|
60
|
+
* production database stays undeletable until a version without databases
|
|
61
|
+
* is live.
|
|
62
|
+
*/
|
|
63
|
+
liveVersionHasAppDatabase: boolean;
|
|
64
|
+
tags: AppDatabaseStatusTag[];
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Edit lifecycle membership: tags used for edit provisioning and migrations.
|
|
68
|
+
* That is every editor-only tag, plus the editor default even when that
|
|
69
|
+
* default is also deploy-allowed.
|
|
70
|
+
*/
|
|
71
|
+
export declare function isEditLifecycleTag(tag: Pick<AppDatabaseStatusTag, 'availableModes'>): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Deploy lifecycle membership for builder-facing grouping: deploy-allowed
|
|
74
|
+
* tags that are not the editor default. Publish still may write the editor
|
|
75
|
+
* default when it is also deploy-allowed; that tag stays an Edit database.
|
|
76
|
+
*/
|
|
77
|
+
export declare function isDeployLifecycleTag(tag: Pick<AppDatabaseStatusTag, 'availableModes'>): boolean;
|
|
78
|
+
export declare function isProductionDatabaseRetirementEligible(status: AppDatabaseStatus): boolean;
|
|
79
|
+
//# sourceMappingURL=appDatabaseStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appDatabaseStatus.d.ts","sourceRoot":"","sources":["../../src/database-lifecycle/appDatabaseStatus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE1F;;;;GAIG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,cAAc,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC3C,WAAW,EAAE,4BAA4B,GAAG,IAAI,CAAC;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,cAAc,EAAE,uBAAuB,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,GAAG;IACrD,oEAAoE;IACpE,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACzC;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,yBAAyB,EAAE,OAAO,CAAC;IACnC,IAAI,EAAE,oBAAoB,EAAE,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,GAAG,OAAO,CAE7F;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,GAAG,OAAO,CAE/F;AAED,wBAAgB,sCAAsC,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAIzF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isEditLifecycleTag = isEditLifecycleTag;
|
|
4
|
+
exports.isDeployLifecycleTag = isDeployLifecycleTag;
|
|
5
|
+
exports.isProductionDatabaseRetirementEligible = isProductionDatabaseRetirementEligible;
|
|
6
|
+
const index_js_1 = require("../types/event/index.js");
|
|
7
|
+
/**
|
|
8
|
+
* Edit lifecycle membership: tags used for edit provisioning and migrations.
|
|
9
|
+
* That is every editor-only tag, plus the editor default even when that
|
|
10
|
+
* default is also deploy-allowed.
|
|
11
|
+
*/
|
|
12
|
+
function isEditLifecycleTag(tag) {
|
|
13
|
+
return tag.availableModes.includes(index_js_1.ViewMode.EDITOR);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Deploy lifecycle membership for builder-facing grouping: deploy-allowed
|
|
17
|
+
* tags that are not the editor default. Publish still may write the editor
|
|
18
|
+
* default when it is also deploy-allowed; that tag stays an Edit database.
|
|
19
|
+
*/
|
|
20
|
+
function isDeployLifecycleTag(tag) {
|
|
21
|
+
return tag.availableModes.includes(index_js_1.ViewMode.DEPLOYED) && !tag.availableModes.includes(index_js_1.ViewMode.EDITOR);
|
|
22
|
+
}
|
|
23
|
+
function isProductionDatabaseRetirementEligible(status) {
|
|
24
|
+
const hasEditDatabase = status.tags.some((tag) => tag.binding !== null && isEditLifecycleTag(tag));
|
|
25
|
+
const hasLeftoverProductionDatabase = status.tags.some((tag) => tag.binding !== null && !isEditLifecycleTag(tag));
|
|
26
|
+
return !hasEditDatabase && hasLeftoverProductionDatabase && !status.liveVersionHasAppDatabase;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=appDatabaseStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appDatabaseStatus.js","sourceRoot":"","sources":["../../src/database-lifecycle/appDatabaseStatus.ts"],"names":[],"mappings":";;AA6EA,gDAEC;AAOD,oDAEC;AAED,wFAIC;AA9FD,sDAAmD;AAwEnD;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,GAAiD;IAClF,OAAO,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,mBAAQ,CAAC,MAAM,CAAC,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,SAAgB,oBAAoB,CAAC,GAAiD;IACpF,OAAO,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,mBAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,mBAAQ,CAAC,MAAM,CAAC,CAAC;AACzG,CAAC;AAED,SAAgB,sCAAsC,CAAC,MAAyB;IAC9E,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;IACnG,MAAM,6BAA6B,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;IAClH,OAAO,CAAC,eAAe,IAAI,6BAA6B,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC;AAChG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appDatabaseStatus.test.d.ts","sourceRoot":"","sources":["../../src/database-lifecycle/appDatabaseStatus.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const index_js_1 = require("../types/event/index.js");
|
|
5
|
+
const appDatabaseStatus_js_1 = require("./appDatabaseStatus.js");
|
|
6
|
+
const binding = {
|
|
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
|
+
function status(overrides = {}) {
|
|
18
|
+
return {
|
|
19
|
+
applicationId: 'app-1',
|
|
20
|
+
hasAppDatabase: false,
|
|
21
|
+
hasDatabaseCode: false,
|
|
22
|
+
liveVersionHasAppDatabase: false,
|
|
23
|
+
tags: [
|
|
24
|
+
{
|
|
25
|
+
availableModes: [index_js_1.ViewMode.DEPLOYED],
|
|
26
|
+
binding,
|
|
27
|
+
deleted: false,
|
|
28
|
+
displayName: 'Production',
|
|
29
|
+
isDefaultEditor: false,
|
|
30
|
+
profileKey: 'production'
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
...overrides
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
(0, vitest_1.describe)('production database retirement eligibility', () => {
|
|
37
|
+
(0, vitest_1.it)('offers deletion after a live version that does not need a database and Edit leftovers are gone', () => {
|
|
38
|
+
(0, vitest_1.expect)((0, appDatabaseStatus_js_1.isProductionDatabaseRetirementEligible)(status())).toBe(true);
|
|
39
|
+
});
|
|
40
|
+
(0, vitest_1.it)('refuses deletion while the live version still needs a database', () => {
|
|
41
|
+
(0, vitest_1.expect)((0, appDatabaseStatus_js_1.isProductionDatabaseRetirementEligible)(status({ liveVersionHasAppDatabase: true }))).toBe(false);
|
|
42
|
+
});
|
|
43
|
+
(0, vitest_1.it)('refuses deletion while an Edit-only database remains', () => {
|
|
44
|
+
(0, vitest_1.expect)((0, appDatabaseStatus_js_1.isProductionDatabaseRetirementEligible)(status({
|
|
45
|
+
tags: [
|
|
46
|
+
...status().tags,
|
|
47
|
+
{
|
|
48
|
+
availableModes: [index_js_1.ViewMode.EDITOR],
|
|
49
|
+
binding: { ...binding, bindingId: 'edit-binding' },
|
|
50
|
+
deleted: false,
|
|
51
|
+
displayName: 'Staging',
|
|
52
|
+
isDefaultEditor: true,
|
|
53
|
+
profileKey: 'staging'
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}))).toBe(false);
|
|
57
|
+
});
|
|
58
|
+
(0, vitest_1.it)('offers deletion of an unassigned leftover after a live version that does not need a database', () => {
|
|
59
|
+
(0, vitest_1.expect)((0, appDatabaseStatus_js_1.isProductionDatabaseRetirementEligible)(status({
|
|
60
|
+
tags: [
|
|
61
|
+
{
|
|
62
|
+
availableModes: [],
|
|
63
|
+
binding,
|
|
64
|
+
deleted: false,
|
|
65
|
+
displayName: 'Removed production',
|
|
66
|
+
isDefaultEditor: false,
|
|
67
|
+
profileKey: 'removed-production'
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
}))).toBe(true);
|
|
71
|
+
});
|
|
72
|
+
(0, vitest_1.it)('refuses deletion while the editor default is still live, even when that tag is also deploy-allowed', () => {
|
|
73
|
+
(0, vitest_1.expect)((0, appDatabaseStatus_js_1.isProductionDatabaseRetirementEligible)(status({
|
|
74
|
+
tags: [
|
|
75
|
+
...status().tags,
|
|
76
|
+
{
|
|
77
|
+
availableModes: [index_js_1.ViewMode.EDITOR, index_js_1.ViewMode.DEPLOYED],
|
|
78
|
+
binding: { ...binding, bindingId: 'edit-binding' },
|
|
79
|
+
deleted: false,
|
|
80
|
+
displayName: 'Staging',
|
|
81
|
+
isDefaultEditor: true,
|
|
82
|
+
profileKey: 'staging'
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
}))).toBe(false);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=appDatabaseStatus.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appDatabaseStatus.test.js","sourceRoot":"","sources":["../../src/database-lifecycle/appDatabaseStatus.test.ts"],"names":[],"mappings":"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"}
|