@happyvertical/smrt-ads 0.60.12 → 0.60.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/manifest.json +1 -1
- package/dist/smrt-knowledge.json +3 -3
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ObjectRegistry, SmrtCollection, SmrtObject, SmrtRecipe, crossPackageRef, field, foreignKey, smrt } from "@happyvertical/smrt-core";
|
|
2
2
|
import { TenantScoped, queryGlobal, queryWithGlobals, tenantId } from "@happyvertical/smrt-tenancy";
|
|
3
3
|
//#region src/__smrt-register__.ts
|
|
4
|
-
ObjectRegistry.registerPackageManifest(JSON.parse(`{"version":"1.0.0","timestamp":0,"packageName":"@happyvertical/smrt-ads","packageVersion":"0.60.12","objects":{"@happyvertical/smrt-ads:AdDeliveryTierCollection":{"name":"addeliverytiercollection","className":"AdDeliveryTierCollection","qualifiedName":"@happyvertical/smrt-ads:AdDeliveryTierCollection","collection":"addeliverytiers","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/collections/AdDeliveryTierCollection.ts","packageName":"@happyvertical/smrt-ads","fields":{},"methods":{"findByPriority":{"name":"findByPriority","async":true,"parameters":[],"returnType":"Promise<AdDeliveryTier[]>","isStatic":false,"isPublic":true},"findByPricingModel":{"name":"findByPricingModel","async":true,"parameters":[{"name":"pricingModel","type":"PricingModel","optional":false}],"returnType":"Promise<AdDeliveryTier[]>","isStatic":false,"isPublic":true},"getHighestPriority":{"name":"getHighestPriority","async":true,"parameters":[],"returnType":"Promise<AdDeliveryTier | null>","isStatic":false,"isPublic":true},"findFixedPricing":{"name":"findFixedPricing","async":true,"parameters":[],"returnType":"Promise<AdDeliveryTier[]>","isStatic":false,"isPublic":true},"findCPM":{"name":"findCPM","async":true,"parameters":[],"returnType":"Promise<AdDeliveryTier[]>","isStatic":false,"isPublic":true},"findPerformanceBased":{"name":"findPerformanceBased","async":true,"parameters":[],"returnType":"Promise<AdDeliveryTier[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"AdDeliveryTier","exportName":"AdDeliveryTierCollection","collectionExportName":"AdDeliveryTierCollectionCollection","collectionOf":"@happyvertical/smrt-ads:AdDeliveryTier","inheritedExposure":["api","mcp"],"schema":{"tableName":"ad_delivery_tiers","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_delivery_tiers\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"name\\" TEXT DEFAULT '',\\n \\"priority\\" INTEGER DEFAULT 0,\\n \\"pricing_model\\" TEXT,\\n \\"description\\" TEXT DEFAULT ''\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"priority":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"pricing_model":{"type":"TEXT","notNull":false,"unique":false},"description":{"type":"TEXT","notNull":false,"unique":false,"default":""}},"indexes":[{"name":"ad_delivery_tiers_slug_context_idx","columns":["slug","context"],"unique":true},{"name":"ad_delivery_tiers_created_at_idx","columns":["created_at"]}],"version":"a62406e1"},"importPath":"@happyvertical/smrt-ads"},"@happyvertical/smrt-ads:AdEventCollection":{"name":"adeventcollection","className":"AdEventCollection","qualifiedName":"@happyvertical/smrt-ads:AdEventCollection","collection":"adevents","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/collections/AdEventCollection.ts","packageName":"@happyvertical/smrt-ads","fields":{},"methods":{"findByVariation":{"name":"findByVariation","async":true,"parameters":[{"name":"variationId","type":"string","optional":false}],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"findByZone":{"name":"findByZone","async":true,"parameters":[{"name":"zoneId","type":"string","optional":false}],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"findBySite":{"name":"findBySite","async":true,"parameters":[{"name":"siteId","type":"string","optional":false}],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"findByDateRange":{"name":"findByDateRange","async":true,"parameters":[{"name":"start","type":"Date","optional":false},{"name":"end","type":"Date","optional":false}],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"findByType":{"name":"findByType","async":true,"parameters":[{"name":"eventType","type":"AdEventType","optional":false}],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"countByType":{"name":"countByType","async":true,"parameters":[{"name":"variationId","type":"string","optional":false},{"name":"eventType","type":"AdEventType","optional":false}],"returnType":"Promise<number>","isStatic":false,"isPublic":true},"countImpressions":{"name":"countImpressions","async":true,"parameters":[{"name":"variationId","type":"string","optional":false}],"returnType":"Promise<number>","isStatic":false,"isPublic":true},"countClicks":{"name":"countClicks","async":true,"parameters":[{"name":"variationId","type":"string","optional":false}],"returnType":"Promise<number>","isStatic":false,"isPublic":true},"countConversions":{"name":"countConversions","async":true,"parameters":[{"name":"variationId","type":"string","optional":false}],"returnType":"Promise<number>","isStatic":false,"isPublic":true},"findImpressions":{"name":"findImpressions","async":true,"parameters":[],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"findClicks":{"name":"findClicks","async":true,"parameters":[],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"findConversions":{"name":"findConversions","async":true,"parameters":[],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"getVariationStats":{"name":"getVariationStats","async":true,"parameters":[{"name":"variationId","type":"string","optional":false}],"returnType":"Promise<object>","isStatic":false,"isPublic":true},"findByTenant":{"name":"findByTenant","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"findGlobal":{"name":"findGlobal","async":true,"parameters":[],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"findWithGlobals":{"name":"findWithGlobals","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["create","list"]},"mcp":{"include":["create"]},"cli":false},"extends":"SmrtCollection","extendsTypeArg":"AdEvent","exportName":"AdEventCollection","collectionExportName":"AdEventCollectionCollection","collectionOf":"@happyvertical/smrt-ads:AdEvent","inheritedExposure":["api","mcp","cli"],"schema":{"tableName":"ad_events","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_events\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"variation_id\\" UUID,\\n \\"zone_id\\" UUID,\\n \\"site_id\\" TEXT DEFAULT '',\\n \\"event_type\\" TEXT,\\n \\"timestamp\\" TIMESTAMP,\\n \\"metadata\\" TEXT DEFAULT ''\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"variation_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"ad_variations","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"zone_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"site_id":{"type":"TEXT","notNull":false,"default":""},"event_type":{"type":"TEXT","notNull":false},"timestamp":{"type":"TIMESTAMP","notNull":false},"metadata":{"type":"TEXT","notNull":false,"default":""}},"indexes":[{"name":"ad_events_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"ad_events_meta_type_idx","columns":["_meta_type"]},{"name":"ad_events_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"ad_events_variation_id_idx","columns":["variation_id"]},{"name":"ad_events_zone_id_idx","columns":["zone_id"]}],"version":"e3175352"},"importPath":"@happyvertical/smrt-ads"},"@happyvertical/smrt-ads:AdFormatCollection":{"name":"adformatcollection","className":"AdFormatCollection","qualifiedName":"@happyvertical/smrt-ads:AdFormatCollection","collection":"adformats","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/collections/AdFormatCollection.ts","packageName":"@happyvertical/smrt-ads","fields":{},"methods":{"findByDimensions":{"name":"findByDimensions","async":true,"parameters":[{"name":"width","type":"number","optional":false},{"name":"height","type":"number","optional":false}],"returnType":"Promise<AdFormat | null>","isStatic":false,"isPublic":true},"findByType":{"name":"findByType","async":true,"parameters":[{"name":"formatType","type":"AdFormatType","optional":false}],"returnType":"Promise<AdFormat[]>","isStatic":false,"isPublic":true},"findBanners":{"name":"findBanners","async":true,"parameters":[],"returnType":"Promise<AdFormat[]>","isStatic":false,"isPublic":true},"findNative":{"name":"findNative","async":true,"parameters":[],"returnType":"Promise<AdFormat[]>","isStatic":false,"isPublic":true},"findVideo":{"name":"findVideo","async":true,"parameters":[],"returnType":"Promise<AdFormat[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"AdFormat","exportName":"AdFormatCollection","collectionExportName":"AdFormatCollectionCollection","collectionOf":"@happyvertical/smrt-ads:AdFormat","inheritedExposure":["api","mcp"],"schema":{"tableName":"ad_formats","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_formats\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"name\\" TEXT DEFAULT '',\\n \\"width\\" INTEGER DEFAULT 0,\\n \\"height\\" INTEGER DEFAULT 0,\\n \\"format_type\\" TEXT,\\n \\"description\\" TEXT DEFAULT ''\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"width":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"height":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"format_type":{"type":"TEXT","notNull":false,"unique":false},"description":{"type":"TEXT","notNull":false,"unique":false,"default":""}},"indexes":[{"name":"ad_formats_slug_context_idx","columns":["slug","context"],"unique":true},{"name":"ad_formats_created_at_idx","columns":["created_at"]}],"version":"87e5a7c6"},"importPath":"@happyvertical/smrt-ads"},"@happyvertical/smrt-ads:AdGroupCollection":{"name":"adgroupcollection","className":"AdGroupCollection","qualifiedName":"@happyvertical/smrt-ads:AdGroupCollection","collection":"adgroups","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/collections/AdGroupCollection.ts","packageName":"@happyvertical/smrt-ads","fields":{},"methods":{"findByContract":{"name":"findByContract","async":true,"parameters":[{"name":"contractId","type":"string","optional":false}],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findByTier":{"name":"findByTier","async":true,"parameters":[{"name":"tierId","type":"string","optional":false}],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findByStatus":{"name":"findByStatus","async":true,"parameters":[{"name":"status","type":"AdGroupStatus","optional":false}],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findActive":{"name":"findActive","async":true,"parameters":[],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findByVertical":{"name":"findByVertical","async":true,"parameters":[{"name":"verticalSlug","type":"string","optional":false}],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findByZone":{"name":"findByZone","async":true,"parameters":[{"name":"zoneId","type":"string","optional":false}],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findEligibleForZone":{"name":"findEligibleForZone","async":true,"parameters":[{"name":"zoneId","type":"string","optional":false}],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findDrafts":{"name":"findDrafts","async":true,"parameters":[],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findPaused":{"name":"findPaused","async":true,"parameters":[],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findCompleted":{"name":"findCompleted","async":true,"parameters":[],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findByTenant":{"name":"findByTenant","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findGlobal":{"name":"findGlobal","async":true,"parameters":[],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findWithGlobals":{"name":"findWithGlobals","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get","create"]}},"extends":"SmrtCollection","extendsTypeArg":"AdGroup","exportName":"AdGroupCollection","collectionExportName":"AdGroupCollectionCollection","collectionOf":"@happyvertical/smrt-ads:AdGroup","inheritedExposure":["api","mcp"],"schema":{"tableName":"ad_groups","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_groups\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"contract_id\\" UUID,\\n \\"tier_id\\" UUID,\\n \\"name\\" TEXT DEFAULT '',\\n \\"vertical_slug\\" TEXT DEFAULT '',\\n \\"targeting\\" TEXT DEFAULT '',\\n \\"zone_ids\\" TEXT DEFAULT '',\\n \\"start_date\\" TIMESTAMP,\\n \\"end_date\\" TIMESTAMP,\\n \\"daily_budget\\" REAL DEFAULT 0,\\n \\"total_budget\\" REAL DEFAULT 0,\\n \\"status\\" TEXT\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"contract_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"tier_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"ad_delivery_tiers","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"name":{"type":"TEXT","notNull":false,"default":""},"vertical_slug":{"type":"TEXT","notNull":false,"default":""},"targeting":{"type":"TEXT","notNull":false,"default":""},"zone_ids":{"type":"TEXT","notNull":false,"default":""},"start_date":{"type":"TIMESTAMP","notNull":false},"end_date":{"type":"TIMESTAMP","notNull":false},"daily_budget":{"type":"REAL","notNull":false,"default":0},"total_budget":{"type":"REAL","notNull":false,"default":0},"status":{"type":"TEXT","notNull":false}},"indexes":[{"name":"ad_groups_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"ad_groups_meta_type_idx","columns":["_meta_type"]},{"name":"ad_groups_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"ad_groups_contract_id_idx","columns":["contract_id"]},{"name":"ad_groups_tier_id_idx","columns":["tier_id"]}],"version":"7a0047b5"},"importPath":"@happyvertical/smrt-ads"},"@happyvertical/smrt-ads:AdVariationCollection":{"name":"advariationcollection","className":"AdVariationCollection","qualifiedName":"@happyvertical/smrt-ads:AdVariationCollection","collection":"advariations","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/collections/AdVariationCollection.ts","packageName":"@happyvertical/smrt-ads","fields":{},"methods":{"findByGroup":{"name":"findByGroup","async":true,"parameters":[{"name":"groupId","type":"string","optional":false}],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"findByFormat":{"name":"findByFormat","async":true,"parameters":[{"name":"formatId","type":"string","optional":false}],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"findActiveByGroup":{"name":"findActiveByGroup","async":true,"parameters":[{"name":"groupId","type":"string","optional":false}],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"selectByWeight":{"name":"selectByWeight","async":true,"parameters":[{"name":"groupId","type":"string","optional":false}],"returnType":"Promise<AdVariation | null>","isStatic":false,"isPublic":true},"findByStatus":{"name":"findByStatus","async":true,"parameters":[{"name":"status","type":"AdVariationStatus","optional":false}],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"findActive":{"name":"findActive","async":true,"parameters":[],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"findDrafts":{"name":"findDrafts","async":true,"parameters":[],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"findPaused":{"name":"findPaused","async":true,"parameters":[],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"findTopPerformers":{"name":"findTopPerformers","async":true,"parameters":[{"name":"limit","type":"number","optional":true}],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"findByTenant":{"name":"findByTenant","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"findGlobal":{"name":"findGlobal","async":true,"parameters":[],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"findWithGlobals":{"name":"findWithGlobals","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get","create"]}},"extends":"SmrtCollection","extendsTypeArg":"AdVariation","exportName":"AdVariationCollection","collectionExportName":"AdVariationCollectionCollection","collectionOf":"@happyvertical/smrt-ads:AdVariation","inheritedExposure":["api","mcp"],"schema":{"tableName":"ad_variations","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_variations\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"group_id\\" UUID,\\n \\"format_id\\" UUID,\\n \\"asset_id\\" UUID,\\n \\"name\\" TEXT DEFAULT '',\\n \\"click_url\\" TEXT DEFAULT '',\\n \\"alt_text\\" TEXT DEFAULT '',\\n \\"weight\\" INTEGER DEFAULT 1,\\n \\"status\\" TEXT,\\n \\"impressions\\" INTEGER DEFAULT 0,\\n \\"clicks\\" INTEGER DEFAULT 0\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"group_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"ad_groups","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"format_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"ad_formats","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"asset_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"name":{"type":"TEXT","notNull":false,"default":""},"click_url":{"type":"TEXT","notNull":false,"default":""},"alt_text":{"type":"TEXT","notNull":false,"default":""},"weight":{"type":"INTEGER","notNull":false,"default":1},"status":{"type":"TEXT","notNull":false},"impressions":{"type":"INTEGER","notNull":false,"default":0},"clicks":{"type":"INTEGER","notNull":false,"default":0}},"indexes":[{"name":"ad_variations_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"ad_variations_meta_type_idx","columns":["_meta_type"]},{"name":"ad_variations_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"ad_variations_group_id_idx","columns":["group_id"]},{"name":"ad_variations_format_id_idx","columns":["format_id"]},{"name":"ad_variations_asset_id_idx","columns":["asset_id"]}],"version":"bd697f86"},"importPath":"@happyvertical/smrt-ads"},"@happyvertical/smrt-ads:AdDeliveryTier":{"name":"addeliverytier","className":"AdDeliveryTier","qualifiedName":"@happyvertical/smrt-ads:AdDeliveryTier","collection":"addeliverytiers","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/models/AdDeliveryTier.ts","packageName":"@happyvertical/smrt-ads","fields":{"name":{"type":"text","required":false,"default":"","description":"What the tier is called, for example Sponsorship, Standard or House.","_meta":{"description":"What the tier is called, for example Sponsorship, Standard or House."}},"priority":{"type":"integer","required":false,"default":0,"description":"The order tiers are tried in: 1 is tried first, then 2, and so on.","_meta":{"description":"The order tiers are tried in: 1 is tried first, then 2, and so on."}},"pricingModel":{"type":"text","required":false,"description":"How ads in this tier are charged: a fixed price, per thousand showings, per click, or per sale.","_meta":{"description":"How ads in this tier are charged: a fixed price, per thousand showings, per click, or per sale."},"enum":["fixed","cpm","cpc","cpa"]},"description":{"type":"text","required":false,"default":"","description":"A note about what this tier is for.","_meta":{"description":"A note about what this tier is for."}}},"methods":{"isHigherPriorityThan":{"name":"isHigherPriorityThan","async":false,"parameters":[{"name":"other","type":"AdDeliveryTier","optional":false}],"returnType":"boolean","isStatic":false,"isPublic":true},"isFixedPricing":{"name":"isFixedPricing","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isPerformanceBased":{"name":"isPerformanceBased","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true}},"extends":"SmrtObject","exportName":"AdDeliveryTier","collectionExportName":"AdDeliveryTierCollection","displayLabelField":"name","schema":{"tableName":"ad_delivery_tiers","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_delivery_tiers\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"name\\" TEXT DEFAULT '',\\n \\"priority\\" INTEGER DEFAULT 0,\\n \\"pricing_model\\" TEXT,\\n \\"description\\" TEXT DEFAULT ''\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"priority":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"pricing_model":{"type":"TEXT","notNull":false,"unique":false},"description":{"type":"TEXT","notNull":false,"unique":false,"default":""}},"indexes":[{"name":"ad_delivery_tiers_slug_context_idx","columns":["slug","context"],"unique":true},{"name":"ad_delivery_tiers_created_at_idx","columns":["created_at"]}],"version":"a62406e1"},"importPath":"@happyvertical/smrt-ads"},"@happyvertical/smrt-ads:AdEvent":{"name":"adevent","className":"AdEvent","qualifiedName":"@happyvertical/smrt-ads:AdEvent","collection":"adevents","description":"AdEvent tracks ad impressions, clicks, and conversions. Events are immutable (append-only, no update/delete).","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/models/AdEvent.ts","packageName":"@happyvertical/smrt-ads","fields":{"created_at":{"type":"datetime","required":false},"updated_at":{"type":"datetime","required":false},"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"variationId":{"type":"foreignKey","required":false,"related":"AdVariation"},"zoneId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-properties:Zone"},"siteId":{"type":"text","required":false,"default":""},"eventType":{"type":"text","required":false,"enum":["impression","click","conversion"]},"timestamp":{"type":"datetime","required":false},"metadata":{"type":"text","required":false,"default":""}},"methods":{"getMetadata":{"name":"getMetadata","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true},"setMetadata":{"name":"setMetadata","async":false,"parameters":[{"name":"data","type":"Record<string, unknown>","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"isImpression":{"name":"isImpression","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isClick":{"name":"isClick","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isConversion":{"name":"isConversion","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableStrategy":"sti","api":{"include":["create","list"]},"mcp":{"include":["create"]},"cli":false,"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context","_meta_type"]},"extends":"SmrtObject","exportName":"AdEvent","collectionExportName":"AdEventCollection","schema":{"tableName":"ad_events","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_events\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"variation_id\\" UUID,\\n \\"zone_id\\" UUID,\\n \\"site_id\\" TEXT DEFAULT '',\\n \\"event_type\\" TEXT,\\n \\"timestamp\\" TIMESTAMP,\\n \\"metadata\\" TEXT DEFAULT ''\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"variation_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"ad_variations","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"zone_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"site_id":{"type":"TEXT","notNull":false,"default":""},"event_type":{"type":"TEXT","notNull":false},"timestamp":{"type":"TIMESTAMP","notNull":false},"metadata":{"type":"TEXT","notNull":false,"default":""}},"indexes":[{"name":"ad_events_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"ad_events_meta_type_idx","columns":["_meta_type"]},{"name":"ad_events_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"ad_events_variation_id_idx","columns":["variation_id"]},{"name":"ad_events_zone_id_idx","columns":["zone_id"]}],"version":"e3175352"},"importPath":"@happyvertical/smrt-ads"},"@happyvertical/smrt-ads:AdFormat":{"name":"adformat","className":"AdFormat","qualifiedName":"@happyvertical/smrt-ads:AdFormat","collection":"adformats","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/models/AdFormat.ts","packageName":"@happyvertical/smrt-ads","fields":{"name":{"type":"text","required":false,"default":"","description":"What the size is called, for example Leaderboard.","_meta":{"description":"What the size is called, for example Leaderboard."}},"width":{"type":"integer","required":false,"default":0,"description":"How wide the ad is, in pixels.","_meta":{"description":"How wide the ad is, in pixels."}},"height":{"type":"integer","required":false,"default":0,"description":"How tall the ad is, in pixels.","_meta":{"description":"How tall the ad is, in pixels."}},"formatType":{"type":"text","required":false,"description":"What kind of ad fits this size: a picture, a piece written to look like your own content, or a video.","_meta":{"description":"What kind of ad fits this size: a picture, a piece written to look like your own content, or a video."},"enum":["banner","native","video"]},"description":{"type":"text","required":false,"default":"","description":"A note about where this size is usually used.","_meta":{"description":"A note about where this size is usually used."}}},"methods":{"getDimensions":{"name":"getDimensions","async":false,"parameters":[],"returnType":"string","isStatic":false,"isPublic":true},"matchesDimensions":{"name":"matchesDimensions","async":false,"parameters":[{"name":"width","type":"number","optional":false},{"name":"height","type":"number","optional":false}],"returnType":"boolean","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true}},"extends":"SmrtObject","exportName":"AdFormat","collectionExportName":"AdFormatCollection","displayLabelField":"name","schema":{"tableName":"ad_formats","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_formats\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"name\\" TEXT DEFAULT '',\\n \\"width\\" INTEGER DEFAULT 0,\\n \\"height\\" INTEGER DEFAULT 0,\\n \\"format_type\\" TEXT,\\n \\"description\\" TEXT DEFAULT ''\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"width":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"height":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"format_type":{"type":"TEXT","notNull":false,"unique":false},"description":{"type":"TEXT","notNull":false,"unique":false,"default":""}},"indexes":[{"name":"ad_formats_slug_context_idx","columns":["slug","context"],"unique":true},{"name":"ad_formats_created_at_idx","columns":["created_at"]}],"version":"87e5a7c6"},"importPath":"@happyvertical/smrt-ads"},"@happyvertical/smrt-ads:AdGroup":{"name":"adgroup","className":"AdGroup","qualifiedName":"@happyvertical/smrt-ads:AdGroup","collection":"adgroups","description":"AdGroup organizes ad creatives with targeting and budget controls.","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/models/AdGroup.ts","packageName":"@happyvertical/smrt-ads","fields":{"created_at":{"type":"datetime","required":false},"updated_at":{"type":"datetime","required":false},"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"contractId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-commerce:SalesContract","description":"The sales contract this campaign is sold under, if there is one.","_meta":{"description":"The sales contract this campaign is sold under, if there is one.","validateSubtype":true}},"tierId":{"type":"foreignKey","required":false,"related":"AdDeliveryTier","description":"The priority tier the campaign runs in. Tiers are tried in order when more than one campaign could show.","_meta":{"description":"The priority tier the campaign runs in. Tiers are tried in order when more than one campaign could show."}},"name":{"type":"text","required":false,"default":"","description":"What you call the campaign, for example Summer sale.","_meta":{"description":"What you call the campaign, for example Summer sale."}},"verticalSlug":{"type":"text","required":false,"default":"","description":"The category the campaign belongs to, such as retail.","_meta":{"description":"The category the campaign belongs to, such as retail."}},"targeting":{"type":"text","required":false,"default":""},"zoneIds":{"type":"text","required":false,"default":""},"startDate":{"type":"datetime","required":false,"description":"The first day the campaign can show.","_meta":{"description":"The first day the campaign can show."}},"endDate":{"type":"datetime","required":false,"description":"The last day the campaign can show.","_meta":{"description":"The last day the campaign can show."}},"dailyBudget":{"type":"decimal","required":false,"default":0,"description":"The most to spend in one day. The app shows this but does not stop the campaign by itself.","_meta":{"description":"The most to spend in one day. The app shows this but does not stop the campaign by itself."}},"totalBudget":{"type":"decimal","required":false,"default":0,"description":"The most to spend over the whole campaign.","_meta":{"description":"The most to spend over the whole campaign."}},"status":{"type":"text","required":false,"description":"Where the campaign stands: draft, active, paused or completed. Only active campaigns show ads.","_meta":{"description":"Where the campaign stands: draft, active, paused or completed. Only active campaigns show ads."},"enum":["draft","active","paused","completed"]}},"methods":{"getZoneIds":{"name":"getZoneIds","async":false,"parameters":[],"returnType":"string[]","isStatic":false,"isPublic":true},"setZoneIds":{"name":"setZoneIds","async":false,"parameters":[{"name":"ids","type":"string[]","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"addZoneId":{"name":"addZoneId","async":false,"parameters":[{"name":"zoneId","type":"string","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"removeZoneId":{"name":"removeZoneId","async":false,"parameters":[{"name":"zoneId","type":"string","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"hasZoneId":{"name":"hasZoneId","async":false,"parameters":[{"name":"zoneId","type":"string","optional":false}],"returnType":"boolean","isStatic":false,"isPublic":true},"getTargeting":{"name":"getTargeting","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true},"setTargeting":{"name":"setTargeting","async":false,"parameters":[{"name":"rules","type":"Record<string, unknown>","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"isActive":{"name":"isActive","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isDraft":{"name":"isDraft","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isPaused":{"name":"isPaused","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isCompleted":{"name":"isCompleted","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"hasEnded":{"name":"hasEnded","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"hasStarted":{"name":"hasStarted","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableStrategy":"sti","api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get","create"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context","_meta_type"]},"extends":"SmrtObject","exportName":"AdGroup","collectionExportName":"AdGroupCollection","displayLabelField":"name","schema":{"tableName":"ad_groups","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_groups\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"contract_id\\" UUID,\\n \\"tier_id\\" UUID,\\n \\"name\\" TEXT DEFAULT '',\\n \\"vertical_slug\\" TEXT DEFAULT '',\\n \\"targeting\\" TEXT DEFAULT '',\\n \\"zone_ids\\" TEXT DEFAULT '',\\n \\"start_date\\" TIMESTAMP,\\n \\"end_date\\" TIMESTAMP,\\n \\"daily_budget\\" REAL DEFAULT 0,\\n \\"total_budget\\" REAL DEFAULT 0,\\n \\"status\\" TEXT\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"contract_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"tier_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"ad_delivery_tiers","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"name":{"type":"TEXT","notNull":false,"default":""},"vertical_slug":{"type":"TEXT","notNull":false,"default":""},"targeting":{"type":"TEXT","notNull":false,"default":""},"zone_ids":{"type":"TEXT","notNull":false,"default":""},"start_date":{"type":"TIMESTAMP","notNull":false},"end_date":{"type":"TIMESTAMP","notNull":false},"daily_budget":{"type":"REAL","notNull":false,"default":0},"total_budget":{"type":"REAL","notNull":false,"default":0},"status":{"type":"TEXT","notNull":false}},"indexes":[{"name":"ad_groups_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"ad_groups_meta_type_idx","columns":["_meta_type"]},{"name":"ad_groups_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"ad_groups_contract_id_idx","columns":["contract_id"]},{"name":"ad_groups_tier_id_idx","columns":["tier_id"]}],"version":"7a0047b5"},"importPath":"@happyvertical/smrt-ads"},"@happyvertical/smrt-ads:AdVariation":{"name":"advariation","className":"AdVariation","qualifiedName":"@happyvertical/smrt-ads:AdVariation","collection":"advariations","description":"AdVariation represents a creative asset within an ad group. Supports A/B testing via weighted selection.","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/models/AdVariation.ts","packageName":"@happyvertical/smrt-ads","fields":{"created_at":{"type":"datetime","required":false},"updated_at":{"type":"datetime","required":false},"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"groupId":{"type":"foreignKey","required":false,"related":"AdGroup","description":"The campaign this ad belongs to.","_meta":{"description":"The campaign this ad belongs to."}},"formatId":{"type":"foreignKey","required":false,"related":"AdFormat","description":"The ad size this ad is made for.","_meta":{"description":"The ad size this ad is made for."}},"assetId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-assets:Asset","description":"The picture people see.","_meta":{"description":"The picture people see."}},"name":{"type":"text","required":false,"default":"","description":"What you call this ad, for example Version A, blue button.","_meta":{"description":"What you call this ad, for example Version A, blue button."}},"clickUrl":{"type":"text","required":false,"default":"","description":"The web address people go to when they tap the ad.","_meta":{"description":"The web address people go to when they tap the ad."}},"altText":{"type":"text","required":false,"default":"","description":"A few words that describe the picture for people who cannot see it.","_meta":{"description":"A few words that describe the picture for people who cannot see it."}},"weight":{"type":"integer","required":false,"default":1,"description":"How often this ad shows compared with the others in its campaign: an ad with weight 2 shows twice as often as one with weight 1.","_meta":{"description":"How often this ad shows compared with the others in its campaign: an ad with weight 2 shows twice as often as one with weight 1."}},"status":{"type":"text","required":false,"description":"Where the ad stands: draft, active or paused. Only active ads show.","_meta":{"description":"Where the ad stands: draft, active or paused. Only active ads show."},"enum":["draft","active","paused"]},"impressions":{"type":"integer","required":false,"default":0,"description":"How many times the ad has been shown. The app counts this as it serves ads and refreshes it a little later.","_meta":{"description":"How many times the ad has been shown. The app counts this as it serves ads and refreshes it a little later."}},"clicks":{"type":"integer","required":false,"default":0,"description":"How many times the ad has been tapped. The app counts this as it serves ads and refreshes it a little later.","_meta":{"description":"How many times the ad has been tapped. The app counts this as it serves ads and refreshes it a little later."}}},"methods":{"isActive":{"name":"isActive","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isDraft":{"name":"isDraft","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isPaused":{"name":"isPaused","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"getCTR":{"name":"getCTR","async":false,"parameters":[],"returnType":"number","isStatic":false,"isPublic":true},"recordImpression":{"name":"recordImpression","async":false,"parameters":[],"returnType":"void","isStatic":false,"isPublic":true},"recordClick":{"name":"recordClick","async":false,"parameters":[],"returnType":"void","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableStrategy":"sti","api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get","create"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context","_meta_type"]},"extends":"SmrtObject","exportName":"AdVariation","collectionExportName":"AdVariationCollection","displayLabelField":"name","schema":{"tableName":"ad_variations","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_variations\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"group_id\\" UUID,\\n \\"format_id\\" UUID,\\n \\"asset_id\\" UUID,\\n \\"name\\" TEXT DEFAULT '',\\n \\"click_url\\" TEXT DEFAULT '',\\n \\"alt_text\\" TEXT DEFAULT '',\\n \\"weight\\" INTEGER DEFAULT 1,\\n \\"status\\" TEXT,\\n \\"impressions\\" INTEGER DEFAULT 0,\\n \\"clicks\\" INTEGER DEFAULT 0\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"group_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"ad_groups","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"format_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"ad_formats","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"asset_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"name":{"type":"TEXT","notNull":false,"default":""},"click_url":{"type":"TEXT","notNull":false,"default":""},"alt_text":{"type":"TEXT","notNull":false,"default":""},"weight":{"type":"INTEGER","notNull":false,"default":1},"status":{"type":"TEXT","notNull":false},"impressions":{"type":"INTEGER","notNull":false,"default":0},"clicks":{"type":"INTEGER","notNull":false,"default":0}},"indexes":[{"name":"ad_variations_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"ad_variations_meta_type_idx","columns":["_meta_type"]},{"name":"ad_variations_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"ad_variations_group_id_idx","columns":["group_id"]},{"name":"ad_variations_format_id_idx","columns":["format_id"]},{"name":"ad_variations_asset_id_idx","columns":["asset_id"]}],"version":"bd697f86"},"importPath":"@happyvertical/smrt-ads"}},"moduleType":"smrt","recipes":[{"id":"ads.campaigns","className":"AdsCampaignsRecipe","label":"Ads","summary":"Run ad campaigns on your site, choose which ads show where, and see which ones get clicked.","synonyms":["ads","advertising","ad campaigns","banner ads","advertisements","display ads"],"models":["@happyvertical/smrt-ads:AdGroup","@happyvertical/smrt-ads:AdVariation","@happyvertical/smrt-ads:AdFormat","@happyvertical/smrt-ads:AdDeliveryTier"],"nav":[{"label":"Ad campaigns","model":"@happyvertical/smrt-ads:AdGroup","icon":"tag","description":"Each campaign you run, with its dates, budget and where it stands.","noun":"ad campaign"},{"label":"Ads","model":"@happyvertical/smrt-ads:AdVariation","icon":"fileText","description":"The ads inside each campaign, how often each shows and how many clicks it got.","noun":"ad"},{"label":"Ad sizes","model":"@happyvertical/smrt-ads:AdFormat","icon":"layers","description":"The shapes and sizes an ad can be, shared by every campaign.","noun":"ad size"},{"label":"Priority tiers","model":"@happyvertical/smrt-ads:AdDeliveryTier","icon":"settings","description":"The order campaigns are tried in when more than one could show.","noun":"tier"}],"requires":[],"section":{"id":"grow","label":"Grow","icon":"tag","description":"Bring in new customers and reward the people who help."},"options":{"@happyvertical/smrt-ads:AdGroup":{"fields":{"name":{"order":1},"status":{"order":2},"tierId":{"label":"Priority tier","order":3},"startDate":{"label":"Starts on","order":4},"endDate":{"label":"Ends on","order":5},"dailyBudget":{"label":"Daily budget","order":6},"totalBudget":{"label":"Total budget","order":7},"tenantId":{"visibility":"hidden"},"contractId":{"label":"Sales contract","visibility":"advanced"},"verticalSlug":{"label":"Category","visibility":"advanced"},"targeting":{"visibility":"hidden"},"zoneIds":{"visibility":"hidden"}}},"@happyvertical/smrt-ads:AdVariation":{"fields":{"name":{"order":1},"groupId":{"label":"Ad campaign","order":2},"formatId":{"label":"Ad size","order":3},"assetId":{"label":"Picture","order":4},"clickUrl":{"label":"Link to","order":5},"altText":{"label":"Words for the picture","order":6},"weight":{"order":7},"status":{"order":8},"tenantId":{"visibility":"hidden"},"impressions":{"label":"Times shown","locked":true,"visibility":"advanced"},"clicks":{"locked":true,"visibility":"advanced"}}},"@happyvertical/smrt-ads:AdFormat":{"fields":{"name":{"order":1},"width":{"order":2},"height":{"order":3},"formatType":{"label":"Kind","order":4},"description":{"order":5}}},"@happyvertical/smrt-ads:AdDeliveryTier":{"fields":{"name":{"order":1},"priority":{"order":2},"pricingModel":{"label":"How it is charged","order":3},"description":{"order":4}}}},"help":{"markdown":"## Overview\\n\\nAds is where you run advertising on your own site. An ad campaign sets the\\ndates, the budget and the priority tier; the ads inside it are the pictures\\npeople actually see, each with a link. When a campaign has more than one ad,\\nthe app shares the showings between them by weight, so you can try two\\nversions and see which gets more clicks.\\n\\nAd sizes and priority tiers are shared lists. Set them up once; every campaign\\npicks from them. When more than one campaign could show in the same place, the\\ntier decides which is tried first.\\n\\nThe app counts every showing and click as it serves the ads. Those counts are\\nrefreshed on the ad a little later; you read them, you do not type them.\\n\\n## Tasks\\n\\n### Add an ad size\\n\\n1. Open the ad sizes and choose **New**.\\n2. Type the **{field:AdFormat.name}**, for example \\"Leaderboard\\".\\n3. Enter the **{field:AdFormat.width}** and **{field:AdFormat.height}**.\\n4. Pick the **{field:AdFormat.formatType}**: a picture, a piece written to look like your own content, or a video.\\n5. Save. The usual sizes are 728 by 90, 300 by 250 and 320 by 50.\\n\\n### Set up the priority tiers\\n\\n1. Open the priority tiers and choose **New**.\\n2. Type the **{field:AdDeliveryTier.name}**, for example \\"Sponsorship\\", \\"Standard\\" or \\"House\\".\\n3. Set the **{field:AdDeliveryTier.priority}**: 1 is tried first, then 2, then 3.\\n4. Pick **{field:AdDeliveryTier.pricingModel}** to say how ads in this tier are charged.\\n5. Save. A \\"House\\" tier with the last priority is a good place for your own ads, so something always shows.\\n\\n### Start an ad campaign\\n\\n1. Open the ad campaigns and choose **New**.\\n2. Type the **{field:AdGroup.name}**, for example \\"Summer sale\\".\\n3. Pick the **{field:AdGroup.tierId}** it runs in.\\n4. Set when it **{field:AdGroup.startDate}** and **{field:AdGroup.endDate}**.\\n5. Enter the **{field:AdGroup.dailyBudget}** and the **{field:AdGroup.totalBudget}**. The app does not stop a campaign at its budget by itself; keep an eye on the counts.\\n6. Leave the **{field:AdGroup.status}** as draft until the ads are ready, then set it to active.\\n7. Save.\\n\\n### Add an ad to a campaign\\n\\n1. Open the ads and choose **New**.\\n2. Type the **{field:AdVariation.name}**, for example \\"Version A, blue button\\".\\n3. Pick the **{field:AdVariation.groupId}** it belongs to and the **{field:AdVariation.formatId}** it is made for.\\n4. Choose the **{field:AdVariation.assetId}** people will see.\\n5. Enter the web address it should **{field:AdVariation.clickUrl}** when someone taps it.\\n6. Write a few **{field:AdVariation.altText}** for people who cannot see the picture.\\n7. Set the **{field:AdVariation.weight}**. An ad with weight 2 shows twice as often as one with weight 1 in the same campaign.\\n8. Set the **{field:AdVariation.status}** to active when it is ready to show.\\n9. Save.\\n\\n### Pause or finish a campaign\\n\\n1. Open the ad campaign.\\n2. Change the **{field:AdGroup.status}** to paused to stop it for now, or to completed when it is over.\\n3. Save. The ads in it stop showing straight away.\\n\\n### See which ad is doing better\\n\\n1. Open the ads and find the ads in one campaign.\\n2. Compare the **{field:AdVariation.impressions}** and **{field:AdVariation.clicks}** of each. These are counted by the app as it serves the ads and refreshed a little later.\\n3. Give the better ad a higher **{field:AdVariation.weight}**, or pause the weaker one by changing its **{field:AdVariation.status}**.\\n","fieldRefs":["AdDeliveryTier.name","AdDeliveryTier.pricingModel","AdDeliveryTier.priority","AdFormat.formatType","AdFormat.height","AdFormat.name","AdFormat.width","AdGroup.dailyBudget","AdGroup.endDate","AdGroup.name","AdGroup.startDate","AdGroup.status","AdGroup.tierId","AdGroup.totalBudget","AdVariation.altText","AdVariation.assetId","AdVariation.clickUrl","AdVariation.clicks","AdVariation.formatId","AdVariation.groupId","AdVariation.impressions","AdVariation.name","AdVariation.status","AdVariation.weight"]},"demo":{"mode":"server","reasons":["Needs a server because its package depends on @happyvertical/smrt-tenancy, which do not build for a browser (#3624)."]}}],"smrtDependencies":["@happyvertical/smrt-commerce","@happyvertical/smrt-core","@happyvertical/smrt-tenancy"],"browser":{"status":"server-only","issues":["#3624"],"via":["@happyvertical/smrt-tenancy"]},"stampsConstructors":true}`));
|
|
4
|
+
ObjectRegistry.registerPackageManifest(JSON.parse(`{"version":"1.0.0","timestamp":0,"packageName":"@happyvertical/smrt-ads","packageVersion":"0.60.14","objects":{"@happyvertical/smrt-ads:AdDeliveryTierCollection":{"name":"addeliverytiercollection","className":"AdDeliveryTierCollection","qualifiedName":"@happyvertical/smrt-ads:AdDeliveryTierCollection","collection":"addeliverytiers","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/collections/AdDeliveryTierCollection.ts","packageName":"@happyvertical/smrt-ads","fields":{},"methods":{"findByPriority":{"name":"findByPriority","async":true,"parameters":[],"returnType":"Promise<AdDeliveryTier[]>","isStatic":false,"isPublic":true},"findByPricingModel":{"name":"findByPricingModel","async":true,"parameters":[{"name":"pricingModel","type":"PricingModel","optional":false}],"returnType":"Promise<AdDeliveryTier[]>","isStatic":false,"isPublic":true},"getHighestPriority":{"name":"getHighestPriority","async":true,"parameters":[],"returnType":"Promise<AdDeliveryTier | null>","isStatic":false,"isPublic":true},"findFixedPricing":{"name":"findFixedPricing","async":true,"parameters":[],"returnType":"Promise<AdDeliveryTier[]>","isStatic":false,"isPublic":true},"findCPM":{"name":"findCPM","async":true,"parameters":[],"returnType":"Promise<AdDeliveryTier[]>","isStatic":false,"isPublic":true},"findPerformanceBased":{"name":"findPerformanceBased","async":true,"parameters":[],"returnType":"Promise<AdDeliveryTier[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"AdDeliveryTier","exportName":"AdDeliveryTierCollection","collectionExportName":"AdDeliveryTierCollectionCollection","collectionOf":"@happyvertical/smrt-ads:AdDeliveryTier","inheritedExposure":["api","mcp"],"schema":{"tableName":"ad_delivery_tiers","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_delivery_tiers\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"name\\" TEXT DEFAULT '',\\n \\"priority\\" INTEGER DEFAULT 0,\\n \\"pricing_model\\" TEXT,\\n \\"description\\" TEXT DEFAULT ''\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"priority":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"pricing_model":{"type":"TEXT","notNull":false,"unique":false},"description":{"type":"TEXT","notNull":false,"unique":false,"default":""}},"indexes":[{"name":"ad_delivery_tiers_slug_context_idx","columns":["slug","context"],"unique":true},{"name":"ad_delivery_tiers_created_at_idx","columns":["created_at"]}],"version":"a62406e1"},"importPath":"@happyvertical/smrt-ads"},"@happyvertical/smrt-ads:AdEventCollection":{"name":"adeventcollection","className":"AdEventCollection","qualifiedName":"@happyvertical/smrt-ads:AdEventCollection","collection":"adevents","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/collections/AdEventCollection.ts","packageName":"@happyvertical/smrt-ads","fields":{},"methods":{"findByVariation":{"name":"findByVariation","async":true,"parameters":[{"name":"variationId","type":"string","optional":false}],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"findByZone":{"name":"findByZone","async":true,"parameters":[{"name":"zoneId","type":"string","optional":false}],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"findBySite":{"name":"findBySite","async":true,"parameters":[{"name":"siteId","type":"string","optional":false}],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"findByDateRange":{"name":"findByDateRange","async":true,"parameters":[{"name":"start","type":"Date","optional":false},{"name":"end","type":"Date","optional":false}],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"findByType":{"name":"findByType","async":true,"parameters":[{"name":"eventType","type":"AdEventType","optional":false}],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"countByType":{"name":"countByType","async":true,"parameters":[{"name":"variationId","type":"string","optional":false},{"name":"eventType","type":"AdEventType","optional":false}],"returnType":"Promise<number>","isStatic":false,"isPublic":true},"countImpressions":{"name":"countImpressions","async":true,"parameters":[{"name":"variationId","type":"string","optional":false}],"returnType":"Promise<number>","isStatic":false,"isPublic":true},"countClicks":{"name":"countClicks","async":true,"parameters":[{"name":"variationId","type":"string","optional":false}],"returnType":"Promise<number>","isStatic":false,"isPublic":true},"countConversions":{"name":"countConversions","async":true,"parameters":[{"name":"variationId","type":"string","optional":false}],"returnType":"Promise<number>","isStatic":false,"isPublic":true},"findImpressions":{"name":"findImpressions","async":true,"parameters":[],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"findClicks":{"name":"findClicks","async":true,"parameters":[],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"findConversions":{"name":"findConversions","async":true,"parameters":[],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"getVariationStats":{"name":"getVariationStats","async":true,"parameters":[{"name":"variationId","type":"string","optional":false}],"returnType":"Promise<object>","isStatic":false,"isPublic":true},"findByTenant":{"name":"findByTenant","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"findGlobal":{"name":"findGlobal","async":true,"parameters":[],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true},"findWithGlobals":{"name":"findWithGlobals","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AdEvent[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["create","list"]},"mcp":{"include":["create"]},"cli":false},"extends":"SmrtCollection","extendsTypeArg":"AdEvent","exportName":"AdEventCollection","collectionExportName":"AdEventCollectionCollection","collectionOf":"@happyvertical/smrt-ads:AdEvent","inheritedExposure":["api","mcp","cli"],"schema":{"tableName":"ad_events","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_events\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"variation_id\\" UUID,\\n \\"zone_id\\" UUID,\\n \\"site_id\\" TEXT DEFAULT '',\\n \\"event_type\\" TEXT,\\n \\"timestamp\\" TIMESTAMP,\\n \\"metadata\\" TEXT DEFAULT ''\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"variation_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"ad_variations","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"zone_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"site_id":{"type":"TEXT","notNull":false,"default":""},"event_type":{"type":"TEXT","notNull":false},"timestamp":{"type":"TIMESTAMP","notNull":false},"metadata":{"type":"TEXT","notNull":false,"default":""}},"indexes":[{"name":"ad_events_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"ad_events_meta_type_idx","columns":["_meta_type"]},{"name":"ad_events_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"ad_events_variation_id_idx","columns":["variation_id"]},{"name":"ad_events_zone_id_idx","columns":["zone_id"]}],"version":"e3175352"},"importPath":"@happyvertical/smrt-ads"},"@happyvertical/smrt-ads:AdFormatCollection":{"name":"adformatcollection","className":"AdFormatCollection","qualifiedName":"@happyvertical/smrt-ads:AdFormatCollection","collection":"adformats","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/collections/AdFormatCollection.ts","packageName":"@happyvertical/smrt-ads","fields":{},"methods":{"findByDimensions":{"name":"findByDimensions","async":true,"parameters":[{"name":"width","type":"number","optional":false},{"name":"height","type":"number","optional":false}],"returnType":"Promise<AdFormat | null>","isStatic":false,"isPublic":true},"findByType":{"name":"findByType","async":true,"parameters":[{"name":"formatType","type":"AdFormatType","optional":false}],"returnType":"Promise<AdFormat[]>","isStatic":false,"isPublic":true},"findBanners":{"name":"findBanners","async":true,"parameters":[],"returnType":"Promise<AdFormat[]>","isStatic":false,"isPublic":true},"findNative":{"name":"findNative","async":true,"parameters":[],"returnType":"Promise<AdFormat[]>","isStatic":false,"isPublic":true},"findVideo":{"name":"findVideo","async":true,"parameters":[],"returnType":"Promise<AdFormat[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]}},"extends":"SmrtCollection","extendsTypeArg":"AdFormat","exportName":"AdFormatCollection","collectionExportName":"AdFormatCollectionCollection","collectionOf":"@happyvertical/smrt-ads:AdFormat","inheritedExposure":["api","mcp"],"schema":{"tableName":"ad_formats","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_formats\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"name\\" TEXT DEFAULT '',\\n \\"width\\" INTEGER DEFAULT 0,\\n \\"height\\" INTEGER DEFAULT 0,\\n \\"format_type\\" TEXT,\\n \\"description\\" TEXT DEFAULT ''\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"width":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"height":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"format_type":{"type":"TEXT","notNull":false,"unique":false},"description":{"type":"TEXT","notNull":false,"unique":false,"default":""}},"indexes":[{"name":"ad_formats_slug_context_idx","columns":["slug","context"],"unique":true},{"name":"ad_formats_created_at_idx","columns":["created_at"]}],"version":"87e5a7c6"},"importPath":"@happyvertical/smrt-ads"},"@happyvertical/smrt-ads:AdGroupCollection":{"name":"adgroupcollection","className":"AdGroupCollection","qualifiedName":"@happyvertical/smrt-ads:AdGroupCollection","collection":"adgroups","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/collections/AdGroupCollection.ts","packageName":"@happyvertical/smrt-ads","fields":{},"methods":{"findByContract":{"name":"findByContract","async":true,"parameters":[{"name":"contractId","type":"string","optional":false}],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findByTier":{"name":"findByTier","async":true,"parameters":[{"name":"tierId","type":"string","optional":false}],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findByStatus":{"name":"findByStatus","async":true,"parameters":[{"name":"status","type":"AdGroupStatus","optional":false}],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findActive":{"name":"findActive","async":true,"parameters":[],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findByVertical":{"name":"findByVertical","async":true,"parameters":[{"name":"verticalSlug","type":"string","optional":false}],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findByZone":{"name":"findByZone","async":true,"parameters":[{"name":"zoneId","type":"string","optional":false}],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findEligibleForZone":{"name":"findEligibleForZone","async":true,"parameters":[{"name":"zoneId","type":"string","optional":false}],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findDrafts":{"name":"findDrafts","async":true,"parameters":[],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findPaused":{"name":"findPaused","async":true,"parameters":[],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findCompleted":{"name":"findCompleted","async":true,"parameters":[],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findByTenant":{"name":"findByTenant","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findGlobal":{"name":"findGlobal","async":true,"parameters":[],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true},"findWithGlobals":{"name":"findWithGlobals","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AdGroup[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get","create"]}},"extends":"SmrtCollection","extendsTypeArg":"AdGroup","exportName":"AdGroupCollection","collectionExportName":"AdGroupCollectionCollection","collectionOf":"@happyvertical/smrt-ads:AdGroup","inheritedExposure":["api","mcp"],"schema":{"tableName":"ad_groups","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_groups\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"contract_id\\" UUID,\\n \\"tier_id\\" UUID,\\n \\"name\\" TEXT DEFAULT '',\\n \\"vertical_slug\\" TEXT DEFAULT '',\\n \\"targeting\\" TEXT DEFAULT '',\\n \\"zone_ids\\" TEXT DEFAULT '',\\n \\"start_date\\" TIMESTAMP,\\n \\"end_date\\" TIMESTAMP,\\n \\"daily_budget\\" REAL DEFAULT 0,\\n \\"total_budget\\" REAL DEFAULT 0,\\n \\"status\\" TEXT\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"contract_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"tier_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"ad_delivery_tiers","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"name":{"type":"TEXT","notNull":false,"default":""},"vertical_slug":{"type":"TEXT","notNull":false,"default":""},"targeting":{"type":"TEXT","notNull":false,"default":""},"zone_ids":{"type":"TEXT","notNull":false,"default":""},"start_date":{"type":"TIMESTAMP","notNull":false},"end_date":{"type":"TIMESTAMP","notNull":false},"daily_budget":{"type":"REAL","notNull":false,"default":0},"total_budget":{"type":"REAL","notNull":false,"default":0},"status":{"type":"TEXT","notNull":false}},"indexes":[{"name":"ad_groups_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"ad_groups_meta_type_idx","columns":["_meta_type"]},{"name":"ad_groups_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"ad_groups_contract_id_idx","columns":["contract_id"]},{"name":"ad_groups_tier_id_idx","columns":["tier_id"]}],"version":"7a0047b5"},"importPath":"@happyvertical/smrt-ads"},"@happyvertical/smrt-ads:AdVariationCollection":{"name":"advariationcollection","className":"AdVariationCollection","qualifiedName":"@happyvertical/smrt-ads:AdVariationCollection","collection":"advariations","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/collections/AdVariationCollection.ts","packageName":"@happyvertical/smrt-ads","fields":{},"methods":{"findByGroup":{"name":"findByGroup","async":true,"parameters":[{"name":"groupId","type":"string","optional":false}],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"findByFormat":{"name":"findByFormat","async":true,"parameters":[{"name":"formatId","type":"string","optional":false}],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"findActiveByGroup":{"name":"findActiveByGroup","async":true,"parameters":[{"name":"groupId","type":"string","optional":false}],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"selectByWeight":{"name":"selectByWeight","async":true,"parameters":[{"name":"groupId","type":"string","optional":false}],"returnType":"Promise<AdVariation | null>","isStatic":false,"isPublic":true},"findByStatus":{"name":"findByStatus","async":true,"parameters":[{"name":"status","type":"AdVariationStatus","optional":false}],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"findActive":{"name":"findActive","async":true,"parameters":[],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"findDrafts":{"name":"findDrafts","async":true,"parameters":[],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"findPaused":{"name":"findPaused","async":true,"parameters":[],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"findTopPerformers":{"name":"findTopPerformers","async":true,"parameters":[{"name":"limit","type":"number","optional":true}],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"findByTenant":{"name":"findByTenant","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"findGlobal":{"name":"findGlobal","async":true,"parameters":[],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true},"findWithGlobals":{"name":"findWithGlobals","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<AdVariation[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get","create"]}},"extends":"SmrtCollection","extendsTypeArg":"AdVariation","exportName":"AdVariationCollection","collectionExportName":"AdVariationCollectionCollection","collectionOf":"@happyvertical/smrt-ads:AdVariation","inheritedExposure":["api","mcp"],"schema":{"tableName":"ad_variations","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_variations\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"group_id\\" UUID,\\n \\"format_id\\" UUID,\\n \\"asset_id\\" UUID,\\n \\"name\\" TEXT DEFAULT '',\\n \\"click_url\\" TEXT DEFAULT '',\\n \\"alt_text\\" TEXT DEFAULT '',\\n \\"weight\\" INTEGER DEFAULT 1,\\n \\"status\\" TEXT,\\n \\"impressions\\" INTEGER DEFAULT 0,\\n \\"clicks\\" INTEGER DEFAULT 0\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"group_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"ad_groups","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"format_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"ad_formats","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"asset_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"name":{"type":"TEXT","notNull":false,"default":""},"click_url":{"type":"TEXT","notNull":false,"default":""},"alt_text":{"type":"TEXT","notNull":false,"default":""},"weight":{"type":"INTEGER","notNull":false,"default":1},"status":{"type":"TEXT","notNull":false},"impressions":{"type":"INTEGER","notNull":false,"default":0},"clicks":{"type":"INTEGER","notNull":false,"default":0}},"indexes":[{"name":"ad_variations_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"ad_variations_meta_type_idx","columns":["_meta_type"]},{"name":"ad_variations_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"ad_variations_group_id_idx","columns":["group_id"]},{"name":"ad_variations_format_id_idx","columns":["format_id"]},{"name":"ad_variations_asset_id_idx","columns":["asset_id"]}],"version":"bd697f86"},"importPath":"@happyvertical/smrt-ads"},"@happyvertical/smrt-ads:AdDeliveryTier":{"name":"addeliverytier","className":"AdDeliveryTier","qualifiedName":"@happyvertical/smrt-ads:AdDeliveryTier","collection":"addeliverytiers","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/models/AdDeliveryTier.ts","packageName":"@happyvertical/smrt-ads","fields":{"name":{"type":"text","required":false,"default":"","description":"What the tier is called, for example Sponsorship, Standard or House.","_meta":{"description":"What the tier is called, for example Sponsorship, Standard or House."}},"priority":{"type":"integer","required":false,"default":0,"description":"The order tiers are tried in: 1 is tried first, then 2, and so on.","_meta":{"description":"The order tiers are tried in: 1 is tried first, then 2, and so on."}},"pricingModel":{"type":"text","required":false,"description":"How ads in this tier are charged: a fixed price, per thousand showings, per click, or per sale.","_meta":{"description":"How ads in this tier are charged: a fixed price, per thousand showings, per click, or per sale."},"enum":["fixed","cpm","cpc","cpa"]},"description":{"type":"text","required":false,"default":"","description":"A note about what this tier is for.","_meta":{"description":"A note about what this tier is for."}}},"methods":{"isHigherPriorityThan":{"name":"isHigherPriorityThan","async":false,"parameters":[{"name":"other","type":"AdDeliveryTier","optional":false}],"returnType":"boolean","isStatic":false,"isPublic":true},"isFixedPricing":{"name":"isFixedPricing","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isPerformanceBased":{"name":"isPerformanceBased","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true}},"extends":"SmrtObject","exportName":"AdDeliveryTier","collectionExportName":"AdDeliveryTierCollection","displayLabelField":"name","schema":{"tableName":"ad_delivery_tiers","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_delivery_tiers\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"name\\" TEXT DEFAULT '',\\n \\"priority\\" INTEGER DEFAULT 0,\\n \\"pricing_model\\" TEXT,\\n \\"description\\" TEXT DEFAULT ''\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"priority":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"pricing_model":{"type":"TEXT","notNull":false,"unique":false},"description":{"type":"TEXT","notNull":false,"unique":false,"default":""}},"indexes":[{"name":"ad_delivery_tiers_slug_context_idx","columns":["slug","context"],"unique":true},{"name":"ad_delivery_tiers_created_at_idx","columns":["created_at"]}],"version":"a62406e1"},"importPath":"@happyvertical/smrt-ads"},"@happyvertical/smrt-ads:AdEvent":{"name":"adevent","className":"AdEvent","qualifiedName":"@happyvertical/smrt-ads:AdEvent","collection":"adevents","description":"AdEvent tracks ad impressions, clicks, and conversions. Events are immutable (append-only, no update/delete).","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/models/AdEvent.ts","packageName":"@happyvertical/smrt-ads","fields":{"created_at":{"type":"datetime","required":false},"updated_at":{"type":"datetime","required":false},"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"variationId":{"type":"foreignKey","required":false,"related":"AdVariation"},"zoneId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-properties:Zone"},"siteId":{"type":"text","required":false,"default":""},"eventType":{"type":"text","required":false,"enum":["impression","click","conversion"]},"timestamp":{"type":"datetime","required":false},"metadata":{"type":"text","required":false,"default":""}},"methods":{"getMetadata":{"name":"getMetadata","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true},"setMetadata":{"name":"setMetadata","async":false,"parameters":[{"name":"data","type":"Record<string, unknown>","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"isImpression":{"name":"isImpression","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isClick":{"name":"isClick","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isConversion":{"name":"isConversion","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableStrategy":"sti","api":{"include":["create","list"]},"mcp":{"include":["create"]},"cli":false,"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context","_meta_type"]},"extends":"SmrtObject","exportName":"AdEvent","collectionExportName":"AdEventCollection","schema":{"tableName":"ad_events","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_events\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"variation_id\\" UUID,\\n \\"zone_id\\" UUID,\\n \\"site_id\\" TEXT DEFAULT '',\\n \\"event_type\\" TEXT,\\n \\"timestamp\\" TIMESTAMP,\\n \\"metadata\\" TEXT DEFAULT ''\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"variation_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"ad_variations","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"zone_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"site_id":{"type":"TEXT","notNull":false,"default":""},"event_type":{"type":"TEXT","notNull":false},"timestamp":{"type":"TIMESTAMP","notNull":false},"metadata":{"type":"TEXT","notNull":false,"default":""}},"indexes":[{"name":"ad_events_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"ad_events_meta_type_idx","columns":["_meta_type"]},{"name":"ad_events_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"ad_events_variation_id_idx","columns":["variation_id"]},{"name":"ad_events_zone_id_idx","columns":["zone_id"]}],"version":"e3175352"},"importPath":"@happyvertical/smrt-ads"},"@happyvertical/smrt-ads:AdFormat":{"name":"adformat","className":"AdFormat","qualifiedName":"@happyvertical/smrt-ads:AdFormat","collection":"adformats","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/models/AdFormat.ts","packageName":"@happyvertical/smrt-ads","fields":{"name":{"type":"text","required":false,"default":"","description":"What the size is called, for example Leaderboard.","_meta":{"description":"What the size is called, for example Leaderboard."}},"width":{"type":"integer","required":false,"default":0,"description":"How wide the ad is, in pixels.","_meta":{"description":"How wide the ad is, in pixels."}},"height":{"type":"integer","required":false,"default":0,"description":"How tall the ad is, in pixels.","_meta":{"description":"How tall the ad is, in pixels."}},"formatType":{"type":"text","required":false,"description":"What kind of ad fits this size: a picture, a piece written to look like your own content, or a video.","_meta":{"description":"What kind of ad fits this size: a picture, a piece written to look like your own content, or a video."},"enum":["banner","native","video"]},"description":{"type":"text","required":false,"default":"","description":"A note about where this size is usually used.","_meta":{"description":"A note about where this size is usually used."}}},"methods":{"getDimensions":{"name":"getDimensions","async":false,"parameters":[],"returnType":"string","isStatic":false,"isPublic":true},"matchesDimensions":{"name":"matchesDimensions","async":false,"parameters":[{"name":"width","type":"number","optional":false},{"name":"height","type":"number","optional":false}],"returnType":"boolean","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get"]},"cli":{"skipApiCheck":true}},"extends":"SmrtObject","exportName":"AdFormat","collectionExportName":"AdFormatCollection","displayLabelField":"name","schema":{"tableName":"ad_formats","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_formats\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"name\\" TEXT DEFAULT '',\\n \\"width\\" INTEGER DEFAULT 0,\\n \\"height\\" INTEGER DEFAULT 0,\\n \\"format_type\\" TEXT,\\n \\"description\\" TEXT DEFAULT ''\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"name":{"type":"TEXT","notNull":false,"unique":false,"default":""},"width":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"height":{"type":"INTEGER","notNull":false,"unique":false,"default":0},"format_type":{"type":"TEXT","notNull":false,"unique":false},"description":{"type":"TEXT","notNull":false,"unique":false,"default":""}},"indexes":[{"name":"ad_formats_slug_context_idx","columns":["slug","context"],"unique":true},{"name":"ad_formats_created_at_idx","columns":["created_at"]}],"version":"87e5a7c6"},"importPath":"@happyvertical/smrt-ads"},"@happyvertical/smrt-ads:AdGroup":{"name":"adgroup","className":"AdGroup","qualifiedName":"@happyvertical/smrt-ads:AdGroup","collection":"adgroups","description":"AdGroup organizes ad creatives with targeting and budget controls.","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/models/AdGroup.ts","packageName":"@happyvertical/smrt-ads","fields":{"created_at":{"type":"datetime","required":false},"updated_at":{"type":"datetime","required":false},"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"contractId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-commerce:SalesContract","description":"The sales contract this campaign is sold under, if there is one.","_meta":{"description":"The sales contract this campaign is sold under, if there is one.","validateSubtype":true}},"tierId":{"type":"foreignKey","required":false,"related":"AdDeliveryTier","description":"The priority tier the campaign runs in. Tiers are tried in order when more than one campaign could show.","_meta":{"description":"The priority tier the campaign runs in. Tiers are tried in order when more than one campaign could show."}},"name":{"type":"text","required":false,"default":"","description":"What you call the campaign, for example Summer sale.","_meta":{"description":"What you call the campaign, for example Summer sale."}},"verticalSlug":{"type":"text","required":false,"default":"","description":"The category the campaign belongs to, such as retail.","_meta":{"description":"The category the campaign belongs to, such as retail."}},"targeting":{"type":"text","required":false,"default":""},"zoneIds":{"type":"text","required":false,"default":""},"startDate":{"type":"datetime","required":false,"description":"The first day the campaign can show.","_meta":{"description":"The first day the campaign can show."}},"endDate":{"type":"datetime","required":false,"description":"The last day the campaign can show.","_meta":{"description":"The last day the campaign can show."}},"dailyBudget":{"type":"decimal","required":false,"default":0,"description":"The most to spend in one day. The app shows this but does not stop the campaign by itself.","_meta":{"description":"The most to spend in one day. The app shows this but does not stop the campaign by itself."}},"totalBudget":{"type":"decimal","required":false,"default":0,"description":"The most to spend over the whole campaign.","_meta":{"description":"The most to spend over the whole campaign."}},"status":{"type":"text","required":false,"description":"Where the campaign stands: draft, active, paused or completed. Only active campaigns show ads.","_meta":{"description":"Where the campaign stands: draft, active, paused or completed. Only active campaigns show ads."},"enum":["draft","active","paused","completed"]}},"methods":{"getZoneIds":{"name":"getZoneIds","async":false,"parameters":[],"returnType":"string[]","isStatic":false,"isPublic":true},"setZoneIds":{"name":"setZoneIds","async":false,"parameters":[{"name":"ids","type":"string[]","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"addZoneId":{"name":"addZoneId","async":false,"parameters":[{"name":"zoneId","type":"string","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"removeZoneId":{"name":"removeZoneId","async":false,"parameters":[{"name":"zoneId","type":"string","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"hasZoneId":{"name":"hasZoneId","async":false,"parameters":[{"name":"zoneId","type":"string","optional":false}],"returnType":"boolean","isStatic":false,"isPublic":true},"getTargeting":{"name":"getTargeting","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true},"setTargeting":{"name":"setTargeting","async":false,"parameters":[{"name":"rules","type":"Record<string, unknown>","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"isActive":{"name":"isActive","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isDraft":{"name":"isDraft","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isPaused":{"name":"isPaused","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isCompleted":{"name":"isCompleted","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"hasEnded":{"name":"hasEnded","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"hasStarted":{"name":"hasStarted","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableStrategy":"sti","api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get","create"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context","_meta_type"]},"extends":"SmrtObject","exportName":"AdGroup","collectionExportName":"AdGroupCollection","displayLabelField":"name","schema":{"tableName":"ad_groups","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_groups\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"contract_id\\" UUID,\\n \\"tier_id\\" UUID,\\n \\"name\\" TEXT DEFAULT '',\\n \\"vertical_slug\\" TEXT DEFAULT '',\\n \\"targeting\\" TEXT DEFAULT '',\\n \\"zone_ids\\" TEXT DEFAULT '',\\n \\"start_date\\" TIMESTAMP,\\n \\"end_date\\" TIMESTAMP,\\n \\"daily_budget\\" REAL DEFAULT 0,\\n \\"total_budget\\" REAL DEFAULT 0,\\n \\"status\\" TEXT\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"contract_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"tier_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"ad_delivery_tiers","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"name":{"type":"TEXT","notNull":false,"default":""},"vertical_slug":{"type":"TEXT","notNull":false,"default":""},"targeting":{"type":"TEXT","notNull":false,"default":""},"zone_ids":{"type":"TEXT","notNull":false,"default":""},"start_date":{"type":"TIMESTAMP","notNull":false},"end_date":{"type":"TIMESTAMP","notNull":false},"daily_budget":{"type":"REAL","notNull":false,"default":0},"total_budget":{"type":"REAL","notNull":false,"default":0},"status":{"type":"TEXT","notNull":false}},"indexes":[{"name":"ad_groups_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"ad_groups_meta_type_idx","columns":["_meta_type"]},{"name":"ad_groups_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"ad_groups_contract_id_idx","columns":["contract_id"]},{"name":"ad_groups_tier_id_idx","columns":["tier_id"]}],"version":"7a0047b5"},"importPath":"@happyvertical/smrt-ads"},"@happyvertical/smrt-ads:AdVariation":{"name":"advariation","className":"AdVariation","qualifiedName":"@happyvertical/smrt-ads:AdVariation","collection":"advariations","description":"AdVariation represents a creative asset within an ad group. Supports A/B testing via weighted selection.","filePath":"/home/runner/work/smrt/smrt/packages/ads/src/models/AdVariation.ts","packageName":"@happyvertical/smrt-ads","fields":{"created_at":{"type":"datetime","required":false},"updated_at":{"type":"datetime","required":false},"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"groupId":{"type":"foreignKey","required":false,"related":"AdGroup","description":"The campaign this ad belongs to.","_meta":{"description":"The campaign this ad belongs to."}},"formatId":{"type":"foreignKey","required":false,"related":"AdFormat","description":"The ad size this ad is made for.","_meta":{"description":"The ad size this ad is made for."}},"assetId":{"type":"crossPackageRef","required":false,"related":"@happyvertical/smrt-assets:Asset","description":"The picture people see.","_meta":{"description":"The picture people see."}},"name":{"type":"text","required":false,"default":"","description":"What you call this ad, for example Version A, blue button.","_meta":{"description":"What you call this ad, for example Version A, blue button."}},"clickUrl":{"type":"text","required":false,"default":"","description":"The web address people go to when they tap the ad.","_meta":{"description":"The web address people go to when they tap the ad."}},"altText":{"type":"text","required":false,"default":"","description":"A few words that describe the picture for people who cannot see it.","_meta":{"description":"A few words that describe the picture for people who cannot see it."}},"weight":{"type":"integer","required":false,"default":1,"description":"How often this ad shows compared with the others in its campaign: an ad with weight 2 shows twice as often as one with weight 1.","_meta":{"description":"How often this ad shows compared with the others in its campaign: an ad with weight 2 shows twice as often as one with weight 1."}},"status":{"type":"text","required":false,"description":"Where the ad stands: draft, active or paused. Only active ads show.","_meta":{"description":"Where the ad stands: draft, active or paused. Only active ads show."},"enum":["draft","active","paused"]},"impressions":{"type":"integer","required":false,"default":0,"description":"How many times the ad has been shown. The app counts this as it serves ads and refreshes it a little later.","_meta":{"description":"How many times the ad has been shown. The app counts this as it serves ads and refreshes it a little later."}},"clicks":{"type":"integer","required":false,"default":0,"description":"How many times the ad has been tapped. The app counts this as it serves ads and refreshes it a little later.","_meta":{"description":"How many times the ad has been tapped. The app counts this as it serves ads and refreshes it a little later."}}},"methods":{"isActive":{"name":"isActive","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isDraft":{"name":"isDraft","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"isPaused":{"name":"isPaused","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"getCTR":{"name":"getCTR","async":false,"parameters":[],"returnType":"number","isStatic":false,"isPublic":true},"recordImpression":{"name":"recordImpression","async":false,"parameters":[],"returnType":"void","isStatic":false,"isPublic":true},"recordClick":{"name":"recordClick","async":false,"parameters":[],"returnType":"void","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableStrategy":"sti","api":{"include":["list","get","create","update"]},"mcp":{"include":["list","get","create"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context","_meta_type"]},"extends":"SmrtObject","exportName":"AdVariation","collectionExportName":"AdVariationCollection","displayLabelField":"name","schema":{"tableName":"ad_variations","ddl":"CREATE TABLE IF NOT EXISTS \\"ad_variations\\" (\\n \\"_sync_origin_device_id\\" TEXT,\\n \\"_sync_revision\\" INTEGER,\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"group_id\\" UUID,\\n \\"format_id\\" UUID,\\n \\"asset_id\\" UUID,\\n \\"name\\" TEXT DEFAULT '',\\n \\"click_url\\" TEXT DEFAULT '',\\n \\"alt_text\\" TEXT DEFAULT '',\\n \\"weight\\" INTEGER DEFAULT 1,\\n \\"status\\" TEXT,\\n \\"impressions\\" INTEGER DEFAULT 0,\\n \\"clicks\\" INTEGER DEFAULT 0\\n);","columns":{"_sync_origin_device_id":{"type":"TEXT"},"_sync_revision":{"type":"INTEGER"},"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"group_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"ad_groups","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"format_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"ad_formats","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"asset_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":false},"name":{"type":"TEXT","notNull":false,"default":""},"click_url":{"type":"TEXT","notNull":false,"default":""},"alt_text":{"type":"TEXT","notNull":false,"default":""},"weight":{"type":"INTEGER","notNull":false,"default":1},"status":{"type":"TEXT","notNull":false},"impressions":{"type":"INTEGER","notNull":false,"default":0},"clicks":{"type":"INTEGER","notNull":false,"default":0}},"indexes":[{"name":"ad_variations_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"ad_variations_meta_type_idx","columns":["_meta_type"]},{"name":"ad_variations_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"ad_variations_group_id_idx","columns":["group_id"]},{"name":"ad_variations_format_id_idx","columns":["format_id"]},{"name":"ad_variations_asset_id_idx","columns":["asset_id"]}],"version":"bd697f86"},"importPath":"@happyvertical/smrt-ads"}},"moduleType":"smrt","recipes":[{"id":"ads.campaigns","className":"AdsCampaignsRecipe","label":"Ads","summary":"Run ad campaigns on your site, choose which ads show where, and see which ones get clicked.","synonyms":["ads","advertising","ad campaigns","banner ads","advertisements","display ads"],"models":["@happyvertical/smrt-ads:AdGroup","@happyvertical/smrt-ads:AdVariation","@happyvertical/smrt-ads:AdFormat","@happyvertical/smrt-ads:AdDeliveryTier"],"nav":[{"label":"Ad campaigns","model":"@happyvertical/smrt-ads:AdGroup","icon":"tag","description":"Each campaign you run, with its dates, budget and where it stands.","noun":"ad campaign"},{"label":"Ads","model":"@happyvertical/smrt-ads:AdVariation","icon":"fileText","description":"The ads inside each campaign, how often each shows and how many clicks it got.","noun":"ad"},{"label":"Ad sizes","model":"@happyvertical/smrt-ads:AdFormat","icon":"layers","description":"The shapes and sizes an ad can be, shared by every campaign.","noun":"ad size"},{"label":"Priority tiers","model":"@happyvertical/smrt-ads:AdDeliveryTier","icon":"settings","description":"The order campaigns are tried in when more than one could show.","noun":"tier"}],"requires":[],"section":{"id":"grow","label":"Grow","icon":"tag","description":"Bring in new customers and reward the people who help."},"options":{"@happyvertical/smrt-ads:AdGroup":{"fields":{"name":{"order":1},"status":{"order":2},"tierId":{"label":"Priority tier","order":3},"startDate":{"label":"Starts on","order":4},"endDate":{"label":"Ends on","order":5},"dailyBudget":{"label":"Daily budget","order":6},"totalBudget":{"label":"Total budget","order":7},"tenantId":{"visibility":"hidden"},"contractId":{"label":"Sales contract","visibility":"advanced"},"verticalSlug":{"label":"Category","visibility":"advanced"},"targeting":{"visibility":"hidden"},"zoneIds":{"visibility":"hidden"}}},"@happyvertical/smrt-ads:AdVariation":{"fields":{"name":{"order":1},"groupId":{"label":"Ad campaign","order":2},"formatId":{"label":"Ad size","order":3},"assetId":{"label":"Picture","order":4},"clickUrl":{"label":"Link to","order":5},"altText":{"label":"Words for the picture","order":6},"weight":{"order":7},"status":{"order":8},"tenantId":{"visibility":"hidden"},"impressions":{"label":"Times shown","locked":true,"visibility":"advanced"},"clicks":{"locked":true,"visibility":"advanced"}}},"@happyvertical/smrt-ads:AdFormat":{"fields":{"name":{"order":1},"width":{"order":2},"height":{"order":3},"formatType":{"label":"Kind","order":4},"description":{"order":5}}},"@happyvertical/smrt-ads:AdDeliveryTier":{"fields":{"name":{"order":1},"priority":{"order":2},"pricingModel":{"label":"How it is charged","order":3},"description":{"order":4}}}},"help":{"markdown":"## Overview\\n\\nAds is where you run advertising on your own site. An ad campaign sets the\\ndates, the budget and the priority tier; the ads inside it are the pictures\\npeople actually see, each with a link. When a campaign has more than one ad,\\nthe app shares the showings between them by weight, so you can try two\\nversions and see which gets more clicks.\\n\\nAd sizes and priority tiers are shared lists. Set them up once; every campaign\\npicks from them. When more than one campaign could show in the same place, the\\ntier decides which is tried first.\\n\\nThe app counts every showing and click as it serves the ads. Those counts are\\nrefreshed on the ad a little later; you read them, you do not type them.\\n\\n## Tasks\\n\\n### Add an ad size\\n\\n1. Open the ad sizes and choose **New**.\\n2. Type the **{field:AdFormat.name}**, for example \\"Leaderboard\\".\\n3. Enter the **{field:AdFormat.width}** and **{field:AdFormat.height}**.\\n4. Pick the **{field:AdFormat.formatType}**: a picture, a piece written to look like your own content, or a video.\\n5. Save. The usual sizes are 728 by 90, 300 by 250 and 320 by 50.\\n\\n### Set up the priority tiers\\n\\n1. Open the priority tiers and choose **New**.\\n2. Type the **{field:AdDeliveryTier.name}**, for example \\"Sponsorship\\", \\"Standard\\" or \\"House\\".\\n3. Set the **{field:AdDeliveryTier.priority}**: 1 is tried first, then 2, then 3.\\n4. Pick **{field:AdDeliveryTier.pricingModel}** to say how ads in this tier are charged.\\n5. Save. A \\"House\\" tier with the last priority is a good place for your own ads, so something always shows.\\n\\n### Start an ad campaign\\n\\n1. Open the ad campaigns and choose **New**.\\n2. Type the **{field:AdGroup.name}**, for example \\"Summer sale\\".\\n3. Pick the **{field:AdGroup.tierId}** it runs in.\\n4. Set when it **{field:AdGroup.startDate}** and **{field:AdGroup.endDate}**.\\n5. Enter the **{field:AdGroup.dailyBudget}** and the **{field:AdGroup.totalBudget}**. The app does not stop a campaign at its budget by itself; keep an eye on the counts.\\n6. Leave the **{field:AdGroup.status}** as draft until the ads are ready, then set it to active.\\n7. Save.\\n\\n### Add an ad to a campaign\\n\\n1. Open the ads and choose **New**.\\n2. Type the **{field:AdVariation.name}**, for example \\"Version A, blue button\\".\\n3. Pick the **{field:AdVariation.groupId}** it belongs to and the **{field:AdVariation.formatId}** it is made for.\\n4. Choose the **{field:AdVariation.assetId}** people will see.\\n5. Enter the web address it should **{field:AdVariation.clickUrl}** when someone taps it.\\n6. Write a few **{field:AdVariation.altText}** for people who cannot see the picture.\\n7. Set the **{field:AdVariation.weight}**. An ad with weight 2 shows twice as often as one with weight 1 in the same campaign.\\n8. Set the **{field:AdVariation.status}** to active when it is ready to show.\\n9. Save.\\n\\n### Pause or finish a campaign\\n\\n1. Open the ad campaign.\\n2. Change the **{field:AdGroup.status}** to paused to stop it for now, or to completed when it is over.\\n3. Save. The ads in it stop showing straight away.\\n\\n### See which ad is doing better\\n\\n1. Open the ads and find the ads in one campaign.\\n2. Compare the **{field:AdVariation.impressions}** and **{field:AdVariation.clicks}** of each. These are counted by the app as it serves the ads and refreshed a little later.\\n3. Give the better ad a higher **{field:AdVariation.weight}**, or pause the weaker one by changing its **{field:AdVariation.status}**.\\n","fieldRefs":["AdDeliveryTier.name","AdDeliveryTier.pricingModel","AdDeliveryTier.priority","AdFormat.formatType","AdFormat.height","AdFormat.name","AdFormat.width","AdGroup.dailyBudget","AdGroup.endDate","AdGroup.name","AdGroup.startDate","AdGroup.status","AdGroup.tierId","AdGroup.totalBudget","AdVariation.altText","AdVariation.assetId","AdVariation.clickUrl","AdVariation.clicks","AdVariation.formatId","AdVariation.groupId","AdVariation.impressions","AdVariation.name","AdVariation.status","AdVariation.weight"]},"demo":{"mode":"server","reasons":["Needs a server because its package depends on @happyvertical/smrt-tenancy, which do not build for a browser (#3624)."]}}],"smrtDependencies":["@happyvertical/smrt-commerce","@happyvertical/smrt-core","@happyvertical/smrt-tenancy"],"browser":{"status":"server-only","issues":["#3624"],"via":["@happyvertical/smrt-tenancy"]},"stampsConstructors":true}`));
|
|
5
5
|
//#endregion
|
|
6
6
|
//#region src/types/index.ts
|
|
7
7
|
var AdFormatType = /* @__PURE__ */ ((AdFormatType2) => {
|