@brandlab-digital/site-core 2.1.0 → 3.0.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":"business.js","sourceRoot":"","sources":["../src/business.ts"],"names":[],"mappings":"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","sourcesContent":["export type VerificationState = 'verified' | 'unknown' | 'not-applicable'\n\nexport const BRANDLAB_EVIDENCE_SOURCE_KINDS = [\n 'official-registry',\n 'google-business-profile',\n 'client-document',\n 'client-confirmation',\n 'first-party-record',\n 'public-authority',\n 'asset-rights',\n 'other-independent',\n 'synthetic-test',\n] as const\n\nexport type BrandlabEvidenceSourceKind =\n (typeof BRANDLAB_EVIDENCE_SOURCE_KINDS)[number]\n\nexport const BRANDLAB_EVIDENCE_SURFACES = [\n 'website-copy',\n 'metadata',\n 'schema',\n 'reviews',\n 'projects',\n 'images',\n 'operations',\n] as const\n\nexport type BrandlabEvidenceSurface =\n (typeof BRANDLAB_EVIDENCE_SURFACES)[number]\n\nexport interface EvidenceReference {\n sourceKind: BrandlabEvidenceSourceKind\n reference: string\n verifiedAt: string\n expiresAt?: string\n allowedSurfaces: readonly BrandlabEvidenceSurface[]\n}\n\nexport interface VerifiedFact<T> {\n status: 'verified'\n value: T\n evidence: EvidenceReference\n}\n\nexport type BrandlabFact<T> =\n | VerifiedFact<T>\n | { status: 'unknown' }\n | { status: 'not-applicable'; reason: string }\n\nexport interface BrandlabPhoneNumber {\n display: string\n e164: string\n}\n\nexport interface BrandlabPostalAddress {\n streetAddress: string\n addressLocality: string\n addressRegion: string\n postalCode: string\n addressCountry: string\n}\n\nexport interface BrandlabServiceArea {\n id: string\n name: string\n kind: 'city' | 'region' | 'suburb' | 'state' | 'country'\n}\n\nexport type BrandlabOpeningHoursDay =\n | 'Monday'\n | 'Tuesday'\n | 'Wednesday'\n | 'Thursday'\n | 'Friday'\n | 'Saturday'\n | 'Sunday'\n\nexport interface BrandlabOpeningHours {\n days: readonly BrandlabOpeningHoursDay[]\n opens: string\n closes: string\n}\n\nexport interface BrandlabLicence {\n name: string\n identifier: string\n jurisdiction?: string\n}\n\nexport interface BrandlabProofReference {\n id: string\n kind: 'project' | 'review' | 'accreditation' | 'licence' | 'external-source'\n evidence: EvidenceReference\n}\n\nconst BRANDLAB_PROOF_KINDS = new Set<BrandlabProofReference['kind']>([\n 'project',\n 'review',\n 'accreditation',\n 'licence',\n 'external-source',\n])\nconst BRANDLAB_OPENING_HOURS_DAYS = new Set<BrandlabOpeningHoursDay>([\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n 'Sunday',\n])\n\nexport interface BrandlabBusiness {\n identity: {\n tradingName: BrandlabFact<string> & { status: 'verified' }\n legalName: BrandlabFact<string>\n }\n canonicalUrl: BrandlabFact<string> & { status: 'verified' }\n contact: {\n phone: BrandlabFact<BrandlabPhoneNumber>\n email: BrandlabFact<string>\n }\n location: {\n model: 'service-area' | 'physical-location' | 'hybrid'\n addressVisibility: 'public' | 'hidden' | 'not-applicable'\n address: BrandlabFact<BrandlabPostalAddress>\n serviceAreas: BrandlabFact<readonly BrandlabServiceArea[]>\n }\n openingHours: BrandlabFact<readonly BrandlabOpeningHours[]>\n registration: {\n abn: BrandlabFact<string>\n licences: BrandlabFact<readonly BrandlabLicence[]>\n }\n externalEntities: {\n googlePlaceId: BrandlabFact<string>\n sameAs: BrandlabFact<readonly string[]>\n }\n /** Optional structured proof references for projects that use them operationally. */\n proof?: BrandlabFact<readonly BrandlabProofReference[]>\n}\n\nexport interface BrandlabDerivedBusinessFacts {\n tradingName: string\n legalName?: string\n canonicalUrl: string\n canonicalDomain: string\n phone?: BrandlabPhoneNumber & {\n digits: string\n telHref: string\n }\n email?: string\n publicAddress?: BrandlabPostalAddress\n serviceAreas: readonly BrandlabServiceArea[]\n openingHours: readonly BrandlabOpeningHours[]\n abn?: string\n licences: readonly BrandlabLicence[]\n googlePlaceId?: string\n sameAs: readonly string[]\n proof: readonly BrandlabProofReference[]\n}\n\nexport function verifiedFact<T>(\n value: T,\n evidence: EvidenceReference,\n): VerifiedFact<T> {\n return {\n status: 'verified',\n value,\n evidence,\n }\n}\n\nexport function unknownFact<T>(): BrandlabFact<T> {\n return { status: 'unknown' }\n}\n\nexport function notApplicableFact<T>(reason: string): BrandlabFact<T> {\n return { status: 'not-applicable', reason }\n}\n\nexport function resolveVerifiedFactForSurface<T>(\n fact: BrandlabFact<T>,\n surface: BrandlabEvidenceSurface,\n asOf: Date = new Date(),\n): T | undefined {\n if (fact.status !== 'verified') return undefined\n if (!fact.evidence.allowedSurfaces.includes(surface)) return undefined\n if (\n fact.evidence.expiresAt &&\n Date.parse(fact.evidence.expiresAt) < asOf.getTime()\n ) {\n return undefined\n }\n return fact.value\n}\n\nfunction assertText(value: unknown, field: string, maximum = 500) {\n if (\n typeof value !== 'string' ||\n !value.trim() ||\n value.trim() !== value ||\n value.length > maximum ||\n /[\\u0000-\\u001f\\u007f]/.test(value)\n ) {\n throw new Error(`${field} must be bounded, trimmed text.`)\n }\n}\n\nfunction assertDate(value: string | undefined, field: string) {\n if (\n value !== undefined &&\n (!/^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3})?Z)?$/.test(value) ||\n Number.isNaN(Date.parse(value)))\n ) {\n throw new Error(`${field} must be a valid ISO date or UTC timestamp.`)\n }\n}\n\nconst BRANDLAB_EVIDENCE_SOURCE_KIND_SET = new Set<BrandlabEvidenceSourceKind>(\n BRANDLAB_EVIDENCE_SOURCE_KINDS,\n)\nconst BRANDLAB_EVIDENCE_SURFACE_SET = new Set<BrandlabEvidenceSurface>(\n BRANDLAB_EVIDENCE_SURFACES,\n)\nconst CIRCULAR_EVIDENCE_PREFIX =\n /^(?:existing-production-config|repository-config|source-code):/i\n\nfunction assertEvidenceReference(\n evidence: EvidenceReference,\n field: string,\n) {\n assertExactKeys(\n evidence,\n ['sourceKind', 'reference', 'verifiedAt', 'expiresAt', 'allowedSurfaces'],\n field,\n )\n if (!BRANDLAB_EVIDENCE_SOURCE_KIND_SET.has(evidence.sourceKind)) {\n throw new Error(`${field}.sourceKind is invalid.`)\n }\n assertText(evidence.reference, `${field}.reference`)\n if (CIRCULAR_EVIDENCE_PREFIX.test(evidence.reference)) {\n throw new Error(\n `${field}.reference cannot cite repository configuration as independent verification.`,\n )\n }\n assertDate(evidence.verifiedAt, `${field}.verifiedAt`)\n assertDate(evidence.expiresAt, `${field}.expiresAt`)\n if (\n evidence.expiresAt &&\n Date.parse(evidence.expiresAt) < Date.parse(evidence.verifiedAt)\n ) {\n throw new Error(`${field}.expiresAt cannot precede verifiedAt.`)\n }\n if (\n !Array.isArray(evidence.allowedSurfaces) ||\n evidence.allowedSurfaces.length === 0\n ) {\n throw new Error(`${field}.allowedSurfaces cannot be empty.`)\n }\n assertUniqueStrings(evidence.allowedSurfaces, `${field}.allowedSurfaces`)\n if (\n evidence.allowedSurfaces.some(\n (surface) => !BRANDLAB_EVIDENCE_SURFACE_SET.has(surface),\n )\n ) {\n throw new Error(`${field}.allowedSurfaces contains an invalid surface.`)\n }\n}\n\nfunction assertExactKeys(\n value: unknown,\n allowed: readonly string[],\n field: string,\n) {\n if (\n !value ||\n typeof value !== 'object' ||\n Array.isArray(value) ||\n ![Object.prototype, null].includes(Object.getPrototypeOf(value))\n ) {\n throw new Error(`${field} must be a plain object.`)\n }\n const unknown = Object.keys(value).find((key) => !allowed.includes(key))\n if (unknown) throw new Error(`${field}.${unknown} is not a supported business fact key.`)\n}\n\nfunction assertFact<T>(fact: BrandlabFact<T>, field: string, validate?: (value: T) => void) {\n if (!fact || typeof fact !== 'object' || Array.isArray(fact)) {\n throw new Error(`${field} must be a typed Brandlab fact.`)\n }\n const record = fact as BrandlabFact<T> & Record<string, unknown>\n if (record.status === 'verified') {\n const verified = record as Extract<BrandlabFact<T>, { status: 'verified' }> &\n Record<string, unknown>\n if (!Object.prototype.hasOwnProperty.call(verified, 'value') || verified.value === undefined) {\n throw new Error(`${field}.value is required for a verified fact.`)\n }\n assertExactKeys(verified, ['status', 'value', 'evidence'], field)\n assertEvidenceReference(verified.evidence, `${field}.evidence`)\n if (typeof verified.value === 'string') assertText(verified.value, `${field}.value`)\n validate?.(verified.value)\n } else if (record.status === 'unknown') {\n if (Object.prototype.hasOwnProperty.call(record, 'value')) {\n throw new Error(`${field} cannot carry a value while its status is unknown.`)\n }\n assertExactKeys(record, ['status'], field)\n } else if (record.status === 'not-applicable') {\n if (Object.prototype.hasOwnProperty.call(record, 'value')) {\n throw new Error(`${field} cannot carry a value while it is not applicable.`)\n }\n assertExactKeys(record, ['status', 'reason'], field)\n assertText(record.reason, `${field}.reason`)\n } else {\n throw new Error(`${field}.status must be verified, unknown or not-applicable.`)\n }\n}\n\nfunction assertAbsoluteHttpsUrl(value: string, field: string, requireOrigin = false) {\n let url: URL\n try {\n url = new URL(value)\n } catch {\n throw new Error(`${field} must be an absolute HTTPS URL.`)\n }\n\n if (\n url.protocol !== 'https:' ||\n url.username ||\n url.password ||\n (requireOrigin && (url.pathname !== '/' || url.search || url.hash))\n ) {\n throw new Error(`${field} must be an absolute HTTPS URL.`)\n }\n}\n\nfunction assertUniqueStrings(values: readonly string[], field: string) {\n const duplicate = values.find((value, index) => values.indexOf(value) !== index)\n if (duplicate) throw new Error(`${field} contains duplicate value \"${duplicate}\".`)\n}\n\nfunction assertTime(value: string, field: string) {\n if (!/^(?:[01]\\d|2[0-3]):[0-5]\\d$/.test(value)) {\n throw new Error(`${field} must use a valid 24-hour HH:MM time.`)\n }\n}\n\nfunction assertAddress(address: BrandlabPostalAddress) {\n assertExactKeys(\n address,\n [\n 'streetAddress',\n 'addressLocality',\n 'addressRegion',\n 'postalCode',\n 'addressCountry',\n ],\n 'location.address.value',\n )\n Object.entries(address).forEach(([field, value]) =>\n assertText(value, `location.address.value.${field}`, 200),\n )\n if (address.addressCountry !== 'AU') {\n throw new Error('location.address.value.addressCountry must be \"AU\".')\n }\n if (!/^[A-Z]{2,3}$/.test(address.addressRegion)) {\n throw new Error('location.address.value.addressRegion must be an uppercase Australian region.')\n }\n if (!/^\\d{4}$/.test(address.postalCode)) {\n throw new Error('location.address.value.postalCode must be a four-digit Australian postcode.')\n }\n}\n\nfunction assertPhone(phone: BrandlabPhoneNumber) {\n assertExactKeys(phone, ['display', 'e164'], 'contact.phone.value')\n assertText(phone.display, 'contact.phone.value.display')\n if (\n phone.display.trim() !== phone.display ||\n phone.display.length > 32 ||\n !/^[+()\\d\\s.-]+$/.test(phone.display)\n ) {\n throw new Error('contact.phone.value.display must be a bounded Australian phone number.')\n }\n if (!/^\\+61[23478]\\d{8}$/.test(phone.e164)) {\n throw new Error('contact.phone.value.e164 must be a valid Australian E.164 number.')\n }\n const displayDigits = phone.display.replace(/\\D/g, '')\n const e164Digits = phone.e164.slice(1)\n const comparableDisplayDigits =\n e164Digits.startsWith('61') && displayDigits.startsWith('0')\n ? `61${displayDigits.slice(1)}`\n : displayDigits\n if (comparableDisplayDigits !== e164Digits) {\n throw new Error('contact.phone.value.display must identify the same number as e164.')\n }\n}\n\nfunction assertEmail(email: string) {\n if (\n email.length > 254 ||\n email.trim() !== email ||\n /[\\u0000-\\u001f\\u007f]/.test(email) ||\n !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)\n ) {\n throw new Error('contact.email.value must be a valid email address.')\n }\n}\n\nfunction normalizeAbn(value: string) {\n return value.replace(/\\s/g, '')\n}\n\nfunction assertAbn(value: string) {\n const digits = normalizeAbn(value)\n if (!/^\\d{11}$/.test(digits) || !/^\\d{2}(?: \\d{3}){3}$|^\\d{11}$/.test(value)) {\n throw new Error('registration.abn.value must be an 11-digit Australian Business Number.')\n }\n const weights = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19]\n const numbers = [...digits].map(Number)\n numbers[0] = numbers[0]! - 1\n const checksum = numbers.reduce(\n (sum, digit, index) => sum + digit * weights[index]!,\n 0,\n )\n if (checksum % 89 !== 0) {\n throw new Error('registration.abn.value has an invalid ABN checksum.')\n }\n}\n\nfunction assertUniqueIds(records: readonly { id: string }[], field: string) {\n records.forEach((record, index) => assertText(record.id, `${field}[${index}].id`))\n const duplicate = records.find((record, index) =>\n records.slice(0, index).some((candidate) => candidate.id === record.id),\n )\n if (duplicate) throw new Error(`${field} contains duplicate ID \"${duplicate.id}\".`)\n}\n\nexport function defineBrandlabBusiness<const T extends BrandlabBusiness>(business: T): T {\n assertExactKeys(\n business,\n [\n 'identity',\n 'canonicalUrl',\n 'contact',\n 'location',\n 'openingHours',\n 'registration',\n 'externalEntities',\n 'proof',\n ],\n 'business',\n )\n assertExactKeys(business.identity, ['tradingName', 'legalName'], 'identity')\n assertExactKeys(business.contact, ['phone', 'email'], 'contact')\n assertExactKeys(\n business.location,\n ['model', 'addressVisibility', 'address', 'serviceAreas'],\n 'location',\n )\n assertExactKeys(business.registration, ['abn', 'licences'], 'registration')\n assertExactKeys(\n business.externalEntities,\n ['googlePlaceId', 'sameAs'],\n 'externalEntities',\n )\n if (!['service-area', 'physical-location', 'hybrid'].includes(business.location.model)) {\n throw new Error('location.model is invalid.')\n }\n if (!['public', 'hidden', 'not-applicable'].includes(business.location.addressVisibility)) {\n throw new Error('location.addressVisibility is invalid.')\n }\n assertFact(business.identity.tradingName, 'identity.tradingName')\n assertFact(business.identity.legalName, 'identity.legalName')\n assertFact(business.canonicalUrl, 'canonicalUrl', (value) =>\n assertAbsoluteHttpsUrl(value, 'canonicalUrl.value', true),\n )\n assertFact(business.contact.phone, 'contact.phone', assertPhone)\n assertFact(business.contact.email, 'contact.email', assertEmail)\n assertFact(business.location.address, 'location.address', assertAddress)\n assertFact(business.location.serviceAreas, 'location.serviceAreas', (areas) => {\n assertUniqueIds(areas, 'location.serviceAreas.value')\n areas.forEach((area, index) => {\n assertExactKeys(\n area,\n ['id', 'name', 'kind'],\n `location.serviceAreas.value[${index}]`,\n )\n assertText(area.name, `location.serviceAreas.value[${index}].name`)\n if (area.name.trim() !== area.name || area.name.length > 160) {\n throw new Error(`location.serviceAreas.value[${index}].name must be bounded canonical text.`)\n }\n if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(area.id)) {\n throw new Error(`location.serviceAreas.value[${index}].id must be lowercase kebab-case.`)\n }\n if (!['city', 'region', 'suburb', 'state', 'country'].includes(area.kind)) {\n throw new Error(`location.serviceAreas.value[${index}].kind is invalid.`)\n }\n })\n })\n assertFact(business.openingHours, 'openingHours', (hours) => {\n const allDays: BrandlabOpeningHoursDay[] = []\n hours.forEach((period, index) => {\n assertExactKeys(\n period,\n ['days', 'opens', 'closes'],\n `openingHours.value[${index}]`,\n )\n if (period.days.length === 0) {\n throw new Error(`openingHours.value[${index}].days cannot be empty.`)\n }\n assertUniqueStrings(period.days, `openingHours.value[${index}].days`)\n if (period.days.some((day) => !BRANDLAB_OPENING_HOURS_DAYS.has(day))) {\n throw new Error(`openingHours.value[${index}].days contains an invalid day.`)\n }\n allDays.push(...period.days)\n assertTime(period.opens, `openingHours.value[${index}].opens`)\n assertTime(period.closes, `openingHours.value[${index}].closes`)\n })\n assertUniqueStrings(allDays, 'openingHours.value.days')\n })\n assertFact(business.registration.abn, 'registration.abn', assertAbn)\n assertFact(business.registration.licences, 'registration.licences', (licences) => {\n assertUniqueStrings(\n licences.map((licence) => licence.identifier),\n 'registration.licences.value.identifiers',\n )\n licences.forEach((licence, index) => {\n assertExactKeys(\n licence,\n ['name', 'identifier', 'jurisdiction'],\n `registration.licences.value[${index}]`,\n )\n assertText(licence.name, `registration.licences.value[${index}].name`)\n assertText(licence.identifier, `registration.licences.value[${index}].identifier`)\n if (licence.jurisdiction !== undefined) {\n assertText(\n licence.jurisdiction,\n `registration.licences.value[${index}].jurisdiction`,\n 120,\n )\n }\n })\n })\n assertFact(business.externalEntities.googlePlaceId, 'externalEntities.googlePlaceId')\n assertFact(business.externalEntities.sameAs, 'externalEntities.sameAs', (urls) => {\n assertUniqueStrings(urls, 'externalEntities.sameAs.value')\n urls.forEach((url, index) =>\n assertAbsoluteHttpsUrl(url, `externalEntities.sameAs.value[${index}]`),\n )\n })\n if (business.proof) {\n assertFact(business.proof, 'proof', (proof) => {\n assertUniqueIds(proof, 'proof.value')\n proof.forEach((item, index) => {\n assertExactKeys(\n item,\n ['id', 'kind', 'evidence'],\n `proof.value[${index}]`,\n )\n if (!BRANDLAB_PROOF_KINDS.has(item.kind)) {\n throw new Error(`proof.value[${index}].kind is invalid.`)\n }\n assertEvidenceReference(\n item.evidence,\n `proof.value[${index}].evidence`,\n )\n })\n })\n }\n\n if (\n business.location.addressVisibility === 'not-applicable' &&\n business.location.address.status === 'verified'\n ) {\n throw new Error('A verified address cannot use addressVisibility \"not-applicable\".')\n }\n\n if (\n business.location.addressVisibility === 'public' &&\n business.location.address.status !== 'verified'\n ) {\n throw new Error('A public address must have verified address facts.')\n }\n\n if (\n business.location.model === 'service-area' &&\n business.location.addressVisibility === 'public'\n ) {\n throw new Error('A service-area business cannot expose a public address.')\n }\n\n if (\n business.location.model === 'physical-location' &&\n business.location.addressVisibility !== 'public'\n ) {\n throw new Error('A physical-location business must expose its verified public address.')\n }\n\n if (\n (business.location.model === 'service-area' || business.location.model === 'hybrid') &&\n (business.location.serviceAreas.status !== 'verified' ||\n business.location.serviceAreas.value.length === 0)\n ) {\n throw new Error('Service-area and hybrid businesses require verified service areas.')\n }\n\n return business\n}\n\nfunction verifiedValue<T>(fact: BrandlabFact<T>): T | undefined {\n return fact.status === 'verified' ? fact.value : undefined\n}\n\nexport function deriveBusinessFacts(business: BrandlabBusiness): BrandlabDerivedBusinessFacts {\n defineBrandlabBusiness(business)\n const canonicalUrl = new URL(business.canonicalUrl.value).origin\n const phone = verifiedValue(business.contact.phone)\n const address = verifiedValue(business.location.address)\n\n return {\n tradingName: business.identity.tradingName.value,\n ...(business.identity.legalName.status === 'verified'\n ? { legalName: business.identity.legalName.value }\n : {}),\n canonicalUrl,\n canonicalDomain: new URL(canonicalUrl).hostname,\n ...(phone\n ? {\n phone: {\n ...phone,\n digits: phone.e164.replace(/\\D/g, ''),\n telHref: `tel:${phone.e164}`,\n },\n }\n : {}),\n ...(business.contact.email.status === 'verified'\n ? { email: business.contact.email.value.trim().toLowerCase() }\n : {}),\n ...(business.location.addressVisibility === 'public' && address\n ? { publicAddress: address }\n : {}),\n serviceAreas: verifiedValue(business.location.serviceAreas) ?? [],\n openingHours: verifiedValue(business.openingHours) ?? [],\n ...(business.registration.abn.status === 'verified'\n ? { abn: normalizeAbn(business.registration.abn.value) }\n : {}),\n licences: verifiedValue(business.registration.licences) ?? [],\n ...(business.externalEntities.googlePlaceId.status === 'verified'\n ? { googlePlaceId: business.externalEntities.googlePlaceId.value }\n : {}),\n sameAs: verifiedValue(business.externalEntities.sameAs) ?? [],\n proof: business.proof ? verifiedValue(business.proof) ?? [] : [],\n }\n}\n"]}
1
+ {"version":3,"file":"business.js","sourceRoot":"","sources":["../src/business.ts"],"names":[],"mappings":"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","sourcesContent":["export type VerificationState = 'verified' | 'unknown' | 'not-applicable'\n\nexport const BRANDLAB_EVIDENCE_SOURCE_KINDS = [\n 'official-registry',\n 'google-business-profile',\n 'client-document',\n 'client-confirmation',\n 'first-party-record',\n 'public-authority',\n 'asset-rights',\n 'other-independent',\n 'synthetic-test',\n] as const\n\nexport type BrandlabEvidenceSourceKind =\n (typeof BRANDLAB_EVIDENCE_SOURCE_KINDS)[number]\n\nexport const BRANDLAB_EVIDENCE_SURFACES = [\n 'website-copy',\n 'metadata',\n 'schema',\n 'reviews',\n 'projects',\n 'images',\n 'operations',\n] as const\n\nexport type BrandlabEvidenceSurface =\n (typeof BRANDLAB_EVIDENCE_SURFACES)[number]\n\nexport interface EvidenceReference {\n sourceKind: BrandlabEvidenceSourceKind\n reference: string\n verifiedAt: string\n expiresAt?: string\n allowedSurfaces: readonly BrandlabEvidenceSurface[]\n}\n\nexport interface VerifiedFact<T> {\n status: 'verified'\n value: T\n evidence: EvidenceReference\n}\n\nexport type BrandlabFact<T> =\n | VerifiedFact<T>\n | { status: 'unknown' }\n | { status: 'not-applicable'; reason: string }\n\nexport interface BrandlabPhoneNumber {\n /** As the business shows it, for example \"02 9000 1234\", \"0412 345 678\" or \"1300 329 600\". */\n display: string\n /**\n * E.164 form: \"+61290001234\". A 13, 1300 or 1800 number keeps its national\n * digits after +61 (\"+611300329600\", \"+61131234\").\n */\n e164: string\n}\n\nexport interface BrandlabPostalAddress {\n streetAddress: string\n addressLocality: string\n addressRegion: string\n postalCode: string\n addressCountry: string\n}\n\nexport interface BrandlabServiceArea {\n id: string\n name: string\n kind: 'city' | 'region' | 'suburb' | 'state' | 'country'\n}\n\nexport type BrandlabOpeningHoursDay =\n | 'Monday'\n | 'Tuesday'\n | 'Wednesday'\n | 'Thursday'\n | 'Friday'\n | 'Saturday'\n | 'Sunday'\n\nexport interface BrandlabOpeningHours {\n days: readonly BrandlabOpeningHoursDay[]\n opens: string\n closes: string\n}\n\nexport interface BrandlabLicence {\n name: string\n identifier: string\n jurisdiction?: string\n}\n\nexport interface BrandlabProofReference {\n id: string\n kind: 'project' | 'review' | 'accreditation' | 'licence' | 'external-source'\n evidence: EvidenceReference\n}\n\nconst BRANDLAB_PROOF_KINDS = new Set<BrandlabProofReference['kind']>([\n 'project',\n 'review',\n 'accreditation',\n 'licence',\n 'external-source',\n])\nconst BRANDLAB_OPENING_HOURS_DAYS = new Set<BrandlabOpeningHoursDay>([\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n 'Sunday',\n])\n\nexport interface BrandlabBusiness {\n identity: {\n tradingName: BrandlabFact<string> & { status: 'verified' }\n legalName: BrandlabFact<string>\n }\n canonicalUrl: BrandlabFact<string> & { status: 'verified' }\n contact: {\n phone: BrandlabFact<BrandlabPhoneNumber>\n email: BrandlabFact<string>\n }\n location: {\n model: 'service-area' | 'physical-location' | 'hybrid'\n addressVisibility: 'public' | 'hidden' | 'not-applicable'\n address: BrandlabFact<BrandlabPostalAddress>\n serviceAreas: BrandlabFact<readonly BrandlabServiceArea[]>\n }\n openingHours: BrandlabFact<readonly BrandlabOpeningHours[]>\n registration: {\n abn: BrandlabFact<string>\n licences: BrandlabFact<readonly BrandlabLicence[]>\n }\n externalEntities: {\n googlePlaceId: BrandlabFact<string>\n sameAs: BrandlabFact<readonly string[]>\n }\n /** Optional structured proof references for projects that use them operationally. */\n proof?: BrandlabFact<readonly BrandlabProofReference[]>\n}\n\nexport interface BrandlabDerivedBusinessFacts {\n tradingName: string\n legalName?: string\n canonicalUrl: string\n canonicalDomain: string\n phone?: BrandlabPhoneNumber & {\n digits: string\n /**\n * An Australian 13, 1300 or 1800 number: callable only within Australia\n * and only as dialled nationally.\n */\n nonGeographic: boolean\n /** `tel:+61…` for landline and mobile numbers; the national digits (`tel:1300329600`) for a non-geographic number. */\n telHref: string\n /** Schema.org `telephone`: E.164 for landline and mobile numbers, the displayed number for a non-geographic one. */\n schemaTelephone: string\n }\n email?: string\n publicAddress?: BrandlabPostalAddress\n serviceAreas: readonly BrandlabServiceArea[]\n openingHours: readonly BrandlabOpeningHours[]\n abn?: string\n licences: readonly BrandlabLicence[]\n googlePlaceId?: string\n sameAs: readonly string[]\n proof: readonly BrandlabProofReference[]\n}\n\nexport function verifiedFact<T>(\n value: T,\n evidence: EvidenceReference,\n): VerifiedFact<T> {\n return {\n status: 'verified',\n value,\n evidence,\n }\n}\n\nexport function unknownFact<T>(): BrandlabFact<T> {\n return { status: 'unknown' }\n}\n\nexport function notApplicableFact<T>(reason: string): BrandlabFact<T> {\n return { status: 'not-applicable', reason }\n}\n\nexport function resolveVerifiedFactForSurface<T>(\n fact: BrandlabFact<T>,\n surface: BrandlabEvidenceSurface,\n asOf: Date = new Date(),\n): T | undefined {\n if (fact.status !== 'verified') return undefined\n if (!fact.evidence.allowedSurfaces.includes(surface)) return undefined\n if (\n fact.evidence.expiresAt &&\n Date.parse(fact.evidence.expiresAt) < asOf.getTime()\n ) {\n return undefined\n }\n return fact.value\n}\n\nfunction assertText(value: unknown, field: string, maximum = 500) {\n if (\n typeof value !== 'string' ||\n !value.trim() ||\n value.trim() !== value ||\n value.length > maximum ||\n /[\\u0000-\\u001f\\u007f]/.test(value)\n ) {\n throw new Error(`${field} must be bounded, trimmed text.`)\n }\n}\n\nfunction assertDate(value: string | undefined, field: string) {\n if (\n value !== undefined &&\n (!/^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3})?Z)?$/.test(value) ||\n Number.isNaN(Date.parse(value)))\n ) {\n throw new Error(`${field} must be a valid ISO date or UTC timestamp.`)\n }\n}\n\nconst BRANDLAB_EVIDENCE_SOURCE_KIND_SET = new Set<BrandlabEvidenceSourceKind>(\n BRANDLAB_EVIDENCE_SOURCE_KINDS,\n)\nconst BRANDLAB_EVIDENCE_SURFACE_SET = new Set<BrandlabEvidenceSurface>(\n BRANDLAB_EVIDENCE_SURFACES,\n)\nconst CIRCULAR_EVIDENCE_PREFIX =\n /^(?:existing-production-config|repository-config|source-code):/i\n\nfunction assertEvidenceReference(\n evidence: EvidenceReference,\n field: string,\n) {\n assertExactKeys(\n evidence,\n ['sourceKind', 'reference', 'verifiedAt', 'expiresAt', 'allowedSurfaces'],\n field,\n )\n if (!BRANDLAB_EVIDENCE_SOURCE_KIND_SET.has(evidence.sourceKind)) {\n throw new Error(`${field}.sourceKind is invalid.`)\n }\n assertText(evidence.reference, `${field}.reference`)\n if (CIRCULAR_EVIDENCE_PREFIX.test(evidence.reference)) {\n throw new Error(\n `${field}.reference cannot cite repository configuration as independent verification.`,\n )\n }\n assertDate(evidence.verifiedAt, `${field}.verifiedAt`)\n assertDate(evidence.expiresAt, `${field}.expiresAt`)\n if (\n evidence.expiresAt &&\n Date.parse(evidence.expiresAt) < Date.parse(evidence.verifiedAt)\n ) {\n throw new Error(`${field}.expiresAt cannot precede verifiedAt.`)\n }\n if (\n !Array.isArray(evidence.allowedSurfaces) ||\n evidence.allowedSurfaces.length === 0\n ) {\n throw new Error(`${field}.allowedSurfaces cannot be empty.`)\n }\n assertUniqueStrings(evidence.allowedSurfaces, `${field}.allowedSurfaces`)\n if (\n evidence.allowedSurfaces.some(\n (surface) => !BRANDLAB_EVIDENCE_SURFACE_SET.has(surface),\n )\n ) {\n throw new Error(`${field}.allowedSurfaces contains an invalid surface.`)\n }\n}\n\nfunction assertExactKeys(\n value: unknown,\n allowed: readonly string[],\n field: string,\n) {\n if (\n !value ||\n typeof value !== 'object' ||\n Array.isArray(value) ||\n ![Object.prototype, null].includes(Object.getPrototypeOf(value))\n ) {\n throw new Error(`${field} must be a plain object.`)\n }\n const unknown = Object.keys(value).find((key) => !allowed.includes(key))\n if (unknown) throw new Error(`${field}.${unknown} is not a supported business fact key.`)\n}\n\nfunction assertFact<T>(fact: BrandlabFact<T>, field: string, validate?: (value: T) => void) {\n if (!fact || typeof fact !== 'object' || Array.isArray(fact)) {\n throw new Error(`${field} must be a typed Brandlab fact.`)\n }\n const record = fact as BrandlabFact<T> & Record<string, unknown>\n if (record.status === 'verified') {\n const verified = record as Extract<BrandlabFact<T>, { status: 'verified' }> &\n Record<string, unknown>\n if (!Object.prototype.hasOwnProperty.call(verified, 'value') || verified.value === undefined) {\n throw new Error(`${field}.value is required for a verified fact.`)\n }\n assertExactKeys(verified, ['status', 'value', 'evidence'], field)\n assertEvidenceReference(verified.evidence, `${field}.evidence`)\n if (typeof verified.value === 'string') assertText(verified.value, `${field}.value`)\n validate?.(verified.value)\n } else if (record.status === 'unknown') {\n if (Object.prototype.hasOwnProperty.call(record, 'value')) {\n throw new Error(`${field} cannot carry a value while its status is unknown.`)\n }\n assertExactKeys(record, ['status'], field)\n } else if (record.status === 'not-applicable') {\n if (Object.prototype.hasOwnProperty.call(record, 'value')) {\n throw new Error(`${field} cannot carry a value while it is not applicable.`)\n }\n assertExactKeys(record, ['status', 'reason'], field)\n assertText(record.reason, `${field}.reason`)\n } else {\n throw new Error(`${field}.status must be verified, unknown or not-applicable.`)\n }\n}\n\nfunction assertAbsoluteHttpsUrl(value: string, field: string, requireOrigin = false) {\n let url: URL\n try {\n url = new URL(value)\n } catch {\n throw new Error(`${field} must be an absolute HTTPS URL.`)\n }\n\n if (\n url.protocol !== 'https:' ||\n url.username ||\n url.password ||\n (requireOrigin && (url.pathname !== '/' || url.search || url.hash))\n ) {\n throw new Error(`${field} must be an absolute HTTPS URL.`)\n }\n}\n\nfunction assertUniqueStrings(values: readonly string[], field: string) {\n const duplicate = values.find((value, index) => values.indexOf(value) !== index)\n if (duplicate) throw new Error(`${field} contains duplicate value \"${duplicate}\".`)\n}\n\nfunction assertTime(value: string, field: string) {\n if (!/^(?:[01]\\d|2[0-3]):[0-5]\\d$/.test(value)) {\n throw new Error(`${field} must use a valid 24-hour HH:MM time.`)\n }\n}\n\nfunction assertAddress(address: BrandlabPostalAddress) {\n assertExactKeys(\n address,\n [\n 'streetAddress',\n 'addressLocality',\n 'addressRegion',\n 'postalCode',\n 'addressCountry',\n ],\n 'location.address.value',\n )\n Object.entries(address).forEach(([field, value]) =>\n assertText(value, `location.address.value.${field}`, 200),\n )\n if (address.addressCountry !== 'AU') {\n throw new Error('location.address.value.addressCountry must be \"AU\".')\n }\n if (!/^[A-Z]{2,3}$/.test(address.addressRegion)) {\n throw new Error('location.address.value.addressRegion must be an uppercase Australian region.')\n }\n if (!/^\\d{4}$/.test(address.postalCode)) {\n throw new Error('location.address.value.postalCode must be a four-digit Australian postcode.')\n }\n}\n\n/** Landline and mobile numbers: +61 then a 2, 3, 4, 7 or 8 area or mobile prefix. */\nconst AUSTRALIAN_GEOGRAPHIC_E164 = /^\\+61[23478]\\d{8}$/\n/** Non-geographic numbers: 13 xx xx, 1300 xxx xxx and 1800 xxx xxx. */\nconst AUSTRALIAN_NON_GEOGRAPHIC_E164 = /^\\+61(?:1[38]00\\d{6}|13(?!00)\\d{4})$/\n\nfunction isNonGeographicPhone(e164: string) {\n return AUSTRALIAN_NON_GEOGRAPHIC_E164.test(e164)\n}\n\nfunction assertPhone(phone: BrandlabPhoneNumber) {\n assertExactKeys(phone, ['display', 'e164'], 'contact.phone.value')\n assertText(phone.display, 'contact.phone.value.display')\n if (\n phone.display.trim() !== phone.display ||\n phone.display.length > 32 ||\n !/^[+()\\d\\s.-]+$/.test(phone.display)\n ) {\n throw new Error('contact.phone.value.display must be a bounded Australian phone number.')\n }\n const nonGeographic = isNonGeographicPhone(phone.e164)\n if (!nonGeographic && !AUSTRALIAN_GEOGRAPHIC_E164.test(phone.e164)) {\n throw new Error(\n 'contact.phone.value.e164 must be a valid Australian E.164 number: a landline or mobile, or a 13, 1300 or 1800 number.',\n )\n }\n const national = phone.e164.slice(3)\n const displayDigits = phone.display.replace(/\\D/g, '')\n // A landline or mobile shows its trunk 0 or +61; a non-geographic number is shown as dialled.\n const sameNumber = displayDigits === `61${national}` ||\n displayDigits === (nonGeographic ? national : `0${national}`)\n if (!sameNumber) {\n throw new Error('contact.phone.value.display must identify the same number as e164.')\n }\n}\n\nfunction assertEmail(email: string) {\n if (\n email.length > 254 ||\n email.trim() !== email ||\n /[\\u0000-\\u001f\\u007f]/.test(email) ||\n !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)\n ) {\n throw new Error('contact.email.value must be a valid email address.')\n }\n}\n\nfunction normalizeAbn(value: string) {\n return value.replace(/\\s/g, '')\n}\n\nfunction assertAbn(value: string) {\n const digits = normalizeAbn(value)\n if (!/^\\d{11}$/.test(digits) || !/^\\d{2}(?: \\d{3}){3}$|^\\d{11}$/.test(value)) {\n throw new Error('registration.abn.value must be an 11-digit Australian Business Number.')\n }\n const weights = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19]\n const numbers = [...digits].map(Number)\n numbers[0] = numbers[0]! - 1\n const checksum = numbers.reduce(\n (sum, digit, index) => sum + digit * weights[index]!,\n 0,\n )\n if (checksum % 89 !== 0) {\n throw new Error('registration.abn.value has an invalid ABN checksum.')\n }\n}\n\nfunction assertUniqueIds(records: readonly { id: string }[], field: string) {\n records.forEach((record, index) => assertText(record.id, `${field}[${index}].id`))\n const duplicate = records.find((record, index) =>\n records.slice(0, index).some((candidate) => candidate.id === record.id),\n )\n if (duplicate) throw new Error(`${field} contains duplicate ID \"${duplicate.id}\".`)\n}\n\nexport function defineBrandlabBusiness<const T extends BrandlabBusiness>(business: T): T {\n assertExactKeys(\n business,\n [\n 'identity',\n 'canonicalUrl',\n 'contact',\n 'location',\n 'openingHours',\n 'registration',\n 'externalEntities',\n 'proof',\n ],\n 'business',\n )\n assertExactKeys(business.identity, ['tradingName', 'legalName'], 'identity')\n assertExactKeys(business.contact, ['phone', 'email'], 'contact')\n assertExactKeys(\n business.location,\n ['model', 'addressVisibility', 'address', 'serviceAreas'],\n 'location',\n )\n assertExactKeys(business.registration, ['abn', 'licences'], 'registration')\n assertExactKeys(\n business.externalEntities,\n ['googlePlaceId', 'sameAs'],\n 'externalEntities',\n )\n if (!['service-area', 'physical-location', 'hybrid'].includes(business.location.model)) {\n throw new Error('location.model is invalid.')\n }\n if (!['public', 'hidden', 'not-applicable'].includes(business.location.addressVisibility)) {\n throw new Error('location.addressVisibility is invalid.')\n }\n assertFact(business.identity.tradingName, 'identity.tradingName')\n assertFact(business.identity.legalName, 'identity.legalName')\n assertFact(business.canonicalUrl, 'canonicalUrl', (value) =>\n assertAbsoluteHttpsUrl(value, 'canonicalUrl.value', true),\n )\n assertFact(business.contact.phone, 'contact.phone', assertPhone)\n assertFact(business.contact.email, 'contact.email', assertEmail)\n assertFact(business.location.address, 'location.address', assertAddress)\n assertFact(business.location.serviceAreas, 'location.serviceAreas', (areas) => {\n assertUniqueIds(areas, 'location.serviceAreas.value')\n areas.forEach((area, index) => {\n assertExactKeys(\n area,\n ['id', 'name', 'kind'],\n `location.serviceAreas.value[${index}]`,\n )\n assertText(area.name, `location.serviceAreas.value[${index}].name`)\n if (area.name.trim() !== area.name || area.name.length > 160) {\n throw new Error(`location.serviceAreas.value[${index}].name must be bounded canonical text.`)\n }\n if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(area.id)) {\n throw new Error(`location.serviceAreas.value[${index}].id must be lowercase kebab-case.`)\n }\n if (!['city', 'region', 'suburb', 'state', 'country'].includes(area.kind)) {\n throw new Error(`location.serviceAreas.value[${index}].kind is invalid.`)\n }\n })\n })\n assertFact(business.openingHours, 'openingHours', (hours) => {\n const allDays: BrandlabOpeningHoursDay[] = []\n hours.forEach((period, index) => {\n assertExactKeys(\n period,\n ['days', 'opens', 'closes'],\n `openingHours.value[${index}]`,\n )\n if (period.days.length === 0) {\n throw new Error(`openingHours.value[${index}].days cannot be empty.`)\n }\n assertUniqueStrings(period.days, `openingHours.value[${index}].days`)\n if (period.days.some((day) => !BRANDLAB_OPENING_HOURS_DAYS.has(day))) {\n throw new Error(`openingHours.value[${index}].days contains an invalid day.`)\n }\n allDays.push(...period.days)\n assertTime(period.opens, `openingHours.value[${index}].opens`)\n assertTime(period.closes, `openingHours.value[${index}].closes`)\n })\n assertUniqueStrings(allDays, 'openingHours.value.days')\n })\n assertFact(business.registration.abn, 'registration.abn', assertAbn)\n assertFact(business.registration.licences, 'registration.licences', (licences) => {\n assertUniqueStrings(\n licences.map((licence) => licence.identifier),\n 'registration.licences.value.identifiers',\n )\n licences.forEach((licence, index) => {\n assertExactKeys(\n licence,\n ['name', 'identifier', 'jurisdiction'],\n `registration.licences.value[${index}]`,\n )\n assertText(licence.name, `registration.licences.value[${index}].name`)\n assertText(licence.identifier, `registration.licences.value[${index}].identifier`)\n if (licence.jurisdiction !== undefined) {\n assertText(\n licence.jurisdiction,\n `registration.licences.value[${index}].jurisdiction`,\n 120,\n )\n }\n })\n })\n assertFact(business.externalEntities.googlePlaceId, 'externalEntities.googlePlaceId')\n assertFact(business.externalEntities.sameAs, 'externalEntities.sameAs', (urls) => {\n assertUniqueStrings(urls, 'externalEntities.sameAs.value')\n urls.forEach((url, index) =>\n assertAbsoluteHttpsUrl(url, `externalEntities.sameAs.value[${index}]`),\n )\n })\n if (business.proof) {\n assertFact(business.proof, 'proof', (proof) => {\n assertUniqueIds(proof, 'proof.value')\n proof.forEach((item, index) => {\n assertExactKeys(\n item,\n ['id', 'kind', 'evidence'],\n `proof.value[${index}]`,\n )\n if (!BRANDLAB_PROOF_KINDS.has(item.kind)) {\n throw new Error(`proof.value[${index}].kind is invalid.`)\n }\n assertEvidenceReference(\n item.evidence,\n `proof.value[${index}].evidence`,\n )\n })\n })\n }\n\n if (\n business.location.addressVisibility === 'not-applicable' &&\n business.location.address.status === 'verified'\n ) {\n throw new Error('A verified address cannot use addressVisibility \"not-applicable\".')\n }\n\n if (\n business.location.addressVisibility === 'public' &&\n business.location.address.status !== 'verified'\n ) {\n throw new Error('A public address must have verified address facts.')\n }\n\n if (\n business.location.model === 'service-area' &&\n business.location.addressVisibility === 'public'\n ) {\n throw new Error('A service-area business cannot expose a public address.')\n }\n\n if (\n business.location.model === 'physical-location' &&\n business.location.addressVisibility !== 'public'\n ) {\n throw new Error('A physical-location business must expose its verified public address.')\n }\n\n if (\n (business.location.model === 'service-area' || business.location.model === 'hybrid') &&\n (business.location.serviceAreas.status !== 'verified' ||\n business.location.serviceAreas.value.length === 0)\n ) {\n throw new Error('Service-area and hybrid businesses require verified service areas.')\n }\n\n return business\n}\n\nfunction verifiedValue<T>(fact: BrandlabFact<T>): T | undefined {\n return fact.status === 'verified' ? fact.value : undefined\n}\n\nexport function deriveBusinessFacts(business: BrandlabBusiness): BrandlabDerivedBusinessFacts {\n defineBrandlabBusiness(business)\n const canonicalUrl = new URL(business.canonicalUrl.value).origin\n const phone = verifiedValue(business.contact.phone)\n const address = verifiedValue(business.location.address)\n\n return {\n tradingName: business.identity.tradingName.value,\n ...(business.identity.legalName.status === 'verified'\n ? { legalName: business.identity.legalName.value }\n : {}),\n canonicalUrl,\n canonicalDomain: new URL(canonicalUrl).hostname,\n ...(phone\n ? {\n phone: {\n ...phone,\n digits: phone.e164.replace(/\\D/g, ''),\n nonGeographic: isNonGeographicPhone(phone.e164),\n // 13, 1300 and 1800 numbers cannot be dialled in international form.\n telHref: isNonGeographicPhone(phone.e164) ? `tel:${phone.e164.slice(3)}` : `tel:${phone.e164}`,\n schemaTelephone: isNonGeographicPhone(phone.e164) ? phone.display : phone.e164,\n },\n }\n : {}),\n ...(business.contact.email.status === 'verified'\n ? { email: business.contact.email.value.trim().toLowerCase() }\n : {}),\n ...(business.location.addressVisibility === 'public' && address\n ? { publicAddress: address }\n : {}),\n serviceAreas: verifiedValue(business.location.serviceAreas) ?? [],\n openingHours: verifiedValue(business.openingHours) ?? [],\n ...(business.registration.abn.status === 'verified'\n ? { abn: normalizeAbn(business.registration.abn.value) }\n : {}),\n licences: verifiedValue(business.registration.licences) ?? [],\n ...(business.externalEntities.googlePlaceId.status === 'verified'\n ? { googlePlaceId: business.externalEntities.googlePlaceId.value }\n : {}),\n sameAs: verifiedValue(business.externalEntities.sameAs) ?? [],\n proof: business.proof ? verifiedValue(business.proof) ?? [] : [],\n }\n}\n"]}
@@ -145,10 +145,18 @@ export declare function toLocationSlug(name: string): string;
145
145
  */
