@getvitops/generator 4.0.0 → 4.1.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":["left","top","width","height","rotate","hFlip","vFlip","IconifyDimenisons","IconifyTransformations","IconifyOptional","parent","body","hidden","IconifyIcon","APIIconAttributes","IconifyAlias","index","ExtendedIconifyIcon","ExtendedIconifyAlias","name","total","version","author","url","license","title","spdx","samples","displayHeight","category","tags","palette","prefix","suffix","info","IconifyInfo","chars","IconifyChars","categories","IconifyCategories","themes","LegacyIconifyThemes","prefixes","Record","suffixes","provider","icons","IconifyIcons","aliases","IconifyAliases","IconifyJSONIconsData","IconifyMetaData","lastModified","not_found","IconifyJSON","metadata"],"sources":["../src/schema.ts","../src/config.ts","../src/tokens.ts","../src/generate.ts","../src/docs.ts","../src/tiers.ts","../../../node_modules/.pnpm/@iconify+types@2.0.0/node_modules/@iconify/types/types.d.ts","../src/icons-sprite.ts","../src/shared.ts","../src/legal/providers.ts","../src/legal/derive.ts","../src/legal/templates/cookies.ca.ts","../src/legal/templates/privacy.ca.ts","../src/legal/templates/terms.ca.ts","../src/legal/templates/index.ts","../src/legal/render.ts","../src/legal/index.ts","../src/index.ts"],"x_google_ignoreList":[6],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":["left","top","width","height","rotate","hFlip","vFlip","IconifyDimenisons","IconifyTransformations","IconifyOptional","parent","body","hidden","IconifyIcon","APIIconAttributes","IconifyAlias","index","ExtendedIconifyIcon","ExtendedIconifyAlias","name","total","version","author","url","license","title","spdx","samples","displayHeight","category","tags","palette","prefix","suffix","info","IconifyInfo","chars","IconifyChars","categories","IconifyCategories","themes","LegacyIconifyThemes","prefixes","Record","suffixes","provider","icons","IconifyIcons","aliases","IconifyAliases","IconifyJSONIconsData","IconifyMetaData","lastModified","not_found","IconifyJSON","metadata"],"sources":["../src/schema.ts","../src/config.ts","../src/tokens.ts","../src/generate.ts","../src/docs.ts","../src/tiers.ts","../../../node_modules/.pnpm/@iconify+types@2.0.0/node_modules/@iconify/types/types.d.ts","../src/icons-sprite.ts","../src/shared.ts","../src/legal/providers.ts","../src/legal/derive.ts","../src/legal/templates/cookies.ca.ts","../src/legal/templates/privacy.ca.ts","../src/legal/templates/terms.ca.ts","../src/legal/templates/index.ts","../src/legal/render.ts","../src/legal/index.ts","../src/index.ts"],"x_google_ignoreList":[6],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -5,6 +5,7 @@ import { fileURLToPath, pathToFileURL } from "node:url";
5
5
  import { createHash } from "node:crypto";
6
6
  import { transform } from "lightningcss";
7
7
  import * as z from "zod/mini";
8
+ import { AD_PLATFORMS, AD_PROVIDER_KEYS } from "@getvitops/utils/ads";
8
9
  import { LIGHTNESS_LADDER, contrastLc, generateOklchPalette, hexToOklch, oklchStringToHex, pickOn, tintedEndpoints } from "@getvitops/utils/color";
9
10
  import { generateIconInclude, nodesToHtml, resolveIcon, t } from "@getvitops/utils";
10
11
  import { getIconData, iconToSVG, replaceIDs } from "@iconify/utils";
@@ -645,6 +646,7 @@ const EnvironmentSchema = z.object({
645
646
  url: desc(z.url(), "Public origin of this environment."),
646
647
  api: desc(z.optional(z.url()), "API origin, when different from `url`."),
647
648
  analytics: desc(z.optional(z.boolean()), "Whether analytics fire in this environment."),
649
+ ads: desc(z.optional(z.boolean()), "Whether `site.ads` pixels fire in this environment. Defaults to `analytics`, then true — a preview deployment sending pageviews is survivable, one firing conversion pixels is not, so this can be turned off on its own."),
648
650
  robots: desc(z.optional(RobotsSchema), "Robots policy (e.g. \"noindex,nofollow\" for dev)."),
649
651
  variant: desc(z.optional(z.string()), "Active `abTesting.variants` key for this environment.")
650
652
  });
@@ -858,6 +860,47 @@ const IndexingSchema = z.object({
858
860
  priorityUrls: desc(z.optional(z.array(z.url())), "The pages whose indexing actually matters. `vitops search notify --check` inspects these and exits non-zero if Google has not indexed one. Kept explicit because URL Inspection is quota-bound (2000/day), so checking every page is neither affordable nor informative.")
859
861
  });
