@caelo-cms/provisioning 0.10.64 → 0.10.65

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.
Files changed (2) hide show
  1. package/dist/agent-db.js +66 -50
  2. package/package.json +2 -2
package/dist/agent-db.js CHANGED
@@ -7049,6 +7049,55 @@ var bugIntakeErrorResponse = object({
7049
7049
  retryable: boolean2()
7050
7050
  }).strict();
7051
7051
  var encoder = new TextEncoder;
7052
+ // ../shared/src/seo.ts
7053
+ var CHANGEFREQ_VALUES = [
7054
+ "always",
7055
+ "hourly",
7056
+ "daily",
7057
+ "weekly",
7058
+ "monthly",
7059
+ "yearly",
7060
+ "never"
7061
+ ];
7062
+ var SEO_DESCRIPTION_HARD_MAX = 320;
7063
+ var SEO_CANONICAL_MAX = 2048;
7064
+ var seoSetInputSchema = object({
7065
+ pageId: string2().uuid(),
7066
+ metaDescription: string2().max(SEO_DESCRIPTION_HARD_MAX).optional(),
7067
+ ogImageAssetId: string2().uuid().nullable().optional(),
7068
+ canonicalUrl: string2().max(SEO_CANONICAL_MAX).nullable().optional(),
7069
+ noindex: boolean2().optional(),
7070
+ changefreq: _enum(CHANGEFREQ_VALUES).optional(),
7071
+ priority: number2().min(0).max(1).optional()
7072
+ }).strict();
7073
+ var seoAutofillInputSchema = object({
7074
+ pageId: string2().uuid(),
7075
+ metaDescription: string2().trim().min(1).max(SEO_DESCRIPTION_HARD_MAX),
7076
+ ogImageAssetId: string2().uuid().nullable().optional()
7077
+ }).strict();
7078
+ var seoOptimizeInputSchema = object({
7079
+ pageId: string2().uuid(),
7080
+ metaDescription: string2().min(1).max(SEO_DESCRIPTION_HARD_MAX),
7081
+ ogImageAssetId: string2().uuid().nullable().optional(),
7082
+ context: string2().max(4000).optional()
7083
+ }).strict();
7084
+ var organizationJsonSchema = object({
7085
+ name: string2().max(256).optional(),
7086
+ url: string2().max(2048).optional(),
7087
+ logo: string2().max(2048).optional(),
7088
+ sameAs: array(string2().max(2048)).max(20).optional()
7089
+ }).strict();
7090
+ var siteDefaultsSetSeoInputSchema = object({
7091
+ siteBaseUrl: string2().min(1).max(2048).url("siteBaseUrl must be an absolute URL (https://example.com)"),
7092
+ sitemapEnabled: boolean2(),
7093
+ organizationJson: organizationJsonSchema.default({})
7094
+ }).strict();
7095
+ var siteSeoProposalInputSchema = object({
7096
+ siteBaseUrl: string2().min(1).max(2048).optional(),
7097
+ sitemapEnabled: boolean2().optional(),
7098
+ organizationJson: organizationJsonSchema.optional()
7099
+ }).strict().refine((v) => v.siteBaseUrl !== undefined || v.sitemapEnabled !== undefined || v.organizationJson !== undefined, "pass at least one of `siteBaseUrl`, `sitemapEnabled`, `organizationJson`");
7100
+
7052
7101
  // ../shared/src/build-page.ts
7053
7102
  var contentValuesSchema2 = record(string2(), unknown());
