@rehearsal-db/core 0.1.0-beta.9 → 0.1.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +319 -1
- package/COMPATIBILITY.md +15 -0
- package/README.md +73 -16
- package/dist/package.json +100 -0
- package/dist/scripts/install/create_root_config.d.mts +3 -0
- package/dist/scripts/install/create_root_config.mjs +13 -0
- package/dist/scripts/runtime/manage_database.d.mts +6 -0
- package/{scripts → dist/scripts}/runtime/manage_database.mjs +6 -8
- package/dist/src/application/interactive_task.d.mts +30 -0
- package/dist/src/application/interactive_task.mjs +83 -0
- package/dist/src/application/session.d.mts +97 -0
- package/dist/src/application/session.mjs +380 -0
- package/dist/src/baseline/artifact.d.mts +119 -0
- package/dist/src/baseline/artifact.mjs +522 -0
- package/dist/src/baseline/builder.d.mts +19 -0
- package/dist/src/baseline/builder.mjs +142 -0
- package/dist/src/baseline/input_discovery.d.mts +13 -0
- package/dist/src/baseline/input_discovery.mjs +149 -0
- package/dist/src/baseline/policy_review.d.mts +56 -0
- package/dist/src/baseline/policy_review.mjs +73 -0
- package/dist/src/baseline/preparation.d.mts +63 -0
- package/dist/src/baseline/preparation.mjs +295 -0
- package/dist/src/baseline/privacy_contract.d.mts +147 -0
- package/dist/src/baseline/privacy_contract.mjs +2 -0
- package/dist/src/baseline/privacy_dependency_graph.d.mts +7 -0
- package/dist/src/baseline/privacy_dependency_graph.mjs +110 -0
- package/dist/src/baseline/privacy_engine.d.mts +5 -0
- package/dist/src/baseline/privacy_engine.mjs +4 -0
- package/dist/src/baseline/privacy_key.d.mts +7 -0
- package/dist/src/baseline/privacy_key.mjs +42 -0
- package/dist/src/baseline/privacy_pipeline.d.mts +7 -0
- package/dist/src/baseline/privacy_pipeline.mjs +127 -0
- package/dist/src/baseline/privacy_policy.d.mts +6 -0
- package/dist/src/baseline/privacy_policy.mjs +237 -0
- package/dist/src/baseline/privacy_recipe_validation.d.mts +5 -0
- package/dist/src/baseline/privacy_recipe_validation.mjs +289 -0
- package/dist/src/baseline/privacy_rule_registry.d.mts +18 -0
- package/dist/src/baseline/privacy_rule_registry.mjs +143 -0
- package/dist/src/baseline/privacy_structured_json.d.mts +66 -0
- package/dist/src/baseline/privacy_structured_json.mjs +464 -0
- package/dist/src/baseline/privacy_transforms.d.mts +18 -0
- package/dist/src/baseline/privacy_transforms.mjs +142 -0
- package/dist/src/baseline/privacy_validation_shared.d.mts +31 -0
- package/dist/src/baseline/privacy_validation_shared.mjs +127 -0
- package/dist/src/baseline/sanitization_policy.d.mts +69 -0
- package/dist/src/baseline/sanitization_policy.mjs +227 -0
- package/dist/src/baseline/schema_snapshot.d.mts +19 -0
- package/dist/src/baseline/schema_snapshot.mjs +79 -0
- package/dist/src/cli/application_command_handlers.d.mts +8 -0
- package/dist/src/cli/application_command_handlers.mjs +52 -0
- package/dist/src/cli/arguments.d.mts +38 -0
- package/dist/src/cli/arguments.mjs +130 -0
- package/dist/src/cli/basic_command_handlers.d.mts +4 -0
- package/dist/src/cli/basic_command_handlers.mjs +57 -0
- package/dist/src/cli/cli_commands.d.mts +14 -0
- package/dist/src/cli/cli_commands.mjs +34 -0
- package/dist/src/cli/command_contract.d.mts +57 -0
- package/dist/src/cli/command_contract.mjs +39 -0
- package/dist/src/cli/command_output.d.mts +12 -0
- package/dist/src/cli/command_output.mjs +20 -0
- package/dist/src/cli/command_registry.d.mts +7 -0
- package/dist/src/cli/command_registry.mjs +14 -0
- package/dist/src/cli/guided.d.mts +53 -0
- package/dist/src/cli/guided.mjs +727 -0
- package/dist/src/cli/identity_command_handlers.d.mts +12 -0
- package/dist/src/cli/identity_command_handlers.mjs +239 -0
- package/dist/src/cli/identity_renderer.d.mts +8 -0
- package/dist/src/cli/identity_renderer.mjs +33 -0
- package/dist/src/cli/init_command.d.mts +21 -0
- package/dist/src/cli/init_command.mjs +90 -0
- package/dist/src/cli/inspection_command_handlers.d.mts +3 -0
- package/dist/src/cli/inspection_command_handlers.mjs +79 -0
- package/dist/src/cli/project_command_handlers.d.mts +11 -0
- package/dist/src/cli/project_command_handlers.mjs +92 -0
- package/dist/src/cli/project_commands.d.mts +283 -0
- package/dist/src/cli/project_commands.mjs +192 -0
- package/dist/src/cli/rehearsal.d.mts +7 -0
- package/dist/src/cli/rehearsal.mjs +190 -0
- package/dist/src/cli/renderers.d.mts +299 -0
- package/dist/src/cli/renderers.mjs +554 -0
- package/dist/src/cli/runtime_action_handlers.d.mts +12 -0
- package/dist/src/cli/runtime_action_handlers.mjs +201 -0
- package/dist/src/cli/runtime_commands.d.mts +294 -0
- package/dist/src/cli/runtime_commands.mjs +619 -0
- package/dist/src/cli/source_command_handlers.d.mts +8 -0
- package/dist/src/cli/source_command_handlers.mjs +62 -0
- package/dist/src/cli/source_commands.d.mts +436 -0
- package/dist/src/cli/source_commands.mjs +301 -0
- package/dist/src/cli/terminal.d.mts +59 -0
- package/dist/src/cli/terminal.mjs +230 -0
- package/dist/src/identity/claim.d.mts +5 -0
- package/dist/src/identity/claim.mjs +4 -0
- package/dist/src/identity/claim_contract.d.mts +135 -0
- package/dist/src/identity/claim_contract.mjs +6 -0
- package/dist/src/identity/claim_executor.d.mts +10 -0
- package/dist/src/identity/claim_executor.mjs +358 -0
- package/dist/src/identity/claim_identity_lookup.d.mts +23 -0
- package/dist/src/identity/claim_identity_lookup.mjs +134 -0
- package/dist/src/identity/claim_plan.d.mts +8 -0
- package/dist/src/identity/claim_plan.mjs +61 -0
- package/dist/src/identity/claim_policy.d.mts +3 -0
- package/dist/src/identity/claim_policy.mjs +377 -0
- package/dist/src/identity/claim_sql.d.mts +10 -0
- package/dist/src/identity/claim_sql.mjs +46 -0
- package/dist/src/identity/claim_verification.d.mts +13 -0
- package/dist/src/identity/claim_verification.mjs +35 -0
- package/dist/src/identity/connect.d.mts +30 -0
- package/dist/src/identity/connect.mjs +111 -0
- package/dist/src/identity/provider_configuration.d.mts +37 -0
- package/dist/src/identity/provider_configuration.mjs +132 -0
- package/dist/src/identity/storage.d.mts +21 -0
- package/dist/src/identity/storage.mjs +122 -0
- package/dist/src/index.d.mts +4 -0
- package/dist/src/index.mjs +3 -0
- package/dist/src/project/configuration.d.mts +13 -0
- package/dist/src/project/configuration.mjs +9 -0
- package/dist/src/project/configuration_contract.d.mts +125 -0
- package/dist/src/project/configuration_contract.mjs +27 -0
- package/dist/src/project/configuration_discovery.d.mts +7 -0
- package/dist/src/project/configuration_discovery.mjs +37 -0
- package/dist/src/project/configuration_normalization.d.mts +107 -0
- package/dist/src/project/configuration_normalization.mjs +302 -0
- package/dist/src/project/configuration_rendering.d.mts +14 -0
- package/dist/src/project/configuration_rendering.mjs +228 -0
- package/dist/src/project/configuration_resolution.d.mts +125 -0
- package/dist/src/project/configuration_resolution.mjs +81 -0
- package/dist/src/project/configuration_schema.d.mts +22 -0
- package/dist/src/project/configuration_schema.mjs +160 -0
- package/dist/src/project/configuration_validation.d.mts +22 -0
- package/dist/src/project/configuration_validation.mjs +136 -0
- package/dist/src/project/install_scaffold.d.mts +42 -0
- package/dist/src/project/install_scaffold.mjs +263 -0
- package/dist/src/project/project_detection.d.mts +14 -0
- package/dist/src/project/project_detection.mjs +47 -0
- package/dist/src/project/setup.d.mts +87 -0
- package/dist/src/project/setup.mjs +414 -0
- package/dist/src/project/support_report.d.mts +88 -0
- package/dist/src/project/support_report.mjs +83 -0
- package/dist/src/runtime/cleanup.d.mts +85 -0
- package/dist/src/runtime/cleanup.mjs +311 -0
- package/dist/src/runtime/lifecycle_engine.d.mts +63 -0
- package/dist/src/runtime/lifecycle_engine.mjs +114 -0
- package/dist/src/runtime/migration_history.d.mts +51 -0
- package/dist/src/runtime/migration_history.mjs +170 -0
- package/dist/src/runtime/plan.d.mts +134 -0
- package/dist/src/runtime/plan.mjs +640 -0
- package/dist/src/runtime/policy.d.mts +66 -0
- package/dist/src/runtime/policy.mjs +369 -0
- package/dist/src/runtime/restore.d.mts +22 -0
- package/dist/src/runtime/restore.mjs +276 -0
- package/dist/src/runtime/service_environment.d.mts +11 -0
- package/dist/src/runtime/service_environment.mjs +58 -0
- package/dist/src/runtime/topology.d.mts +51 -0
- package/dist/src/runtime/topology.mjs +128 -0
- package/dist/src/shared/diagnostics.d.mts +97 -0
- package/dist/src/shared/diagnostics.mjs +170 -0
- package/dist/src/shared/human_output.d.mts +2 -0
- package/{src → dist/src}/shared/human_output.mjs +1 -3
- package/dist/src/shared/node_runtime.d.mts +14 -0
- package/dist/src/shared/node_runtime.mjs +25 -0
- package/dist/src/shared/operation_guard.d.mts +22 -0
- package/dist/src/shared/operation_guard.mjs +150 -0
- package/dist/src/shared/process_environment.d.mts +15 -0
- package/dist/src/shared/process_environment.mjs +50 -0
- package/dist/src/source/access.d.mts +165 -0
- package/dist/src/source/access.mjs +602 -0
- package/dist/src/source/asset_transfer.d.mts +27 -0
- package/dist/src/source/asset_transfer.mjs +202 -0
- package/dist/src/source/baseline.d.mts +66 -0
- package/dist/src/source/baseline.mjs +372 -0
- package/dist/src/source/external_reader.d.mts +42 -0
- package/dist/src/source/external_reader.mjs +278 -0
- package/dist/src/source/postgresql_access.d.mts +86 -0
- package/dist/src/source/postgresql_access.mjs +454 -0
- package/dist/src/source/privacy_paths.d.mts +10 -0
- package/dist/src/source/privacy_paths.mjs +27 -0
- package/dist/src/targets/driver.d.mts +2 -0
- package/dist/src/targets/driver.mjs +13 -0
- package/dist/src/targets/postgresql.d.mts +5 -0
- package/dist/src/targets/postgresql.mjs +620 -0
- package/dist/src/targets/supabase.d.mts +8 -0
- package/dist/src/targets/supabase.mjs +629 -0
- package/dist/src/targets/supabase_environment.d.mts +54 -0
- package/dist/src/targets/supabase_environment.mjs +184 -0
- package/dist/src/targets/target.d.mts +33 -0
- package/dist/src/targets/target.mjs +39 -0
- package/docs/README.md +35 -16
- package/docs/architecture.md +135 -10
- package/docs/commands.md +53 -15
- package/docs/configuration.md +186 -31
- package/docs/getting-started.md +66 -9
- package/docs/index.md +67 -0
- package/docs/production-source.md +175 -17
- package/docs/releasing.md +24 -12
- package/docs/roadmap.md +3 -2
- package/docs/runtime-lifecycle.md +99 -0
- package/docs/runtime-policies.md +80 -7
- package/docs/sanitization.md +572 -4
- package/docs/security-model.md +8 -0
- package/docs/stability.md +70 -0
- package/docs/standalone-workflow.md +36 -13
- package/docs/troubleshooting.md +82 -10
- package/docs/tutorial.md +7 -1
- package/docs/typescript.md +134 -0
- package/package.json +44 -29
- package/types/configuration.d.mts +5 -0
- package/src/README.md +0 -17
- package/src/application/session.mjs +0 -313
- package/src/baseline/artifact.mjs +0 -661
- package/src/baseline/builder.mjs +0 -164
- package/src/baseline/input_discovery.mjs +0 -155
- package/src/baseline/policy_review.mjs +0 -92
- package/src/baseline/preparation.mjs +0 -323
- package/src/baseline/privacy_engine.mjs +0 -413
- package/src/baseline/sanitization_policy.mjs +0 -299
- package/src/baseline/schema_snapshot.mjs +0 -113
- package/src/cli/arguments.mjs +0 -120
- package/src/cli/guided.mjs +0 -807
- package/src/cli/rehearsal.mjs +0 -933
- package/src/cli/renderers.mjs +0 -584
- package/src/cli/runtime_commands.mjs +0 -553
- package/src/cli/source_commands.mjs +0 -326
- package/src/cli/terminal.mjs +0 -275
- package/src/identity/claim.mjs +0 -975
- package/src/identity/storage.mjs +0 -165
- package/src/project/configuration.d.mts +0 -153
- package/src/project/configuration.mjs +0 -1197
- package/src/project/setup.mjs +0 -379
- package/src/project/support_report.mjs +0 -105
- package/src/runtime/cleanup.mjs +0 -381
- package/src/runtime/migration_history.mjs +0 -220
- package/src/runtime/plan.mjs +0 -685
- package/src/runtime/policy.mjs +0 -438
- package/src/runtime/restore.mjs +0 -329
- package/src/runtime/service_environment.mjs +0 -82
- package/src/runtime/topology.mjs +0 -177
- package/src/shared/diagnostics.mjs +0 -199
- package/src/shared/operation_guard.mjs +0 -162
- package/src/shared/process_environment.mjs +0 -68
- package/src/source/access.mjs +0 -578
- package/src/source/asset_transfer.mjs +0 -177
- package/src/source/baseline.mjs +0 -446
- package/src/source/postgresql_access.mjs +0 -480
- package/src/targets/postgresql.mjs +0 -808
- package/src/targets/supabase.mjs +0 -830
- package/src/targets/supabase_environment.mjs +0 -229
- package/src/targets/target.mjs +0 -66
package/src/identity/storage.mjs
DELETED
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
/** Copy and verify local Supabase Storage objects during an identity claim. */
|
|
2
|
-
|
|
3
|
-
import { createHash } from "node:crypto";
|
|
4
|
-
import { assertLoopbackUrl } from "../shared/process_environment.mjs";
|
|
5
|
-
|
|
6
|
-
const BUCKET = /^[a-z0-9][a-z0-9.-]{0,99}$/u;
|
|
7
|
-
const MAXIMUM_VERIFICATION_BYTES = 100 * 1024 * 1024;
|
|
8
|
-
const REQUEST_TIMEOUT_MS = 30_000;
|
|
9
|
-
|
|
10
|
-
const objectPath = (value) => {
|
|
11
|
-
if (
|
|
12
|
-
typeof value !== "string" ||
|
|
13
|
-
!value ||
|
|
14
|
-
value.startsWith("/") ||
|
|
15
|
-
value.split("/").some((part) => !part || part === "." || part === "..")
|
|
16
|
-
) {
|
|
17
|
-
throw new Error("A Storage identity-claim path is unsafe.");
|
|
18
|
-
}
|
|
19
|
-
return value.split("/").map(encodeURIComponent).join("/");
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const readVerifiedObject = async ({
|
|
23
|
-
fetchImpl,
|
|
24
|
-
baseUrl,
|
|
25
|
-
headers,
|
|
26
|
-
bucket,
|
|
27
|
-
path,
|
|
28
|
-
}) => {
|
|
29
|
-
const response = await fetchImpl(
|
|
30
|
-
`${baseUrl}/storage/v1/object/${encodeURIComponent(bucket)}/${objectPath(path)}?rehearsal=${Date.now()}`,
|
|
31
|
-
{
|
|
32
|
-
headers,
|
|
33
|
-
cache: "no-store",
|
|
34
|
-
signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
|
|
35
|
-
},
|
|
36
|
-
);
|
|
37
|
-
if (!response.ok) {
|
|
38
|
-
throw new Error(
|
|
39
|
-
`Supabase Storage could not read an identity-claim object (HTTP ${response.status}).`,
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
const declaredBytes = Number(response.headers.get("content-length"));
|
|
43
|
-
if (
|
|
44
|
-
Number.isFinite(declaredBytes) &&
|
|
45
|
-
declaredBytes > MAXIMUM_VERIFICATION_BYTES
|
|
46
|
-
) {
|
|
47
|
-
throw new Error(
|
|
48
|
-
"A Storage identity-claim object exceeds the 100 MiB verification limit.",
|
|
49
|
-
);
|
|
50
|
-
}
|
|
51
|
-
const bytes = Buffer.from(await response.arrayBuffer());
|
|
52
|
-
if (bytes.length > MAXIMUM_VERIFICATION_BYTES) {
|
|
53
|
-
throw new Error(
|
|
54
|
-
"A Storage identity-claim object exceeds the 100 MiB verification limit.",
|
|
55
|
-
);
|
|
56
|
-
}
|
|
57
|
-
return Object.freeze({
|
|
58
|
-
bytes: bytes.length,
|
|
59
|
-
sha256: createHash("sha256").update(bytes).digest("hex"),
|
|
60
|
-
});
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
export const createSupabaseStorageTransfer = ({
|
|
64
|
-
url,
|
|
65
|
-
serviceRoleKey,
|
|
66
|
-
fetchImpl = globalThis.fetch,
|
|
67
|
-
}) => {
|
|
68
|
-
assertLoopbackUrl("Rehearsal Supabase Storage", url);
|
|
69
|
-
if (typeof serviceRoleKey !== "string" || !serviceRoleKey) {
|
|
70
|
-
throw new Error(
|
|
71
|
-
"The local runtime environment has no Storage service key.",
|
|
72
|
-
);
|
|
73
|
-
}
|
|
74
|
-
if (typeof fetchImpl !== "function") {
|
|
75
|
-
throw new Error("A Fetch implementation is required for Storage transfer.");
|
|
76
|
-
}
|
|
77
|
-
const baseUrl = url.replace(/\/$/u, "");
|
|
78
|
-
const headers = Object.freeze({
|
|
79
|
-
apikey: serviceRoleKey,
|
|
80
|
-
authorization: `Bearer ${serviceRoleKey}`,
|
|
81
|
-
});
|
|
82
|
-
const removePaths = async ({ bucket, paths }) => {
|
|
83
|
-
if (!BUCKET.test(bucket ?? "") || !Array.isArray(paths) || !paths.length) {
|
|
84
|
-
throw new Error("A Storage identity-claim removal is invalid.");
|
|
85
|
-
}
|
|
86
|
-
paths.forEach(objectPath);
|
|
87
|
-
const response = await fetchImpl(
|
|
88
|
-
`${baseUrl}/storage/v1/object/${encodeURIComponent(bucket)}`,
|
|
89
|
-
{
|
|
90
|
-
method: "DELETE",
|
|
91
|
-
headers: { ...headers, "content-type": "application/json" },
|
|
92
|
-
body: JSON.stringify({ prefixes: paths }),
|
|
93
|
-
signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
|
|
94
|
-
},
|
|
95
|
-
);
|
|
96
|
-
if (!response.ok) {
|
|
97
|
-
throw new Error(
|
|
98
|
-
`Supabase Storage could not remove identity-claim objects (HTTP ${response.status}).`,
|
|
99
|
-
);
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
return Object.freeze({
|
|
103
|
-
async copyAndVerify({ bucket, source, destination }) {
|
|
104
|
-
if (!BUCKET.test(bucket ?? "")) {
|
|
105
|
-
throw new Error("A Storage identity-claim bucket is invalid.");
|
|
106
|
-
}
|
|
107
|
-
objectPath(source);
|
|
108
|
-
objectPath(destination);
|
|
109
|
-
if (source === destination) {
|
|
110
|
-
throw new Error("A Storage identity-claim copy must change the path.");
|
|
111
|
-
}
|
|
112
|
-
const sourceReceipt = await readVerifiedObject({
|
|
113
|
-
fetchImpl,
|
|
114
|
-
baseUrl,
|
|
115
|
-
headers,
|
|
116
|
-
bucket,
|
|
117
|
-
path: source,
|
|
118
|
-
});
|
|
119
|
-
try {
|
|
120
|
-
const response = await fetchImpl(`${baseUrl}/storage/v1/object/copy`, {
|
|
121
|
-
method: "POST",
|
|
122
|
-
headers: { ...headers, "content-type": "application/json" },
|
|
123
|
-
body: JSON.stringify({
|
|
124
|
-
bucketId: bucket,
|
|
125
|
-
sourceKey: source,
|
|
126
|
-
destinationKey: destination,
|
|
127
|
-
}),
|
|
128
|
-
signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
|
|
129
|
-
});
|
|
130
|
-
if (!response.ok) {
|
|
131
|
-
throw new Error(
|
|
132
|
-
`Supabase Storage could not copy an identity-claim object (HTTP ${response.status}).`,
|
|
133
|
-
);
|
|
134
|
-
}
|
|
135
|
-
const destinationReceipt = await readVerifiedObject({
|
|
136
|
-
fetchImpl,
|
|
137
|
-
baseUrl,
|
|
138
|
-
headers,
|
|
139
|
-
bucket,
|
|
140
|
-
path: destination,
|
|
141
|
-
});
|
|
142
|
-
if (
|
|
143
|
-
sourceReceipt.bytes !== destinationReceipt.bytes ||
|
|
144
|
-
sourceReceipt.sha256 !== destinationReceipt.sha256
|
|
145
|
-
) {
|
|
146
|
-
throw new Error(
|
|
147
|
-
"Supabase Storage copied an identity object with a different byte digest.",
|
|
148
|
-
);
|
|
149
|
-
}
|
|
150
|
-
return destinationReceipt;
|
|
151
|
-
} catch (error) {
|
|
152
|
-
try {
|
|
153
|
-
await removePaths({ bucket, paths: [destination] });
|
|
154
|
-
} catch (cleanupError) {
|
|
155
|
-
throw new AggregateError(
|
|
156
|
-
[error, cleanupError],
|
|
157
|
-
"Storage identity-copy verification failed and destination cleanup needs attention.",
|
|
158
|
-
);
|
|
159
|
-
}
|
|
160
|
-
throw error;
|
|
161
|
-
}
|
|
162
|
-
},
|
|
163
|
-
remove: removePaths,
|
|
164
|
-
});
|
|
165
|
-
};
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
export type RehearsalConfigVersion = 1;
|
|
2
|
-
|
|
3
|
-
export interface RehearsalConfig {
|
|
4
|
-
schemaVersion: RehearsalConfigVersion;
|
|
5
|
-
project: { name: string };
|
|
6
|
-
supabase?: {
|
|
7
|
-
workdir: string;
|
|
8
|
-
migrationDirectory: string;
|
|
9
|
-
rehearsalConfig: string;
|
|
10
|
-
runtimeWorkdir: string;
|
|
11
|
-
serviceEnvironmentFile?: string;
|
|
12
|
-
serviceEnvironmentVariables?: string[];
|
|
13
|
-
};
|
|
14
|
-
postgresql?: {
|
|
15
|
-
migrationDirectory: string;
|
|
16
|
-
runtimeWorkdir?: string;
|
|
17
|
-
image?: string;
|
|
18
|
-
database?: string;
|
|
19
|
-
user?: string;
|
|
20
|
-
};
|
|
21
|
-
baseline: {
|
|
22
|
-
artifactDirectory?: string;
|
|
23
|
-
sanitizationPolicy: string;
|
|
24
|
-
};
|
|
25
|
-
containerRuntime?: {
|
|
26
|
-
autoStartColima?: boolean;
|
|
27
|
-
};
|
|
28
|
-
cleanup?: {
|
|
29
|
-
retainBaselineGenerations?: number;
|
|
30
|
-
};
|
|
31
|
-
preparation?: {
|
|
32
|
-
sourcePolicy: string;
|
|
33
|
-
privacyKey: string;
|
|
34
|
-
batchRows?: number;
|
|
35
|
-
maximumRows?: number;
|
|
36
|
-
maximumBytes?: number;
|
|
37
|
-
diskHeadroomBytes?: number;
|
|
38
|
-
};
|
|
39
|
-
runtimePolicy?: string;
|
|
40
|
-
identityPolicy?: string;
|
|
41
|
-
dependentTargets?: Array<{
|
|
42
|
-
name: string;
|
|
43
|
-
configPath: string;
|
|
44
|
-
prepareCommand?: string;
|
|
45
|
-
}>;
|
|
46
|
-
application: {
|
|
47
|
-
startCommand: string;
|
|
48
|
-
proofCommand: string;
|
|
49
|
-
environmentFile?: string;
|
|
50
|
-
environmentVariables?: Record<string, string>;
|
|
51
|
-
readiness?: {
|
|
52
|
-
url: string;
|
|
53
|
-
expectedStatus: number;
|
|
54
|
-
timeoutSeconds?: number;
|
|
55
|
-
};
|
|
56
|
-
httpProofs?: Array<{
|
|
57
|
-
name: string;
|
|
58
|
-
kind: "positive" | "negative";
|
|
59
|
-
url: string;
|
|
60
|
-
method?: string;
|
|
61
|
-
expectedStatus: number;
|
|
62
|
-
json?: {
|
|
63
|
-
path: string[];
|
|
64
|
-
equals?: unknown;
|
|
65
|
-
notEquals?: unknown;
|
|
66
|
-
minimumItems?: number;
|
|
67
|
-
};
|
|
68
|
-
}>;
|
|
69
|
-
runtimeAdapter?: string;
|
|
70
|
-
};
|
|
71
|
-
runtime: {
|
|
72
|
-
target?: "supabase" | "postgresql";
|
|
73
|
-
applicationUrl?: string;
|
|
74
|
-
projectId?: string;
|
|
75
|
-
apiPort?: number;
|
|
76
|
-
databasePort: number;
|
|
77
|
-
studioPort?: number;
|
|
78
|
-
};
|
|
79
|
-
safety?: {
|
|
80
|
-
allowedHosts?: string[];
|
|
81
|
-
blockedEnvironmentVariables?: string[];
|
|
82
|
-
authenticationProviders?: string[];
|
|
83
|
-
hostedAccess?: "disabled";
|
|
84
|
-
outboundNetwork?: "deny";
|
|
85
|
-
};
|
|
86
|
-
verification?: { commands?: string[] };
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
export declare const REHEARSAL_CONFIG_VERSION: 1;
|
|
90
|
-
export declare const defineRehearsalConfig: <
|
|
91
|
-
const Config extends RehearsalConfig,
|
|
92
|
-
>(
|
|
93
|
-
config: Config,
|
|
94
|
-
) => Config;
|
|
95
|
-
export declare const loadRehearsalConfig: (options?: {
|
|
96
|
-
projectRoot?: string;
|
|
97
|
-
configPath?: string;
|
|
98
|
-
}) => Promise<unknown>;
|
|
99
|
-
export declare const inspectDetectedProject: (options?: {
|
|
100
|
-
projectRoot?: string;
|
|
101
|
-
}) => Promise<unknown>;
|
|
102
|
-
export declare const renderDetectedConfig: (
|
|
103
|
-
detected: unknown,
|
|
104
|
-
options?: {
|
|
105
|
-
applicationUrl?: string;
|
|
106
|
-
ports?: { api: number; database: number; studio: number };
|
|
107
|
-
},
|
|
108
|
-
) => string;
|
|
109
|
-
export declare const renderDetectedPostgresqlConfig: (
|
|
110
|
-
detected: unknown,
|
|
111
|
-
options?: {
|
|
112
|
-
applicationUrl?: string;
|
|
113
|
-
databasePort?: number;
|
|
114
|
-
},
|
|
115
|
-
) => string;
|
|
116
|
-
export declare const SANITIZATION_ACTIONS: Readonly<{
|
|
117
|
-
KEEP: "KEEP";
|
|
118
|
-
PSEUDONYMIZE: "PSEUDONYMIZE";
|
|
119
|
-
REPLACE: "REPLACE";
|
|
120
|
-
EXCLUDE: "EXCLUDE";
|
|
121
|
-
DERIVE: "DERIVE";
|
|
122
|
-
}>;
|
|
123
|
-
export declare const EXCLUDED_VALUE: unique symbol;
|
|
124
|
-
export declare const normalizeSanitizationAction: (
|
|
125
|
-
action: string,
|
|
126
|
-
) => "KEEP" | "PSEUDONYMIZE" | "REPLACE" | "EXCLUDE" | "DERIVE";
|
|
127
|
-
export declare const validateSanitizationCoverage: (options: {
|
|
128
|
-
policy: { policyVersion?: unknown; tables: Array<Record<string, unknown>> };
|
|
129
|
-
schemaTables: Array<{
|
|
130
|
-
name: string;
|
|
131
|
-
columns: Array<string | { name: string }>;
|
|
132
|
-
}>;
|
|
133
|
-
}) => Readonly<{
|
|
134
|
-
policyVersion: unknown;
|
|
135
|
-
tableCount: number;
|
|
136
|
-
columnCount: number;
|
|
137
|
-
tables: ReadonlyArray<Record<string, unknown>>;
|
|
138
|
-
}>;
|
|
139
|
-
export declare const validateRuntimeSanitizationPolicy: (
|
|
140
|
-
policy: unknown,
|
|
141
|
-
) => unknown;
|
|
142
|
-
export declare const readBoundRuntimeSanitizationPolicy: (options: {
|
|
143
|
-
bytes: Uint8Array | string;
|
|
144
|
-
expectedSha256: string;
|
|
145
|
-
}) => unknown;
|
|
146
|
-
export declare const applySanitizationAction: (options: {
|
|
147
|
-
action: string;
|
|
148
|
-
value: unknown;
|
|
149
|
-
replace?: (value: unknown, context: Record<string, unknown>) => unknown;
|
|
150
|
-
pseudonymize?: (value: unknown, context: Record<string, unknown>) => unknown;
|
|
151
|
-
derive?: (value: unknown, context: Record<string, unknown>) => unknown;
|
|
152
|
-
context?: Record<string, unknown>;
|
|
153
|
-
}) => unknown | typeof EXCLUDED_VALUE;
|