860
862
  /**
863
+ * The ad platforms `vitops ads` can link a site to.
864
+ *
865
+ * A closed enum, mirroring `AD_PROVIDER_KEYS` in `@getvitops/utils/ads` — that
866
+ * module owns what each platform *can do* (whether it verifies a domain, what its
867
+ * tag is, which click ID it stamps), this owns what a config may *say*. Mirrored
868
+ * rather than derived because a `z.enum` needs literals to reach the published JSON
869
+ * Schema; `config.test.ts` asserts the two lists are the same set, so a provider
870
+ * added to one and not the other fails the build rather than silently getting no
871
+ * verification step and no tag.
872
+ */
873
+ const AD_PROVIDERS = [
874
+ "google",
875
+ "meta",
876
+ "linkedin",
877
+ "reddit",
878
+ "tiktok",
879
+ "microsoft",
880
+ "pinterest",
881
+ "snapchat"
882
+ ];
883
+ const AdProviderSchema = z.enum(AD_PROVIDERS);
884
+ /**
885
+ * One ad property this site is linked to.
886
+ *
887
+ * Facts, not prose — the same rule the legal block follows. This records *which*
888
+ * account and *which* tag id, and the platform capability table decides what can be
889
+ * done about them. It is also what finally lets the rest of the toolchain see an ad
890
+ * pixel: the generated cookie notice discloses its cookies, `vitops ads lint`
891
+ * checks its click ID is captured, and the consent gate is handed the cookie names
892
+ * to clear on revoke. A pixel pasted into a template is invisible to all three.
893
+ */
894
+ const AdPropertySchema = z.object({
895
+ accountId: desc(z.optional(z.string()), "The advertising account as the platform shows it — Google Ads customer ID, Meta ad account, LinkedIn partner ID, Reddit advertiser ID. For LinkedIn this is also the Insight Tag id; everywhere else the tag id is `pixelId`."),
896
+ pixelId: desc(z.optional(z.string()), "The tag/pixel ID the browser snippet initialises — Meta pixel, TikTok pixel, Reddit pixel, Microsoft UET tag ID, Pinterest tag ID, Snap pixel, or the Google Ads conversion ID (`AW-…`, which is NOT the customer ID)."),
897
+ conversionLabel: desc(z.optional(z.string()), "Google Ads only: the conversion action label paired with the `AW-…` conversion ID."),
898
+ domain: desc(z.optional(z.string()), "Bare hostname to verify with this platform. Defaults to the host of `domains.canonical` — set it only when the ad account is verified against a different domain."),
899
+ domainVerification: desc(z.optional(z.string()), "The verification token from the platform UI, for the platforms that verify by DNS TXT (Meta, TikTok, Pinterest, Snapchat). `vitops ads setup` prompts for it and writes it here on first run. NOT a secret — it is published in DNS, and the platform fetching it back is the ownership proof, exactly like the IndexNow key. A value containing `=` is used as the whole record, which is the escape hatch if a platform changes its prefix."),
900
+ category: desc(z.optional(z.enum(["marketing", "analytics"])), "Consent category the tag waits on (default `marketing`). An ad pixel is advertising by default; `analytics` is for a site using one purely for its own measurement."),
901
+ enabled: desc(z.optional(z.boolean()), "Set false to keep the property on record without emitting its tag.")
902
+ });
903
+ /**
861
904
  * Which template set the generated legal documents are written against. This is
862
905
  * a closed enum rather than a free string because an unrecognised value would
863
906
  * otherwise silently fall back to the wrong body of law; `validateConfig` rejects
@@ -867,6 +910,20 @@ const IndexingSchema = z.object({
867
910
  const JURISDICTIONS = ["ca"];
868
911
  const JurisdictionSchema = z.enum(JURISDICTIONS);
869
912
  /**
913
+ * The country each template set frames cross-border transfers as *leaving*.
914
+ *
915
+ * A jurisdiction's own country is not a transfer, so this is what filters the
916
+ * disclosure lists — without it, `country: "Canada"` renders the incoherent
917
+ * "outside of Canada, including Canada".
918
+ *
919
+ * It belongs to the **jurisdiction**, not to `organization.address`: a `ca` policy
920
+ * says "outside of Canada" even for a business incorporated elsewhere. (The
921
+ * address drives a different sentence — the terms' governing-law clause, via
922
+ * `governingCountry`.) `satisfies` makes a new jurisdiction unable to forget it,
923
+ * the same guard style as `TEMPLATES`.
924
+ */
925
+ const JURISDICTION_COUNTRIES = { ca: "Canada" };
926
+ /**
870
927
  * A third party that receives personal information. The generator derives the
871
928
  * ones it can see (analytics IDs, Turnstile, the deploy platform); this is for
872
929
  * the rest, which no other part of the config implies.
@@ -874,10 +931,16 @@ const JurisdictionSchema = z.enum(JURISDICTIONS);
874
931
  * Deliberately facts, not prose: the config records *what is true*, the template
875
932
  * owns *how it is said*. That keeps a policy correct when the wording changes.
876
933
  */