7054
7103
  var buildPageContentSchema = discriminatedUnion("source", [
@@ -7072,6 +7121,7 @@ var buildPageContentSchema = discriminatedUnion("source", [
7072
7121
  ]);
7073
7122
  var buildPageModuleSchema = object({
7074
7123
  blockName: slugSchema.optional(),
7124
+ position: positionInputSchema.optional(),
7075
7125
  ref: string2().regex(/^[a-z][a-z0-9_-]{0,31}$/, "ref must be a short lowercase handle").optional(),
7076
7126
  moduleId: union([
7077
7127
  string2().uuid('moduleId must be a UUID from ## Modules \u2014 to re-place a module minted earlier in THIS call, pass {"$ref": "<its ref>"} instead'),
@@ -7088,6 +7138,12 @@ var buildPageModuleSchema = object({
7088
7138
  bindThemeLiterals: boolean2().optional(),
7089
7139
  content: buildPageContentSchema.optional()
7090
7140
  }).strict().superRefine((entry, ctx) => {
7141
+ if (entry.blockName === undefined && entry.position !== undefined) {
7142
+ ctx.addIssue({
7143
+ code: ZodIssueCode.custom,
7144
+ message: "`position` places an entry inside its block, but this entry has no `blockName` (a DETACHED, " + "nested-only module is not placed). Drop `position`, or pass `blockName` to place it."
7145
+ });
7146
+ }
7091
7147
  if (entry.blockName === undefined && entry.ref === undefined) {
7092
7148
  ctx.addIssue({
7093
7149
  code: ZodIssueCode.custom,
@@ -7111,10 +7167,17 @@ var buildPageTargetSchema = object({
7111
7167
  templateId: string2().uuid().optional(),
7112
7168
  status: pageStatusSchema.optional(),
7113
7169
  parentPageId: string2().uuid().optional(),
7114
- importPageId: string2().uuid().optional()
7170
+ importPageId: string2().uuid().optional(),
7171
+ metaDescription: string2().trim().min(1).max(SEO_DESCRIPTION_HARD_MAX).optional()
7115
7172
  }).strict().superRefine((page, ctx) => {
7116
7173
  const createKeys = ["slug", "title", "name", "templateId", "status", "parentPageId"].filter((k) => page[k] !== undefined);
7117
7174
  if (page.pageId !== undefined) {
7175
+ if (page.metaDescription !== undefined) {
7176
+ ctx.addIssue({
7177
+ code: ZodIssueCode.custom,
7178
+ message: "page.metaDescription is written only for a page this call CREATES \u2014 drop it with pageId; an existing page without a description gets one via autofill_page_seo."
7179
+ });
7180
+ }
7118
7181
  if (createKeys.length > 0) {
7119
7182
  ctx.addIssue({
7120
7183
  code: ZodIssueCode.custom,
@@ -8329,54 +8392,6 @@ function err(error) {
8329
8392
  function isErr(result) {
8330
8393
  return !result.ok;
8331
8394
  }
8332
- // ../shared/src/seo.ts
8333
- var CHANGEFREQ_VALUES = [
8334
- "always",
8335
- "hourly",
8336
- "daily",
8337
- "weekly",
8338
- "monthly",
8339
- "yearly",
8340
- "never"
8341
- ];
8342
- var SEO_DESCRIPTION_HARD_MAX = 320;
8343
- var SEO_CANONICAL_MAX = 2048;
8344
- var seoSetInputSchema = object({
8345
- pageId: string2().uuid(),
8346
- metaDescription: string2().max(SEO_DESCRIPTION_HARD_MAX).optional(),
8347
- ogImageAssetId: string2().uuid().nullable().optional(),
8348
- canonicalUrl: string2().max(SEO_CANONICAL_MAX).nullable().optional(),
8349
- noindex: boolean2().optional(),
8350
- changefreq: _enum(CHANGEFREQ_VALUES).optional(),
8351
- priority: number2().min(0).max(1).optional()
8352
- }).strict();
8353
- var seoAutofillInputSchema = object({
8354
- pageId: string2().uuid(),
8355
- metaDescription: string2().trim().min(1).max(SEO_DESCRIPTION_HARD_MAX),
8356
- ogImageAssetId: string2().uuid().nullable().optional()
8357
- }).strict();
8358
- var seoOptimizeInputSchema = object({
8359
- pageId: string2().uuid(),
8360
- metaDescription: string2().min(1).max(SEO_DESCRIPTION_HARD_MAX),
8361
- ogImageAssetId: string2().uuid().nullable().optional(),
8362
- context: string2().max(4000).optional()
8363
- }).strict();
8364
- var organizationJsonSchema = object({
8365
- name: string2().max(256).optional(),
8366
- url: string2().max(2048).optional(),
8367
- logo: string2().max(2048).optional(),
8368
- sameAs: array(string2().max(2048)).max(20).optional()
8369
- }).strict();
8370
- var siteDefaultsSetSeoInputSchema = object({
8371
- siteBaseUrl: string2().min(1).max(2048).url("siteBaseUrl must be an absolute URL (https://example.com)"),
8372
- sitemapEnabled: boolean2(),
8373
- organizationJson: organizationJsonSchema.default({})
8374
- }).strict();
8375
- var siteSeoProposalInputSchema = object({
8376
- siteBaseUrl: string2().min(1).max(2048).optional(),
8377
- sitemapEnabled: boolean2().optional(),
8378
- organizationJson: organizationJsonSchema.optional()
8379
- }).strict().refine((v) => v.siteBaseUrl !== undefined || v.sitemapEnabled !== undefined || v.organizationJson !== undefined, "pass at least one of `siteBaseUrl`, `sitemapEnabled`, `organizationJson`");
8380
8395
  // ../shared/src/skills.ts
8381
8396
  var skillAutoEngagementHints = object({
8382
8397
  keywords: array(string2().min(1).max(80)).default([]),
@@ -18190,8 +18205,9 @@ class DatabaseAdapter {
18190
18205
  return err(branchNotFound(op.name, denied));
18191
18206
  }
18192
18207
  const out = await op.handler(ctx, validatedInput, tx);
18193
- if (op.database === "cms_admin")
18208
+ if (out.ok && op.database === "cms_admin") {
18194
18209
  publishAfterCommit = await this.#projectionDirty(tx);
18210
+ }
18195
18211
  return out;
18196
18212
  });
18197
18213
  } catch (thrown) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@caelo-cms/provisioning",
3
- "version": "0.10.64",
3
+ "version": "0.10.65",
4
4
  "private": false,
5
5
  "license": "MPL-2.0",
6
6
  "description": "Pulumi-driven provisioning for Caelo CMS — `bunx @caelo-cms/provisioning --provider <self-hosted|gcp|aws|azure>` brings up a TLS-served install with Postgres + storage + secrets manager + the admin + the API gateway.",
@@ -40,7 +40,7 @@
40
40
  "prepublishOnly": "tsc -b --force && bun build ../platform-updater/src/agent-db.ts --target=bun --outfile=dist/agent-db.js && tsc --project stacks/gcp/tsconfig.json && tsc --project stacks/gcp-firebase/tsconfig.json"
41
41
  },
42
42
  "dependencies": {
43
- "@caelo-cms/shared": "^0.10.64",
43
+ "@caelo-cms/shared": "^0.10.65",
44
44
  "@clack/prompts": "1.8.1",
45
45
  "@pulumi/command": "^1",
46
46
  "@pulumi/gcp": "^10",