146
146
  export declare function resolveRegistryAlias(slug: string, registry: GeographyRegistry, kind: RegistryEntityKind | readonly RegistryEntityKind[]): string;
147
147
  export interface CatalogRegistryIssue {
148
- kind: 'unknown-region' | 'unknown-coverage-group' | 'unknown-council' | 'unknown-suburb' | 'excluded-website-locality' | 'suburb-region-mismatch' | 'suburb-coverage-group-mismatch' | 'suburb-council-mismatch';
148
+ kind: 'unknown-region' | 'unknown-coverage-group' | 'unknown-council' | 'unknown-suburb' | 'excluded-website-locality' | 'excluded-by-policy' | 'suburb-region-mismatch' | 'suburb-coverage-group-mismatch' | 'suburb-council-mismatch';
149
149
  slug: string;
150
150
  detail: string;
151
151
  }
152
+ export interface CatalogValidationOptions {
153
+ /** Website-location policy layered over the registry; enables `excluded-by-policy`. */
154
+ policy?: WebsiteLocationPolicy;
155
+ /** Policy-excluded slugs the project deliberately keeps live (see defineLocationEstate). */
156
+ retainedExclusions?: readonly string[];
157
+ /** Slugs the project publishes outside the registry (see defineLocationEstate's siteOwned). */
158
+ siteOwned?: readonly string[];
159
+ }
152
160
  export interface CatalogForValidation {
153
161
  regionSlugs: readonly string[];
154
162
  /** Backend coverage selectors; these are never treated as region/page slugs. */
@@ -172,5 +180,84 @@ export declare function getCoverageGroupSuburbSlugs(coverageGroupSlugs: readonly
172
180
  * are resolved before comparison so migrated repos that kept live URLs can
173
181
  * still pass. Returns an empty array when the subset is clean.
174
182
  */
175
- export declare function validateCatalogAgainstRegistry(catalog: CatalogForValidation, registry: GeographyRegistry): CatalogRegistryIssue[];
183
+ export declare function validateCatalogAgainstRegistry(catalog: CatalogForValidation, registry: GeographyRegistry, options?: CatalogValidationOptions): CatalogRegistryIssue[];
184
+ export interface BrandlabRetainedLocationExclusion {
185
+ slug: string;
186
+ /** Why this policy-excluded page stays live, for example a pending SEO decision. */
187
+ reason: string;
188
+ }
189
+ /**
190
+ * Locations a site publishes outside the shared geography registry, for
191
+ * example service areas beyond the registry's coverage. They skip registry
192
+ * resolution and website-location policy, so each group states why.
193
+ */
194
+ export interface BrandlabSiteOwnedLocations {
195
+ /** Why these pages are published outside the registry (at most 500 characters). */
196
+ reason: string;
197
+ /** Kebab-case slugs, each also listed in `published` and none a registry location or alias. */
198
+ slugs: readonly string[];
199
+ }
200
+ export interface BrandlabLocationEstateDefinition {
201
+ registry: GeographyRegistry;
202
+ policy: WebsiteLocationPolicy;
203
+ /** Every published location slug, written as literal data; never derived from a registry list. */
204
+ published: readonly string[];
205
+ /** Published slugs the website-location policy excludes but the project keeps live (registry slugs only). */
206
+ retainedExclusions: readonly BrandlabRetainedLocationExclusion[];
207
+ /** Published slugs the site owns outside the registry, grouped by reason (default none). */
208
+ siteOwned?: readonly BrandlabSiteOwnedLocations[];
209
+ }
210
+ export type BrandlabRegistryLocationKind = 'region' | 'subRegion' | 'suburb' | 'locality';
211
+ export type BrandlabLocationEstateEntryKind = BrandlabRegistryLocationKind | 'site-owned';
212
+ export interface BrandlabRegistryLocationEstateEntry {
213
+ slug: string;
214
+ kind: BrandlabRegistryLocationKind;
215
+ /** Registry slug the entry resolves to; differs from `slug` only for a legacy alias. */
216
+ registrySlug: string;
217
+ name: string;
218
+ retainedExclusion: boolean;
219
+ siteOwned: false;
220
+ }
221
+ export interface BrandlabSiteOwnedLocationEstateEntry {
222
+ slug: string;
223
+ kind: 'site-owned';
224
+ /** Site-owned locations have no registry record; the site's own data names them. */
225
+ registrySlug?: undefined;
226
+ name?: undefined;
227
+ retainedExclusion: false;
228
+ siteOwned: true;
229
+ /** The reason its siteOwned group declares. */
230
+ reason: string;
231
+ }
232
+ export type BrandlabLocationEstateEntry = BrandlabRegistryLocationEstateEntry | BrandlabSiteOwnedLocationEstateEntry;
233
+ export interface BrandlabLocationEstate {
234
+ registryVersion: string;
235
+ policyVersion: string;
236
+ published: readonly string[];
237
+ retainedExclusions: readonly BrandlabRetainedLocationExclusion[];
238
+ /** The site-owned groups as declared; `[]` when the site publishes registry locations only. */
239
+ siteOwned: readonly BrandlabSiteOwnedLocations[];
240
+ entries: readonly BrandlabLocationEstateEntry[];
241
+ has(slug: string): boolean;
242
+ get(slug: string): BrandlabLocationEstateEntry | undefined;
243
+ }
244
+ export type BrandlabLocationEstateIssueKind = 'invalid-estate' | 'policy-registry-mismatch' | 'invalid-slug' | 'duplicate-slug' | 'unknown-location' | 'excluded-by-policy' | 'invalid-retained-exclusion' | 'duplicate-retained-exclusion' | 'retained-exclusion-not-published' | 'retained-exclusion-not-excluded' | 'retained-exclusion-site-owned' | 'invalid-site-owned' | 'duplicate-site-owned' | 'site-owned-not-published' | 'site-owned-in-registry';
245
+ export interface BrandlabLocationEstateIssue {
246
+ kind: BrandlabLocationEstateIssueKind;
247
+ slug: string;
248
+ detail: string;
249
+ }
250
+ /**
251
+ * Policy-aware estate validation. Returns every issue instead of throwing so
252
+ * conformance can report them alongside its own rules.
253
+ */
254
+ export declare function validateLocationEstate(definition: BrandlabLocationEstateDefinition): BrandlabLocationEstateIssue[];
255
+ /**
256
+ * Declares the published location estate (`src/data/locations/estate.ts`).
257
+ * Fails on unknown slugs and on policy-excluded slugs that are not declared
258
+ * as retained, so a registry or policy update can never silently add or drop
259
+ * a published page. Locations outside the registry are published only when a
260
+ * `siteOwned` group declares them with its reason.
261
+ */
262
+ export declare function defineLocationEstate(definition: BrandlabLocationEstateDefinition): BrandlabLocationEstate;
176
263
  //# sourceMappingURL=locations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"locations.d.ts","sourceRoot":"","sources":["../src/locations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"locations.d.ts","sourceRoot":"","sources":["../src/locations.ts"],"names":[],"mappings":"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"}