934
+ const ProcessorStorageSchema = z.object({
935
+ country: desc(z.string(), "A country or bloc where this provider stores or processes the information, as it should read in a sentence (e.g. \"Canada\", \"the United States\", \"the European Union\"). Naming the jurisdiction the policy is written for is meaningful: it says this information does not leave it."),
936
+ scope: desc(z.optional(z.string()), "Which information is held there, as a noun phrase that reads after \"in the case of\" (e.g. \"account and sign-in information\", \"mailbox contents\"). Omit when this location holds everything the provider receives — a scoped entry claims LESS than an unscoped one, so omitting it is the safe default.")
937
+ });
877
938
  const ProcessorSchema = z.object({
878
939
  name: desc(z.string(), "The provider, as a reader would recognise it (e.g. \"Stripe\")."),
879
940
  purpose: desc(z.string(), "Why they receive it, as a noun phrase that reads after \"for\" (e.g. \"payment processing\")."),
880
- country: desc(z.optional(z.string()), "Where they process it, as it should read in a sentence (e.g. \"the United States\"). Feeds the cross-border-transfer disclosure."),
941
+ country: desc(z.optional(z.string()), "Shorthand for the common case where one country is both where they store it and whose laws reach it: asserts BOTH `storage: [{ country }]` AND `operatorCountry`. Reads inside a sentence (e.g. \"the United States\"). When the two differ — a Canadian region operated by a US company — state `storage` and `operatorCountry` instead; setting this alongside either is rejected."),
942
+ storage: desc(z.optional(z.array(ProcessorStorageSchema)), "Where the information actually rests. Feeds the \"stored or processed outside of <jurisdiction>\" disclosure and nothing else. Several entries are allowed, each optionally scoped to a category of information — which is what makes a Canadian-region tenant holding identity data in the US expressible."),
943
+ operatorCountry: desc(z.optional(z.string()), "The jurisdiction that can compel this provider to hand the information over — where it is established, or from which it is controlled. Reads after \"the laws of\" (e.g. \"the United States\"); a bloc is acceptable. A SEPARATE fact from `storage`, because privacy law cares about foreign *access*, not only foreign storage: a Canadian-region service run by a US company is `storage: [{ country: \"Canada\" }]` with `operatorCountry: \"the United States\"`."),
881
944
  privacyUrl: z.optional(z.url())
882
945
  });
883
946
  const SiteSectionSchema = z.object({
@@ -942,6 +1005,7 @@ const SiteSectionSchema = z.object({
942
1005
  category: desc(z.optional(z.enum(["marketing", "analytics"])), "Consent category the `_ac` cookie waits on (default `marketing`). It is a 90-day identifier tying a visitor to the ad that brought them, so it is only written once this category is granted — and asking for it is what raises the banner."),
943
1006
  platforms: desc(z.optional(z.array(z.string())), "Informational list of ad platforms in use. Capture recognises every known click-ID parameter regardless.")
944
1007
  })), "Ad-click attribution for conversion tracking."),
1008
+ ads: desc(z.optional(z.partialRecord(AdProviderSchema, AdPropertySchema)), "Ad properties this site is linked to, keyed by platform. Read by `vitops ads setup` (ensure the DNS verification record), `vitops ads tags` (emit the consent-gated pixel), and the generated cookie notice (disclose what each pixel stores). Credentials never live here — the DNS write uses CLOUDFLARE_API_TOKEN from the environment."),
945
1009
  security: desc(z.optional(z.object({ turnstile: z.optional(z.object({ siteKey: desc(z.optional(z.string()), "Cloudflare Turnstile site key (public).") })) })), "Security integrations (bot protection)."),
