@caelo-cms/provisioning 0.10.53 → 0.10.55
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/agent-db.js +196 -109
- package/dist/audit-job-setup.d.ts +69 -0
- package/dist/audit-job-setup.d.ts.map +1 -0
- package/dist/audit-job-setup.js +317 -0
- package/dist/audit-job-setup.js.map +1 -0
- package/dist/caddy.d.ts +9 -0
- package/dist/caddy.d.ts.map +1 -1
- package/dist/caddy.js +38 -0
- package/dist/caddy.js.map +1 -1
- package/dist/cli.js +32 -8
- package/dist/cli.js.map +1 -1
- package/dist/gcp-names.d.ts +16 -1
- package/dist/gcp-names.d.ts.map +1 -1
- package/dist/gcp-names.js +23 -0
- package/dist/gcp-names.js.map +1 -1
- package/dist/infra-contract.d.ts +1 -1
- package/dist/infra-contract.d.ts.map +1 -1
- package/dist/infra-contract.js +7 -1
- package/dist/infra-contract.js.map +1 -1
- package/dist/private-file.d.ts +26 -0
- package/dist/private-file.d.ts.map +1 -0
- package/dist/private-file.js +49 -0
- package/dist/private-file.js.map +1 -0
- package/dist/release-contract.d.ts.map +1 -1
- package/dist/release-contract.js +3 -0
- package/dist/release-contract.js.map +1 -1
- package/dist/stack-contract.d.ts +8 -0
- package/dist/stack-contract.d.ts.map +1 -1
- package/dist/stack-contract.js +13 -1
- package/dist/stack-contract.js.map +1 -1
- package/dist/tar-entries.d.ts.map +1 -1
- package/dist/tar-entries.js +84 -9
- package/dist/tar-entries.js.map +1 -1
- package/dist/upgrade/app-roll.d.ts.map +1 -1
- package/dist/upgrade/app-roll.js +35 -0
- package/dist/upgrade/app-roll.js.map +1 -1
- package/dist/upgrade/audit-job-roll.d.ts +38 -0
- package/dist/upgrade/audit-job-roll.d.ts.map +1 -0
- package/dist/upgrade/audit-job-roll.js +43 -0
- package/dist/upgrade/audit-job-roll.js.map +1 -0
- package/dist/upgrade/converge.d.ts.map +1 -1
- package/dist/upgrade/converge.js +33 -2
- package/dist/upgrade/converge.js.map +1 -1
- package/dist/upgrader-setup.d.ts.map +1 -1
- package/dist/upgrader-setup.js +9 -3
- package/dist/upgrader-setup.js.map +1 -1
- package/dist/wizards/gcp-cost.js +3 -3
- package/dist/wizards/gcp-cost.js.map +1 -1
- package/dist/wizards/gcp-pulumi.d.ts +6 -0
- package/dist/wizards/gcp-pulumi.d.ts.map +1 -1
- package/dist/wizards/gcp-pulumi.js +7 -0
- package/dist/wizards/gcp-pulumi.js.map +1 -1
- package/dist/wizards/gcp.d.ts.map +1 -1
- package/dist/wizards/gcp.js +31 -0
- package/dist/wizards/gcp.js.map +1 -1
- package/package.json +4 -4
- package/src/agent/run.test.ts +1 -0
- package/src/audit-job-setup.test.ts +234 -0
- package/src/audit-job-setup.ts +360 -0
- package/src/caddy-redirects.docker.test.ts +19 -6
- package/src/caddy.test.ts +30 -0
- package/src/caddy.ts +43 -0
- package/src/cli-init-validation.test.ts +44 -0
- package/src/cli.ts +36 -7
- package/src/gcp-names.ts +28 -1
- package/src/infra-contract.test.ts +3 -3
- package/src/infra-contract.ts +7 -1
- package/src/private-file.test.ts +80 -0
- package/src/private-file.ts +50 -0
- package/src/release-contract.ts +3 -0
- package/src/stack-contract.test.ts +4 -0
- package/src/stack-contract.ts +14 -0
- package/src/stack-converge.test.ts +1 -1
- package/src/tar-entries.test.ts +149 -7
- package/src/tar-entries.ts +90 -9
- package/src/upgrade/app-roll.ts +39 -0
- package/src/upgrade/audit-job-roll.ts +68 -0
- package/src/upgrade/converge.ts +42 -1
- package/src/upgrade/upgrade.test.ts +76 -2
- package/src/upgrader-assess.test.ts +1 -0
- package/src/upgrader-job.test.ts +1 -0
- package/src/upgrader-setup.test.ts +1 -0
- package/src/upgrader-setup.ts +9 -2
- package/src/wizards/gcp-cost.ts +3 -3
- package/src/wizards/gcp-pulumi.ts +7 -0
- package/src/wizards/gcp.ts +37 -0
- package/stacks/aws/index.ts +8 -0
- package/stacks/azure/index.ts +9 -0
- package/stacks/gcp/index.ts +13 -0
- package/stacks/gcp-firebase/index.ts +13 -0
package/dist/agent-db.js
CHANGED
|
@@ -382,6 +382,18 @@ function prefixIssues(path, issues) {
|
|
|
382
382
|
function unwrapMessage(message) {
|
|
383
383
|
return typeof message === "string" ? message : message?.message;
|
|
384
384
|
}
|
|
385
|
+
function sizeCaps(defChecks) {
|
|
386
|
+
const caps = [];
|
|
387
|
+
for (const ch of defChecks ?? []) {
|
|
388
|
+
const d = ch._zod.def;
|
|
389
|
+
if (!/_(length|size)$|_equals$/.test(d.check))
|
|
390
|
+
break;
|
|
391
|
+
const max = d.maximum ?? d.length ?? d.size;
|
|
392
|
+
if (max >= 0)
|
|
393
|
+
caps.push([max, ch]);
|
|
394
|
+
}
|
|
395
|
+
return caps;
|
|
396
|
+
}
|
|
385
397
|
function attachSchema(issues, start, inst) {
|
|
386
398
|
var _a;
|
|
387
399
|
for (let i = start;i < issues.length; i++) {
|
|
@@ -1379,7 +1391,7 @@ ${content.join(`
|
|
|
1379
1391
|
var version = {
|
|
1380
1392
|
major: 4,
|
|
1381
1393
|
minor: 6,
|
|
1382
|
-
patch:
|
|
1394
|
+
patch: 7
|
|
1383
1395
|
};
|
|
1384
1396
|
|
|
1385
1397
|
// ../../node_modules/zod/v4/core/schemas.js
|
|
@@ -1931,6 +1943,29 @@ var $ZodNever = /* @__PURE__ */ $constructor("$ZodNever", (inst, def) => {
|
|
|
1931
1943
|
return payload;
|
|
1932
1944
|
};
|
|
1933
1945
|
});
|
|
1946
|
+
function capSize(inst, size) {
|
|
1947
|
+
const caps = sizeCaps(inst._zod.def.checks);
|
|
1948
|
+
if (!caps.length)
|
|
1949
|
+
return;
|
|
1950
|
+
const cap = Math.min(...caps.map((c) => c[0]));
|
|
1951
|
+
const parse = inst._zod.parse;
|
|
1952
|
+
inst._zod.parse = (payload, ctx) => {
|
|
1953
|
+
const n = size(payload.value);
|
|
1954
|
+
if (n > cap && !ctx?.skipChecks && ctx?.direction !== "backward") {
|
|
1955
|
+
for (const [max, ch] of sizeCaps(inst._zod.def.checks)) {
|
|
1956
|
+
if (n > max && ch._zod.def.when(payload)) {
|
|
1957
|
+
const start = payload.issues.length;
|
|
1958
|
+
ch._zod.check(payload);
|
|
1959
|
+
payload.issues[start].continue = false;
|
|
1960
|
+
attachSchema(payload.issues, start, inst);
|
|
1961
|
+
return payload;
|
|
1962
|
+
}
|
|
1963
|
+
}
|
|
1964
|
+
}
|
|
1965
|
+
return parse(payload, ctx);
|
|
1966
|
+
};
|
|
1967
|
+
}
|
|
1968
|
+
var arraySize = (input) => Array.isArray(input) ? input.length : -1;
|
|
1934
1969
|
function handleArrayResult(result, final, index) {
|
|
1935
1970
|
if (result.issues.length) {
|
|
1936
1971
|
final.issues.push(...prefixIssues(index, result.issues));
|
|
@@ -1974,6 +2009,7 @@ var $ZodArray = /* @__PURE__ */ $constructor("$ZodArray", (inst, def) => {
|
|
|
1974
2009
|
}
|
|
1975
2010
|
return payload;
|
|
1976
2011
|
};
|
|
2012
|
+
capSize(inst, arraySize);
|
|
1977
2013
|
});
|
|
1978
2014
|
function handlePropertyResult(result, final, key, input, optin, optout) {
|
|
1979
2015
|
const isPresent = key in input;
|
|
@@ -6921,7 +6957,7 @@ var PLATFORM_UPDATE_STALE_REASON = "The upgrader stopped before it finished (its
|
|
|
6921
6957
|
var PLATFORM_UPDATE_EVENT_MAX = 4000;
|
|
6922
6958
|
var SEMVER = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/;
|
|
6923
6959
|
var releaseVersionSchema = string2().regex(SEMVER, "expected a release version like 0.11.0 (no leading v)");
|
|
6924
|
-
var UPDATE_POLICY_MODES = ["
|
|
6960
|
+
var UPDATE_POLICY_MODES = ["notify", "auto"];
|
|
6925
6961
|
var UPDATE_POLICY_CHANNELS = ["stable", "rc", "beta", "alpha"];
|
|
6926
6962
|
var WALL_CLOCK = /^([01]\d|2[0-3]):[0-5]\d$/;
|
|
6927
6963
|
function isKnownTimeZone(tz) {
|
|
@@ -6937,6 +6973,7 @@ var updatePolicySchema = object({
|
|
|
6937
6973
|
autoSecurity: boolean2(),
|
|
6938
6974
|
autoPatch: boolean2(),
|
|
6939
6975
|
autoMinor: boolean2(),
|
|
6976
|
+
autoConverge: boolean2(),
|
|
6940
6977
|
channel: _enum(UPDATE_POLICY_CHANNELS),
|
|
6941
6978
|
windowStart: string2().regex(WALL_CLOCK, "expected HH:MM").nullable(),
|
|
6942
6979
|
windowEnd: string2().regex(WALL_CLOCK, "expected HH:MM").nullable(),
|
|
@@ -7079,6 +7116,119 @@ var counters = new Map;
|
|
|
7079
7116
|
var NAV_FUNCTIONAL_CSS = ".caelo-nav-menu .caelo-nav-toggle{display:none;background:none;border:0;cursor:pointer;padding:0.5rem;color:inherit;font:inherit}" + ".caelo-nav-menu .caelo-nav-toggle .caelo-nav-bar{display:block;width:1.25em;height:2px;background:currentColor;margin:0.25em 0}" + "@media (max-width: 720px){" + ".caelo-nav-menu .caelo-nav-toggle{display:inline-block}" + ".caelo-nav-menu > ul{display:none}" + '.caelo-nav-menu[data-nav-open="true"] > ul{display:block}' + "}";
|
|
7080
7117
|
var NAV_TOGGLE_JS = "(function(){" + "document.querySelectorAll('.caelo-nav-menu').forEach(function(nav){" + "var btn=nav.querySelector('.caelo-nav-toggle');if(!btn)return;" + "btn.addEventListener('click',function(){" + "var open=nav.getAttribute('data-nav-open')==='true';" + "nav.setAttribute('data-nav-open',String(!open));" + "btn.setAttribute('aria-expanded',String(!open));" + "});" + "nav.addEventListener('keydown',function(e){" + "if(e.key==='Escape'&&nav.getAttribute('data-nav-open')==='true'){" + "nav.setAttribute('data-nav-open','false');" + "btn.setAttribute('aria-expanded','false');btn.focus();" + "}});" + "});" + "})();";
|
|
7081
7118
|
|
|
7119
|
+
// ../shared/src/media.ts
|
|
7120
|
+
var MEDIA_ALLOWED_MIMES = [
|
|
7121
|
+
"image/jpeg",
|
|
7122
|
+
"image/png",
|
|
7123
|
+
"image/webp",
|
|
7124
|
+
"image/avif",
|
|
7125
|
+
"image/gif",
|
|
7126
|
+
"image/svg+xml",
|
|
7127
|
+
"image/x-icon",
|
|
7128
|
+
"application/pdf",
|
|
7129
|
+
"video/mp4",
|
|
7130
|
+
"font/woff2",
|
|
7131
|
+
"font/woff",
|
|
7132
|
+
"font/ttf",
|
|
7133
|
+
"font/otf"
|
|
7134
|
+
];
|
|
7135
|
+
var MEDIA_SIZE_CAPS = {
|
|
7136
|
+
"image/jpeg": 10 * 1024 * 1024,
|
|
7137
|
+
"image/png": 10 * 1024 * 1024,
|
|
7138
|
+
"image/webp": 10 * 1024 * 1024,
|
|
7139
|
+
"image/avif": 10 * 1024 * 1024,
|
|
7140
|
+
"image/gif": 8 * 1024 * 1024,
|
|
7141
|
+
"image/svg+xml": 1 * 1024 * 1024,
|
|
7142
|
+
"image/x-icon": 1 * 1024 * 1024,
|
|
7143
|
+
"application/pdf": 20 * 1024 * 1024,
|
|
7144
|
+
"video/mp4": 50 * 1024 * 1024,
|
|
7145
|
+
"font/woff2": 5 * 1024 * 1024,
|
|
7146
|
+
"font/woff": 5 * 1024 * 1024,
|
|
7147
|
+
"font/ttf": 5 * 1024 * 1024,
|
|
7148
|
+
"font/otf": 5 * 1024 * 1024
|
|
7149
|
+
};
|
|
7150
|
+
var MEDIA_HARD_LIMIT_BYTES = 50 * 1024 * 1024;
|
|
7151
|
+
var MEDIA_URL_PREFIX = "/_caelo/media";
|
|
7152
|
+
var RASTER_IMAGE_MIMES = new Set([
|
|
7153
|
+
"image/jpeg",
|
|
7154
|
+
"image/png",
|
|
7155
|
+
"image/webp",
|
|
7156
|
+
"image/avif",
|
|
7157
|
+
"image/gif"
|
|
7158
|
+
]);
|
|
7159
|
+
var mediaUrlPattern = new RegExp(`${MEDIA_URL_PREFIX}/([a-z0-9][a-z0-9-]{0,63})(?:/([a-z][a-z0-9-]{0,63}))?`, "g");
|
|
7160
|
+
var sha256Schema = string2().regex(/^[0-9a-f]{64}$/, "must be hex sha256");
|
|
7161
|
+
var mediaVisibilitySchema = _enum(["library", "reference"]);
|
|
7162
|
+
var mediaUploadInputSchema = object({
|
|
7163
|
+
sha256: sha256Schema,
|
|
7164
|
+
originalName: string2().min(1).max(512),
|
|
7165
|
+
name: string2().max(200).optional(),
|
|
7166
|
+
mime: _enum(MEDIA_ALLOWED_MIMES),
|
|
7167
|
+
sizeBytes: number2().int().positive(),
|
|
7168
|
+
width: number2().int().positive().nullable(),
|
|
7169
|
+
height: number2().int().positive().nullable(),
|
|
7170
|
+
alt: string2().max(2048).default(""),
|
|
7171
|
+
storageKey: string2().min(1),
|
|
7172
|
+
storageProvider: string2().min(1).max(64).default("local"),
|
|
7173
|
+
sourceKind: _enum(["upload", "ai_generated", "imported", "external"]).optional(),
|
|
7174
|
+
sourceDetail: string2().max(2048).optional(),
|
|
7175
|
+
license: string2().max(200).optional(),
|
|
7176
|
+
visibility: mediaVisibilitySchema.optional(),
|
|
7177
|
+
derivedFromId: string2().uuid().optional(),
|
|
7178
|
+
variants: array(object({
|
|
7179
|
+
variant: string2().min(1).max(64),
|
|
7180
|
+
format: string2().min(1).max(32),
|
|
7181
|
+
width: number2().int().positive().nullable(),
|
|
7182
|
+
height: number2().int().positive().nullable(),
|
|
7183
|
+
sizeBytes: number2().int().positive(),
|
|
7184
|
+
storageKey: string2().min(1)
|
|
7185
|
+
})).min(1)
|
|
7186
|
+
}).strict();
|
|
7187
|
+
var mediaListInputSchema = object({
|
|
7188
|
+
query: string2().max(256).optional(),
|
|
7189
|
+
mime: _enum(MEDIA_ALLOWED_MIMES).optional(),
|
|
7190
|
+
sort: _enum(["recent", "most_used"]).default("recent"),
|
|
7191
|
+
visibility: _enum(["library", "reference", "all"]).default("library"),
|
|
7192
|
+
limit: number2().int().positive().max(200).default(60),
|
|
7193
|
+
offset: number2().int().nonnegative().default(0)
|
|
7194
|
+
}).strict();
|
|
7195
|
+
var mediaUpdateAltInputSchema = object({
|
|
7196
|
+
assetId: string2().uuid(),
|
|
7197
|
+
alt: string2().max(2048)
|
|
7198
|
+
}).strict();
|
|
7199
|
+
var mediaSetSourceInputSchema = object({
|
|
7200
|
+
assetId: string2().uuid(),
|
|
7201
|
+
sourceKind: _enum(["upload", "ai_generated", "imported", "external"]).optional(),
|
|
7202
|
+
sourceDetail: string2().max(2048).optional(),
|
|
7203
|
+
license: string2().max(200).optional()
|
|
7204
|
+
}).strict();
|
|
7205
|
+
var mediaSetVisibilityInputSchema = object({
|
|
7206
|
+
assetId: string2().uuid(),
|
|
7207
|
+
visibility: mediaVisibilitySchema
|
|
7208
|
+
}).strict();
|
|
7209
|
+
var mediaDeleteInputSchema = object({
|
|
7210
|
+
assetId: string2().uuid(),
|
|
7211
|
+
force: boolean2().default(false)
|
|
7212
|
+
}).strict();
|
|
7213
|
+
var mediaRecordUsageInputSchema = object({
|
|
7214
|
+
deltas: record(string2().uuid(), number2().int())
|
|
7215
|
+
}).strict();
|
|
7216
|
+
var mediaSetCdnInputSchema = object({
|
|
7217
|
+
enabled: boolean2(),
|
|
7218
|
+
threshold: number2().int().min(1).max(1e4)
|
|
7219
|
+
}).strict();
|
|
7220
|
+
|
|
7221
|
+
// ../shared/src/link-refs.ts
|
|
7222
|
+
var UUID_SRC = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}";
|
|
7223
|
+
var QUERY_SRC = "[A-Za-z0-9_\\-.~%=&;+/:@!$()*]{1,512}";
|
|
7224
|
+
var ANCHOR_SRC = "[A-Za-z0-9_\\-.~%:]{1,256}";
|
|
7225
|
+
var VARIANT_SRC = "[a-z][a-z0-9-]{0,63}";
|
|
7226
|
+
var ID_END_SRC = "(?![A-Za-z0-9_/\\-])";
|
|
7227
|
+
var PAGE_BODY_SRC = `page/(${UUID_SRC})${ID_END_SRC}(?:\\?(${QUERY_SRC}))?(?:#(${ANCHOR_SRC}))?`;
|
|
7228
|
+
var MEDIA_BODY_SRC = `media/(${UUID_SRC})(?:/(${VARIANT_SRC}))?${ID_END_SRC}`;
|
|
7229
|
+
var PAGE_REF_EXACT = new RegExp(`^caelo:${PAGE_BODY_SRC}$`);
|
|
7230
|
+
var MEDIA_REF_EXACT = new RegExp(`^caelo:${MEDIA_BODY_SRC}$`);
|
|
7231
|
+
|
|
7082
7232
|
// ../../node_modules/mustache/mustache.mjs
|
|
7083
7233
|
/*!
|
|
7084
7234
|
* mustache.js - Logic-less {{mustache}} templates with JavaScript
|
|
@@ -7551,6 +7701,21 @@ var THEME_ASSET_KEY_TO_SLOT = {
|
|
|
7551
7701
|
};
|
|
7552
7702
|
var THEME_ASSET_KEYS = Object.keys(THEME_ASSET_KEY_TO_SLOT);
|
|
7553
7703
|
|
|
7704
|
+
// ../shared/src/template-balance.ts
|
|
7705
|
+
var RAW_TEXT_ELEMENTS = new Set([
|
|
7706
|
+
"script",
|
|
7707
|
+
"style",
|
|
7708
|
+
"textarea",
|
|
7709
|
+
"title",
|
|
7710
|
+
"xmp",
|
|
7711
|
+
"iframe",
|
|
7712
|
+
"noembed",
|
|
7713
|
+
"noframes",
|
|
7714
|
+
"noscript"
|
|
7715
|
+
]);
|
|
7716
|
+
var CODE_ELEMENTS = new Set(["script", "style"]);
|
|
7717
|
+
var FOREIGN_ROOTS = new Set(["svg", "math"]);
|
|
7718
|
+
|
|
7554
7719
|
// ../shared/src/font-assets.ts
|
|
7555
7720
|
var fontRef = object({ id: string2().uuid(), sha256: string2().regex(/^[a-f0-9]{64}$/) }).strict();
|
|
7556
7721
|
var fontLicense = object({
|
|
@@ -7908,6 +8073,8 @@ var SYSTEM_FONT_FAMILIES = new Set([
|
|
|
7908
8073
|
"lucida console",
|
|
7909
8074
|
"lucida sans"
|
|
7910
8075
|
].map((f) => f.toLowerCase()));
|
|
8076
|
+
var UNICODE_RANGE_ITEM = "U\\+[0-9A-F?]{1,6}(?:-[0-9A-F]{1,6})?";
|
|
8077
|
+
var UNICODE_RANGE_RE = new RegExp(`^${UNICODE_RANGE_ITEM}(?:, *${UNICODE_RANGE_ITEM})*$`, "i");
|
|
7911
8078
|
// ../shared/src/genesis.ts
|
|
7912
8079
|
var designBriefSchema = object({
|
|
7913
8080
|
audience: string2().min(1).max(500).optional(),
|
|
@@ -7994,107 +8161,6 @@ var GENERIC_FONT_KEYWORDS = new Set([
|
|
|
7994
8161
|
]);
|
|
7995
8162
|
// ../shared/src/markup-structure.ts
|
|
7996
8163
|
var LEAF_TAGS = new Set(["svg", "math", "script", "style", "noscript", "iframe"]);
|
|
7997
|
-
// ../shared/src/media.ts
|
|
7998
|
-
var MEDIA_ALLOWED_MIMES = [
|
|
7999
|
-
"image/jpeg",
|
|
8000
|
-
"image/png",
|
|
8001
|
-
"image/webp",
|
|
8002
|
-
"image/avif",
|
|
8003
|
-
"image/gif",
|
|
8004
|
-
"image/svg+xml",
|
|
8005
|
-
"image/x-icon",
|
|
8006
|
-
"application/pdf",
|
|
8007
|
-
"video/mp4",
|
|
8008
|
-
"font/woff2",
|
|
8009
|
-
"font/woff",
|
|
8010
|
-
"font/ttf",
|
|
8011
|
-
"font/otf"
|
|
8012
|
-
];
|
|
8013
|
-
var MEDIA_SIZE_CAPS = {
|
|
8014
|
-
"image/jpeg": 10 * 1024 * 1024,
|
|
8015
|
-
"image/png": 10 * 1024 * 1024,
|
|
8016
|
-
"image/webp": 10 * 1024 * 1024,
|
|
8017
|
-
"image/avif": 10 * 1024 * 1024,
|
|
8018
|
-
"image/gif": 8 * 1024 * 1024,
|
|
8019
|
-
"image/svg+xml": 1 * 1024 * 1024,
|
|
8020
|
-
"image/x-icon": 1 * 1024 * 1024,
|
|
8021
|
-
"application/pdf": 20 * 1024 * 1024,
|
|
8022
|
-
"video/mp4": 50 * 1024 * 1024,
|
|
8023
|
-
"font/woff2": 5 * 1024 * 1024,
|
|
8024
|
-
"font/woff": 5 * 1024 * 1024,
|
|
8025
|
-
"font/ttf": 5 * 1024 * 1024,
|
|
8026
|
-
"font/otf": 5 * 1024 * 1024
|
|
8027
|
-
};
|
|
8028
|
-
var MEDIA_HARD_LIMIT_BYTES = 50 * 1024 * 1024;
|
|
8029
|
-
var MEDIA_URL_PREFIX = "/_caelo/media";
|
|
8030
|
-
var RASTER_IMAGE_MIMES = new Set([
|
|
8031
|
-
"image/jpeg",
|
|
8032
|
-
"image/png",
|
|
8033
|
-
"image/webp",
|
|
8034
|
-
"image/avif",
|
|
8035
|
-
"image/gif"
|
|
8036
|
-
]);
|
|
8037
|
-
var mediaUrlPattern = new RegExp(`${MEDIA_URL_PREFIX}/([a-z0-9][a-z0-9-]{0,63})(?:/([a-z][a-z0-9-]{0,63}))?`, "g");
|
|
8038
|
-
var sha256Schema = string2().regex(/^[0-9a-f]{64}$/, "must be hex sha256");
|
|
8039
|
-
var mediaVisibilitySchema = _enum(["library", "reference"]);
|
|
8040
|
-
var mediaUploadInputSchema = object({
|
|
8041
|
-
sha256: sha256Schema,
|
|
8042
|
-
originalName: string2().min(1).max(512),
|
|
8043
|
-
name: string2().max(200).optional(),
|
|
8044
|
-
mime: _enum(MEDIA_ALLOWED_MIMES),
|
|
8045
|
-
sizeBytes: number2().int().positive(),
|
|
8046
|
-
width: number2().int().positive().nullable(),
|
|
8047
|
-
height: number2().int().positive().nullable(),
|
|
8048
|
-
alt: string2().max(2048).default(""),
|
|
8049
|
-
storageKey: string2().min(1),
|
|
8050
|
-
storageProvider: string2().min(1).max(64).default("local"),
|
|
8051
|
-
sourceKind: _enum(["upload", "ai_generated", "imported", "external"]).optional(),
|
|
8052
|
-
sourceDetail: string2().max(2048).optional(),
|
|
8053
|
-
license: string2().max(200).optional(),
|
|
8054
|
-
visibility: mediaVisibilitySchema.optional(),
|
|
8055
|
-
derivedFromId: string2().uuid().optional(),
|
|
8056
|
-
variants: array(object({
|
|
8057
|
-
variant: string2().min(1).max(64),
|
|
8058
|
-
format: string2().min(1).max(32),
|
|
8059
|
-
width: number2().int().positive().nullable(),
|
|
8060
|
-
height: number2().int().positive().nullable(),
|
|
8061
|
-
sizeBytes: number2().int().positive(),
|
|
8062
|
-
storageKey: string2().min(1)
|
|
8063
|
-
})).min(1)
|
|
8064
|
-
}).strict();
|
|
8065
|
-
var mediaListInputSchema = object({
|
|
8066
|
-
query: string2().max(256).optional(),
|
|
8067
|
-
mime: _enum(MEDIA_ALLOWED_MIMES).optional(),
|
|
8068
|
-
sort: _enum(["recent", "most_used"]).default("recent"),
|
|
8069
|
-
visibility: _enum(["library", "reference", "all"]).default("library"),
|
|
8070
|
-
limit: number2().int().positive().max(200).default(60),
|
|
8071
|
-
offset: number2().int().nonnegative().default(0)
|
|
8072
|
-
}).strict();
|
|
8073
|
-
var mediaUpdateAltInputSchema = object({
|
|
8074
|
-
assetId: string2().uuid(),
|
|
8075
|
-
alt: string2().max(2048)
|
|
8076
|
-
}).strict();
|
|
8077
|
-
var mediaSetSourceInputSchema = object({
|
|
8078
|
-
assetId: string2().uuid(),
|
|
8079
|
-
sourceKind: _enum(["upload", "ai_generated", "imported", "external"]).optional(),
|
|
8080
|
-
sourceDetail: string2().max(2048).optional(),
|
|
8081
|
-
license: string2().max(200).optional()
|
|
8082
|
-
}).strict();
|
|
8083
|
-
var mediaSetVisibilityInputSchema = object({
|
|
8084
|
-
assetId: string2().uuid(),
|
|
8085
|
-
visibility: mediaVisibilitySchema
|
|
8086
|
-
}).strict();
|
|
8087
|
-
var mediaDeleteInputSchema = object({
|
|
8088
|
-
assetId: string2().uuid(),
|
|
8089
|
-
force: boolean2().default(false)
|
|
8090
|
-
}).strict();
|
|
8091
|
-
var mediaRecordUsageInputSchema = object({
|
|
8092
|
-
deltas: record(string2().uuid(), number2().int())
|
|
8093
|
-
}).strict();
|
|
8094
|
-
var mediaSetCdnInputSchema = object({
|
|
8095
|
-
enabled: boolean2(),
|
|
8096
|
-
threshold: number2().int().min(1).max(1e4)
|
|
8097
|
-
}).strict();
|
|
8098
8164
|
// ../shared/src/page-log.ts
|
|
8099
8165
|
var pageLogEntryKinds = [
|
|
8100
8166
|
"edited",
|
|
@@ -18018,6 +18084,9 @@ class DatabaseAdapter {
|
|
|
18018
18084
|
return this.#publicRaw;
|
|
18019
18085
|
}
|
|
18020
18086
|
async provisionPluginPublicSchema(opts) {
|
|
18087
|
+
if (!/^[0-9a-f-]{36}$/i.test(opts.pluginId)) {
|
|
18088
|
+
throw new Error(`provisionPluginPublicSchema: pluginId "${opts.pluginId}" is not a UUID`);
|
|
18089
|
+
}
|
|
18021
18090
|
if (!this.#skipVerify)
|
|
18022
18091
|
await this.verifyRoles();
|
|
18023
18092
|
await this.#public.transaction(async (tx) => {
|
|
@@ -18027,12 +18096,15 @@ class DatabaseAdapter {
|
|
|
18027
18096
|
});
|
|
18028
18097
|
}
|
|
18029
18098
|
async provisionPluginAdminSchema(opts) {
|
|
18099
|
+
if (!/^[0-9a-f-]{36}$/i.test(opts.pluginId)) {
|
|
18100
|
+
throw new Error(`provisionPluginAdminSchema: pluginId "${opts.pluginId}" is not a UUID`);
|
|
18101
|
+
}
|
|
18030
18102
|
const admin = this.#adminDb("provisionPluginAdminSchema");
|
|
18031
18103
|
if (!this.#skipVerify)
|
|
18032
18104
|
await this.verifyRoles();
|
|
18033
18105
|
await admin.transaction(async (tx) => {
|
|
18034
18106
|
await tx.execute(sql.raw("SELECT set_config('caelo.actor_kind', 'system', true)"));
|
|
18035
|
-
await tx.execute(sql
|
|
18107
|
+
await tx.execute(sql`SELECT set_config('caelo.plugin_id', ${opts.pluginId}, true)`);
|
|
18036
18108
|
await tx.execute(sql.raw(opts.sql));
|
|
18037
18109
|
});
|
|
18038
18110
|
}
|
|
@@ -18067,7 +18139,18 @@ class DatabaseAdapter {
|
|
|
18067
18139
|
}
|
|
18068
18140
|
}
|
|
18069
18141
|
// ../query-api/src/audit.ts
|
|
18070
|
-
var SENSITIVE_KEYS = new Set([
|
|
18142
|
+
var SENSITIVE_KEYS = new Set([
|
|
18143
|
+
"password",
|
|
18144
|
+
"newPassword",
|
|
18145
|
+
"currentPassword",
|
|
18146
|
+
"token",
|
|
18147
|
+
"csrfToken",
|
|
18148
|
+
"passwordHash",
|
|
18149
|
+
"secret",
|
|
18150
|
+
"apiKey",
|
|
18151
|
+
"clientSecret"
|
|
18152
|
+
]);
|
|
18153
|
+
var SENSITIVE_KEY_RE = /pass(word|wd|phrase)?|secret|token|api[-_]?key|credential|private[-_]?key/i;
|
|
18071
18154
|
function redact2(value) {
|
|
18072
18155
|
if (value === null || value === undefined)
|
|
18073
18156
|
return value;
|
|
@@ -18076,7 +18159,9 @@ function redact2(value) {
|
|
|
18076
18159
|
if (typeof value === "object") {
|
|
18077
18160
|
const out = {};
|
|
18078
18161
|
for (const [k, v] of Object.entries(value)) {
|
|
18079
|
-
|
|
18162
|
+
if (k === "__proto__" || k === "constructor" || k === "prototype")
|
|
18163
|
+
continue;
|
|
18164
|
+
out[k] = SENSITIVE_KEYS.has(k) || SENSITIVE_KEY_RE.test(k) ? "<redacted>" : redact2(v);
|
|
18080
18165
|
}
|
|
18081
18166
|
return out;
|
|
18082
18167
|
}
|
|
@@ -18212,11 +18297,12 @@ class OperationRegistry {
|
|
|
18212
18297
|
}
|
|
18213
18298
|
// ../platform-updater/src/ops.ts
|
|
18214
18299
|
var policySchema = object({
|
|
18215
|
-
mode: _enum(
|
|
18300
|
+
mode: _enum(UPDATE_POLICY_MODES),
|
|
18216
18301
|
autoSecurity: boolean2(),
|
|
18217
18302
|
autoPatch: boolean2(),
|
|
18218
18303
|
autoMinor: boolean2(),
|
|
18219
|
-
|
|
18304
|
+
autoConverge: boolean2(),
|
|
18305
|
+
channel: _enum(UPDATE_POLICY_CHANNELS),
|
|
18220
18306
|
windowStart: string2().nullable(),
|
|
18221
18307
|
windowEnd: string2().nullable(),
|
|
18222
18308
|
windowTimezone: string2(),
|
|
@@ -18285,7 +18371,7 @@ var jobClaimOp = defineOperation({
|
|
|
18285
18371
|
if (!row)
|
|
18286
18372
|
return ok({ recovered: stale.map((s) => s.id), claimed: null });
|
|
18287
18373
|
const policies = await tx.execute(sql`
|
|
18288
|
-
SELECT mode, auto_security, auto_patch, auto_minor, channel,
|
|
18374
|
+
SELECT mode, auto_security, auto_patch, auto_minor, auto_converge, channel,
|
|
18289
18375
|
to_char(window_start, 'HH24:MI') AS window_start,
|
|
18290
18376
|
to_char(window_end, 'HH24:MI') AS window_end,
|
|
18291
18377
|
window_timezone, soak_hours, security_soak_hours, paused, paused_reason,
|
|
@@ -18308,6 +18394,7 @@ var jobClaimOp = defineOperation({
|
|
|
18308
18394
|
autoSecurity: p.auto_security,
|
|
18309
18395
|
autoPatch: p.auto_patch,
|
|
18310
18396
|
autoMinor: p.auto_minor,
|
|
18397
|
+
autoConverge: p.auto_converge,
|
|
18311
18398
|
channel: p.channel,
|
|
18312
18399
|
windowStart: p.window_start,
|
|
18313
18400
|
windowEnd: p.window_end,
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { type GcloudRunner, type Sleep } from "./gcloud-retry.js";
|
|
2
|
+
import type { GcpProvider } from "./stack-contract.js";
|
|
3
|
+
/** Where the admin image ships the task's entry point. */
|
|
4
|
+
export declare const AUDIT_TASK_SCRIPT = "/app/packages/admin-core/src/quality/audit-task.ts";
|
|
5
|
+
/** How many audit tasks run at once by default: 5 pages x 3 runs. */
|
|
6
|
+
export declare const AUDIT_PARALLELISM_DEFAULT = 15;
|
|
7
|
+
/**
|
|
8
|
+
* Roles the audit job's identity must never hold anywhere. Prefix matches
|
|
9
|
+
* (`roles/secretmanager.` = every Secret Manager role).
|
|
10
|
+
*/
|
|
11
|
+
export declare const AUDIT_FORBIDDEN_ROLES: readonly ["roles/owner", "roles/editor", "roles/run.", "roles/iam.", "roles/secretmanager.", "roles/cloudsql.", "roles/compute.", "roles/resourcemanager.", "roles/storage.admin", "roles/storage.objectAdmin", "roles/storage.objectUser"];
|
|
12
|
+
/** Delete results after a day: the admin reads them within minutes. */
|
|
13
|
+
export declare const AUDIT_RESULTS_LIFECYCLE: {
|
|
14
|
+
rule: {
|
|
15
|
+
action: {
|
|
16
|
+
type: string;
|
|
17
|
+
};
|
|
18
|
+
condition: {
|
|
19
|
+
age: number;
|
|
20
|
+
};
|
|
21
|
+
}[];
|
|
22
|
+
};
|
|
23
|
+
export interface AuditJobTarget {
|
|
24
|
+
readonly provider: GcpProvider;
|
|
25
|
+
readonly projectId: string;
|
|
26
|
+
readonly region: string;
|
|
27
|
+
/** Pulumi stack name (`production`). */
|
|
28
|
+
readonly env: string;
|
|
29
|
+
/** The admin image the job runs, digest-pinned (`…/admin@sha256:…`). */
|
|
30
|
+
readonly adminImageRef: string;
|
|
31
|
+
/**
|
|
32
|
+
* Tasks at once (`auditParallelism`, 1–15). Absent on converge: an
|
|
33
|
+
* existing job keeps the value it has, so an operator's choice survives
|
|
34
|
+
* `upgrade`; a job the converge creates gets
|
|
35
|
+
* {@link AUDIT_PARALLELISM_DEFAULT}, as a fresh install's does.
|
|
36
|
+
*/
|
|
37
|
+
readonly parallelism?: number;
|
|
38
|
+
}
|
|
39
|
+
export type AuditJobResult = {
|
|
40
|
+
readonly ok: true;
|
|
41
|
+
readonly done: string[];
|
|
42
|
+
} | {
|
|
43
|
+
readonly ok: false;
|
|
44
|
+
readonly done: string[];
|
|
45
|
+
readonly error: string;
|
|
46
|
+
};
|
|
47
|
+
/** Ensure the audit job and everything it needs. Never throws for a gcloud failure. */
|
|
48
|
+
export declare function ensureAuditJob(target: AuditJobTarget, deps?: {
|
|
49
|
+
run?: GcloudRunner;
|
|
50
|
+
sleep?: Sleep;
|
|
51
|
+
}): Promise<AuditJobResult>;
|
|
52
|
+
/**
|
|
53
|
+
* {@link ensureAuditJob}'s image: the deployed admin's, so the job runs the
|
|
54
|
+
* code the admin runs.
|
|
55
|
+
*/
|
|
56
|
+
export declare function resolveAdminImage(opts: {
|
|
57
|
+
readonly projectId: string;
|
|
58
|
+
readonly region: string;
|
|
59
|
+
readonly env: string;
|
|
60
|
+
}, deps?: {
|
|
61
|
+
run?: GcloudRunner;
|
|
62
|
+
}): Promise<{
|
|
63
|
+
ok: true;
|
|
64
|
+
imageRef: string;
|
|
65
|
+
} | {
|
|
66
|
+
ok: false;
|
|
67
|
+
error: string;
|
|
68
|
+
}>;
|
|
69
|
+
//# sourceMappingURL=audit-job-setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-job-setup.d.ts","sourceRoot":"","sources":["../src/audit-job-setup.ts"],"names":[],"mappings":"AAgDA,OAAO,EAAE,KAAK,YAAY,EAA2B,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAS3F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,0DAA0D;AAC1D,eAAO,MAAM,iBAAiB,uDAAuD,CAAC;AAEtF,qEAAqE;AACrE,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAS5C;;;GAGG;AACH,eAAO,MAAM,qBAAqB,6OAYxB,CAAC;AAEX,uEAAuE;AACvE,eAAO,MAAM,uBAAuB;;;;;;;;;CAEnC,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAC9C;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5E,uFAAuF;AACvF,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,EACtB,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,YAAY,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAO,GAC/C,OAAO,CAAC,cAAc,CAAC,CA6NzB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACnF,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,YAAY,CAAA;CAAO,GAChC,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAQxE"}
|