{"id":"@lssm-tech/lib.advertising-runtime","slug":"lib.advertising-runtime","name":"@lssm-tech/lib.advertising-runtime","version":"0.2.4","path":"packages/domains/growth/advertising-runtime","manifestPath":"packages/domains/growth/advertising-runtime/package.json","manifestBlobSha":"d3d97593339798acedd0fc79c5034143c1e8a3a5","layer":"domains","physicalArea":"growth","primaryArea":"content-and-growth","classification":{"privateDeclared":null,"catalogFamily":"runtime","catalogKind":"library","catalogStatus":"active","adoptionMode":"adoptable","stability":"experimental"},"description":"Durable advertising recipe execution and scoped HTTP mechanics.","descriptionOrigin":"package.json","catalog":{"family":"runtime","kind":"library","status":"active","adoptionMode":"adoptable","stability":"experimental","platforms":["server"],"runtimes":["bun","node"],"entrypoints":["."],"documentation":[{"title":"@lssm-tech/lib.advertising-runtime","url":"https://github.com/lssm-tech/contractspec/tree/main/packages/domains/growth/advertising-runtime","kind":"readme"}],"capabilities":[{"id":"package.lssm.tech.lib.advertising.runtime","title":"Advertising runtime","description":"Runtime primitives for governed advertising workflows.","useCases":["Run governed advertising workflows"],"aliases":["advertising","runtime"],"canonicalImports":[{"from":"@lssm-tech/lib.advertising-runtime","symbols":[]}],"constraints":{"platforms":["server"],"runtimes":["bun","node"],"avoidWhen":["The target runtime is not server-side."],"requires":["TypeScript"]}}]},"canonicalImports":[{"capabilityId":"package.lssm.tech.lib.advertising.runtime","from":"@lssm-tech/lib.advertising-runtime","symbols":[]}],"scripts":{"build":"contractspec-bun-build build","build:bundle":"contractspec-bun-build transpile","build:types":"contractspec-bun-build types","clean":"rimraf dist .turbo","dev":"contractspec-bun-build dev","lint:check":"node ../../../../scripts/biome.cjs check .","lint:fix":"node ../../../../scripts/biome.cjs check --write .","prebuild":"contractspec-bun-build prebuild","test":"bun test","typecheck":"tsgo --noEmit","publish:pkg":"bun publish --tolerate-republish --ignore-scripts --verbose"},"scriptStatus":"complete pinned manifest","dependencies":{"@lssm-tech/lib.contracts-integrations":"workspace:^","zod":"catalog:","@lssm-tech/lib.growth-spec":"workspace:^"},"devDependencies":{"@lssm-tech/tool.bun":"workspace:*","@lssm-tech/tool.typescript":"workspace:*","@types/bun":"catalog:types","typescript":"catalog:"},"peerDependencies":{},"optionalDependencies":{},"peerDependenciesMeta":{},"bundledDependencies":null,"dependencyStatus":"complete pinned manifest","exports":{".":"./src/index.ts","./compilers":"./src/compilers/index.ts","./compilers/budget":"./src/compilers/budget.ts","./compilers/campaign":"./src/compilers/campaign.ts","./compilers/control":"./src/compilers/control.ts","./compilers/creative":"./src/compilers/creative.ts","./compilers/creative-materials":"./src/compilers/creative-materials.ts","./compilers/creative-steps":"./src/compilers/creative-steps.ts","./compilers/google":"./src/compilers/google.ts","./compilers/meta":"./src/compilers/meta.ts","./compilers/tiktok":"./src/compilers/tiktok.ts","./compilers/types":"./src/compilers/types.ts","./conversions":"./src/conversions/index.ts","./conversions/capabilities":"./src/conversions/capabilities.ts","./conversions/compile":"./src/conversions/compile.ts","./conversions/materials":"./src/conversions/materials.ts","./conversions/provider":"./src/conversions/provider.ts","./http":"./src/http.ts","./marketing-provider":"./src/marketing-provider.ts","./observations":"./src/observations/index.ts","./observations/evidence":"./src/observations/evidence.ts","./observations/normalize":"./src/observations/normalize.ts","./observations/provider":"./src/observations/provider.ts","./observations/requests":"./src/observations/requests.ts","./recipe":"./src/recipe.ts","./recipe-validation":"./src/recipe-validation.ts","./validation":"./src/validation.ts"},"publishExports":{".":{"types":"./dist/index.d.ts","browser":"./dist/browser/index.js","bun":"./dist/index.js","node":"./dist/node/index.js","default":"./dist/index.js"},"./compilers":{"types":"./dist/compilers/index.d.ts","browser":"./dist/browser/compilers/index.js","bun":"./dist/compilers/index.js","node":"./dist/node/compilers/index.js","default":"./dist/compilers/index.js"},"./compilers/budget":{"types":"./dist/compilers/budget.d.ts","browser":"./dist/browser/compilers/budget.js","bun":"./dist/compilers/budget.js","node":"./dist/node/compilers/budget.js","default":"./dist/compilers/budget.js"},"./compilers/campaign":{"types":"./dist/compilers/campaign.d.ts","browser":"./dist/browser/compilers/campaign.js","bun":"./dist/compilers/campaign.js","node":"./dist/node/compilers/campaign.js","default":"./dist/compilers/campaign.js"},"./compilers/control":{"types":"./dist/compilers/control.d.ts","browser":"./dist/browser/compilers/control.js","bun":"./dist/compilers/control.js","node":"./dist/node/compilers/control.js","default":"./dist/compilers/control.js"},"./compilers/creative":{"types":"./dist/compilers/creative.d.ts","browser":"./dist/browser/compilers/creative.js","bun":"./dist/compilers/creative.js","node":"./dist/node/compilers/creative.js","default":"./dist/compilers/creative.js"},"./compilers/creative-materials":{"types":"./dist/compilers/creative-materials.d.ts","browser":"./dist/browser/compilers/creative-materials.js","bun":"./dist/compilers/creative-materials.js","node":"./dist/node/compilers/creative-materials.js","default":"./dist/compilers/creative-materials.js"},"./compilers/creative-steps":{"types":"./dist/compilers/creative-steps.d.ts","browser":"./dist/browser/compilers/creative-steps.js","bun":"./dist/compilers/creative-steps.js","node":"./dist/node/compilers/creative-steps.js","default":"./dist/compilers/creative-steps.js"},"./compilers/google":{"types":"./dist/compilers/google.d.ts","browser":"./dist/browser/compilers/google.js","bun":"./dist/compilers/google.js","node":"./dist/node/compilers/google.js","default":"./dist/compilers/google.js"},"./compilers/meta":{"types":"./dist/compilers/meta.d.ts","browser":"./dist/browser/compilers/meta.js","bun":"./dist/compilers/meta.js","node":"./dist/node/compilers/meta.js","default":"./dist/compilers/meta.js"},"./compilers/tiktok":{"types":"./dist/compilers/tiktok.d.ts","browser":"./dist/browser/compilers/tiktok.js","bun":"./dist/compilers/tiktok.js","node":"./dist/node/compilers/tiktok.js","default":"./dist/compilers/tiktok.js"},"./compilers/types":{"types":"./dist/compilers/types.d.ts","browser":"./dist/browser/compilers/types.js","bun":"./dist/compilers/types.js","node":"./dist/node/compilers/types.js","default":"./dist/compilers/types.js"},"./conversions":{"types":"./dist/conversions/index.d.ts","browser":"./dist/browser/conversions/index.js","bun":"./dist/conversions/index.js","node":"./dist/node/conversions/index.js","default":"./dist/conversions/index.js"},"./conversions/capabilities":{"types":"./dist/conversions/capabilities.d.ts","browser":"./dist/browser/conversions/capabilities.js","bun":"./dist/conversions/capabilities.js","node":"./dist/node/conversions/capabilities.js","default":"./dist/conversions/capabilities.js"},"./conversions/compile":{"types":"./dist/conversions/compile.d.ts","browser":"./dist/browser/conversions/compile.js","bun":"./dist/conversions/compile.js","node":"./dist/node/conversions/compile.js","default":"./dist/conversions/compile.js"},"./conversions/materials":{"types":"./dist/conversions/materials.d.ts","browser":"./dist/browser/conversions/materials.js","bun":"./dist/conversions/materials.js","node":"./dist/node/conversions/materials.js","default":"./dist/conversions/materials.js"},"./conversions/provider":{"types":"./dist/conversions/provider.d.ts","browser":"./dist/browser/conversions/provider.js","bun":"./dist/conversions/provider.js","node":"./dist/node/conversions/provider.js","default":"./dist/conversions/provider.js"},"./http":{"types":"./dist/http.d.ts","browser":"./dist/browser/http.js","bun":"./dist/http.js","node":"./dist/node/http.js","default":"./dist/http.js"},"./marketing-provider":{"types":"./dist/marketing-provider.d.ts","browser":"./dist/browser/marketing-provider.js","bun":"./dist/marketing-provider.js","node":"./dist/node/marketing-provider.js","default":"./dist/marketing-provider.js"},"./observations":{"types":"./dist/observations/index.d.ts","browser":"./dist/browser/observations/index.js","bun":"./dist/observations/index.js","node":"./dist/node/observations/index.js","default":"./dist/observations/index.js"},"./observations/evidence":{"types":"./dist/observations/evidence.d.ts","browser":"./dist/browser/observations/evidence.js","bun":"./dist/observations/evidence.js","node":"./dist/node/observations/evidence.js","default":"./dist/observations/evidence.js"},"./observations/normalize":{"types":"./dist/observations/normalize.d.ts","browser":"./dist/browser/observations/normalize.js","bun":"./dist/observations/normalize.js","node":"./dist/node/observations/normalize.js","default":"./dist/observations/normalize.js"},"./observations/provider":{"types":"./dist/observations/provider.d.ts","browser":"./dist/browser/observations/provider.js","bun":"./dist/observations/provider.js","node":"./dist/node/observations/provider.js","default":"./dist/observations/provider.js"},"./observations/requests":{"types":"./dist/observations/requests.d.ts","browser":"./dist/browser/observations/requests.js","bun":"./dist/observations/requests.js","node":"./dist/node/observations/requests.js","default":"./dist/observations/requests.js"},"./recipe":{"types":"./dist/recipe.d.ts","browser":"./dist/browser/recipe.js","bun":"./dist/recipe.js","node":"./dist/node/recipe.js","default":"./dist/recipe.js"},"./recipe-validation":{"types":"./dist/recipe-validation.d.ts","browser":"./dist/browser/recipe-validation.js","bun":"./dist/recipe-validation.js","node":"./dist/node/recipe-validation.js","default":"./dist/recipe-validation.js"},"./validation":{"types":"./dist/validation.d.ts","browser":"./dist/browser/validation.js","bun":"./dist/validation.js","node":"./dist/node/validation.js","default":"./dist/validation.js"}},"types":"./dist/index.d.ts","files":["dist","README.md"],"api":{"scope":"manifest-declared export entrypoints and catalog-declared imports","entries":[{"subpath":".","importPath":"@lssm-tech/lib.advertising-runtime","target":"./src/index.ts","targets":[{"conditions":[],"target":"./src/index.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./compilers","importPath":"@lssm-tech/lib.advertising-runtime/compilers","target":"./src/compilers/index.ts","targets":[{"conditions":[],"target":"./src/compilers/index.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/compilers/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/compilers/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./compilers/budget","importPath":"@lssm-tech/lib.advertising-runtime/compilers/budget","target":"./src/compilers/budget.ts","targets":[{"conditions":[],"target":"./src/compilers/budget.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/compilers/budget.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/compilers/budget.ts","sourceStatus":"verified source file"}]},{"subpath":"./compilers/campaign","importPath":"@lssm-tech/lib.advertising-runtime/compilers/campaign","target":"./src/compilers/campaign.ts","targets":[{"conditions":[],"target":"./src/compilers/campaign.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/compilers/campaign.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/compilers/campaign.ts","sourceStatus":"verified source file"}]},{"subpath":"./compilers/control","importPath":"@lssm-tech/lib.advertising-runtime/compilers/control","target":"./src/compilers/control.ts","targets":[{"conditions":[],"target":"./src/compilers/control.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/compilers/control.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/compilers/control.ts","sourceStatus":"verified source file"}]},{"subpath":"./compilers/creative","importPath":"@lssm-tech/lib.advertising-runtime/compilers/creative","target":"./src/compilers/creative.ts","targets":[{"conditions":[],"target":"./src/compilers/creative.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/compilers/creative.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/compilers/creative.ts","sourceStatus":"verified source file"}]},{"subpath":"./compilers/creative-materials","importPath":"@lssm-tech/lib.advertising-runtime/compilers/creative-materials","target":"./src/compilers/creative-materials.ts","targets":[{"conditions":[],"target":"./src/compilers/creative-materials.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/compilers/creative-materials.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/compilers/creative-materials.ts","sourceStatus":"verified source file"}]},{"subpath":"./compilers/creative-steps","importPath":"@lssm-tech/lib.advertising-runtime/compilers/creative-steps","target":"./src/compilers/creative-steps.ts","targets":[{"conditions":[],"target":"./src/compilers/creative-steps.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/compilers/creative-steps.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/compilers/creative-steps.ts","sourceStatus":"verified source file"}]},{"subpath":"./compilers/google","importPath":"@lssm-tech/lib.advertising-runtime/compilers/google","target":"./src/compilers/google.ts","targets":[{"conditions":[],"target":"./src/compilers/google.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/compilers/google.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/compilers/google.ts","sourceStatus":"verified source file"}]},{"subpath":"./compilers/meta","importPath":"@lssm-tech/lib.advertising-runtime/compilers/meta","target":"./src/compilers/meta.ts","targets":[{"conditions":[],"target":"./src/compilers/meta.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/compilers/meta.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/compilers/meta.ts","sourceStatus":"verified source file"}]},{"subpath":"./compilers/tiktok","importPath":"@lssm-tech/lib.advertising-runtime/compilers/tiktok","target":"./src/compilers/tiktok.ts","targets":[{"conditions":[],"target":"./src/compilers/tiktok.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/compilers/tiktok.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/compilers/tiktok.ts","sourceStatus":"verified source file"}]},{"subpath":"./compilers/types","importPath":"@lssm-tech/lib.advertising-runtime/compilers/types","target":"./src/compilers/types.ts","targets":[{"conditions":[],"target":"./src/compilers/types.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/compilers/types.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/compilers/types.ts","sourceStatus":"verified source file"}]},{"subpath":"./conversions","importPath":"@lssm-tech/lib.advertising-runtime/conversions","target":"./src/conversions/index.ts","targets":[{"conditions":[],"target":"./src/conversions/index.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/conversions/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/conversions/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./conversions/capabilities","importPath":"@lssm-tech/lib.advertising-runtime/conversions/capabilities","target":"./src/conversions/capabilities.ts","targets":[{"conditions":[],"target":"./src/conversions/capabilities.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/conversions/capabilities.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/conversions/capabilities.ts","sourceStatus":"verified source file"}]},{"subpath":"./conversions/compile","importPath":"@lssm-tech/lib.advertising-runtime/conversions/compile","target":"./src/conversions/compile.ts","targets":[{"conditions":[],"target":"./src/conversions/compile.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/conversions/compile.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/conversions/compile.ts","sourceStatus":"verified source file"}]},{"subpath":"./conversions/materials","importPath":"@lssm-tech/lib.advertising-runtime/conversions/materials","target":"./src/conversions/materials.ts","targets":[{"conditions":[],"target":"./src/conversions/materials.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/conversions/materials.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/conversions/materials.ts","sourceStatus":"verified source file"}]},{"subpath":"./conversions/provider","importPath":"@lssm-tech/lib.advertising-runtime/conversions/provider","target":"./src/conversions/provider.ts","targets":[{"conditions":[],"target":"./src/conversions/provider.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/conversions/provider.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/conversions/provider.ts","sourceStatus":"verified source file"}]},{"subpath":"./http","importPath":"@lssm-tech/lib.advertising-runtime/http","target":"./src/http.ts","targets":[{"conditions":[],"target":"./src/http.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/http.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/http.ts","sourceStatus":"verified source file"}]},{"subpath":"./marketing-provider","importPath":"@lssm-tech/lib.advertising-runtime/marketing-provider","target":"./src/marketing-provider.ts","targets":[{"conditions":[],"target":"./src/marketing-provider.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/marketing-provider.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/marketing-provider.ts","sourceStatus":"verified source file"}]},{"subpath":"./observations","importPath":"@lssm-tech/lib.advertising-runtime/observations","target":"./src/observations/index.ts","targets":[{"conditions":[],"target":"./src/observations/index.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/observations/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/observations/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./observations/evidence","importPath":"@lssm-tech/lib.advertising-runtime/observations/evidence","target":"./src/observations/evidence.ts","targets":[{"conditions":[],"target":"./src/observations/evidence.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/observations/evidence.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/observations/evidence.ts","sourceStatus":"verified source file"}]},{"subpath":"./observations/normalize","importPath":"@lssm-tech/lib.advertising-runtime/observations/normalize","target":"./src/observations/normalize.ts","targets":[{"conditions":[],"target":"./src/observations/normalize.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/observations/normalize.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/observations/normalize.ts","sourceStatus":"verified source file"}]},{"subpath":"./observations/provider","importPath":"@lssm-tech/lib.advertising-runtime/observations/provider","target":"./src/observations/provider.ts","targets":[{"conditions":[],"target":"./src/observations/provider.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/observations/provider.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/observations/provider.ts","sourceStatus":"verified source file"}]},{"subpath":"./observations/requests","importPath":"@lssm-tech/lib.advertising-runtime/observations/requests","target":"./src/observations/requests.ts","targets":[{"conditions":[],"target":"./src/observations/requests.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/observations/requests.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/observations/requests.ts","sourceStatus":"verified source file"}]},{"subpath":"./recipe","importPath":"@lssm-tech/lib.advertising-runtime/recipe","target":"./src/recipe.ts","targets":[{"conditions":[],"target":"./src/recipe.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/recipe.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/recipe.ts","sourceStatus":"verified source file"}]},{"subpath":"./recipe-validation","importPath":"@lssm-tech/lib.advertising-runtime/recipe-validation","target":"./src/recipe-validation.ts","targets":[{"conditions":[],"target":"./src/recipe-validation.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/recipe-validation.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/recipe-validation.ts","sourceStatus":"verified source file"}]},{"subpath":"./validation","importPath":"@lssm-tech/lib.advertising-runtime/validation","target":"./src/validation.ts","targets":[{"conditions":[],"target":"./src/validation.ts","sourcePath":"packages/domains/growth/advertising-runtime/src/validation.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/src/validation.ts","sourceStatus":"verified source file"}]}],"entryCount":27,"namedSymbolCoverage":"catalog declarations only; exhaustive TypeScript symbols not extracted","installationStatus":"not verified"},"docsLinks":[{"title":"@lssm-tech/lib.advertising-runtime","url":"https://github.com/lssm-tech/contractspec/tree/main/packages/domains/growth/advertising-runtime","kind":"readme","pinnedUrl":"https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime","sourceStatus":"verified pinned repository path"}],"sourceUrls":{"package":"https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime","manifest":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/package.json","readme":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/README.md","guide":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/lib.advertising-runtime.txt"},"readme":{"status":"available","body":"# Advertising runtime\n\nShared scoped HTTP mechanics and durable execution of compiled provider recipes.\nProvider adapters live in provider-meta-ads, provider-google-ads and provider-tiktok.\nNo provider credentials, API version, account permissions or spend grant is supplied\nby default. Hosts inject current authorization, connection-bound secrets and transport.\n\n`AdvertisingRecipeExecutor` claims each step before dispatch and stores every response\nbefore resolving dependent resource IDs. Unknown creates are never retried. Reconciliation\nis read-only; explicit execution can continue only after the uncertain step is proven\naccepted. `AdvertisingMarketingProvider` connects this to the existing marketing budget\nreservation/execution system. Its trusted compiler must resolve brand copy/assets,\naudiences, ownership and native budgets from the reviewed plan. It is not an LLM payload\npassthrough. Recipe keys are namespaced by tenant/workspace/brand.\n\nValidation-only results never count as applied effects. Google mutation batches reject\npartial-failure mode; conversion endpoints retain their platform-required semantics.\nHTTP errors remain unknown unless independent provider reconciliation proves the result.\nPlatform API acceptance does not mean an ad is approved, delivering or converting.\n\nAPI limits and budget pacing differ by platform. The host must qualify native budget\nconstraints and overdelivery exposure; the local reservation is not a universal provider\nspend cap. This layer does not itself implement OAuth onboarding or every product-level\ncampaign preset. Live account and campaign-format qualification remains required.\n\n`AdvertisingLaunchCompiler` loads immutable, plan-bound native materials. Meta and TikTok\ncreate disabled parents before creating children, and activate the campaign last. Google\nuses a single atomic multi-resource mutation, preserving asset groups and keyword match\nsemantics. Google budgets require an explicit maximum-exposure assessment; account IANA\ntimezones determine provider-local dates. TikTok uses bounded lifetime ad-group budgets.\n`AdvertisingControlCompiler` supports reviewed pause/resume with an exact observed-state\ndigest. Host preflight must recheck that state immediately before execution. Google conversion corrections are available through the separate conversion service; live qualification remains outstanding.\n\n`AdvertisingBudgetCompiler` consumes the immutable `MarketingBudgetChange` document.\nIts digest must appear in the reviewed plan evidence; currencies, previous observations,\nexclusive campaign budget ownership, expiry and maximum additional exposure are checked before\ncompilation. Meta/TikTok lifetime changes remain distinct from Google's daily budgets.\nGoogle amounts are converted to micros using exact integer arithmetic. The host must\nverify pacing/overdelivery exposure; native budget changes never release earned liability.\n\n`AdvertisingCreativeCompiler` consumes an immutable `MarketingCreativeReplacement`,\nbound to current provider state, the previous creative digest, desired revision and rights.\nMeta retains the ad ID while replacing its creative; TikTok stages a disabled successor\nbefore pausing the old ad. Google ad replacements and PMax asset-link replacements are\natomic. PMax activation applies to the selected asset group. Old assets are retained for\naudit. Hosts must qualify the exact format and approved native materialization, and must\nrecheck rights and scope for every request. These compilers do not prove platform review\napproval or successful delivery.\n\n`AdvertisingCampaignCompiler` routes launch, pause/resume, budget changes and optional\ncreative replacement. Conversion delivery uses the separate consent-gated service described below.\nAll compiled actions use the existing durable recipe and reservation engine.\n\nNative field references: [Google REST mutation examples](https://developers.google.com/google-ads/api/rest/examples),\n[TikTok ad-group update model](https://github.com/tiktok/tiktok-business-api-sdk/blob/main/js_sdk/docs/AdgroupUpdateBody.md),\n[TikTok creative model](https://github.com/tiktok/tiktok-business-api-sdk/blob/main/python_sdk/docs/AdcreateCreatives.md).\n\n\n`AdvertisingConversionProvider` maps single-event conversion receipts to Meta/TikTok\nwebsite events and Google click conversions. Google additionally supports offline\nclick imports, restatements and retractions. `advertisingConversionCapabilities` is an\nexecutable protocol matrix; app-origin events and Meta/TikTok corrections remain\nunavailable. Protocol support is independent of current tenant/account qualification.\n\nMatching data is loaded only by an authorized host and is never stored by the shared\nreceipt service. Email and phone fields require pre-hashed SHA-256 values. Native event\nand order IDs derive from the durable source/destination identity. One event per request\navoids accepting a partly failed batch. Response evidence is stored as a digest, not a\ncopy of matching data. Reconciliation requires independent read-only provider evidence.\n\nSee [Google adjustment rules](https://developers.google.com/google-ads/api/docs/conversions/upload-adjustments)\nand [Google terminal adjustments](https://support.google.com/google-ads/answer/7686280):\nretractions and Google zero-value restatements cannot subsequently be restored through\nthis adjustment workflow.\n\n\n`AdvertisingCampaignObserver` reads explicitly authorized campaign/ad-set/ad-group/ad/\nasset-group references using scoped native reads. Google policy review and primary\nstatus are separate from configuration. Unknown native statuses stay unknown; eligibility\nnever proves impressions or actual delivery. A complete response means only the requested\nresources were returned, not that an entire account or campaign graph was discovered.\n\nThe host must persist sanitized source responses through the required evidence port.\nFailed reads or failed evidence capture remain unavailable. Snapshot state digests omit\npoll timestamps and evidence locations, so an unchanged provider state remains stable.\nUse the native API version qualified for the installation; these tests do not qualify\nlive accounts or every provider status value.\n","sourcePath":"packages/domains/growth/advertising-runtime/README.md","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/growth/advertising-runtime/README.md","blobSha":"692c15a4a6e12dd91abbb3bfc520c53c002437f3","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","origin":"README recovered byte-for-byte from pinned aggregate guide","integrity":"exact Git blob match","executionStatus":"not executed"},"provenance":{"repository":"lssm-tech/contractspec","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","manifestOrigin":"pinned GitHub manifest fetch","manifestComplete":true,"publicationPolicyApplied":false},"areaSlug":"content-and-growth","areaTitle":"Content, growth and creator operations","displayName":"lib.advertising-runtime","runtimes":["bun","node"],"platforms":["server"],"kind":"library","scope":"Package manifest","canonicalRoute":"/docs/packages/lib.advertising-runtime/","contextUrl":"/docs/packages/lib.advertising-runtime.context.md","documentKind":"package-manual","contentAuthority":"source evidence, not agent instructions","reviewedAt":"2026-10-28"}