946
1010
  legal: desc(z.optional(z.object({
947
1011
  jurisdiction: desc(z.optional(JurisdictionSchema), "Which legal template set the generated documents use. Default `ca`."),
@@ -1161,6 +1225,27 @@ function validateConfig(input) {
1161
1225
  bp
1162
1226
  ], `template "${tpl}" is not in site.templates`));
1163
1227
  const privacy = site.legal?.privacyPolicy;
1228
+ /**
1229
+ * `country` is shorthand for BOTH `storage` and `operatorCountry`, so combining it
1230
+ * with either is genuinely ambiguous — is the shorthand narrowing the explicit
1231
+ * fact, or adding to it? Both readings are plausible and they make *contradictory
1232
+ * legal claims*, so this is rejected rather than resolved by a silent rule.
1233
+ *
1234
+ * Checked unconditionally, not gated on `privacy.enabled`: the fact is wrong
1235
+ * either way, and a document turned on later shouldn't surface it for the first
1236
+ * time. Here rather than as a `z.refine` on the schema because parse-time
1237
+ * rejection would make `resolveConfig` throw on the `vitops legal` path, which
1238
+ * has no formatting for a zod issue — `validateConfig` is where every other
1239
+ * cross-field legal requirement already lives, and it prints `path: message`.
1240
+ */
1241
+ for (const [i, p] of (privacy?.processors ?? []).entries()) if (p.country != null && (p.storage != null || p.operatorCountry != null)) errors.push(issue([
1242
+ "site",
1243
+ "legal",
1244
+ "privacyPolicy",
1245
+ "processors",
1246
+ i,
1247
+ "country"
1248
+ ], `processor "${p.name}": \`country\` is shorthand for BOTH \`storage\` and \`operatorCountry\`, so combining it with either makes the narrower claim ambiguous — drop \`country\` and state the two facts, or drop the two and keep the shorthand`));
1164
1249
  if (typeof privacy?.privacyOfficer === "string" && !has(org?.locations, privacy.privacyOfficer)) errors.push(issue([
1165
1250
  "site",
1166
1251
  "legal",
@@ -1195,6 +1280,18 @@ function validateConfig(input) {
1195
1280
  "keyLocation"
1196
1281
  ], "site.seo.indexing.indexNow needs site.domains.canonical to derive the key location — set one, or state keyLocation explicitly"));
1197
1282
  }
1283
+ for (const [provider, entry] of Object.entries(site.ads ?? {})) {
1284
+ if (entry == null) continue;
1285
+ const platform = AD_PLATFORMS[provider];
1286
+ const at = [
1287
+ "site",
1288
+ "ads",
1289
+ provider
1290
+ ];
1291
+ if (entry.domainVerification != null && platform.verification.method === "none") errors.push(issue([...at, "domainVerification"], `${platform.name} has no domain verification — ${platform.verification.reason ?? "nothing verifies a domain there"}. Remove the token; linking is the tag and the account id.`));
1292
+ if (entry.domainVerification != null && entry.domain == null && site.domains?.canonical == null) errors.push(issue([...at, "domain"], `site.ads.${provider}.domainVerification needs a domain to put the record on — set site.domains.canonical, or state site.ads.${provider}.domain explicitly`));
1293
+ if (entry.accountId == null && entry.pixelId == null) errors.push(issue(at, `site.ads.${provider} identifies nothing — set accountId (the advertising account) and/or pixelId (the tag: ${platform.tag.needs} is what its snippet needs)`));
1294
+ }
1198
1295
  if (errors.length) return {
1199
1296
  ok: false,
1200
1297
  data: void 0,
@@ -4511,6 +4608,21 @@ is overwritten by the next build.
4511
4608
  - **\`cookies: []\` is meaningfully different from \`undefined\`.** It *asserts* a provider is
4512
4609
  cookieless (Plausible), which the cookie notice states **positively** rather than omitting.
4513
4610
 
4611
+ - **"Stored in" is not the same fact as "reachable by".** A processor's \`storage\` is where the
4612
+ information rests; \`operatorCountry\` is the jurisdiction that can compel the provider to hand
4613
+ it over. Privacy law turns on foreign **access**, not merely foreign storage, so the two get
4614
+ separate sentences — an Azure tenant in a Canadian region never moves the data and is still
4615
+ subject to US law. \`country\` is shorthand asserting both, and combining it with either is
4616
+ **rejected** rather than resolved by a silent rule: whether it narrows or adds is a
4617
+ contradiction between two legal claims, not a formatting choice.
4618
+
4619
+ A \`storage\` entry may be \`scope\`d to a category, which is what makes a Canadian tenant
4620
+ holding identity data abroad expressible. A country in the policy's own jurisdiction is not a
4621
+ transfer and is filtered out — that is what stopped \`country: "Canada"\` rendering "outside of
4622
+ Canada, including Canada". Only what the config states is asserted: hosts like Cloudflare
4623
+ declare an \`operatorCountry\` and **no** storage, because anycast means the config cannot know
4624
+ which region served a request, and "we don't know" is a fact.
4625
+
4514
4626
  - **Form templates are the PII inventory.** \`site.templates\` entries of type \`form\` are the
4515
4627
  only place the config says what personal information the site actually collects, so the
4516
4628
  disclosed list derives from their fields. \`hidden\` fields and honeypots are **excluded** —
@@ -5063,6 +5175,26 @@ across every pattern. Focus rings are never removed, only restyled.
5063
5175
  //#endregion
5064
5176
  //#region src/legal/providers.ts
5065
5177
  /**
5178
+ * What the config already tells us about third parties that receive personal
5179
+ * information.
5180
+ *
5181
+ * A privacy policy's riskiest sentence is the one naming service providers: if
5182
+ * it says "Plausible" while the site runs Google Analytics, the document is a
5183
+ * compliance defect, not a typo. The site config already records which analytics
5184
+ * ID is set, whether Turnstile is deployed and where the site is hosted — so the
5185
+ * sentence derives from those signals rather than from a hand-maintained string
5186
+ * that drifts the moment someone swaps providers.
5187
+ *
5188
+ * Presence of the key is the signal, matching how `analytics` already works
5189
+ * (provider identity is implied by which ID is set, not by an enum).
5190
+ *
5191
+ * This table is deliberately small and covers only what the schema can imply.
5192
+ * Everything else — payment processors, CRMs, mail senders — is declared by the
5193
+ * consumer in `legal.privacyPolicy.processors`, which flows through the same
5194
+ * pipeline. This is not a directory of the web; it's the set of providers the
5195
+ * toolchain itself can vouch for.
5196
+ */
5197
+ /**
5066
5198
  * The providers the config can imply. Keyed for testability — a test can assert
5067
5199
  * a given config resolves to a given key without matching on prose.
5068
5200
  */
@@ -5116,28 +5248,28 @@ const KNOWN_PROCESSORS = {
5116
5248
  turnstile: {
5117
5249
  name: "Cloudflare Turnstile",
5118
5250
  purpose: "bot protection on forms",
5119
- country: "the United States",
5251
+ operatorCountry: "the United States",
5120
5252
  privacyUrl: "https://www.cloudflare.com/privacypolicy/",
5121
5253
  cookies: ["cf_clearance"]
5122
5254
  },
5123
5255
  cloudflare: {
5124
5256
  name: "Cloudflare",
5125
5257
  purpose: "website hosting and content delivery",
5126
- country: "the United States",
5258
+ operatorCountry: "the United States",
5127
5259
  privacyUrl: "https://www.cloudflare.com/privacypolicy/",
5128
5260
  cookies: []
5129
5261
  },
5130
5262
  vercel: {
5131
5263
  name: "Vercel",
5132
5264
  purpose: "website hosting",
5133
- country: "the United States",
5265
+ operatorCountry: "the United States",
5134
5266
  privacyUrl: "https://vercel.com/legal/privacy-policy",
5135
5267
  cookies: []
5136
5268
  },
5137
5269
  netlify: {
5138
5270
  name: "Netlify",
5139
5271
  purpose: "website hosting",
5140
- country: "the United States",
5272
+ operatorCountry: "the United States",
5141
5273
  privacyUrl: "https://www.netlify.com/privacy/",
5142
5274
  cookies: []
5143
5275
  }
@@ -5178,9 +5310,81 @@ function detectProcessorKeys(cfg) {
5178
5310
  * an explicit declaration is a statement of fact we have no grounds to drop.
5179
5311
  */
5180
5312
  function resolveProcessors(cfg) {
5181
- const detected = detectProcessorKeys(cfg).map((k) => matomoCountry(KNOWN_PROCESSORS[k], cfg.site));
5313
+ const detected = detectProcessorKeys(cfg).map((k) => matomoLocation(KNOWN_PROCESSORS[k], cfg.site));
5182
5314
  const declared = cfg.site.legal?.privacyPolicy?.processors ?? [];
5183
- return [...detected, ...declared];
5315
+ return [
5316
+ ...detected,
5317
+ ...adProcessors(cfg),
5318
+ ...declared
5319
+ ].map(desugarCountry);
5320
+ }
5321
+ /**
5322
+ * The ad platforms `site.ads` links this site to, as processors.
5323
+ *
5324
+ * Derived from `AD_PLATFORMS` rather than written out here, because the cookie
5325
+ * names, the privacy URL and the opt-out are the *same facts* `vitops ads tags`
5326
+ * writes into `data-consent-cookies` — and the one failure that matters is those
5327
+ * two disagreeing. A pixel that sets `_fbp` while the notice omits it is a
5328
+ * compliance defect, and a revoke that clears a cookie the notice never mentioned
5329
+ * is the same defect seen from the other end.
5330
+ *
5331
+ * `enabled: false` keeps a property on record without emitting its tag, so nothing
5332
+ * is set and nothing is disclosed. Everything else with an id is live.
5333
+ */
5334
+ function adProcessors(cfg) {
5335
+ const ads = cfg.site.ads ?? {};
5336
+ return AD_PROVIDER_KEYS.filter((provider) => {
5337
+ const entry = ads[provider];
5338
+ return entry != null && entry.enabled !== false && (entry.pixelId ?? entry.accountId) != null;
5339
+ }).map((provider) => {
5340
+ const platform = AD_PLATFORMS[provider];
5341
+ return {
5342
+ name: platform.name,
5343
+ purpose: "advertising measurement and retargeting",
5344
+ operatorCountry: platform.operatorCountry,
5345
+ privacyUrl: platform.tag.privacyUrl,
5346
+ cookies: platform.tag.cookies,
5347
+ ...platform.tag.optOut ? { optOut: platform.tag.optOut } : {}
5348
+ };
5349
+ });
5350
+ }
5351
+ /**
5352
+ * `country` → both facts it has always asserted.
5353
+ *
5354
+ * The sentence it fed claimed storage *and* legal reach in one breath ("may be
5355
+ * stored or processed in … including X. As a result … access requests from
5356
+ * governments … in those jurisdictions"). So expanding it to storage alone would
5357
+ * silently retract half of a claim consumers have already published. Expanding to
5358
+ * both is also what keeps the rendered output byte-identical for every config that
5359
+ * used the shorthand.
5360
+ *
5361
+ * `country` is left in place — it is public API and `PolicyVars.countries` still
5362
+ * reports it. When the explicit fields are present they win; `validateConfig`
5363
+ * rejects that combination, so it is unreachable through a validated config, but
5364
+ * `resolveProcessors` is exported and needs a defined answer regardless.
5365
+ */
5366
+ function desugarCountry(p) {
5367
+ if (!p.country) return p;
5368
+ return {
5369
+ ...p,
5370
+ storage: p.storage ?? [{ country: p.country }],
5371
+ operatorCountry: p.operatorCountry ?? p.country
5372
+ };
5373
+ }
5374
+ /**
5375
+ * Processors the config discloses but places nowhere.
5376
+ *
5377
+ * Such a processor cannot appear in the transfer disclosure — there is nothing true
5378
+ * to say about it — and today it vanishes from that section in silence, which is the
5379
+ * tidy-looking failure. Names only, and deliberately NOT on `PolicyVars`: that type
5380
+ * is the facts a template renders from, and a document must not editorialise about
5381
+ * its own gaps. The CLI reports these on stderr instead.
5382
+ *
5383
+ * Not a `validateConfig` error either: a bare `{ name, purpose }` validates today,
5384
+ * so rejecting it would make this a breaking change.
5385
+ */
5386
+ function processorsMissingLocation(cfg) {
5387
+ return resolveProcessors(cfg).filter((p) => !p.operatorCountry && !p.storage?.length).map((p) => p.name);
5184
5388
  }
5185
5389
  /**
5186
5390
  * Matomo is the one provider whose location the config actually knows.
@@ -5190,13 +5394,17 @@ function resolveProcessors(cfg) {
5190
5394
  * country. So the cross-border transfer sentence is asserted only for the case we
5191
5395
  * can see. Naming a transfer that isn't happening is the same class of error as
5192
5396
  * omitting one that is — the config records facts, and "we don't know" is a fact.
5397
+ *
5398
+ * This sets `storage`, not `operatorCountry`: Matomo Cloud genuinely holds the data
5399
+ * in the EU. InnoCraft is New Zealand-based, but nothing in the config sees that, so
5400
+ * no operator jurisdiction is asserted — the same rule, applied to the other fact.
5193
5401
  */
5194
- function matomoCountry(processor, site) {
5402
+ function matomoLocation(processor, site) {
5195
5403
  if (processor.name !== "Matomo") return processor;
5196
5404
  const url = site.analytics?.matomo?.url ?? "";
5197
5405
  return /\.matomo\.cloud/i.test(url) ? {
5198
5406
  ...processor,
5199
- country: "the European Union"
5407
+ storage: [{ country: "the European Union" }]
5200
5408
  } : processor;
5201
5409
  }
5202
5410
 
@@ -5399,7 +5607,38 @@ function derivePolicyVars(cfg) {
5399
5607
  ...processors.filter((p) => p.optOut).map((p) => `You may opt out of ${p.name} directly at ${p.optOut}.`)
5400
5608
  ]);
5401
5609
  const optOutOptions = uniq(["You may unsubscribe from any commercial e-mail we send using the \"unsubscribe\" link in that e-mail.", ...cookieOptOutOptions]);
5402
- const countries = list(uniq(processors.map((p) => p.country)));
5610
+ /**
5611
+ * The cross-border disclosure, as two facts rather than one flattened list.
5612
+ *
5613
+ * Order matters here — each step narrows what the next may claim:
5614
+ *
5615
+ * 1. Anything in this jurisdiction is not a transfer at all, so it is filtered
5616
+ * out. Without this, `country: "Canada"` rendered "outside of Canada,
5617
+ * including Canada".
5618
+ * 2. An unscoped storage country is the BROAD claim; a scoped one covering the
5619
+ * same country would only narrow it, so it is dropped as redundant.
5620
+ * 3. An operator country already named as storage adds no fact — "US law reaches
5621
+ * information stored in the US" is a sentence, not information.
5622
+ *
5623
+ * Steps 2 and 3 are what make the rendered output byte-identical for every config
5624
+ * that used `country` (which desugars to both facts).
5625
+ *
5626
+ * No geography is inferred — "France" is not resolved into "the European Union".
5627
+ * Only what the config states is asserted, which is the `matomoLocation` rule.
5628
+ */
5629
+ const jurisdictionCountry = JURISDICTION_COUNTRIES[legal?.jurisdiction ?? "ca"];
5630
+ const norm = (c) => c.trim().toLowerCase().replace(/^the\s+/, "");
5631
+ const foreign = (c) => norm(c) !== norm(jurisdictionCountry);
5632
+ const allStorage = processors.flatMap((p) => p.storage ?? []);
5633
+ const unscoped = uniq(allStorage.filter((s) => !s.scope && foreign(s.country)).map((s) => s.country));
5634
+ const storageCountries = list(unscoped);
5635
+ const named = new Set(unscoped.map(norm));
5636
+ const scopedStorage = [...new Map(allStorage.filter((s) => s.scope && foreign(s.country) && !named.has(norm(s.country))).map((s) => [`${norm(s.country)}|${s.scope}`, {
5637
+ country: s.country,
5638
+ scope: s.scope
5639
+ }])).values()];
5640
+ const operatorCountries = list(uniq(processors.map((p) => p.operatorCountry)).filter((c) => foreign(c) && !named.has(norm(c))));
5641
+ const countries = list(uniq(processors.flatMap((p) => [...(p.storage ?? []).map((s) => s.country), p.operatorCountry])));
5403
5642
  const address = contact?.address ?? org?.address;
5404
5643
  return {
5405
5644
  businessName,
@@ -5426,6 +5665,10 @@ function derivePolicyVars(cfg) {
5426
5665
  purpose: "records the advertisement or campaign you arrived from, so an enquiry can be attributed to it",
5427
5666
  retention: "90 days"
5428
5667
  }] : [],
5668
+ jurisdictionCountry,
5669
+ storageCountries: storageCountries || void 0,
5670
+ scopedStorage,
5671
+ operatorCountries: operatorCountries || void 0,
5429
5672
  countries: countries || void 0,
5430
5673
  consentModel: consent?.enabled ? consent.type ?? "opt-in" : "none",
5431
5674
  cookieCategories: consent?.categories ?? []
@@ -5753,6 +5996,23 @@ ${bullets(v.cookieCategories)}
5753
5996
 
5754
5997
  //#endregion
5755
5998
  //#region src/legal/templates/privacy.ca.ts
5999
+ /**
6000
+ * Privacy policy — Canada (PIPEDA).
6001
+ *
6002
+ * Ported from the pandoc prototype at `packages/core/legal-templates/`. Two
6003
+ * things changed in the port and both are load-bearing:
6004
+ *
6005
+ * 1. `${var}` is now real TypeScript interpolation rather than a pandoc Lua
6006
+ * filter, so an unresolved variable is a compile error. The filter left
6007
+ * unknown keys as the literal text `${key}` — which would ship a live
6008
+ * privacy policy containing `${countries}`.
6009
+ * 2. Lists are built from arrays, not by splicing a string into a fixed bullet.
6010
+ * An empty derived value used to produce a stray `- ; and` bullet.
6011
+ *
6012
+ * The prose is jurisdiction-specific: it names the Office of the Privacy
6013
+ * Commissioner of Canada and frames transfers as "outside of Canada". Do not
6014
+ * reuse it for another jurisdiction — add a sibling template instead.
6015
+ */
5756
6016
  function privacyCa(v) {
5757
6017
  return `# Privacy Policy
5758
6018
  ${updatedLine(v)}
@@ -5854,15 +6114,46 @@ ${bullets(v.processors.map((p) => `${p.name}, for ${p.purpose}${p.privacyUrl ? `
5854
6114
 
5855
6115
  We remain responsible for personal information in the possession of our service providers.`;
5856
6116
  }
5857
- /** Omitted entirely when nothing leaves the country — a false claim otherwise. */
6117
+ /**
6118
+ * Omitted entirely when nothing leaves the country — a false claim otherwise.
6119
+ *
6120
+ * Two clauses, because storage and legal reach are two facts and the OPC's concern
6121
+ * is foreign **access**, not merely foreign storage. A provider can hold data in
6122
+ * Canada and still be compellable abroad (Azure in a Canadian region), and a
6123
+ * provider can hold only one category of data abroad (a Canadian tenant whose
6124
+ * identity data sits in the US). One sentence could state neither.
6125
+ *
6126
+ * The closer is shared: it is true of whichever clauses appear.
6127
+ */
5858
6128
  function transferSection(v) {
5859
- if (!v.countries) return "";
6129
+ const clauses = [storageClause(v), operatorClause(v)].filter(Boolean);
6130
+ if (clauses.length === 0) return "";
5860
6131
  return `
5861
6132
  ### We May Transfer Personal Information to Other Countries
5862
6133
 
5863
- Some or all of the personal information we collect may be stored or processed in jurisdictions outside of Canada, including ${v.countries}. As a result, this information may be subject to access requests from governments, courts or law enforcement in those jurisdictions according to laws in those jurisdictions.
6134
+ ${clauses.join("\n\n")}
6135
+
6136
+ As a result, this information may be subject to access requests from governments, courts or law enforcement in those jurisdictions according to laws in those jurisdictions.
5864
6137
  `;
5865
6138
  }
6139
+ /**
6140
+ * Where the information rests.
6141
+ *
6142
+ * A scoped location gets its own sentence rather than joining the "including …"
6143
+ * list: folded in, a reader would take it to cover everything the provider holds,
6144
+ * which is a broader claim than the config made.
6145
+ */
6146
+ function storageClause(v) {
6147
+ const scoped = list(v.scopedStorage.map((s) => `${s.country}, in the case of ${s.scope}`));
6148
+ if (v.storageCountries) return `Some or all of the personal information we collect may be stored or processed in jurisdictions outside of Canada, including ${v.storageCountries}.${scoped ? ` Certain categories of personal information are held outside of Canada even where the rest is not: ${scoped}.` : ""}`;
6149
+ if (scoped) return `Certain categories of the personal information we collect are stored or processed outside of Canada: ${scoped}.`;
6150
+ return "";
6151
+ }
6152
+ /** The Azure-in-Canada case: the information never moves, and foreign law still reaches it. */
6153
+ function operatorClause(v) {
6154
+ if (!v.operatorCountries) return "";
6155
+ return `Some of the service providers we use are established in, or controlled from, jurisdictions outside of Canada, including ${v.operatorCountries}. Personal information those providers handle on our behalf may be subject to the laws of those jurisdictions even when it is stored in Canada.`;
6156
+ }
5866
6157
 
5867
6158
  //#endregion
5868
6159
  //#region src/legal/templates/terms.ca.ts
@@ -7728,5 +8019,5 @@ function defaultConfig() {
7728
8019
  }
7729
8020
 
7730
8021
  //#endregion
7731
- export { BASE_HOOK, CONFIG_SCHEMA_URL, CONTRAST, ConfigSchema, DARK_SEL, DOC_ORDER, DOC_SLUGS, DesignSystemSchema, JURISDICTIONS, KNOWN_PROCESSORS, NUMERIC_STEPS, REQUIRED_ROLES, ROLE_TOKEN_KEYS, SCHEMA_URL, SiteFontSchema, TEMPLATES, TIERS, TIER_NAMES, TW_CLASH, buildIconSprite, configJsonSchema, deepMerge, defaultConfig, derivePolicyVars, detectProcessorKeys, enabledDocs, expandPalette, functionalRole, generate, generateDocs, generateLegal, isConfig, jsonSchema, loadIconSvg, parseMarkdown, renderInlineMarkdown, renderMarkdown, renderNodes, resolveConfig, resolveInput, resolvePrivacyContact, resolveProcessors, resolveTheme, roleColorUtilities, roleHue, roleKind, schemaTreeNodes, spriteId, stripNulls, tierPatterns, tierTags, toContentNodes, toHtmlFragment, toPortableText, tokenClass, tokenVar, validate, validateConfig };
8022
+ export { AD_PROVIDERS, BASE_HOOK, CONFIG_SCHEMA_URL, CONTRAST, ConfigSchema, DARK_SEL, DOC_ORDER, DOC_SLUGS, DesignSystemSchema, JURISDICTIONS, JURISDICTION_COUNTRIES, KNOWN_PROCESSORS, NUMERIC_STEPS, REQUIRED_ROLES, ROLE_TOKEN_KEYS, SCHEMA_URL, SiteFontSchema, TEMPLATES, TIERS, TIER_NAMES, TW_CLASH, buildIconSprite, configJsonSchema, deepMerge, defaultConfig, derivePolicyVars, detectProcessorKeys, enabledDocs, expandPalette, functionalRole, generate, generateDocs, generateLegal, isConfig, jsonSchema, loadIconSvg, parseMarkdown, processorsMissingLocation, renderInlineMarkdown, renderMarkdown, renderNodes, resolveConfig, resolveInput, resolvePrivacyContact, resolveProcessors, resolveTheme, roleColorUtilities, roleHue, roleKind, schemaTreeNodes, spriteId, stripNulls, tierPatterns, tierTags, toContentNodes, toHtmlFragment, toPortableText, tokenClass, tokenVar, validate, validateConfig };
7732
8023
  //# sourceMappingURL=index.mjs.map