@happyvertical/smrt-ads 0.57.39 → 0.57.41

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.
@@ -3,12 +3,12 @@
3
3
  "sensitiveFieldsExcluded": true,
4
4
  "generatedAt": "1970-01-01T00:00:00.000Z",
5
5
  "packageName": "@happyvertical/smrt-ads",
6
- "packageVersion": "0.57.39",
6
+ "packageVersion": "0.57.41",
7
7
  "sourceManifestPath": "dist/manifest.json",
8
8
  "agentDocPath": "AGENTS.md",
9
9
  "sourceHashes": {
10
- "manifest": "038321204c26238fb37ea7dbf5b80ae18052c5d285a972c4980b9859f6533651",
11
- "packageJson": "9cbc838659a90701ffa193036a39999598b49fd54d38fdc5aa56480e13037924",
10
+ "manifest": "92a9da81406461a3247ff4e4257c8708ba4d842ca7168b9c3f02646757f7ea53",
11
+ "packageJson": "cd27201a3116093664d80ca521e6b0ccea44666cdbb6e028cf5cb90354e3c4f8",
12
12
  "agents": "a74f5ff1aea757073496bcd3fe01802b5a4e2f59b39a04c1bb0d11b81343f660"
13
13
  },
14
14
  "exports": [
@@ -52,184 +52,137 @@
52
52
  ],
53
53
  "objects": [
54
54
  {
55
- "name": "AdDeliveryTier",
56
- "qualifiedName": "@happyvertical/smrt-ads:AdDeliveryTier",
57
- "displayLabelField": "name",
55
+ "name": "AdDeliveryTierCollection",
56
+ "qualifiedName": "@happyvertical/smrt-ads:AdDeliveryTierCollection",
58
57
  "collection": "addeliverytiers",
59
58
  "tableName": "ad_delivery_tiers",
60
59
  "packageName": "@happyvertical/smrt-ads",
61
- "extends": "SmrtObject",
62
- "fields": [
63
- {
64
- "name": "name",
65
- "type": "text",
66
- "required": false,
67
- "columnType": "TEXT",
68
- "default": "",
69
- "description": "What the tier is called, for example Sponsorship, Standard or House."
70
- },
71
- {
72
- "name": "priority",
73
- "type": "integer",
74
- "required": false,
75
- "columnType": "INTEGER",
76
- "default": 0,
77
- "description": "The order tiers are tried in: 1 is tried first, then 2, and so on."
78
- },
79
- {
80
- "name": "pricingModel",
81
- "type": "text",
82
- "required": false,
83
- "columnType": "TEXT",
84
- "description": "How ads in this tier are charged: a fixed price, per thousand showings, per click, or per sale."
85
- },
86
- {
87
- "name": "description",
88
- "type": "text",
89
- "required": false,
90
- "columnType": "TEXT",
91
- "default": "",
92
- "description": "A note about what this tier is for."
93
- }
94
- ],
60
+ "extends": "SmrtCollection",
61
+ "fields": [],
95
62
  "relationships": [],
96
63
  "methods": [
97
- "isFixedPricing",
98
- "isHigherPriorityThan",
99
- "isPerformanceBased"
64
+ "findByPricingModel",
65
+ "findByPriority",
66
+ "findCPM",
67
+ "findFixedPricing",
68
+ "findPerformanceBased",
69
+ "getHighestPriority"
100
70
  ],
101
71
  "methodSignatures": [
102
72
  {
103
- "name": "isFixedPricing",
104
- "returns": "boolean"
105
- },
106
- {
107
- "name": "isHigherPriorityThan",
73
+ "name": "findByPricingModel",
74
+ "async": true,
108
75
  "params": [
109
- "other: AdDeliveryTier"
76
+ "pricingModel: PricingModel"
110
77
  ],
111
- "returns": "boolean"
78
+ "returns": "Promise<AdDeliveryTier[]>"
112
79
  },
113
80
  {
114
- "name": "isPerformanceBased",
115
- "returns": "boolean"
116
- }
117
- ],
118
- "surfaces": [
119
- {
120
- "kind": "api",
121
- "name": "addeliverytiers.list",
122
- "operation": "list",
123
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTier",
124
- "path": "/addeliverytiers",
125
- "method": "GET"
81
+ "name": "findByPriority",
82
+ "async": true,
83
+ "returns": "Promise<AdDeliveryTier[]>"
126
84
  },
127
85
  {
128
- "kind": "api",
129
- "name": "addeliverytiers.get",
130
- "operation": "get",
131
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTier",
132
- "path": "/addeliverytiers/[id]",
133
- "method": "GET"
86
+ "name": "findCPM",
87
+ "async": true,
88
+ "returns": "Promise<AdDeliveryTier[]>"
134
89
  },
135
90
  {
136
- "kind": "api",
137
- "name": "addeliverytiers.create",
138
- "operation": "create",
139
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTier",
140
- "path": "/addeliverytiers",
141
- "method": "POST"
91
+ "name": "findFixedPricing",
92
+ "async": true,
93
+ "returns": "Promise<AdDeliveryTier[]>"
142
94
  },
143
95
  {
144
- "kind": "api",
145
- "name": "addeliverytiers.update",
146
- "operation": "update",
147
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTier",
148
- "path": "/addeliverytiers/[id]",
149
- "method": "PATCH"
96
+ "name": "findPerformanceBased",
97
+ "async": true,
98
+ "returns": "Promise<AdDeliveryTier[]>"
150
99
  },
151
100
  {
152
- "kind": "cli",
153
- "name": "addeliverytier_list",
154
- "operation": "list",
155
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
156
- },
101
+ "name": "getHighestPriority",
102
+ "async": true,
103
+ "returns": "Promise<AdDeliveryTier | null>"
104
+ }
105
+ ],
106
+ "surfaces": [
157
107
  {
158
108
  "kind": "cli",
159
- "name": "addeliverytier_get",
160
- "operation": "get",
161
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
109
+ "name": "addeliverytiercollection_findByPriority",
110
+ "operation": "findByPriority",
111
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
162
112
  },
163
113
  {
164
114
  "kind": "cli",
165
- "name": "addeliverytier_create",
166
- "operation": "create",
167
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
115
+ "name": "addeliverytiercollection_findByPricingModel",
116
+ "operation": "findByPricingModel",
117
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
168
118
  },
169
119
  {
170
120
  "kind": "cli",
171
- "name": "addeliverytier_update",
172
- "operation": "update",
173
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
121
+ "name": "addeliverytiercollection_getHighestPriority",
122
+ "operation": "getHighestPriority",
123
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
174
124
  },
175
125
  {
176
126
  "kind": "cli",
177
- "name": "addeliverytier_delete",
178
- "operation": "delete",
179
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
127
+ "name": "addeliverytiercollection_findFixedPricing",
128
+ "operation": "findFixedPricing",
129
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
180
130
  },
181
131
  {
182
132
  "kind": "cli",
183
- "name": "addeliverytier_isHigherPriorityThan",
184
- "operation": "isHigherPriorityThan",
185
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
133
+ "name": "addeliverytiercollection_findCPM",
134
+ "operation": "findCPM",
135
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
186
136
  },
187
137
  {
188
138
  "kind": "cli",
189
- "name": "addeliverytier_isFixedPricing",
190
- "operation": "isFixedPricing",
191
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
192
- },
139
+ "name": "addeliverytiercollection_findPerformanceBased",
140
+ "operation": "findPerformanceBased",
141
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
142
+ }
143
+ ],
144
+ "withheldSurfaces": [
193
145
  {
194
- "kind": "cli",
195
- "name": "addeliverytier_isPerformanceBased",
196
- "operation": "isPerformanceBased",
197
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
146
+ "kind": "api",
147
+ "operation": "findByPricingModel",
148
+ "code": "not-included",
149
+ "reason": "not listed in api.include",
150
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
198
151
  },
199
152
  {
200
- "kind": "mcp",
201
- "name": "addeliverytier_list",
202
- "operation": "list",
203
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
153
+ "kind": "api",
154
+ "operation": "findByPriority",
155
+ "code": "not-included",
156
+ "reason": "not listed in api.include",
157
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
204
158
  },
205
159
  {
206
- "kind": "mcp",
207
- "name": "addeliverytier_get",
208
- "operation": "get",
209
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
210
- }
211
- ],
212
- "withheldSurfaces": [
160
+ "kind": "api",
161
+ "operation": "findCPM",
162
+ "code": "not-included",
163
+ "reason": "not listed in api.include",
164
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
165
+ },
213
166
  {
214
167
  "kind": "api",
215
- "operation": "isFixedPricing",
168
+ "operation": "findFixedPricing",
216
169
  "code": "not-included",
217
170
  "reason": "not listed in api.include",
218
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
171
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
219
172
  },
220
173
  {
221
174
  "kind": "api",
222
- "operation": "isHigherPriorityThan",
175
+ "operation": "findPerformanceBased",
223
176
  "code": "not-included",
224
177
  "reason": "not listed in api.include",
225
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
178
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
226
179
  },
227
180
  {
228
181
  "kind": "api",
229
- "operation": "isPerformanceBased",
182
+ "operation": "getHighestPriority",
230
183
  "code": "not-included",
231
184
  "reason": "not listed in api.include",
232
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
185
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
233
186
  }
234
187
  ],
235
188
  "relationshipFeatures": [
@@ -239,372 +192,390 @@
239
192
  "risks": []
240
193
  },
241
194
  {
242
- "name": "AdEvent",
243
- "qualifiedName": "@happyvertical/smrt-ads:AdEvent",
195
+ "name": "AdEventCollection",
196
+ "qualifiedName": "@happyvertical/smrt-ads:AdEventCollection",
244
197
  "collection": "adevents",
245
- "description": "AdEvent tracks ad impressions, clicks, and conversions. Events are immutable (append-only, no update/delete).",
246
198
  "tableName": "ad_events",
247
199
  "packageName": "@happyvertical/smrt-ads",
248
- "extends": "SmrtObject",
249
- "fields": [
250
- {
251
- "name": "created_at",
252
- "type": "datetime",
253
- "required": false,
254
- "columnType": "TIMESTAMP"
255
- },
200
+ "extends": "SmrtCollection",
201
+ "fields": [],
202
+ "relationships": [],
203
+ "methods": [
204
+ "countByType",
205
+ "countClicks",
206
+ "countConversions",
207
+ "countImpressions",
208
+ "findByDateRange",
209
+ "findBySite",
210
+ "findByTenant",
211
+ "findByType",
212
+ "findByVariation",
213
+ "findByZone",
214
+ "findClicks",
215
+ "findConversions",
216
+ "findGlobal",
217
+ "findImpressions",
218
+ "findWithGlobals",
219
+ "getVariationStats"
220
+ ],
221
+ "methodSignatures": [
256
222
  {
257
- "name": "updated_at",
258
- "type": "datetime",
259
- "required": false,
260
- "columnType": "TIMESTAMP"
223
+ "name": "countByType",
224
+ "async": true,
225
+ "params": [
226
+ "variationId: string",
227
+ "eventType: AdEventType"
228
+ ],
229
+ "returns": "Promise<number>"
261
230
  },
262
231
  {
263
- "name": "tenantId",
264
- "type": "text",
265
- "required": false,
266
- "columnType": "UUID"
232
+ "name": "countClicks",
233
+ "async": true,
234
+ "params": [
235
+ "variationId: string"
236
+ ],
237
+ "returns": "Promise<number>"
267
238
  },
268
239
  {
269
- "name": "variationId",
270
- "type": "foreignKey",
271
- "required": false,
272
- "related": "AdVariation",
273
- "columnType": "UUID"
240
+ "name": "countConversions",
241
+ "async": true,
242
+ "params": [
243
+ "variationId: string"
244
+ ],
245
+ "returns": "Promise<number>"
274
246
  },
275
247
  {
276
- "name": "zoneId",
277
- "type": "crossPackageRef",
278
- "required": false,
279
- "related": "@happyvertical/smrt-properties:Zone",
280
- "columnType": "UUID"
248
+ "name": "countImpressions",
249
+ "async": true,
250
+ "params": [
251
+ "variationId: string"
252
+ ],
253
+ "returns": "Promise<number>"
281
254
  },
282
255
  {
283
- "name": "siteId",
284
- "type": "text",
285
- "required": false,
286
- "columnType": "TEXT",
287
- "default": ""
256
+ "name": "findByDateRange",
257
+ "async": true,
258
+ "params": [
259
+ "start: Date",
260
+ "end: Date"
261
+ ],
262
+ "returns": "Promise<AdEvent[]>"
288
263
  },
289
264
  {
290
- "name": "eventType",
291
- "type": "text",
292
- "required": false,
293
- "columnType": "TEXT"
265
+ "name": "findBySite",
266
+ "async": true,
267
+ "params": [
268
+ "siteId: string"
269
+ ],
270
+ "returns": "Promise<AdEvent[]>"
294
271
  },
295
272
  {
296
- "name": "timestamp",
297
- "type": "datetime",
298
- "required": false,
299
- "columnType": "TIMESTAMP"
273
+ "name": "findByTenant",
274
+ "async": true,
275
+ "params": [
276
+ "tenantId: string"
277
+ ],
278
+ "returns": "Promise<AdEvent[]>"
300
279
  },
301
280
  {
302
- "name": "metadata",
303
- "type": "text",
304
- "required": false,
305
- "columnType": "TEXT",
306
- "default": ""
307
- }
308
- ],
309
- "relationships": [
281
+ "name": "findByType",
282
+ "async": true,
283
+ "params": [
284
+ "eventType: AdEventType"
285
+ ],
286
+ "returns": "Promise<AdEvent[]>"
287
+ },
310
288
  {
311
- "name": "variationId",
312
- "type": "foreignKey",
313
- "required": false,
314
- "related": "AdVariation",
315
- "columnType": "UUID"
289
+ "name": "findByVariation",
290
+ "async": true,
291
+ "params": [
292
+ "variationId: string"
293
+ ],
294
+ "returns": "Promise<AdEvent[]>"
316
295
  },
317
296
  {
318
- "name": "zoneId",
319
- "type": "crossPackageRef",
320
- "required": false,
321
- "related": "@happyvertical/smrt-properties:Zone",
322
- "columnType": "UUID"
323
- }
324
- ],
325
- "methods": [
326
- "getMetadata",
327
- "isClick",
328
- "isConversion",
329
- "isImpression",
330
- "setMetadata"
331
- ],
332
- "methodSignatures": [
297
+ "name": "findByZone",
298
+ "async": true,
299
+ "params": [
300
+ "zoneId: string"
301
+ ],
302
+ "returns": "Promise<AdEvent[]>"
303
+ },
333
304
  {
334
- "name": "getMetadata",
335
- "returns": "Record<string, unknown>"
305
+ "name": "findClicks",
306
+ "async": true,
307
+ "returns": "Promise<AdEvent[]>"
336
308
  },
337
309
  {
338
- "name": "isClick",
339
- "returns": "boolean"
310
+ "name": "findConversions",
311
+ "async": true,
312
+ "returns": "Promise<AdEvent[]>"
340
313
  },
341
314
  {
342
- "name": "isConversion",
343
- "returns": "boolean"
315
+ "name": "findGlobal",
316
+ "async": true,
317
+ "returns": "Promise<AdEvent[]>"
344
318
  },
345
319
  {
346
- "name": "isImpression",
347
- "returns": "boolean"
320
+ "name": "findImpressions",
321
+ "async": true,
322
+ "returns": "Promise<AdEvent[]>"
348
323
  },
349
324
  {
350
- "name": "setMetadata",
325
+ "name": "findWithGlobals",
326
+ "async": true,
351
327
  "params": [
352
- "data: Record<string, unknown>"
328
+ "tenantId: string"
353
329
  ],
354
- "returns": "void"
330
+ "returns": "Promise<AdEvent[]>"
331
+ },
332
+ {
333
+ "name": "getVariationStats",
334
+ "async": true,
335
+ "params": [
336
+ "variationId: string"
337
+ ],
338
+ "returns": "Promise<object>"
355
339
  }
356
340
  ],
357
- "tenant": {
358
- "scoped": true,
359
- "mode": "optional",
360
- "field": "tenantId"
361
- },
362
- "tableStrategy": "sti",
363
- "conflictColumns": [
364
- "tenant_id",
365
- "slug",
366
- "context",
367
- "_meta_type"
368
- ],
369
- "surfaces": [
341
+ "surfaces": [],
342
+ "withheldSurfaces": [
370
343
  {
371
344
  "kind": "api",
372
- "name": "adevents.list",
373
- "operation": "list",
374
- "objectName": "@happyvertical/smrt-ads:AdEvent",
375
- "path": "/adevents",
376
- "method": "GET"
345
+ "operation": "countByType",
346
+ "code": "not-included",
347
+ "reason": "not listed in api.include",
348
+ "objectName": "@happyvertical/smrt-ads:AdEventCollection"
377
349
  },
378
350
  {
379
351
  "kind": "api",
380
- "name": "adevents.create",
381
- "operation": "create",
382
- "objectName": "@happyvertical/smrt-ads:AdEvent",
383
- "path": "/adevents",
384
- "method": "POST"
352
+ "operation": "countClicks",
353
+ "code": "not-included",
354
+ "reason": "not listed in api.include",
355
+ "objectName": "@happyvertical/smrt-ads:AdEventCollection"
385
356
  },
386
- {
387
- "kind": "mcp",
388
- "name": "adevent_create",
389
- "operation": "create",
390
- "objectName": "@happyvertical/smrt-ads:AdEvent"
391
- }
392
- ],
393
- "withheldSurfaces": [
394
357
  {
395
358
  "kind": "api",
396
- "operation": "getMetadata",
359
+ "operation": "countConversions",
397
360
  "code": "not-included",
398
361
  "reason": "not listed in api.include",
399
- "objectName": "@happyvertical/smrt-ads:AdEvent"
362
+ "objectName": "@happyvertical/smrt-ads:AdEventCollection"
400
363
  },
401
364
  {
402
365
  "kind": "api",
403
- "operation": "isClick",
366
+ "operation": "countImpressions",
404
367
  "code": "not-included",
405
368
  "reason": "not listed in api.include",
406
- "objectName": "@happyvertical/smrt-ads:AdEvent"
369
+ "objectName": "@happyvertical/smrt-ads:AdEventCollection"
407
370
  },
408
371
  {
409
372
  "kind": "api",
410
- "operation": "isConversion",
373
+ "operation": "findByDateRange",
411
374
  "code": "not-included",
412
375
  "reason": "not listed in api.include",
413
- "objectName": "@happyvertical/smrt-ads:AdEvent"
376
+ "objectName": "@happyvertical/smrt-ads:AdEventCollection"
414
377
  },
415
378
  {
416
379
  "kind": "api",
417
- "operation": "isImpression",
380
+ "operation": "findBySite",
418
381
  "code": "not-included",
419
382
  "reason": "not listed in api.include",
420
- "objectName": "@happyvertical/smrt-ads:AdEvent"
383
+ "objectName": "@happyvertical/smrt-ads:AdEventCollection"
421
384
  },
422
385
  {
423
386
  "kind": "api",
424
- "operation": "setMetadata",
387
+ "operation": "findByTenant",
425
388
  "code": "not-included",
426
389
  "reason": "not listed in api.include",
427
- "objectName": "@happyvertical/smrt-ads:AdEvent"
428
- }
429
- ],
430
- "relationshipFeatures": [
431
- "crossPackageRef",
432
- "foreignKey",
433
- "uuidColumns"
434
- ],
435
- "tags": [],
436
- "risks": []
437
- },
438
- {
439
- "name": "AdFormat",
440
- "qualifiedName": "@happyvertical/smrt-ads:AdFormat",
441
- "displayLabelField": "name",
442
- "collection": "adformats",
443
- "tableName": "ad_formats",
444
- "packageName": "@happyvertical/smrt-ads",
445
- "extends": "SmrtObject",
446
- "fields": [
447
- {
448
- "name": "name",
449
- "type": "text",
450
- "required": false,
451
- "columnType": "TEXT",
452
- "default": "",
453
- "description": "What the size is called, for example Leaderboard."
390
+ "objectName": "@happyvertical/smrt-ads:AdEventCollection"
454
391
  },
455
392
  {
456
- "name": "width",
457
- "type": "integer",
458
- "required": false,
459
- "columnType": "INTEGER",
460
- "default": 0,
461
- "description": "How wide the ad is, in pixels."
393
+ "kind": "api",
394
+ "operation": "findByType",
395
+ "code": "not-included",
396
+ "reason": "not listed in api.include",
397
+ "objectName": "@happyvertical/smrt-ads:AdEventCollection"
462
398
  },
463
399
  {
464
- "name": "height",
465
- "type": "integer",
466
- "required": false,
467
- "columnType": "INTEGER",
468
- "default": 0,
469
- "description": "How tall the ad is, in pixels."
400
+ "kind": "api",
401
+ "operation": "findByVariation",
402
+ "code": "not-included",
403
+ "reason": "not listed in api.include",
404
+ "objectName": "@happyvertical/smrt-ads:AdEventCollection"
470
405
  },
471
406
  {
472
- "name": "formatType",
473
- "type": "text",
474
- "required": false,
475
- "columnType": "TEXT",
476
- "description": "What kind of ad fits this size: a picture, a piece written to look like your own content, or a video."
407
+ "kind": "api",
408
+ "operation": "findByZone",
409
+ "code": "not-included",
410
+ "reason": "not listed in api.include",
411
+ "objectName": "@happyvertical/smrt-ads:AdEventCollection"
477
412
  },
478
413
  {
479
- "name": "description",
480
- "type": "text",
481
- "required": false,
482
- "columnType": "TEXT",
483
- "default": "",
484
- "description": "A note about where this size is usually used."
414
+ "kind": "api",
415
+ "operation": "findClicks",
416
+ "code": "not-included",
417
+ "reason": "not listed in api.include",
418
+ "objectName": "@happyvertical/smrt-ads:AdEventCollection"
419
+ },
420
+ {
421
+ "kind": "api",
422
+ "operation": "findConversions",
423
+ "code": "not-included",
424
+ "reason": "not listed in api.include",
425
+ "objectName": "@happyvertical/smrt-ads:AdEventCollection"
426
+ },
427
+ {
428
+ "kind": "api",
429
+ "operation": "findGlobal",
430
+ "code": "not-included",
431
+ "reason": "not listed in api.include",
432
+ "objectName": "@happyvertical/smrt-ads:AdEventCollection"
433
+ },
434
+ {
435
+ "kind": "api",
436
+ "operation": "findImpressions",
437
+ "code": "not-included",
438
+ "reason": "not listed in api.include",
439
+ "objectName": "@happyvertical/smrt-ads:AdEventCollection"
440
+ },
441
+ {
442
+ "kind": "api",
443
+ "operation": "findWithGlobals",
444
+ "code": "not-included",
445
+ "reason": "not listed in api.include",
446
+ "objectName": "@happyvertical/smrt-ads:AdEventCollection"
447
+ },
448
+ {
449
+ "kind": "api",
450
+ "operation": "getVariationStats",
451
+ "code": "not-included",
452
+ "reason": "not listed in api.include",
453
+ "objectName": "@happyvertical/smrt-ads:AdEventCollection"
485
454
  }
486
455
  ],
456
+ "relationshipFeatures": [
457
+ "uuidColumns"
458
+ ],
459
+ "tags": [],
460
+ "risks": []
461
+ },
462
+ {
463
+ "name": "AdFormatCollection",
464
+ "qualifiedName": "@happyvertical/smrt-ads:AdFormatCollection",
465
+ "collection": "adformats",
466
+ "tableName": "ad_formats",
467
+ "packageName": "@happyvertical/smrt-ads",
468
+ "extends": "SmrtCollection",
469
+ "fields": [],
487
470
  "relationships": [],
488
471
  "methods": [
489
- "getDimensions",
490
- "matchesDimensions"
472
+ "findBanners",
473
+ "findByDimensions",
474
+ "findByType",
475
+ "findNative",
476
+ "findVideo"
491
477
  ],
492
478
  "methodSignatures": [
493
479
  {
494
- "name": "getDimensions",
495
- "returns": "string"
480
+ "name": "findBanners",
481
+ "async": true,
482
+ "returns": "Promise<AdFormat[]>"
496
483
  },
497
484
  {
498
- "name": "matchesDimensions",
485
+ "name": "findByDimensions",
486
+ "async": true,
499
487
  "params": [
500
488
  "width: number",
501
489
  "height: number"
502
490
  ],
503
- "returns": "boolean"
504
- }
505
- ],
506
- "surfaces": [
507
- {
508
- "kind": "api",
509
- "name": "adformats.list",
510
- "operation": "list",
511
- "objectName": "@happyvertical/smrt-ads:AdFormat",
512
- "path": "/adformats",
513
- "method": "GET"
491
+ "returns": "Promise<AdFormat | null>"
514
492
  },
515
493
  {
516
- "kind": "api",
517
- "name": "adformats.get",
518
- "operation": "get",
519
- "objectName": "@happyvertical/smrt-ads:AdFormat",
520
- "path": "/adformats/[id]",
521
- "method": "GET"
494
+ "name": "findByType",
495
+ "async": true,
496
+ "params": [
497
+ "formatType: AdFormatType"
498
+ ],
499
+ "returns": "Promise<AdFormat[]>"
522
500
  },
523
501
  {
524
- "kind": "api",
525
- "name": "adformats.create",
526
- "operation": "create",
527
- "objectName": "@happyvertical/smrt-ads:AdFormat",
528
- "path": "/adformats",
529
- "method": "POST"
502
+ "name": "findNative",
503
+ "async": true,
504
+ "returns": "Promise<AdFormat[]>"
530
505
  },
531
506
  {
532
- "kind": "api",
533
- "name": "adformats.update",
534
- "operation": "update",
535
- "objectName": "@happyvertical/smrt-ads:AdFormat",
536
- "path": "/adformats/[id]",
537
- "method": "PATCH"
538
- },
507
+ "name": "findVideo",
508
+ "async": true,
509
+ "returns": "Promise<AdFormat[]>"
510
+ }
511
+ ],
512
+ "surfaces": [
539
513
  {
540
514
  "kind": "cli",
541
- "name": "adformat_list",
542
- "operation": "list",
543
- "objectName": "@happyvertical/smrt-ads:AdFormat"
515
+ "name": "adformatcollection_findByDimensions",
516
+ "operation": "findByDimensions",
517
+ "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
544
518
  },
545
519
  {
546
520
  "kind": "cli",
547
- "name": "adformat_get",
548
- "operation": "get",
549
- "objectName": "@happyvertical/smrt-ads:AdFormat"
521
+ "name": "adformatcollection_findByType",
522
+ "operation": "findByType",
523
+ "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
550
524
  },
551
525
  {
552
526
  "kind": "cli",
553
- "name": "adformat_create",
554
- "operation": "create",
555
- "objectName": "@happyvertical/smrt-ads:AdFormat"
527
+ "name": "adformatcollection_findBanners",
528
+ "operation": "findBanners",
529
+ "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
556
530
  },
557
531
  {
558
532
  "kind": "cli",
559
- "name": "adformat_update",
560
- "operation": "update",
561
- "objectName": "@happyvertical/smrt-ads:AdFormat"
533
+ "name": "adformatcollection_findNative",
534
+ "operation": "findNative",
535
+ "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
562
536
  },
563
537
  {
564
538
  "kind": "cli",
565
- "name": "adformat_delete",
566
- "operation": "delete",
567
- "objectName": "@happyvertical/smrt-ads:AdFormat"
568
- },
539
+ "name": "adformatcollection_findVideo",
540
+ "operation": "findVideo",
541
+ "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
542
+ }
543
+ ],
544
+ "withheldSurfaces": [
569
545
  {
570
- "kind": "cli",
571
- "name": "adformat_getDimensions",
572
- "operation": "getDimensions",
573
- "objectName": "@happyvertical/smrt-ads:AdFormat"
546
+ "kind": "api",
547
+ "operation": "findBanners",
548
+ "code": "not-included",
549
+ "reason": "not listed in api.include",
550
+ "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
574
551
  },
575
552
  {
576
- "kind": "cli",
577
- "name": "adformat_matchesDimensions",
578
- "operation": "matchesDimensions",
579
- "objectName": "@happyvertical/smrt-ads:AdFormat"
553
+ "kind": "api",
554
+ "operation": "findByDimensions",
555
+ "code": "not-included",
556
+ "reason": "not listed in api.include",
557
+ "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
580
558
  },
581
559
  {
582
- "kind": "mcp",
583
- "name": "adformat_list",
584
- "operation": "list",
585
- "objectName": "@happyvertical/smrt-ads:AdFormat"
560
+ "kind": "api",
561
+ "operation": "findByType",
562
+ "code": "not-included",
563
+ "reason": "not listed in api.include",
564
+ "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
586
565
  },
587
- {
588
- "kind": "mcp",
589
- "name": "adformat_get",
590
- "operation": "get",
591
- "objectName": "@happyvertical/smrt-ads:AdFormat"
592
- }
593
- ],
594
- "withheldSurfaces": [
595
566
  {
596
567
  "kind": "api",
597
- "operation": "getDimensions",
568
+ "operation": "findNative",
598
569
  "code": "not-included",
599
570
  "reason": "not listed in api.include",
600
- "objectName": "@happyvertical/smrt-ads:AdFormat"
571
+ "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
601
572
  },
602
573
  {
603
574
  "kind": "api",
604
- "operation": "matchesDimensions",
575
+ "operation": "findVideo",
605
576
  "code": "not-included",
606
577
  "reason": "not listed in api.include",
607
- "objectName": "@happyvertical/smrt-ads:AdFormat"
578
+ "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
608
579
  }
609
580
  ],
610
581
  "relationshipFeatures": [
@@ -614,969 +585,753 @@
614
585
  "risks": []
615
586
  },
616
587
  {
617
- "name": "AdGroup",
618
- "qualifiedName": "@happyvertical/smrt-ads:AdGroup",
619
- "displayLabelField": "name",
588
+ "name": "AdGroupCollection",
589
+ "qualifiedName": "@happyvertical/smrt-ads:AdGroupCollection",
620
590
  "collection": "adgroups",
621
- "description": "AdGroup organizes ad creatives with targeting and budget controls.",
622
591
  "tableName": "ad_groups",
623
592
  "packageName": "@happyvertical/smrt-ads",
624
- "extends": "SmrtObject",
625
- "fields": [
593
+ "extends": "SmrtCollection",
594
+ "fields": [],
595
+ "relationships": [],
596
+ "methods": [
597
+ "findActive",
598
+ "findByContract",
599
+ "findByStatus",
600
+ "findByTenant",
601
+ "findByTier",
602
+ "findByVertical",
603
+ "findByZone",
604
+ "findCompleted",
605
+ "findDrafts",
606
+ "findEligibleForZone",
607
+ "findGlobal",
608
+ "findPaused",
609
+ "findWithGlobals"
610
+ ],
611
+ "methodSignatures": [
626
612
  {
627
- "name": "created_at",
628
- "type": "datetime",
629
- "required": false,
630
- "columnType": "TIMESTAMP"
613
+ "name": "findActive",
614
+ "async": true,
615
+ "returns": "Promise<AdGroup[]>"
631
616
  },
632
617
  {
633
- "name": "updated_at",
634
- "type": "datetime",
635
- "required": false,
636
- "columnType": "TIMESTAMP"
618
+ "name": "findByContract",
619
+ "async": true,
620
+ "params": [
621
+ "contractId: string"
622
+ ],
623
+ "returns": "Promise<AdGroup[]>"
637
624
  },
638
625
  {
639
- "name": "tenantId",
640
- "type": "text",
641
- "required": false,
642
- "columnType": "UUID"
626
+ "name": "findByStatus",
627
+ "async": true,
628
+ "params": [
629
+ "status: AdGroupStatus"
630
+ ],
631
+ "returns": "Promise<AdGroup[]>"
643
632
  },
644
633
  {
645
- "name": "contractId",
646
- "type": "crossPackageRef",
647
- "required": false,
648
- "related": "@happyvertical/smrt-commerce:SalesContract",
649
- "columnType": "UUID",
650
- "description": "The sales contract this campaign is sold under, if there is one."
651
- },
652
- {
653
- "name": "tierId",
654
- "type": "foreignKey",
655
- "required": false,
656
- "related": "AdDeliveryTier",
657
- "columnType": "UUID",
658
- "description": "The priority tier the campaign runs in. Tiers are tried in order when more than one campaign could show."
659
- },
660
- {
661
- "name": "name",
662
- "type": "text",
663
- "required": false,
664
- "columnType": "TEXT",
665
- "default": "",
666
- "description": "What you call the campaign, for example Summer sale."
634
+ "name": "findByTenant",
635
+ "async": true,
636
+ "params": [
637
+ "tenantId: string"
638
+ ],
639
+ "returns": "Promise<AdGroup[]>"
667
640
  },
668
641
  {
669
- "name": "verticalSlug",
670
- "type": "text",
671
- "required": false,
672
- "columnType": "TEXT",
673
- "default": "",
674
- "description": "The category the campaign belongs to, such as retail."
642
+ "name": "findByTier",
643
+ "async": true,
644
+ "params": [
645
+ "tierId: string"
646
+ ],
647
+ "returns": "Promise<AdGroup[]>"
675
648
  },
676
649
  {
677
- "name": "targeting",
678
- "type": "text",
679
- "required": false,
680
- "columnType": "TEXT",
681
- "default": ""
650
+ "name": "findByVertical",
651
+ "async": true,
652
+ "params": [
653
+ "verticalSlug: string"
654
+ ],
655
+ "returns": "Promise<AdGroup[]>"
682
656
  },
683
657
  {
684
- "name": "zoneIds",
685
- "type": "text",
686
- "required": false,
687
- "columnType": "TEXT",
688
- "default": ""
658
+ "name": "findByZone",
659
+ "async": true,
660
+ "params": [
661
+ "zoneId: string"
662
+ ],
663
+ "returns": "Promise<AdGroup[]>"
689
664
  },
690
665
  {
691
- "name": "startDate",
692
- "type": "datetime",
693
- "required": false,
694
- "columnType": "TIMESTAMP",
695
- "description": "The first day the campaign can show."
666
+ "name": "findCompleted",
667
+ "async": true,
668
+ "returns": "Promise<AdGroup[]>"
696
669
  },
697
670
  {
698
- "name": "endDate",
699
- "type": "datetime",
700
- "required": false,
701
- "columnType": "TIMESTAMP",
702
- "description": "The last day the campaign can show."
671
+ "name": "findDrafts",
672
+ "async": true,
673
+ "returns": "Promise<AdGroup[]>"
703
674
  },
704
675
  {
705
- "name": "dailyBudget",
706
- "type": "decimal",
707
- "required": false,
708
- "columnType": "REAL",
709
- "default": 0,
710
- "description": "The most to spend in one day. The app shows this but does not stop the campaign by itself."
676
+ "name": "findEligibleForZone",
677
+ "async": true,
678
+ "params": [
679
+ "zoneId: string"
680
+ ],
681
+ "returns": "Promise<AdGroup[]>"
711
682
  },
712
683
  {
713
- "name": "totalBudget",
714
- "type": "decimal",
715
- "required": false,
716
- "columnType": "REAL",
717
- "default": 0,
718
- "description": "The most to spend over the whole campaign."
684
+ "name": "findGlobal",
685
+ "async": true,
686
+ "returns": "Promise<AdGroup[]>"
719
687
  },
720
688
  {
721
- "name": "status",
722
- "type": "text",
723
- "required": false,
724
- "columnType": "TEXT",
725
- "description": "Where the campaign stands: draft, active, paused or completed. Only active campaigns show ads."
726
- }
727
- ],
728
- "relationships": [
729
- {
730
- "name": "contractId",
731
- "type": "crossPackageRef",
732
- "required": false,
733
- "related": "@happyvertical/smrt-commerce:SalesContract",
734
- "columnType": "UUID"
689
+ "name": "findPaused",
690
+ "async": true,
691
+ "returns": "Promise<AdGroup[]>"
735
692
  },
736
693
  {
737
- "name": "tierId",
738
- "type": "foreignKey",
739
- "required": false,
740
- "related": "AdDeliveryTier",
741
- "columnType": "UUID"
694
+ "name": "findWithGlobals",
695
+ "async": true,
696
+ "params": [
697
+ "tenantId: string"
698
+ ],
699
+ "returns": "Promise<AdGroup[]>"
742
700
  }
743
701
  ],
744
- "methods": [
745
- "addZoneId",
746
- "getTargeting",
747
- "getZoneIds",
748
- "hasEnded",
749
- "hasStarted",
750
- "hasZoneId",
751
- "isActive",
752
- "isCompleted",
753
- "isDraft",
754
- "isPaused",
755
- "removeZoneId",
756
- "setTargeting",
757
- "setZoneIds"
758
- ],
759
- "methodSignatures": [
702
+ "surfaces": [
760
703
  {
761
- "name": "addZoneId",
762
- "params": [
763
- "zoneId: string"
764
- ],
765
- "returns": "void"
704
+ "kind": "cli",
705
+ "name": "adgroupcollection_findByContract",
706
+ "operation": "findByContract",
707
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
766
708
  },
767
709
  {
768
- "name": "getTargeting",
769
- "returns": "Record<string, unknown>"
710
+ "kind": "cli",
711
+ "name": "adgroupcollection_findByTier",
712
+ "operation": "findByTier",
713
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
770
714
  },
771
715
  {
772
- "name": "getZoneIds",
773
- "returns": "string[]"
716
+ "kind": "cli",
717
+ "name": "adgroupcollection_findByStatus",
718
+ "operation": "findByStatus",
719
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
774
720
  },
775
721
  {
776
- "name": "hasEnded",
777
- "returns": "boolean"
722
+ "kind": "cli",
723
+ "name": "adgroupcollection_findActive",
724
+ "operation": "findActive",
725
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
778
726
  },
779
727
  {
780
- "name": "hasStarted",
781
- "returns": "boolean"
728
+ "kind": "cli",
729
+ "name": "adgroupcollection_findByVertical",
730
+ "operation": "findByVertical",
731
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
782
732
  },
783
733
  {
784
- "name": "hasZoneId",
785
- "params": [
786
- "zoneId: string"
787
- ],
788
- "returns": "boolean"
734
+ "kind": "cli",
735
+ "name": "adgroupcollection_findByZone",
736
+ "operation": "findByZone",
737
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
789
738
  },
790
739
  {
791
- "name": "isActive",
792
- "returns": "boolean"
740
+ "kind": "cli",
741
+ "name": "adgroupcollection_findEligibleForZone",
742
+ "operation": "findEligibleForZone",
743
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
793
744
  },
794
745
  {
795
- "name": "isCompleted",
796
- "returns": "boolean"
746
+ "kind": "cli",
747
+ "name": "adgroupcollection_findDrafts",
748
+ "operation": "findDrafts",
749
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
797
750
  },
798
751
  {
799
- "name": "isDraft",
800
- "returns": "boolean"
752
+ "kind": "cli",
753
+ "name": "adgroupcollection_findPaused",
754
+ "operation": "findPaused",
755
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
801
756
  },
802
757
  {
803
- "name": "isPaused",
804
- "returns": "boolean"
758
+ "kind": "cli",
759
+ "name": "adgroupcollection_findCompleted",
760
+ "operation": "findCompleted",
761
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
805
762
  },
806
763
  {
807
- "name": "removeZoneId",
808
- "params": [
809
- "zoneId: string"
810
- ],
811
- "returns": "void"
764
+ "kind": "cli",
765
+ "name": "adgroupcollection_findByTenant",
766
+ "operation": "findByTenant",
767
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
812
768
  },
813
769
  {
814
- "name": "setTargeting",
815
- "params": [
816
- "rules: Record<string, unknown>"
817
- ],
818
- "returns": "void"
770
+ "kind": "cli",
771
+ "name": "adgroupcollection_findGlobal",
772
+ "operation": "findGlobal",
773
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
819
774
  },
820
775
  {
821
- "name": "setZoneIds",
822
- "params": [
823
- "ids: string[]"
824
- ],
825
- "returns": "void"
776
+ "kind": "cli",
777
+ "name": "adgroupcollection_findWithGlobals",
778
+ "operation": "findWithGlobals",
779
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
826
780
  }
827
781
  ],
828
- "tenant": {
829
- "scoped": true,
830
- "mode": "optional",
831
- "field": "tenantId"
832
- },
833
- "tableStrategy": "sti",
834
- "conflictColumns": [
835
- "tenant_id",
836
- "slug",
837
- "context",
838
- "_meta_type"
839
- ],
840
- "surfaces": [
782
+ "withheldSurfaces": [
841
783
  {
842
784
  "kind": "api",
843
- "name": "adgroups.list",
844
- "operation": "list",
845
- "objectName": "@happyvertical/smrt-ads:AdGroup",
846
- "path": "/adgroups",
847
- "method": "GET"
785
+ "operation": "findActive",
786
+ "code": "not-included",
787
+ "reason": "not listed in api.include",
788
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
848
789
  },
849
790
  {
850
791
  "kind": "api",
851
- "name": "adgroups.get",
852
- "operation": "get",
853
- "objectName": "@happyvertical/smrt-ads:AdGroup",
854
- "path": "/adgroups/[id]",
855
- "method": "GET"
856
- },
857
- {
858
- "kind": "api",
859
- "name": "adgroups.create",
860
- "operation": "create",
861
- "objectName": "@happyvertical/smrt-ads:AdGroup",
862
- "path": "/adgroups",
863
- "method": "POST"
864
- },
865
- {
866
- "kind": "api",
867
- "name": "adgroups.update",
868
- "operation": "update",
869
- "objectName": "@happyvertical/smrt-ads:AdGroup",
870
- "path": "/adgroups/[id]",
871
- "method": "PATCH"
872
- },
873
- {
874
- "kind": "cli",
875
- "name": "adgroup_list",
876
- "operation": "list",
877
- "objectName": "@happyvertical/smrt-ads:AdGroup"
878
- },
879
- {
880
- "kind": "cli",
881
- "name": "adgroup_get",
882
- "operation": "get",
883
- "objectName": "@happyvertical/smrt-ads:AdGroup"
884
- },
885
- {
886
- "kind": "cli",
887
- "name": "adgroup_create",
888
- "operation": "create",
889
- "objectName": "@happyvertical/smrt-ads:AdGroup"
890
- },
891
- {
892
- "kind": "cli",
893
- "name": "adgroup_update",
894
- "operation": "update",
895
- "objectName": "@happyvertical/smrt-ads:AdGroup"
896
- },
897
- {
898
- "kind": "cli",
899
- "name": "adgroup_delete",
900
- "operation": "delete",
901
- "objectName": "@happyvertical/smrt-ads:AdGroup"
902
- },
903
- {
904
- "kind": "cli",
905
- "name": "adgroup_getZoneIds",
906
- "operation": "getZoneIds",
907
- "objectName": "@happyvertical/smrt-ads:AdGroup"
908
- },
909
- {
910
- "kind": "cli",
911
- "name": "adgroup_setZoneIds",
912
- "operation": "setZoneIds",
913
- "objectName": "@happyvertical/smrt-ads:AdGroup"
914
- },
915
- {
916
- "kind": "cli",
917
- "name": "adgroup_addZoneId",
918
- "operation": "addZoneId",
919
- "objectName": "@happyvertical/smrt-ads:AdGroup"
920
- },
921
- {
922
- "kind": "cli",
923
- "name": "adgroup_removeZoneId",
924
- "operation": "removeZoneId",
925
- "objectName": "@happyvertical/smrt-ads:AdGroup"
926
- },
927
- {
928
- "kind": "cli",
929
- "name": "adgroup_hasZoneId",
930
- "operation": "hasZoneId",
931
- "objectName": "@happyvertical/smrt-ads:AdGroup"
932
- },
933
- {
934
- "kind": "cli",
935
- "name": "adgroup_getTargeting",
936
- "operation": "getTargeting",
937
- "objectName": "@happyvertical/smrt-ads:AdGroup"
938
- },
939
- {
940
- "kind": "cli",
941
- "name": "adgroup_setTargeting",
942
- "operation": "setTargeting",
943
- "objectName": "@happyvertical/smrt-ads:AdGroup"
944
- },
945
- {
946
- "kind": "cli",
947
- "name": "adgroup_isActive",
948
- "operation": "isActive",
949
- "objectName": "@happyvertical/smrt-ads:AdGroup"
950
- },
951
- {
952
- "kind": "cli",
953
- "name": "adgroup_isDraft",
954
- "operation": "isDraft",
955
- "objectName": "@happyvertical/smrt-ads:AdGroup"
956
- },
957
- {
958
- "kind": "cli",
959
- "name": "adgroup_isPaused",
960
- "operation": "isPaused",
961
- "objectName": "@happyvertical/smrt-ads:AdGroup"
962
- },
963
- {
964
- "kind": "cli",
965
- "name": "adgroup_isCompleted",
966
- "operation": "isCompleted",
967
- "objectName": "@happyvertical/smrt-ads:AdGroup"
968
- },
969
- {
970
- "kind": "cli",
971
- "name": "adgroup_hasEnded",
972
- "operation": "hasEnded",
973
- "objectName": "@happyvertical/smrt-ads:AdGroup"
974
- },
975
- {
976
- "kind": "cli",
977
- "name": "adgroup_hasStarted",
978
- "operation": "hasStarted",
979
- "objectName": "@happyvertical/smrt-ads:AdGroup"
980
- },
981
- {
982
- "kind": "mcp",
983
- "name": "adgroup_list",
984
- "operation": "list",
985
- "objectName": "@happyvertical/smrt-ads:AdGroup"
986
- },
987
- {
988
- "kind": "mcp",
989
- "name": "adgroup_get",
990
- "operation": "get",
991
- "objectName": "@happyvertical/smrt-ads:AdGroup"
992
- },
993
- {
994
- "kind": "mcp",
995
- "name": "adgroup_create",
996
- "operation": "create",
997
- "objectName": "@happyvertical/smrt-ads:AdGroup"
998
- }
999
- ],
1000
- "withheldSurfaces": [
1001
- {
1002
- "kind": "api",
1003
- "operation": "addZoneId",
1004
- "code": "not-included",
1005
- "reason": "not listed in api.include",
1006
- "objectName": "@happyvertical/smrt-ads:AdGroup"
1007
- },
1008
- {
1009
- "kind": "api",
1010
- "operation": "getTargeting",
792
+ "operation": "findByContract",
1011
793
  "code": "not-included",
1012
794
  "reason": "not listed in api.include",
1013
- "objectName": "@happyvertical/smrt-ads:AdGroup"
795
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
1014
796
  },
1015
797
  {
1016
798
  "kind": "api",
1017
- "operation": "getZoneIds",
799
+ "operation": "findByStatus",
1018
800
  "code": "not-included",
1019
801
  "reason": "not listed in api.include",
1020
- "objectName": "@happyvertical/smrt-ads:AdGroup"
802
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
1021
803
  },
1022
804
  {
1023
805
  "kind": "api",
1024
- "operation": "hasEnded",
806
+ "operation": "findByTenant",
1025
807
  "code": "not-included",
1026
808
  "reason": "not listed in api.include",
1027
- "objectName": "@happyvertical/smrt-ads:AdGroup"
809
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
1028
810
  },
1029
811
  {
1030
812
  "kind": "api",
1031
- "operation": "hasStarted",
813
+ "operation": "findByTier",
1032
814
  "code": "not-included",
1033
815
  "reason": "not listed in api.include",
1034
- "objectName": "@happyvertical/smrt-ads:AdGroup"
816
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
1035
817
  },
1036
818
  {
1037
819
  "kind": "api",
1038
- "operation": "hasZoneId",
820
+ "operation": "findByVertical",
1039
821
  "code": "not-included",
1040
822
  "reason": "not listed in api.include",
1041
- "objectName": "@happyvertical/smrt-ads:AdGroup"
823
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
1042
824
  },
1043
825
  {
1044
826
  "kind": "api",
1045
- "operation": "isActive",
827
+ "operation": "findByZone",
1046
828
  "code": "not-included",
1047
829
  "reason": "not listed in api.include",
1048
- "objectName": "@happyvertical/smrt-ads:AdGroup"
830
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
1049
831
  },
1050
832
  {
1051
833
  "kind": "api",
1052
- "operation": "isCompleted",
834
+ "operation": "findCompleted",
1053
835
  "code": "not-included",
1054
836
  "reason": "not listed in api.include",
1055
- "objectName": "@happyvertical/smrt-ads:AdGroup"
837
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
1056
838
  },
1057
839
  {
1058
840
  "kind": "api",
1059
- "operation": "isDraft",
841
+ "operation": "findDrafts",
1060
842
  "code": "not-included",
1061
843
  "reason": "not listed in api.include",
1062
- "objectName": "@happyvertical/smrt-ads:AdGroup"
844
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
1063
845
  },
1064
846
  {
1065
847
  "kind": "api",
1066
- "operation": "isPaused",
848
+ "operation": "findEligibleForZone",
1067
849
  "code": "not-included",
1068
850
  "reason": "not listed in api.include",
1069
- "objectName": "@happyvertical/smrt-ads:AdGroup"
851
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
1070
852
  },
1071
853
  {
1072
854
  "kind": "api",
1073
- "operation": "removeZoneId",
855
+ "operation": "findGlobal",
1074
856
  "code": "not-included",
1075
857
  "reason": "not listed in api.include",
1076
- "objectName": "@happyvertical/smrt-ads:AdGroup"
858
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
1077
859
  },
1078
860
  {
1079
861
  "kind": "api",
1080
- "operation": "setTargeting",
862
+ "operation": "findPaused",
1081
863
  "code": "not-included",
1082
864
  "reason": "not listed in api.include",
1083
- "objectName": "@happyvertical/smrt-ads:AdGroup"
865
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
1084
866
  },
1085
867
  {
1086
868
  "kind": "api",
1087
- "operation": "setZoneIds",
869
+ "operation": "findWithGlobals",
1088
870
  "code": "not-included",
1089
871
  "reason": "not listed in api.include",
1090
- "objectName": "@happyvertical/smrt-ads:AdGroup"
872
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
1091
873
  }
1092
874
  ],
1093
875
  "relationshipFeatures": [
1094
- "crossPackageRef",
1095
- "foreignKey",
1096
876
  "uuidColumns"
1097
877
  ],
1098
878
  "tags": [],
1099
879
  "risks": []
1100
880
  },
1101
881
  {
1102
- "name": "AdVariation",
1103
- "qualifiedName": "@happyvertical/smrt-ads:AdVariation",
1104
- "displayLabelField": "name",
882
+ "name": "AdVariationCollection",
883
+ "qualifiedName": "@happyvertical/smrt-ads:AdVariationCollection",
1105
884
  "collection": "advariations",
1106
- "description": "AdVariation represents a creative asset within an ad group. Supports A/B testing via weighted selection.",
1107
885
  "tableName": "ad_variations",
1108
886
  "packageName": "@happyvertical/smrt-ads",
1109
- "extends": "SmrtObject",
1110
- "fields": [
1111
- {
1112
- "name": "created_at",
1113
- "type": "datetime",
1114
- "required": false,
1115
- "columnType": "TIMESTAMP"
1116
- },
887
+ "extends": "SmrtCollection",
888
+ "fields": [],
889
+ "relationships": [],
890
+ "methods": [
891
+ "findActive",
892
+ "findActiveByGroup",
893
+ "findByFormat",
894
+ "findByGroup",
895
+ "findByStatus",
896
+ "findByTenant",
897
+ "findDrafts",
898
+ "findGlobal",
899
+ "findPaused",
900
+ "findTopPerformers",
901
+ "findWithGlobals",
902
+ "selectByWeight"
903
+ ],
904
+ "methodSignatures": [
1117
905
  {
1118
- "name": "updated_at",
1119
- "type": "datetime",
1120
- "required": false,
1121
- "columnType": "TIMESTAMP"
906
+ "name": "findActive",
907
+ "async": true,
908
+ "returns": "Promise<AdVariation[]>"
1122
909
  },
1123
910
  {
1124
- "name": "tenantId",
1125
- "type": "text",
1126
- "required": false,
1127
- "columnType": "UUID"
911
+ "name": "findActiveByGroup",
912
+ "async": true,
913
+ "params": [
914
+ "groupId: string"
915
+ ],
916
+ "returns": "Promise<AdVariation[]>"
1128
917
  },
1129
918
  {
1130
- "name": "groupId",
1131
- "type": "foreignKey",
1132
- "required": false,
1133
- "related": "AdGroup",
1134
- "columnType": "UUID",
1135
- "description": "The campaign this ad belongs to."
919
+ "name": "findByFormat",
920
+ "async": true,
921
+ "params": [
922
+ "formatId: string"
923
+ ],
924
+ "returns": "Promise<AdVariation[]>"
1136
925
  },
1137
926
  {
1138
- "name": "formatId",
1139
- "type": "foreignKey",
1140
- "required": false,
1141
- "related": "AdFormat",
1142
- "columnType": "UUID",
1143
- "description": "The ad size this ad is made for."
927
+ "name": "findByGroup",
928
+ "async": true,
929
+ "params": [
930
+ "groupId: string"
931
+ ],
932
+ "returns": "Promise<AdVariation[]>"
1144
933
  },
1145
934
  {
1146
- "name": "assetId",
1147
- "type": "crossPackageRef",
1148
- "required": false,
1149
- "related": "@happyvertical/smrt-assets:Asset",
1150
- "columnType": "UUID",
1151
- "description": "The picture people see."
935
+ "name": "findByStatus",
936
+ "async": true,
937
+ "params": [
938
+ "status: AdVariationStatus"
939
+ ],
940
+ "returns": "Promise<AdVariation[]>"
1152
941
  },
1153
942
  {
1154
- "name": "name",
1155
- "type": "text",
1156
- "required": false,
1157
- "columnType": "TEXT",
1158
- "default": "",
1159
- "description": "What you call this ad, for example Version A, blue button."
943
+ "name": "findByTenant",
944
+ "async": true,
945
+ "params": [
946
+ "tenantId: string"
947
+ ],
948
+ "returns": "Promise<AdVariation[]>"
1160
949
  },
1161
950
  {
1162
- "name": "clickUrl",
1163
- "type": "text",
1164
- "required": false,
1165
- "columnType": "TEXT",
1166
- "default": "",
1167
- "description": "The web address people go to when they tap the ad."
951
+ "name": "findDrafts",
952
+ "async": true,
953
+ "returns": "Promise<AdVariation[]>"
1168
954
  },
1169
955
  {
1170
- "name": "altText",
1171
- "type": "text",
1172
- "required": false,
1173
- "columnType": "TEXT",
1174
- "default": "",
1175
- "description": "A few words that describe the picture for people who cannot see it."
956
+ "name": "findGlobal",
957
+ "async": true,
958
+ "returns": "Promise<AdVariation[]>"
1176
959
  },
1177
960
  {
1178
- "name": "weight",
1179
- "type": "integer",
1180
- "required": false,
1181
- "columnType": "INTEGER",
1182
- "default": 1,
1183
- "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."
961
+ "name": "findPaused",
962
+ "async": true,
963
+ "returns": "Promise<AdVariation[]>"
1184
964
  },
1185
965
  {
1186
- "name": "status",
1187
- "type": "text",
1188
- "required": false,
1189
- "columnType": "TEXT",
1190
- "description": "Where the ad stands: draft, active or paused. Only active ads show."
966
+ "name": "findTopPerformers",
967
+ "async": true,
968
+ "params": [
969
+ "limit?: number"
970
+ ],
971
+ "returns": "Promise<AdVariation[]>"
1191
972
  },
1192
973
  {
1193
- "name": "impressions",
1194
- "type": "integer",
1195
- "required": false,
1196
- "columnType": "INTEGER",
1197
- "default": 0,
1198
- "description": "How many times the ad has been shown. The app counts this as it serves ads and refreshes it a little later."
974
+ "name": "findWithGlobals",
975
+ "async": true,
976
+ "params": [
977
+ "tenantId: string"
978
+ ],
979
+ "returns": "Promise<AdVariation[]>"
1199
980
  },
1200
981
  {
1201
- "name": "clicks",
1202
- "type": "integer",
1203
- "required": false,
1204
- "columnType": "INTEGER",
1205
- "default": 0,
1206
- "description": "How many times the ad has been tapped. The app counts this as it serves ads and refreshes it a little later."
982
+ "name": "selectByWeight",
983
+ "async": true,
984
+ "params": [
985
+ "groupId: string"
986
+ ],
987
+ "returns": "Promise<AdVariation | null>"
1207
988
  }
1208
989
  ],
1209
- "relationships": [
990
+ "surfaces": [
1210
991
  {
1211
- "name": "groupId",
1212
- "type": "foreignKey",
1213
- "required": false,
1214
- "related": "AdGroup",
1215
- "columnType": "UUID"
992
+ "kind": "cli",
993
+ "name": "advariationcollection_findByGroup",
994
+ "operation": "findByGroup",
995
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1216
996
  },
1217
997
  {
1218
- "name": "formatId",
1219
- "type": "foreignKey",
1220
- "required": false,
1221
- "related": "AdFormat",
1222
- "columnType": "UUID"
998
+ "kind": "cli",
999
+ "name": "advariationcollection_findByFormat",
1000
+ "operation": "findByFormat",
1001
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1223
1002
  },
1224
1003
  {
1225
- "name": "assetId",
1226
- "type": "crossPackageRef",
1227
- "required": false,
1228
- "related": "@happyvertical/smrt-assets:Asset",
1229
- "columnType": "UUID"
1230
- }
1231
- ],
1232
- "methods": [
1233
- "getCTR",
1234
- "isActive",
1235
- "isDraft",
1236
- "isPaused",
1237
- "recordClick",
1238
- "recordImpression"
1239
- ],
1240
- "methodSignatures": [
1004
+ "kind": "cli",
1005
+ "name": "advariationcollection_findActiveByGroup",
1006
+ "operation": "findActiveByGroup",
1007
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1008
+ },
1241
1009
  {
1242
- "name": "getCTR",
1243
- "returns": "number"
1010
+ "kind": "cli",
1011
+ "name": "advariationcollection_selectByWeight",
1012
+ "operation": "selectByWeight",
1013
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1244
1014
  },
1245
1015
  {
1246
- "name": "isActive",
1247
- "returns": "boolean"
1016
+ "kind": "cli",
1017
+ "name": "advariationcollection_findByStatus",
1018
+ "operation": "findByStatus",
1019
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1248
1020
  },
1249
1021
  {
1250
- "name": "isDraft",
1251
- "returns": "boolean"
1022
+ "kind": "cli",
1023
+ "name": "advariationcollection_findActive",
1024
+ "operation": "findActive",
1025
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1252
1026
  },
1253
1027
  {
1254
- "name": "isPaused",
1255
- "returns": "boolean"
1028
+ "kind": "cli",
1029
+ "name": "advariationcollection_findDrafts",
1030
+ "operation": "findDrafts",
1031
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1256
1032
  },
1257
1033
  {
1258
- "name": "recordClick",
1259
- "returns": "void"
1034
+ "kind": "cli",
1035
+ "name": "advariationcollection_findPaused",
1036
+ "operation": "findPaused",
1037
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1260
1038
  },
1261
1039
  {
1262
- "name": "recordImpression",
1263
- "returns": "void"
1040
+ "kind": "cli",
1041
+ "name": "advariationcollection_findTopPerformers",
1042
+ "operation": "findTopPerformers",
1043
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1044
+ },
1045
+ {
1046
+ "kind": "cli",
1047
+ "name": "advariationcollection_findByTenant",
1048
+ "operation": "findByTenant",
1049
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1050
+ },
1051
+ {
1052
+ "kind": "cli",
1053
+ "name": "advariationcollection_findGlobal",
1054
+ "operation": "findGlobal",
1055
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1056
+ },
1057
+ {
1058
+ "kind": "cli",
1059
+ "name": "advariationcollection_findWithGlobals",
1060
+ "operation": "findWithGlobals",
1061
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1264
1062
  }
1265
1063
  ],
1266
- "tenant": {
1267
- "scoped": true,
1268
- "mode": "optional",
1269
- "field": "tenantId"
1270
- },
1271
- "tableStrategy": "sti",
1272
- "conflictColumns": [
1273
- "tenant_id",
1274
- "slug",
1275
- "context",
1276
- "_meta_type"
1277
- ],
1278
- "surfaces": [
1064
+ "withheldSurfaces": [
1279
1065
  {
1280
1066
  "kind": "api",
1281
- "name": "advariations.list",
1282
- "operation": "list",
1283
- "objectName": "@happyvertical/smrt-ads:AdVariation",
1284
- "path": "/advariations",
1285
- "method": "GET"
1067
+ "operation": "findActive",
1068
+ "code": "not-included",
1069
+ "reason": "not listed in api.include",
1070
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1286
1071
  },
1287
1072
  {
1288
1073
  "kind": "api",
1289
- "name": "advariations.get",
1290
- "operation": "get",
1291
- "objectName": "@happyvertical/smrt-ads:AdVariation",
1292
- "path": "/advariations/[id]",
1293
- "method": "GET"
1074
+ "operation": "findActiveByGroup",
1075
+ "code": "not-included",
1076
+ "reason": "not listed in api.include",
1077
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1294
1078
  },
1295
1079
  {
1296
1080
  "kind": "api",
1297
- "name": "advariations.create",
1298
- "operation": "create",
1299
- "objectName": "@happyvertical/smrt-ads:AdVariation",
1300
- "path": "/advariations",
1301
- "method": "POST"
1081
+ "operation": "findByFormat",
1082
+ "code": "not-included",
1083
+ "reason": "not listed in api.include",
1084
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1302
1085
  },
1303
1086
  {
1304
1087
  "kind": "api",
1305
- "name": "advariations.update",
1306
- "operation": "update",
1307
- "objectName": "@happyvertical/smrt-ads:AdVariation",
1308
- "path": "/advariations/[id]",
1309
- "method": "PATCH"
1088
+ "operation": "findByGroup",
1089
+ "code": "not-included",
1090
+ "reason": "not listed in api.include",
1091
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1310
1092
  },
1311
1093
  {
1312
- "kind": "cli",
1313
- "name": "advariation_list",
1314
- "operation": "list",
1315
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1316
- },
1317
- {
1318
- "kind": "cli",
1319
- "name": "advariation_get",
1320
- "operation": "get",
1321
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1322
- },
1323
- {
1324
- "kind": "cli",
1325
- "name": "advariation_create",
1326
- "operation": "create",
1327
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1328
- },
1329
- {
1330
- "kind": "cli",
1331
- "name": "advariation_update",
1332
- "operation": "update",
1333
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1334
- },
1335
- {
1336
- "kind": "cli",
1337
- "name": "advariation_delete",
1338
- "operation": "delete",
1339
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1340
- },
1341
- {
1342
- "kind": "cli",
1343
- "name": "advariation_isActive",
1344
- "operation": "isActive",
1345
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1346
- },
1347
- {
1348
- "kind": "cli",
1349
- "name": "advariation_isDraft",
1350
- "operation": "isDraft",
1351
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1352
- },
1353
- {
1354
- "kind": "cli",
1355
- "name": "advariation_isPaused",
1356
- "operation": "isPaused",
1357
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1358
- },
1359
- {
1360
- "kind": "cli",
1361
- "name": "advariation_getCTR",
1362
- "operation": "getCTR",
1363
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1364
- },
1365
- {
1366
- "kind": "cli",
1367
- "name": "advariation_recordImpression",
1368
- "operation": "recordImpression",
1369
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1370
- },
1371
- {
1372
- "kind": "cli",
1373
- "name": "advariation_recordClick",
1374
- "operation": "recordClick",
1375
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1376
- },
1377
- {
1378
- "kind": "mcp",
1379
- "name": "advariation_list",
1380
- "operation": "list",
1381
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1094
+ "kind": "api",
1095
+ "operation": "findByStatus",
1096
+ "code": "not-included",
1097
+ "reason": "not listed in api.include",
1098
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1382
1099
  },
1383
1100
  {
1384
- "kind": "mcp",
1385
- "name": "advariation_get",
1386
- "operation": "get",
1387
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1101
+ "kind": "api",
1102
+ "operation": "findByTenant",
1103
+ "code": "not-included",
1104
+ "reason": "not listed in api.include",
1105
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1388
1106
  },
1389
- {
1390
- "kind": "mcp",
1391
- "name": "advariation_create",
1392
- "operation": "create",
1393
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1394
- }
1395
- ],
1396
- "withheldSurfaces": [
1397
1107
  {
1398
1108
  "kind": "api",
1399
- "operation": "getCTR",
1109
+ "operation": "findDrafts",
1400
1110
  "code": "not-included",
1401
1111
  "reason": "not listed in api.include",
1402
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1112
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1403
1113
  },
1404
1114
  {
1405
1115
  "kind": "api",
1406
- "operation": "isActive",
1116
+ "operation": "findGlobal",
1407
1117
  "code": "not-included",
1408
1118
  "reason": "not listed in api.include",
1409
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1119
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1410
1120
  },
1411
1121
  {
1412
1122
  "kind": "api",
1413
- "operation": "isDraft",
1123
+ "operation": "findPaused",
1414
1124
  "code": "not-included",
1415
1125
  "reason": "not listed in api.include",
1416
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1126
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1417
1127
  },
1418
1128
  {
1419
1129
  "kind": "api",
1420
- "operation": "isPaused",
1130
+ "operation": "findTopPerformers",
1421
1131
  "code": "not-included",
1422
1132
  "reason": "not listed in api.include",
1423
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1133
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1424
1134
  },
1425
1135
  {
1426
1136
  "kind": "api",
1427
- "operation": "recordClick",
1137
+ "operation": "findWithGlobals",
1428
1138
  "code": "not-included",
1429
1139
  "reason": "not listed in api.include",
1430
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1140
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1431
1141
  },
1432
1142
  {
1433
1143
  "kind": "api",
1434
- "operation": "recordImpression",
1144
+ "operation": "selectByWeight",
1435
1145
  "code": "not-included",
1436
1146
  "reason": "not listed in api.include",
1437
- "objectName": "@happyvertical/smrt-ads:AdVariation"
1147
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
1438
1148
  }
1439
1149
  ],
1440
1150
  "relationshipFeatures": [
1441
- "crossPackageRef",
1442
- "foreignKey",
1443
1151
  "uuidColumns"
1444
1152
  ],
1445
1153
  "tags": [],
1446
1154
  "risks": []
1447
1155
  },
1448
1156
  {
1449
- "name": "AdDeliveryTierCollection",
1450
- "qualifiedName": "@happyvertical/smrt-ads:AdDeliveryTierCollection",
1157
+ "name": "AdDeliveryTier",
1158
+ "qualifiedName": "@happyvertical/smrt-ads:AdDeliveryTier",
1159
+ "displayLabelField": "name",
1451
1160
  "collection": "addeliverytiers",
1452
1161
  "tableName": "ad_delivery_tiers",
1453
1162
  "packageName": "@happyvertical/smrt-ads",
1454
- "extends": "SmrtCollection",
1455
- "fields": [],
1163
+ "extends": "SmrtObject",
1164
+ "fields": [
1165
+ {
1166
+ "name": "name",
1167
+ "type": "text",
1168
+ "required": false,
1169
+ "columnType": "TEXT",
1170
+ "default": "",
1171
+ "description": "What the tier is called, for example Sponsorship, Standard or House."
1172
+ },
1173
+ {
1174
+ "name": "priority",
1175
+ "type": "integer",
1176
+ "required": false,
1177
+ "columnType": "INTEGER",
1178
+ "default": 0,
1179
+ "description": "The order tiers are tried in: 1 is tried first, then 2, and so on."
1180
+ },
1181
+ {
1182
+ "name": "pricingModel",
1183
+ "type": "text",
1184
+ "required": false,
1185
+ "columnType": "TEXT",
1186
+ "description": "How ads in this tier are charged: a fixed price, per thousand showings, per click, or per sale."
1187
+ },
1188
+ {
1189
+ "name": "description",
1190
+ "type": "text",
1191
+ "required": false,
1192
+ "columnType": "TEXT",
1193
+ "default": "",
1194
+ "description": "A note about what this tier is for."
1195
+ }
1196
+ ],
1456
1197
  "relationships": [],
1457
1198
  "methods": [
1458
- "findByPricingModel",
1459
- "findByPriority",
1460
- "findCPM",
1461
- "findFixedPricing",
1462
- "findPerformanceBased",
1463
- "getHighestPriority"
1199
+ "isFixedPricing",
1200
+ "isHigherPriorityThan",
1201
+ "isPerformanceBased"
1464
1202
  ],
1465
1203
  "methodSignatures": [
1466
1204
  {
1467
- "name": "findByPricingModel",
1468
- "async": true,
1205
+ "name": "isFixedPricing",
1206
+ "returns": "boolean"
1207
+ },
1208
+ {
1209
+ "name": "isHigherPriorityThan",
1469
1210
  "params": [
1470
- "pricingModel: PricingModel"
1211
+ "other: AdDeliveryTier"
1471
1212
  ],
1472
- "returns": "Promise<AdDeliveryTier[]>"
1213
+ "returns": "boolean"
1473
1214
  },
1474
1215
  {
1475
- "name": "findByPriority",
1476
- "async": true,
1477
- "returns": "Promise<AdDeliveryTier[]>"
1478
- },
1216
+ "name": "isPerformanceBased",
1217
+ "returns": "boolean"
1218
+ }
1219
+ ],
1220
+ "surfaces": [
1479
1221
  {
1480
- "name": "findCPM",
1481
- "async": true,
1482
- "returns": "Promise<AdDeliveryTier[]>"
1222
+ "kind": "api",
1223
+ "name": "addeliverytiers.list",
1224
+ "operation": "list",
1225
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTier",
1226
+ "path": "/addeliverytiers",
1227
+ "method": "GET"
1483
1228
  },
1484
1229
  {
1485
- "name": "findFixedPricing",
1486
- "async": true,
1487
- "returns": "Promise<AdDeliveryTier[]>"
1230
+ "kind": "api",
1231
+ "name": "addeliverytiers.get",
1232
+ "operation": "get",
1233
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTier",
1234
+ "path": "/addeliverytiers/[id]",
1235
+ "method": "GET"
1488
1236
  },
1489
1237
  {
1490
- "name": "findPerformanceBased",
1491
- "async": true,
1492
- "returns": "Promise<AdDeliveryTier[]>"
1238
+ "kind": "api",
1239
+ "name": "addeliverytiers.create",
1240
+ "operation": "create",
1241
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTier",
1242
+ "path": "/addeliverytiers",
1243
+ "method": "POST"
1493
1244
  },
1494
1245
  {
1495
- "name": "getHighestPriority",
1496
- "async": true,
1497
- "returns": "Promise<AdDeliveryTier | null>"
1498
- }
1499
- ],
1500
- "surfaces": [
1246
+ "kind": "api",
1247
+ "name": "addeliverytiers.update",
1248
+ "operation": "update",
1249
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTier",
1250
+ "path": "/addeliverytiers/[id]",
1251
+ "method": "PATCH"
1252
+ },
1501
1253
  {
1502
1254
  "kind": "cli",
1503
- "name": "addeliverytiercollection_findByPriority",
1504
- "operation": "findByPriority",
1505
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
1255
+ "name": "addeliverytier_list",
1256
+ "operation": "list",
1257
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
1506
1258
  },
1507
1259
  {
1508
1260
  "kind": "cli",
1509
- "name": "addeliverytiercollection_findByPricingModel",
1510
- "operation": "findByPricingModel",
1511
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
1261
+ "name": "addeliverytier_get",
1262
+ "operation": "get",
1263
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
1512
1264
  },
1513
1265
  {
1514
1266
  "kind": "cli",
1515
- "name": "addeliverytiercollection_getHighestPriority",
1516
- "operation": "getHighestPriority",
1517
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
1267
+ "name": "addeliverytier_create",
1268
+ "operation": "create",
1269
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
1518
1270
  },
1519
1271
  {
1520
1272
  "kind": "cli",
1521
- "name": "addeliverytiercollection_findFixedPricing",
1522
- "operation": "findFixedPricing",
1523
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
1273
+ "name": "addeliverytier_update",
1274
+ "operation": "update",
1275
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
1524
1276
  },
1525
1277
  {
1526
1278
  "kind": "cli",
1527
- "name": "addeliverytiercollection_findCPM",
1528
- "operation": "findCPM",
1529
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
1279
+ "name": "addeliverytier_delete",
1280
+ "operation": "delete",
1281
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
1530
1282
  },
1531
1283
  {
1532
1284
  "kind": "cli",
1533
- "name": "addeliverytiercollection_findPerformanceBased",
1534
- "operation": "findPerformanceBased",
1535
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
1536
- }
1537
- ],
1538
- "withheldSurfaces": [
1285
+ "name": "addeliverytier_isHigherPriorityThan",
1286
+ "operation": "isHigherPriorityThan",
1287
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
1288
+ },
1539
1289
  {
1540
- "kind": "api",
1541
- "operation": "findByPricingModel",
1542
- "code": "not-included",
1543
- "reason": "not listed in api.include",
1544
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
1290
+ "kind": "cli",
1291
+ "name": "addeliverytier_isFixedPricing",
1292
+ "operation": "isFixedPricing",
1293
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
1545
1294
  },
1546
1295
  {
1547
- "kind": "api",
1548
- "operation": "findByPriority",
1549
- "code": "not-included",
1550
- "reason": "not listed in api.include",
1551
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
1296
+ "kind": "cli",
1297
+ "name": "addeliverytier_isPerformanceBased",
1298
+ "operation": "isPerformanceBased",
1299
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
1552
1300
  },
1553
1301
  {
1554
- "kind": "api",
1555
- "operation": "findCPM",
1556
- "code": "not-included",
1557
- "reason": "not listed in api.include",
1558
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
1302
+ "kind": "mcp",
1303
+ "name": "addeliverytier_list",
1304
+ "operation": "list",
1305
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
1559
1306
  },
1307
+ {
1308
+ "kind": "mcp",
1309
+ "name": "addeliverytier_get",
1310
+ "operation": "get",
1311
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
1312
+ }
1313
+ ],
1314
+ "withheldSurfaces": [
1560
1315
  {
1561
1316
  "kind": "api",
1562
- "operation": "findFixedPricing",
1317
+ "operation": "isFixedPricing",
1563
1318
  "code": "not-included",
1564
1319
  "reason": "not listed in api.include",
1565
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
1320
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
1566
1321
  },
1567
1322
  {
1568
1323
  "kind": "api",
1569
- "operation": "findPerformanceBased",
1324
+ "operation": "isHigherPriorityThan",
1570
1325
  "code": "not-included",
1571
1326
  "reason": "not listed in api.include",
1572
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
1327
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
1573
1328
  },
1574
1329
  {
1575
1330
  "kind": "api",
1576
- "operation": "getHighestPriority",
1331
+ "operation": "isPerformanceBased",
1577
1332
  "code": "not-included",
1578
1333
  "reason": "not listed in api.include",
1579
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
1334
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTier"
1580
1335
  }
1581
1336
  ],
1582
1337
  "relationshipFeatures": [
@@ -1586,390 +1341,372 @@
1586
1341
  "risks": []
1587
1342
  },
1588
1343
  {
1589
- "name": "AdEventCollection",
1590
- "qualifiedName": "@happyvertical/smrt-ads:AdEventCollection",
1344
+ "name": "AdEvent",
1345
+ "qualifiedName": "@happyvertical/smrt-ads:AdEvent",
1591
1346
  "collection": "adevents",
1347
+ "description": "AdEvent tracks ad impressions, clicks, and conversions. Events are immutable (append-only, no update/delete).",
1592
1348
  "tableName": "ad_events",
1593
1349
  "packageName": "@happyvertical/smrt-ads",
1594
- "extends": "SmrtCollection",
1595
- "fields": [],
1596
- "relationships": [],
1597
- "methods": [
1598
- "countByType",
1599
- "countClicks",
1600
- "countConversions",
1601
- "countImpressions",
1602
- "findByDateRange",
1603
- "findBySite",
1604
- "findByTenant",
1605
- "findByType",
1606
- "findByVariation",
1607
- "findByZone",
1608
- "findClicks",
1609
- "findConversions",
1610
- "findGlobal",
1611
- "findImpressions",
1612
- "findWithGlobals",
1613
- "getVariationStats"
1614
- ],
1615
- "methodSignatures": [
1350
+ "extends": "SmrtObject",
1351
+ "fields": [
1616
1352
  {
1617
- "name": "countByType",
1618
- "async": true,
1619
- "params": [
1620
- "variationId: string",
1621
- "eventType: AdEventType"
1622
- ],
1623
- "returns": "Promise<number>"
1353
+ "name": "created_at",
1354
+ "type": "datetime",
1355
+ "required": false,
1356
+ "columnType": "TIMESTAMP"
1624
1357
  },
1625
1358
  {
1626
- "name": "countClicks",
1627
- "async": true,
1628
- "params": [
1629
- "variationId: string"
1630
- ],
1631
- "returns": "Promise<number>"
1359
+ "name": "updated_at",
1360
+ "type": "datetime",
1361
+ "required": false,
1362
+ "columnType": "TIMESTAMP"
1632
1363
  },
1633
1364
  {
1634
- "name": "countConversions",
1635
- "async": true,
1636
- "params": [
1637
- "variationId: string"
1638
- ],
1639
- "returns": "Promise<number>"
1365
+ "name": "tenantId",
1366
+ "type": "text",
1367
+ "required": false,
1368
+ "columnType": "UUID"
1640
1369
  },
1641
1370
  {
1642
- "name": "countImpressions",
1643
- "async": true,
1644
- "params": [
1645
- "variationId: string"
1646
- ],
1647
- "returns": "Promise<number>"
1371
+ "name": "variationId",
1372
+ "type": "foreignKey",
1373
+ "required": false,
1374
+ "related": "AdVariation",
1375
+ "columnType": "UUID"
1648
1376
  },
1649
1377
  {
1650
- "name": "findByDateRange",
1651
- "async": true,
1652
- "params": [
1653
- "start: Date",
1654
- "end: Date"
1655
- ],
1656
- "returns": "Promise<AdEvent[]>"
1378
+ "name": "zoneId",
1379
+ "type": "crossPackageRef",
1380
+ "required": false,
1381
+ "related": "@happyvertical/smrt-properties:Zone",
1382
+ "columnType": "UUID"
1657
1383
  },
1658
1384
  {
1659
- "name": "findBySite",
1660
- "async": true,
1661
- "params": [
1662
- "siteId: string"
1663
- ],
1664
- "returns": "Promise<AdEvent[]>"
1385
+ "name": "siteId",
1386
+ "type": "text",
1387
+ "required": false,
1388
+ "columnType": "TEXT",
1389
+ "default": ""
1665
1390
  },
1666
1391
  {
1667
- "name": "findByTenant",
1668
- "async": true,
1669
- "params": [
1670
- "tenantId: string"
1671
- ],
1672
- "returns": "Promise<AdEvent[]>"
1392
+ "name": "eventType",
1393
+ "type": "text",
1394
+ "required": false,
1395
+ "columnType": "TEXT"
1673
1396
  },
1674
1397
  {
1675
- "name": "findByType",
1676
- "async": true,
1677
- "params": [
1678
- "eventType: AdEventType"
1679
- ],
1680
- "returns": "Promise<AdEvent[]>"
1398
+ "name": "timestamp",
1399
+ "type": "datetime",
1400
+ "required": false,
1401
+ "columnType": "TIMESTAMP"
1681
1402
  },
1682
1403
  {
1683
- "name": "findByVariation",
1684
- "async": true,
1685
- "params": [
1686
- "variationId: string"
1687
- ],
1688
- "returns": "Promise<AdEvent[]>"
1689
- },
1404
+ "name": "metadata",
1405
+ "type": "text",
1406
+ "required": false,
1407
+ "columnType": "TEXT",
1408
+ "default": ""
1409
+ }
1410
+ ],
1411
+ "relationships": [
1690
1412
  {
1691
- "name": "findByZone",
1692
- "async": true,
1693
- "params": [
1694
- "zoneId: string"
1695
- ],
1696
- "returns": "Promise<AdEvent[]>"
1413
+ "name": "variationId",
1414
+ "type": "foreignKey",
1415
+ "required": false,
1416
+ "related": "AdVariation",
1417
+ "columnType": "UUID"
1697
1418
  },
1698
1419
  {
1699
- "name": "findClicks",
1700
- "async": true,
1701
- "returns": "Promise<AdEvent[]>"
1702
- },
1420
+ "name": "zoneId",
1421
+ "type": "crossPackageRef",
1422
+ "required": false,
1423
+ "related": "@happyvertical/smrt-properties:Zone",
1424
+ "columnType": "UUID"
1425
+ }
1426
+ ],
1427
+ "methods": [
1428
+ "getMetadata",
1429
+ "isClick",
1430
+ "isConversion",
1431
+ "isImpression",
1432
+ "setMetadata"
1433
+ ],
1434
+ "methodSignatures": [
1703
1435
  {
1704
- "name": "findConversions",
1705
- "async": true,
1706
- "returns": "Promise<AdEvent[]>"
1436
+ "name": "getMetadata",
1437
+ "returns": "Record<string, unknown>"
1707
1438
  },
1708
1439
  {
1709
- "name": "findGlobal",
1710
- "async": true,
1711
- "returns": "Promise<AdEvent[]>"
1440
+ "name": "isClick",
1441
+ "returns": "boolean"
1712
1442
  },
1713
1443
  {
1714
- "name": "findImpressions",
1715
- "async": true,
1716
- "returns": "Promise<AdEvent[]>"
1444
+ "name": "isConversion",
1445
+ "returns": "boolean"
1717
1446
  },
1718
1447
  {
1719
- "name": "findWithGlobals",
1720
- "async": true,
1721
- "params": [
1722
- "tenantId: string"
1723
- ],
1724
- "returns": "Promise<AdEvent[]>"
1448
+ "name": "isImpression",
1449
+ "returns": "boolean"
1725
1450
  },
1726
1451
  {
1727
- "name": "getVariationStats",
1728
- "async": true,
1452
+ "name": "setMetadata",
1729
1453
  "params": [
1730
- "variationId: string"
1454
+ "data: Record<string, unknown>"
1731
1455
  ],
1732
- "returns": "Promise<object>"
1456
+ "returns": "void"
1733
1457
  }
1734
1458
  ],
1735
- "surfaces": [],
1736
- "withheldSurfaces": [
1737
- {
1738
- "kind": "api",
1739
- "operation": "countByType",
1740
- "code": "not-included",
1741
- "reason": "not listed in api.include",
1742
- "objectName": "@happyvertical/smrt-ads:AdEventCollection"
1743
- },
1744
- {
1745
- "kind": "api",
1746
- "operation": "countClicks",
1747
- "code": "not-included",
1748
- "reason": "not listed in api.include",
1749
- "objectName": "@happyvertical/smrt-ads:AdEventCollection"
1750
- },
1751
- {
1752
- "kind": "api",
1753
- "operation": "countConversions",
1754
- "code": "not-included",
1755
- "reason": "not listed in api.include",
1756
- "objectName": "@happyvertical/smrt-ads:AdEventCollection"
1757
- },
1758
- {
1759
- "kind": "api",
1760
- "operation": "countImpressions",
1761
- "code": "not-included",
1762
- "reason": "not listed in api.include",
1763
- "objectName": "@happyvertical/smrt-ads:AdEventCollection"
1764
- },
1765
- {
1766
- "kind": "api",
1767
- "operation": "findByDateRange",
1768
- "code": "not-included",
1769
- "reason": "not listed in api.include",
1770
- "objectName": "@happyvertical/smrt-ads:AdEventCollection"
1771
- },
1772
- {
1773
- "kind": "api",
1774
- "operation": "findBySite",
1775
- "code": "not-included",
1776
- "reason": "not listed in api.include",
1777
- "objectName": "@happyvertical/smrt-ads:AdEventCollection"
1778
- },
1779
- {
1780
- "kind": "api",
1781
- "operation": "findByTenant",
1782
- "code": "not-included",
1783
- "reason": "not listed in api.include",
1784
- "objectName": "@happyvertical/smrt-ads:AdEventCollection"
1785
- },
1786
- {
1787
- "kind": "api",
1788
- "operation": "findByType",
1789
- "code": "not-included",
1790
- "reason": "not listed in api.include",
1791
- "objectName": "@happyvertical/smrt-ads:AdEventCollection"
1792
- },
1459
+ "tenant": {
1460
+ "scoped": true,
1461
+ "mode": "optional",
1462
+ "field": "tenantId"
1463
+ },
1464
+ "tableStrategy": "sti",
1465
+ "conflictColumns": [
1466
+ "tenant_id",
1467
+ "slug",
1468
+ "context",
1469
+ "_meta_type"
1470
+ ],
1471
+ "surfaces": [
1793
1472
  {
1794
1473
  "kind": "api",
1795
- "operation": "findByVariation",
1796
- "code": "not-included",
1797
- "reason": "not listed in api.include",
1798
- "objectName": "@happyvertical/smrt-ads:AdEventCollection"
1474
+ "name": "adevents.list",
1475
+ "operation": "list",
1476
+ "objectName": "@happyvertical/smrt-ads:AdEvent",
1477
+ "path": "/adevents",
1478
+ "method": "GET"
1799
1479
  },
1800
1480
  {
1801
1481
  "kind": "api",
1802
- "operation": "findByZone",
1803
- "code": "not-included",
1804
- "reason": "not listed in api.include",
1805
- "objectName": "@happyvertical/smrt-ads:AdEventCollection"
1482
+ "name": "adevents.create",
1483
+ "operation": "create",
1484
+ "objectName": "@happyvertical/smrt-ads:AdEvent",
1485
+ "path": "/adevents",
1486
+ "method": "POST"
1806
1487
  },
1807
1488
  {
1808
- "kind": "api",
1809
- "operation": "findClicks",
1810
- "code": "not-included",
1811
- "reason": "not listed in api.include",
1812
- "objectName": "@happyvertical/smrt-ads:AdEventCollection"
1813
- },
1489
+ "kind": "mcp",
1490
+ "name": "adevent_create",
1491
+ "operation": "create",
1492
+ "objectName": "@happyvertical/smrt-ads:AdEvent"
1493
+ }
1494
+ ],
1495
+ "withheldSurfaces": [
1814
1496
  {
1815
1497
  "kind": "api",
1816
- "operation": "findConversions",
1498
+ "operation": "getMetadata",
1817
1499
  "code": "not-included",
1818
1500
  "reason": "not listed in api.include",
1819
- "objectName": "@happyvertical/smrt-ads:AdEventCollection"
1501
+ "objectName": "@happyvertical/smrt-ads:AdEvent"
1820
1502
  },
1821
1503
  {
1822
1504
  "kind": "api",
1823
- "operation": "findGlobal",
1505
+ "operation": "isClick",
1824
1506
  "code": "not-included",
1825
1507
  "reason": "not listed in api.include",
1826
- "objectName": "@happyvertical/smrt-ads:AdEventCollection"
1508
+ "objectName": "@happyvertical/smrt-ads:AdEvent"
1827
1509
  },
1828
1510
  {
1829
1511
  "kind": "api",
1830
- "operation": "findImpressions",
1512
+ "operation": "isConversion",
1831
1513
  "code": "not-included",
1832
1514
  "reason": "not listed in api.include",
1833
- "objectName": "@happyvertical/smrt-ads:AdEventCollection"
1515
+ "objectName": "@happyvertical/smrt-ads:AdEvent"
1834
1516
  },
1835
1517
  {
1836
1518
  "kind": "api",
1837
- "operation": "findWithGlobals",
1519
+ "operation": "isImpression",
1838
1520
  "code": "not-included",
1839
1521
  "reason": "not listed in api.include",
1840
- "objectName": "@happyvertical/smrt-ads:AdEventCollection"
1522
+ "objectName": "@happyvertical/smrt-ads:AdEvent"
1841
1523
  },
1842
1524
  {
1843
1525
  "kind": "api",
1844
- "operation": "getVariationStats",
1526
+ "operation": "setMetadata",
1845
1527
  "code": "not-included",
1846
1528
  "reason": "not listed in api.include",
1847
- "objectName": "@happyvertical/smrt-ads:AdEventCollection"
1529
+ "objectName": "@happyvertical/smrt-ads:AdEvent"
1848
1530
  }
1849
1531
  ],
1850
1532
  "relationshipFeatures": [
1533
+ "crossPackageRef",
1534
+ "foreignKey",
1851
1535
  "uuidColumns"
1852
1536
  ],
1853
1537
  "tags": [],
1854
1538
  "risks": []
1855
1539
  },
1856
1540
  {
1857
- "name": "AdFormatCollection",
1858
- "qualifiedName": "@happyvertical/smrt-ads:AdFormatCollection",
1541
+ "name": "AdFormat",
1542
+ "qualifiedName": "@happyvertical/smrt-ads:AdFormat",
1543
+ "displayLabelField": "name",
1859
1544
  "collection": "adformats",
1860
1545
  "tableName": "ad_formats",
1861
1546
  "packageName": "@happyvertical/smrt-ads",
1862
- "extends": "SmrtCollection",
1863
- "fields": [],
1547
+ "extends": "SmrtObject",
1548
+ "fields": [
1549
+ {
1550
+ "name": "name",
1551
+ "type": "text",
1552
+ "required": false,
1553
+ "columnType": "TEXT",
1554
+ "default": "",
1555
+ "description": "What the size is called, for example Leaderboard."
1556
+ },
1557
+ {
1558
+ "name": "width",
1559
+ "type": "integer",
1560
+ "required": false,
1561
+ "columnType": "INTEGER",
1562
+ "default": 0,
1563
+ "description": "How wide the ad is, in pixels."
1564
+ },
1565
+ {
1566
+ "name": "height",
1567
+ "type": "integer",
1568
+ "required": false,
1569
+ "columnType": "INTEGER",
1570
+ "default": 0,
1571
+ "description": "How tall the ad is, in pixels."
1572
+ },
1573
+ {
1574
+ "name": "formatType",
1575
+ "type": "text",
1576
+ "required": false,
1577
+ "columnType": "TEXT",
1578
+ "description": "What kind of ad fits this size: a picture, a piece written to look like your own content, or a video."
1579
+ },
1580
+ {
1581
+ "name": "description",
1582
+ "type": "text",
1583
+ "required": false,
1584
+ "columnType": "TEXT",
1585
+ "default": "",
1586
+ "description": "A note about where this size is usually used."
1587
+ }
1588
+ ],
1864
1589
  "relationships": [],
1865
1590
  "methods": [
1866
- "findBanners",
1867
- "findByDimensions",
1868
- "findByType",
1869
- "findNative",
1870
- "findVideo"
1591
+ "getDimensions",
1592
+ "matchesDimensions"
1871
1593
  ],
1872
1594
  "methodSignatures": [
1873
1595
  {
1874
- "name": "findBanners",
1875
- "async": true,
1876
- "returns": "Promise<AdFormat[]>"
1596
+ "name": "getDimensions",
1597
+ "returns": "string"
1877
1598
  },
1878
1599
  {
1879
- "name": "findByDimensions",
1880
- "async": true,
1600
+ "name": "matchesDimensions",
1881
1601
  "params": [
1882
1602
  "width: number",
1883
1603
  "height: number"
1884
1604
  ],
1885
- "returns": "Promise<AdFormat | null>"
1605
+ "returns": "boolean"
1606
+ }
1607
+ ],
1608
+ "surfaces": [
1609
+ {
1610
+ "kind": "api",
1611
+ "name": "adformats.list",
1612
+ "operation": "list",
1613
+ "objectName": "@happyvertical/smrt-ads:AdFormat",
1614
+ "path": "/adformats",
1615
+ "method": "GET"
1886
1616
  },
1887
1617
  {
1888
- "name": "findByType",
1889
- "async": true,
1890
- "params": [
1891
- "formatType: AdFormatType"
1892
- ],
1893
- "returns": "Promise<AdFormat[]>"
1618
+ "kind": "api",
1619
+ "name": "adformats.get",
1620
+ "operation": "get",
1621
+ "objectName": "@happyvertical/smrt-ads:AdFormat",
1622
+ "path": "/adformats/[id]",
1623
+ "method": "GET"
1894
1624
  },
1895
1625
  {
1896
- "name": "findNative",
1897
- "async": true,
1898
- "returns": "Promise<AdFormat[]>"
1626
+ "kind": "api",
1627
+ "name": "adformats.create",
1628
+ "operation": "create",
1629
+ "objectName": "@happyvertical/smrt-ads:AdFormat",
1630
+ "path": "/adformats",
1631
+ "method": "POST"
1899
1632
  },
1900
1633
  {
1901
- "name": "findVideo",
1902
- "async": true,
1903
- "returns": "Promise<AdFormat[]>"
1904
- }
1905
- ],
1906
- "surfaces": [
1634
+ "kind": "api",
1635
+ "name": "adformats.update",
1636
+ "operation": "update",
1637
+ "objectName": "@happyvertical/smrt-ads:AdFormat",
1638
+ "path": "/adformats/[id]",
1639
+ "method": "PATCH"
1640
+ },
1907
1641
  {
1908
1642
  "kind": "cli",
1909
- "name": "adformatcollection_findByDimensions",
1910
- "operation": "findByDimensions",
1911
- "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
1643
+ "name": "adformat_list",
1644
+ "operation": "list",
1645
+ "objectName": "@happyvertical/smrt-ads:AdFormat"
1912
1646
  },
1913
1647
  {
1914
1648
  "kind": "cli",
1915
- "name": "adformatcollection_findByType",
1916
- "operation": "findByType",
1917
- "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
1649
+ "name": "adformat_get",
1650
+ "operation": "get",
1651
+ "objectName": "@happyvertical/smrt-ads:AdFormat"
1918
1652
  },
1919
1653
  {
1920
1654
  "kind": "cli",
1921
- "name": "adformatcollection_findBanners",
1922
- "operation": "findBanners",
1923
- "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
1655
+ "name": "adformat_create",
1656
+ "operation": "create",
1657
+ "objectName": "@happyvertical/smrt-ads:AdFormat"
1924
1658
  },
1925
1659
  {
1926
1660
  "kind": "cli",
1927
- "name": "adformatcollection_findNative",
1928
- "operation": "findNative",
1929
- "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
1661
+ "name": "adformat_update",
1662
+ "operation": "update",
1663
+ "objectName": "@happyvertical/smrt-ads:AdFormat"
1930
1664
  },
1931
1665
  {
1932
1666
  "kind": "cli",
1933
- "name": "adformatcollection_findVideo",
1934
- "operation": "findVideo",
1935
- "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
1936
- }
1937
- ],
1938
- "withheldSurfaces": [
1939
- {
1940
- "kind": "api",
1941
- "operation": "findBanners",
1942
- "code": "not-included",
1943
- "reason": "not listed in api.include",
1944
- "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
1667
+ "name": "adformat_delete",
1668
+ "operation": "delete",
1669
+ "objectName": "@happyvertical/smrt-ads:AdFormat"
1945
1670
  },
1946
1671
  {
1947
- "kind": "api",
1948
- "operation": "findByDimensions",
1949
- "code": "not-included",
1950
- "reason": "not listed in api.include",
1951
- "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
1672
+ "kind": "cli",
1673
+ "name": "adformat_getDimensions",
1674
+ "operation": "getDimensions",
1675
+ "objectName": "@happyvertical/smrt-ads:AdFormat"
1952
1676
  },
1953
1677
  {
1954
- "kind": "api",
1955
- "operation": "findByType",
1956
- "code": "not-included",
1957
- "reason": "not listed in api.include",
1958
- "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
1678
+ "kind": "cli",
1679
+ "name": "adformat_matchesDimensions",
1680
+ "operation": "matchesDimensions",
1681
+ "objectName": "@happyvertical/smrt-ads:AdFormat"
1682
+ },
1683
+ {
1684
+ "kind": "mcp",
1685
+ "name": "adformat_list",
1686
+ "operation": "list",
1687
+ "objectName": "@happyvertical/smrt-ads:AdFormat"
1959
1688
  },
1689
+ {
1690
+ "kind": "mcp",
1691
+ "name": "adformat_get",
1692
+ "operation": "get",
1693
+ "objectName": "@happyvertical/smrt-ads:AdFormat"
1694
+ }
1695
+ ],
1696
+ "withheldSurfaces": [
1960
1697
  {
1961
1698
  "kind": "api",
1962
- "operation": "findNative",
1699
+ "operation": "getDimensions",
1963
1700
  "code": "not-included",
1964
1701
  "reason": "not listed in api.include",
1965
- "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
1702
+ "objectName": "@happyvertical/smrt-ads:AdFormat"
1966
1703
  },
1967
1704
  {
1968
1705
  "kind": "api",
1969
- "operation": "findVideo",
1706
+ "operation": "matchesDimensions",
1970
1707
  "code": "not-included",
1971
1708
  "reason": "not listed in api.include",
1972
- "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
1709
+ "objectName": "@happyvertical/smrt-ads:AdFormat"
1973
1710
  }
1974
1711
  ],
1975
1712
  "relationshipFeatures": [
@@ -1979,569 +1716,832 @@
1979
1716
  "risks": []
1980
1717
  },
1981
1718
  {
1982
- "name": "AdGroupCollection",
1983
- "qualifiedName": "@happyvertical/smrt-ads:AdGroupCollection",
1719
+ "name": "AdGroup",
1720
+ "qualifiedName": "@happyvertical/smrt-ads:AdGroup",
1721
+ "displayLabelField": "name",
1984
1722
  "collection": "adgroups",
1723
+ "description": "AdGroup organizes ad creatives with targeting and budget controls.",
1985
1724
  "tableName": "ad_groups",
1986
1725
  "packageName": "@happyvertical/smrt-ads",
1987
- "extends": "SmrtCollection",
1988
- "fields": [],
1989
- "relationships": [],
1990
- "methods": [
1991
- "findActive",
1992
- "findByContract",
1993
- "findByStatus",
1994
- "findByTenant",
1995
- "findByTier",
1996
- "findByVertical",
1997
- "findByZone",
1998
- "findCompleted",
1999
- "findDrafts",
2000
- "findEligibleForZone",
2001
- "findGlobal",
2002
- "findPaused",
2003
- "findWithGlobals"
2004
- ],
2005
- "methodSignatures": [
1726
+ "extends": "SmrtObject",
1727
+ "fields": [
2006
1728
  {
2007
- "name": "findActive",
2008
- "async": true,
2009
- "returns": "Promise<AdGroup[]>"
1729
+ "name": "created_at",
1730
+ "type": "datetime",
1731
+ "required": false,
1732
+ "columnType": "TIMESTAMP"
2010
1733
  },
2011
1734
  {
2012
- "name": "findByContract",
2013
- "async": true,
2014
- "params": [
2015
- "contractId: string"
2016
- ],
2017
- "returns": "Promise<AdGroup[]>"
1735
+ "name": "updated_at",
1736
+ "type": "datetime",
1737
+ "required": false,
1738
+ "columnType": "TIMESTAMP"
2018
1739
  },
2019
1740
  {
2020
- "name": "findByStatus",
2021
- "async": true,
2022
- "params": [
2023
- "status: AdGroupStatus"
2024
- ],
2025
- "returns": "Promise<AdGroup[]>"
1741
+ "name": "tenantId",
1742
+ "type": "text",
1743
+ "required": false,
1744
+ "columnType": "UUID"
2026
1745
  },
2027
1746
  {
2028
- "name": "findByTenant",
2029
- "async": true,
2030
- "params": [
2031
- "tenantId: string"
2032
- ],
2033
- "returns": "Promise<AdGroup[]>"
1747
+ "name": "contractId",
1748
+ "type": "crossPackageRef",
1749
+ "required": false,
1750
+ "related": "@happyvertical/smrt-commerce:SalesContract",
1751
+ "columnType": "UUID",
1752
+ "description": "The sales contract this campaign is sold under, if there is one."
2034
1753
  },
2035
1754
  {
2036
- "name": "findByTier",
2037
- "async": true,
2038
- "params": [
2039
- "tierId: string"
2040
- ],
2041
- "returns": "Promise<AdGroup[]>"
1755
+ "name": "tierId",
1756
+ "type": "foreignKey",
1757
+ "required": false,
1758
+ "related": "AdDeliveryTier",
1759
+ "columnType": "UUID",
1760
+ "description": "The priority tier the campaign runs in. Tiers are tried in order when more than one campaign could show."
2042
1761
  },
2043
1762
  {
2044
- "name": "findByVertical",
2045
- "async": true,
2046
- "params": [
2047
- "verticalSlug: string"
2048
- ],
2049
- "returns": "Promise<AdGroup[]>"
1763
+ "name": "name",
1764
+ "type": "text",
1765
+ "required": false,
1766
+ "columnType": "TEXT",
1767
+ "default": "",
1768
+ "description": "What you call the campaign, for example Summer sale."
2050
1769
  },
2051
1770
  {
2052
- "name": "findByZone",
2053
- "async": true,
2054
- "params": [
2055
- "zoneId: string"
2056
- ],
2057
- "returns": "Promise<AdGroup[]>"
1771
+ "name": "verticalSlug",
1772
+ "type": "text",
1773
+ "required": false,
1774
+ "columnType": "TEXT",
1775
+ "default": "",
1776
+ "description": "The category the campaign belongs to, such as retail."
2058
1777
  },
2059
1778
  {
2060
- "name": "findCompleted",
2061
- "async": true,
2062
- "returns": "Promise<AdGroup[]>"
1779
+ "name": "targeting",
1780
+ "type": "text",
1781
+ "required": false,
1782
+ "columnType": "TEXT",
1783
+ "default": ""
2063
1784
  },
2064
1785
  {
2065
- "name": "findDrafts",
2066
- "async": true,
2067
- "returns": "Promise<AdGroup[]>"
1786
+ "name": "zoneIds",
1787
+ "type": "text",
1788
+ "required": false,
1789
+ "columnType": "TEXT",
1790
+ "default": ""
2068
1791
  },
2069
1792
  {
2070
- "name": "findEligibleForZone",
2071
- "async": true,
2072
- "params": [
2073
- "zoneId: string"
2074
- ],
2075
- "returns": "Promise<AdGroup[]>"
1793
+ "name": "startDate",
1794
+ "type": "datetime",
1795
+ "required": false,
1796
+ "columnType": "TIMESTAMP",
1797
+ "description": "The first day the campaign can show."
2076
1798
  },
2077
1799
  {
2078
- "name": "findGlobal",
2079
- "async": true,
2080
- "returns": "Promise<AdGroup[]>"
1800
+ "name": "endDate",
1801
+ "type": "datetime",
1802
+ "required": false,
1803
+ "columnType": "TIMESTAMP",
1804
+ "description": "The last day the campaign can show."
2081
1805
  },
2082
1806
  {
2083
- "name": "findPaused",
2084
- "async": true,
2085
- "returns": "Promise<AdGroup[]>"
1807
+ "name": "dailyBudget",
1808
+ "type": "decimal",
1809
+ "required": false,
1810
+ "columnType": "REAL",
1811
+ "default": 0,
1812
+ "description": "The most to spend in one day. The app shows this but does not stop the campaign by itself."
2086
1813
  },
2087
1814
  {
2088
- "name": "findWithGlobals",
2089
- "async": true,
2090
- "params": [
2091
- "tenantId: string"
2092
- ],
2093
- "returns": "Promise<AdGroup[]>"
1815
+ "name": "totalBudget",
1816
+ "type": "decimal",
1817
+ "required": false,
1818
+ "columnType": "REAL",
1819
+ "default": 0,
1820
+ "description": "The most to spend over the whole campaign."
1821
+ },
1822
+ {
1823
+ "name": "status",
1824
+ "type": "text",
1825
+ "required": false,
1826
+ "columnType": "TEXT",
1827
+ "description": "Where the campaign stands: draft, active, paused or completed. Only active campaigns show ads."
2094
1828
  }
2095
1829
  ],
2096
- "surfaces": [
1830
+ "relationships": [
2097
1831
  {
2098
- "kind": "cli",
2099
- "name": "adgroupcollection_findByContract",
2100
- "operation": "findByContract",
2101
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
1832
+ "name": "contractId",
1833
+ "type": "crossPackageRef",
1834
+ "required": false,
1835
+ "related": "@happyvertical/smrt-commerce:SalesContract",
1836
+ "columnType": "UUID"
2102
1837
  },
2103
1838
  {
2104
- "kind": "cli",
2105
- "name": "adgroupcollection_findByTier",
2106
- "operation": "findByTier",
2107
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
1839
+ "name": "tierId",
1840
+ "type": "foreignKey",
1841
+ "required": false,
1842
+ "related": "AdDeliveryTier",
1843
+ "columnType": "UUID"
1844
+ }
1845
+ ],
1846
+ "methods": [
1847
+ "addZoneId",
1848
+ "getTargeting",
1849
+ "getZoneIds",
1850
+ "hasEnded",
1851
+ "hasStarted",
1852
+ "hasZoneId",
1853
+ "isActive",
1854
+ "isCompleted",
1855
+ "isDraft",
1856
+ "isPaused",
1857
+ "removeZoneId",
1858
+ "setTargeting",
1859
+ "setZoneIds"
1860
+ ],
1861
+ "methodSignatures": [
1862
+ {
1863
+ "name": "addZoneId",
1864
+ "params": [
1865
+ "zoneId: string"
1866
+ ],
1867
+ "returns": "void"
1868
+ },
1869
+ {
1870
+ "name": "getTargeting",
1871
+ "returns": "Record<string, unknown>"
1872
+ },
1873
+ {
1874
+ "name": "getZoneIds",
1875
+ "returns": "string[]"
1876
+ },
1877
+ {
1878
+ "name": "hasEnded",
1879
+ "returns": "boolean"
1880
+ },
1881
+ {
1882
+ "name": "hasStarted",
1883
+ "returns": "boolean"
1884
+ },
1885
+ {
1886
+ "name": "hasZoneId",
1887
+ "params": [
1888
+ "zoneId: string"
1889
+ ],
1890
+ "returns": "boolean"
1891
+ },
1892
+ {
1893
+ "name": "isActive",
1894
+ "returns": "boolean"
1895
+ },
1896
+ {
1897
+ "name": "isCompleted",
1898
+ "returns": "boolean"
1899
+ },
1900
+ {
1901
+ "name": "isDraft",
1902
+ "returns": "boolean"
1903
+ },
1904
+ {
1905
+ "name": "isPaused",
1906
+ "returns": "boolean"
1907
+ },
1908
+ {
1909
+ "name": "removeZoneId",
1910
+ "params": [
1911
+ "zoneId: string"
1912
+ ],
1913
+ "returns": "void"
1914
+ },
1915
+ {
1916
+ "name": "setTargeting",
1917
+ "params": [
1918
+ "rules: Record<string, unknown>"
1919
+ ],
1920
+ "returns": "void"
1921
+ },
1922
+ {
1923
+ "name": "setZoneIds",
1924
+ "params": [
1925
+ "ids: string[]"
1926
+ ],
1927
+ "returns": "void"
1928
+ }
1929
+ ],
1930
+ "tenant": {
1931
+ "scoped": true,
1932
+ "mode": "optional",
1933
+ "field": "tenantId"
1934
+ },
1935
+ "tableStrategy": "sti",
1936
+ "conflictColumns": [
1937
+ "tenant_id",
1938
+ "slug",
1939
+ "context",
1940
+ "_meta_type"
1941
+ ],
1942
+ "surfaces": [
1943
+ {
1944
+ "kind": "api",
1945
+ "name": "adgroups.list",
1946
+ "operation": "list",
1947
+ "objectName": "@happyvertical/smrt-ads:AdGroup",
1948
+ "path": "/adgroups",
1949
+ "method": "GET"
1950
+ },
1951
+ {
1952
+ "kind": "api",
1953
+ "name": "adgroups.get",
1954
+ "operation": "get",
1955
+ "objectName": "@happyvertical/smrt-ads:AdGroup",
1956
+ "path": "/adgroups/[id]",
1957
+ "method": "GET"
1958
+ },
1959
+ {
1960
+ "kind": "api",
1961
+ "name": "adgroups.create",
1962
+ "operation": "create",
1963
+ "objectName": "@happyvertical/smrt-ads:AdGroup",
1964
+ "path": "/adgroups",
1965
+ "method": "POST"
1966
+ },
1967
+ {
1968
+ "kind": "api",
1969
+ "name": "adgroups.update",
1970
+ "operation": "update",
1971
+ "objectName": "@happyvertical/smrt-ads:AdGroup",
1972
+ "path": "/adgroups/[id]",
1973
+ "method": "PATCH"
2108
1974
  },
2109
1975
  {
2110
1976
  "kind": "cli",
2111
- "name": "adgroupcollection_findByStatus",
2112
- "operation": "findByStatus",
2113
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
1977
+ "name": "adgroup_list",
1978
+ "operation": "list",
1979
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2114
1980
  },
2115
1981
  {
2116
1982
  "kind": "cli",
2117
- "name": "adgroupcollection_findActive",
2118
- "operation": "findActive",
2119
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
1983
+ "name": "adgroup_get",
1984
+ "operation": "get",
1985
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2120
1986
  },
2121
1987
  {
2122
1988
  "kind": "cli",
2123
- "name": "adgroupcollection_findByVertical",
2124
- "operation": "findByVertical",
2125
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
1989
+ "name": "adgroup_create",
1990
+ "operation": "create",
1991
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2126
1992
  },
2127
1993
  {
2128
1994
  "kind": "cli",
2129
- "name": "adgroupcollection_findByZone",
2130
- "operation": "findByZone",
2131
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
1995
+ "name": "adgroup_update",
1996
+ "operation": "update",
1997
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2132
1998
  },
2133
1999
  {
2134
2000
  "kind": "cli",
2135
- "name": "adgroupcollection_findEligibleForZone",
2136
- "operation": "findEligibleForZone",
2137
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2001
+ "name": "adgroup_delete",
2002
+ "operation": "delete",
2003
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2138
2004
  },
2139
2005
  {
2140
2006
  "kind": "cli",
2141
- "name": "adgroupcollection_findDrafts",
2142
- "operation": "findDrafts",
2143
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2007
+ "name": "adgroup_getZoneIds",
2008
+ "operation": "getZoneIds",
2009
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2144
2010
  },
2145
2011
  {
2146
2012
  "kind": "cli",
2147
- "name": "adgroupcollection_findPaused",
2148
- "operation": "findPaused",
2149
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2013
+ "name": "adgroup_setZoneIds",
2014
+ "operation": "setZoneIds",
2015
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2150
2016
  },
2151
2017
  {
2152
2018
  "kind": "cli",
2153
- "name": "adgroupcollection_findCompleted",
2154
- "operation": "findCompleted",
2155
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2019
+ "name": "adgroup_addZoneId",
2020
+ "operation": "addZoneId",
2021
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2156
2022
  },
2157
2023
  {
2158
2024
  "kind": "cli",
2159
- "name": "adgroupcollection_findByTenant",
2160
- "operation": "findByTenant",
2161
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2025
+ "name": "adgroup_removeZoneId",
2026
+ "operation": "removeZoneId",
2027
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2162
2028
  },
2163
2029
  {
2164
2030
  "kind": "cli",
2165
- "name": "adgroupcollection_findGlobal",
2166
- "operation": "findGlobal",
2167
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2031
+ "name": "adgroup_hasZoneId",
2032
+ "operation": "hasZoneId",
2033
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2168
2034
  },
2169
2035
  {
2170
2036
  "kind": "cli",
2171
- "name": "adgroupcollection_findWithGlobals",
2172
- "operation": "findWithGlobals",
2173
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2037
+ "name": "adgroup_getTargeting",
2038
+ "operation": "getTargeting",
2039
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2040
+ },
2041
+ {
2042
+ "kind": "cli",
2043
+ "name": "adgroup_setTargeting",
2044
+ "operation": "setTargeting",
2045
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2046
+ },
2047
+ {
2048
+ "kind": "cli",
2049
+ "name": "adgroup_isActive",
2050
+ "operation": "isActive",
2051
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2052
+ },
2053
+ {
2054
+ "kind": "cli",
2055
+ "name": "adgroup_isDraft",
2056
+ "operation": "isDraft",
2057
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2058
+ },
2059
+ {
2060
+ "kind": "cli",
2061
+ "name": "adgroup_isPaused",
2062
+ "operation": "isPaused",
2063
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2064
+ },
2065
+ {
2066
+ "kind": "cli",
2067
+ "name": "adgroup_isCompleted",
2068
+ "operation": "isCompleted",
2069
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2070
+ },
2071
+ {
2072
+ "kind": "cli",
2073
+ "name": "adgroup_hasEnded",
2074
+ "operation": "hasEnded",
2075
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2076
+ },
2077
+ {
2078
+ "kind": "cli",
2079
+ "name": "adgroup_hasStarted",
2080
+ "operation": "hasStarted",
2081
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2082
+ },
2083
+ {
2084
+ "kind": "mcp",
2085
+ "name": "adgroup_list",
2086
+ "operation": "list",
2087
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2088
+ },
2089
+ {
2090
+ "kind": "mcp",
2091
+ "name": "adgroup_get",
2092
+ "operation": "get",
2093
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2094
+ },
2095
+ {
2096
+ "kind": "mcp",
2097
+ "name": "adgroup_create",
2098
+ "operation": "create",
2099
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2174
2100
  }
2175
2101
  ],
2176
2102
  "withheldSurfaces": [
2177
2103
  {
2178
2104
  "kind": "api",
2179
- "operation": "findActive",
2105
+ "operation": "addZoneId",
2180
2106
  "code": "not-included",
2181
2107
  "reason": "not listed in api.include",
2182
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2108
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2183
2109
  },
2184
2110
  {
2185
2111
  "kind": "api",
2186
- "operation": "findByContract",
2112
+ "operation": "getTargeting",
2187
2113
  "code": "not-included",
2188
2114
  "reason": "not listed in api.include",
2189
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2115
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2190
2116
  },
2191
2117
  {
2192
2118
  "kind": "api",
2193
- "operation": "findByStatus",
2119
+ "operation": "getZoneIds",
2194
2120
  "code": "not-included",
2195
2121
  "reason": "not listed in api.include",
2196
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2122
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2197
2123
  },
2198
2124
  {
2199
2125
  "kind": "api",
2200
- "operation": "findByTenant",
2126
+ "operation": "hasEnded",
2201
2127
  "code": "not-included",
2202
2128
  "reason": "not listed in api.include",
2203
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2129
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2204
2130
  },
2205
2131
  {
2206
2132
  "kind": "api",
2207
- "operation": "findByTier",
2133
+ "operation": "hasStarted",
2208
2134
  "code": "not-included",
2209
2135
  "reason": "not listed in api.include",
2210
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2136
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2211
2137
  },
2212
2138
  {
2213
2139
  "kind": "api",
2214
- "operation": "findByVertical",
2140
+ "operation": "hasZoneId",
2215
2141
  "code": "not-included",
2216
2142
  "reason": "not listed in api.include",
2217
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2143
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2218
2144
  },
2219
2145
  {
2220
2146
  "kind": "api",
2221
- "operation": "findByZone",
2147
+ "operation": "isActive",
2222
2148
  "code": "not-included",
2223
2149
  "reason": "not listed in api.include",
2224
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2150
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2225
2151
  },
2226
2152
  {
2227
2153
  "kind": "api",
2228
- "operation": "findCompleted",
2154
+ "operation": "isCompleted",
2229
2155
  "code": "not-included",
2230
2156
  "reason": "not listed in api.include",
2231
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2157
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2232
2158
  },
2233
2159
  {
2234
2160
  "kind": "api",
2235
- "operation": "findDrafts",
2161
+ "operation": "isDraft",
2236
2162
  "code": "not-included",
2237
2163
  "reason": "not listed in api.include",
2238
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2164
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2239
2165
  },
2240
2166
  {
2241
2167
  "kind": "api",
2242
- "operation": "findEligibleForZone",
2168
+ "operation": "isPaused",
2243
2169
  "code": "not-included",
2244
2170
  "reason": "not listed in api.include",
2245
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2171
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2246
2172
  },
2247
2173
  {
2248
2174
  "kind": "api",
2249
- "operation": "findGlobal",
2175
+ "operation": "removeZoneId",
2250
2176
  "code": "not-included",
2251
2177
  "reason": "not listed in api.include",
2252
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2178
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2253
2179
  },
2254
2180
  {
2255
2181
  "kind": "api",
2256
- "operation": "findPaused",
2182
+ "operation": "setTargeting",
2257
2183
  "code": "not-included",
2258
2184
  "reason": "not listed in api.include",
2259
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2185
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2260
2186
  },
2261
2187
  {
2262
2188
  "kind": "api",
2263
- "operation": "findWithGlobals",
2189
+ "operation": "setZoneIds",
2264
2190
  "code": "not-included",
2265
2191
  "reason": "not listed in api.include",
2266
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2192
+ "objectName": "@happyvertical/smrt-ads:AdGroup"
2267
2193
  }
2268
2194
  ],
2269
2195
  "relationshipFeatures": [
2196
+ "crossPackageRef",
2197
+ "foreignKey",
2270
2198
  "uuidColumns"
2271
2199
  ],
2272
2200
  "tags": [],
2273
2201
  "risks": []
2274
2202
  },
2275
2203
  {
2276
- "name": "AdVariationCollection",
2277
- "qualifiedName": "@happyvertical/smrt-ads:AdVariationCollection",
2204
+ "name": "AdVariation",
2205
+ "qualifiedName": "@happyvertical/smrt-ads:AdVariation",
2206
+ "displayLabelField": "name",
2278
2207
  "collection": "advariations",
2208
+ "description": "AdVariation represents a creative asset within an ad group. Supports A/B testing via weighted selection.",
2279
2209
  "tableName": "ad_variations",
2280
2210
  "packageName": "@happyvertical/smrt-ads",
2281
- "extends": "SmrtCollection",
2282
- "fields": [],
2283
- "relationships": [],
2284
- "methods": [
2285
- "findActive",
2286
- "findActiveByGroup",
2287
- "findByFormat",
2288
- "findByGroup",
2289
- "findByStatus",
2290
- "findByTenant",
2291
- "findDrafts",
2292
- "findGlobal",
2293
- "findPaused",
2294
- "findTopPerformers",
2295
- "findWithGlobals",
2296
- "selectByWeight"
2297
- ],
2298
- "methodSignatures": [
2211
+ "extends": "SmrtObject",
2212
+ "fields": [
2299
2213
  {
2300
- "name": "findActive",
2301
- "async": true,
2302
- "returns": "Promise<AdVariation[]>"
2214
+ "name": "created_at",
2215
+ "type": "datetime",
2216
+ "required": false,
2217
+ "columnType": "TIMESTAMP"
2303
2218
  },
2304
2219
  {
2305
- "name": "findActiveByGroup",
2306
- "async": true,
2307
- "params": [
2308
- "groupId: string"
2309
- ],
2310
- "returns": "Promise<AdVariation[]>"
2220
+ "name": "updated_at",
2221
+ "type": "datetime",
2222
+ "required": false,
2223
+ "columnType": "TIMESTAMP"
2311
2224
  },
2312
2225
  {
2313
- "name": "findByFormat",
2314
- "async": true,
2315
- "params": [
2316
- "formatId: string"
2317
- ],
2318
- "returns": "Promise<AdVariation[]>"
2226
+ "name": "tenantId",
2227
+ "type": "text",
2228
+ "required": false,
2229
+ "columnType": "UUID"
2319
2230
  },
2320
2231
  {
2321
- "name": "findByGroup",
2322
- "async": true,
2323
- "params": [
2324
- "groupId: string"
2325
- ],
2326
- "returns": "Promise<AdVariation[]>"
2232
+ "name": "groupId",
2233
+ "type": "foreignKey",
2234
+ "required": false,
2235
+ "related": "AdGroup",
2236
+ "columnType": "UUID",
2237
+ "description": "The campaign this ad belongs to."
2327
2238
  },
2328
2239
  {
2329
- "name": "findByStatus",
2330
- "async": true,
2331
- "params": [
2332
- "status: AdVariationStatus"
2333
- ],
2334
- "returns": "Promise<AdVariation[]>"
2240
+ "name": "formatId",
2241
+ "type": "foreignKey",
2242
+ "required": false,
2243
+ "related": "AdFormat",
2244
+ "columnType": "UUID",
2245
+ "description": "The ad size this ad is made for."
2335
2246
  },
2336
2247
  {
2337
- "name": "findByTenant",
2338
- "async": true,
2339
- "params": [
2340
- "tenantId: string"
2341
- ],
2342
- "returns": "Promise<AdVariation[]>"
2248
+ "name": "assetId",
2249
+ "type": "crossPackageRef",
2250
+ "required": false,
2251
+ "related": "@happyvertical/smrt-assets:Asset",
2252
+ "columnType": "UUID",
2253
+ "description": "The picture people see."
2343
2254
  },
2344
2255
  {
2345
- "name": "findDrafts",
2346
- "async": true,
2347
- "returns": "Promise<AdVariation[]>"
2256
+ "name": "name",
2257
+ "type": "text",
2258
+ "required": false,
2259
+ "columnType": "TEXT",
2260
+ "default": "",
2261
+ "description": "What you call this ad, for example Version A, blue button."
2348
2262
  },
2349
2263
  {
2350
- "name": "findGlobal",
2351
- "async": true,
2352
- "returns": "Promise<AdVariation[]>"
2264
+ "name": "clickUrl",
2265
+ "type": "text",
2266
+ "required": false,
2267
+ "columnType": "TEXT",
2268
+ "default": "",
2269
+ "description": "The web address people go to when they tap the ad."
2353
2270
  },
2354
2271
  {
2355
- "name": "findPaused",
2356
- "async": true,
2357
- "returns": "Promise<AdVariation[]>"
2272
+ "name": "altText",
2273
+ "type": "text",
2274
+ "required": false,
2275
+ "columnType": "TEXT",
2276
+ "default": "",
2277
+ "description": "A few words that describe the picture for people who cannot see it."
2358
2278
  },
2359
2279
  {
2360
- "name": "findTopPerformers",
2361
- "async": true,
2362
- "params": [
2363
- "limit?: number"
2364
- ],
2365
- "returns": "Promise<AdVariation[]>"
2280
+ "name": "weight",
2281
+ "type": "integer",
2282
+ "required": false,
2283
+ "columnType": "INTEGER",
2284
+ "default": 1,
2285
+ "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."
2366
2286
  },
2367
2287
  {
2368
- "name": "findWithGlobals",
2369
- "async": true,
2370
- "params": [
2371
- "tenantId: string"
2372
- ],
2373
- "returns": "Promise<AdVariation[]>"
2288
+ "name": "status",
2289
+ "type": "text",
2290
+ "required": false,
2291
+ "columnType": "TEXT",
2292
+ "description": "Where the ad stands: draft, active or paused. Only active ads show."
2374
2293
  },
2375
2294
  {
2376
- "name": "selectByWeight",
2377
- "async": true,
2378
- "params": [
2379
- "groupId: string"
2380
- ],
2381
- "returns": "Promise<AdVariation | null>"
2295
+ "name": "impressions",
2296
+ "type": "integer",
2297
+ "required": false,
2298
+ "columnType": "INTEGER",
2299
+ "default": 0,
2300
+ "description": "How many times the ad has been shown. The app counts this as it serves ads and refreshes it a little later."
2301
+ },
2302
+ {
2303
+ "name": "clicks",
2304
+ "type": "integer",
2305
+ "required": false,
2306
+ "columnType": "INTEGER",
2307
+ "default": 0,
2308
+ "description": "How many times the ad has been tapped. The app counts this as it serves ads and refreshes it a little later."
2382
2309
  }
2383
2310
  ],
2384
- "surfaces": [
2311
+ "relationships": [
2385
2312
  {
2386
- "kind": "cli",
2387
- "name": "advariationcollection_findByGroup",
2388
- "operation": "findByGroup",
2389
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2313
+ "name": "groupId",
2314
+ "type": "foreignKey",
2315
+ "required": false,
2316
+ "related": "AdGroup",
2317
+ "columnType": "UUID"
2390
2318
  },
2391
2319
  {
2392
- "kind": "cli",
2393
- "name": "advariationcollection_findByFormat",
2394
- "operation": "findByFormat",
2395
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2320
+ "name": "formatId",
2321
+ "type": "foreignKey",
2322
+ "required": false,
2323
+ "related": "AdFormat",
2324
+ "columnType": "UUID"
2396
2325
  },
2397
2326
  {
2398
- "kind": "cli",
2399
- "name": "advariationcollection_findActiveByGroup",
2400
- "operation": "findActiveByGroup",
2401
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2327
+ "name": "assetId",
2328
+ "type": "crossPackageRef",
2329
+ "required": false,
2330
+ "related": "@happyvertical/smrt-assets:Asset",
2331
+ "columnType": "UUID"
2332
+ }
2333
+ ],
2334
+ "methods": [
2335
+ "getCTR",
2336
+ "isActive",
2337
+ "isDraft",
2338
+ "isPaused",
2339
+ "recordClick",
2340
+ "recordImpression"
2341
+ ],
2342
+ "methodSignatures": [
2343
+ {
2344
+ "name": "getCTR",
2345
+ "returns": "number"
2402
2346
  },
2403
2347
  {
2404
- "kind": "cli",
2405
- "name": "advariationcollection_selectByWeight",
2406
- "operation": "selectByWeight",
2407
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2348
+ "name": "isActive",
2349
+ "returns": "boolean"
2408
2350
  },
2409
2351
  {
2410
- "kind": "cli",
2411
- "name": "advariationcollection_findByStatus",
2412
- "operation": "findByStatus",
2413
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2352
+ "name": "isDraft",
2353
+ "returns": "boolean"
2414
2354
  },
2415
2355
  {
2416
- "kind": "cli",
2417
- "name": "advariationcollection_findActive",
2418
- "operation": "findActive",
2419
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2356
+ "name": "isPaused",
2357
+ "returns": "boolean"
2420
2358
  },
2421
2359
  {
2422
- "kind": "cli",
2423
- "name": "advariationcollection_findDrafts",
2424
- "operation": "findDrafts",
2425
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2360
+ "name": "recordClick",
2361
+ "returns": "void"
2362
+ },
2363
+ {
2364
+ "name": "recordImpression",
2365
+ "returns": "void"
2366
+ }
2367
+ ],
2368
+ "tenant": {
2369
+ "scoped": true,
2370
+ "mode": "optional",
2371
+ "field": "tenantId"
2372
+ },
2373
+ "tableStrategy": "sti",
2374
+ "conflictColumns": [
2375
+ "tenant_id",
2376
+ "slug",
2377
+ "context",
2378
+ "_meta_type"
2379
+ ],
2380
+ "surfaces": [
2381
+ {
2382
+ "kind": "api",
2383
+ "name": "advariations.list",
2384
+ "operation": "list",
2385
+ "objectName": "@happyvertical/smrt-ads:AdVariation",
2386
+ "path": "/advariations",
2387
+ "method": "GET"
2388
+ },
2389
+ {
2390
+ "kind": "api",
2391
+ "name": "advariations.get",
2392
+ "operation": "get",
2393
+ "objectName": "@happyvertical/smrt-ads:AdVariation",
2394
+ "path": "/advariations/[id]",
2395
+ "method": "GET"
2396
+ },
2397
+ {
2398
+ "kind": "api",
2399
+ "name": "advariations.create",
2400
+ "operation": "create",
2401
+ "objectName": "@happyvertical/smrt-ads:AdVariation",
2402
+ "path": "/advariations",
2403
+ "method": "POST"
2404
+ },
2405
+ {
2406
+ "kind": "api",
2407
+ "name": "advariations.update",
2408
+ "operation": "update",
2409
+ "objectName": "@happyvertical/smrt-ads:AdVariation",
2410
+ "path": "/advariations/[id]",
2411
+ "method": "PATCH"
2426
2412
  },
2427
2413
  {
2428
2414
  "kind": "cli",
2429
- "name": "advariationcollection_findPaused",
2430
- "operation": "findPaused",
2431
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2415
+ "name": "advariation_list",
2416
+ "operation": "list",
2417
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2432
2418
  },
2433
2419
  {
2434
2420
  "kind": "cli",
2435
- "name": "advariationcollection_findTopPerformers",
2436
- "operation": "findTopPerformers",
2437
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2421
+ "name": "advariation_get",
2422
+ "operation": "get",
2423
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2438
2424
  },
2439
2425
  {
2440
2426
  "kind": "cli",
2441
- "name": "advariationcollection_findByTenant",
2442
- "operation": "findByTenant",
2443
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2427
+ "name": "advariation_create",
2428
+ "operation": "create",
2429
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2444
2430
  },
2445
2431
  {
2446
2432
  "kind": "cli",
2447
- "name": "advariationcollection_findGlobal",
2448
- "operation": "findGlobal",
2449
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2433
+ "name": "advariation_update",
2434
+ "operation": "update",
2435
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2450
2436
  },
2451
2437
  {
2452
2438
  "kind": "cli",
2453
- "name": "advariationcollection_findWithGlobals",
2454
- "operation": "findWithGlobals",
2455
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2456
- }
2457
- ],
2458
- "withheldSurfaces": [
2439
+ "name": "advariation_delete",
2440
+ "operation": "delete",
2441
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2442
+ },
2459
2443
  {
2460
- "kind": "api",
2461
- "operation": "findActive",
2462
- "code": "not-included",
2463
- "reason": "not listed in api.include",
2464
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2444
+ "kind": "cli",
2445
+ "name": "advariation_isActive",
2446
+ "operation": "isActive",
2447
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2465
2448
  },
2466
2449
  {
2467
- "kind": "api",
2468
- "operation": "findActiveByGroup",
2469
- "code": "not-included",
2470
- "reason": "not listed in api.include",
2471
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2450
+ "kind": "cli",
2451
+ "name": "advariation_isDraft",
2452
+ "operation": "isDraft",
2453
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2472
2454
  },
2473
2455
  {
2474
- "kind": "api",
2475
- "operation": "findByFormat",
2476
- "code": "not-included",
2477
- "reason": "not listed in api.include",
2478
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2456
+ "kind": "cli",
2457
+ "name": "advariation_isPaused",
2458
+ "operation": "isPaused",
2459
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2479
2460
  },
2480
2461
  {
2481
- "kind": "api",
2482
- "operation": "findByGroup",
2483
- "code": "not-included",
2484
- "reason": "not listed in api.include",
2485
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2462
+ "kind": "cli",
2463
+ "name": "advariation_getCTR",
2464
+ "operation": "getCTR",
2465
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2486
2466
  },
2487
2467
  {
2488
- "kind": "api",
2489
- "operation": "findByStatus",
2490
- "code": "not-included",
2491
- "reason": "not listed in api.include",
2492
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2468
+ "kind": "cli",
2469
+ "name": "advariation_recordImpression",
2470
+ "operation": "recordImpression",
2471
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2493
2472
  },
2494
2473
  {
2495
- "kind": "api",
2496
- "operation": "findByTenant",
2497
- "code": "not-included",
2498
- "reason": "not listed in api.include",
2499
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2474
+ "kind": "cli",
2475
+ "name": "advariation_recordClick",
2476
+ "operation": "recordClick",
2477
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2478
+ },
2479
+ {
2480
+ "kind": "mcp",
2481
+ "name": "advariation_list",
2482
+ "operation": "list",
2483
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2500
2484
  },
2485
+ {
2486
+ "kind": "mcp",
2487
+ "name": "advariation_get",
2488
+ "operation": "get",
2489
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2490
+ },
2491
+ {
2492
+ "kind": "mcp",
2493
+ "name": "advariation_create",
2494
+ "operation": "create",
2495
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2496
+ }
2497
+ ],
2498
+ "withheldSurfaces": [
2501
2499
  {
2502
2500
  "kind": "api",
2503
- "operation": "findDrafts",
2501
+ "operation": "getCTR",
2504
2502
  "code": "not-included",
2505
2503
  "reason": "not listed in api.include",
2506
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2504
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2507
2505
  },
2508
2506
  {
2509
2507
  "kind": "api",
2510
- "operation": "findGlobal",
2508
+ "operation": "isActive",
2511
2509
  "code": "not-included",
2512
2510
  "reason": "not listed in api.include",
2513
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2511
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2514
2512
  },
2515
2513
  {
2516
2514
  "kind": "api",
2517
- "operation": "findPaused",
2515
+ "operation": "isDraft",
2518
2516
  "code": "not-included",
2519
2517
  "reason": "not listed in api.include",
2520
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2518
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2521
2519
  },
2522
2520
  {
2523
2521
  "kind": "api",
2524
- "operation": "findTopPerformers",
2522
+ "operation": "isPaused",
2525
2523
  "code": "not-included",
2526
2524
  "reason": "not listed in api.include",
2527
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2525
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2528
2526
  },
2529
2527
  {
2530
2528
  "kind": "api",
2531
- "operation": "findWithGlobals",
2529
+ "operation": "recordClick",
2532
2530
  "code": "not-included",
2533
2531
  "reason": "not listed in api.include",
2534
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2532
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2535
2533
  },
2536
2534
  {
2537
2535
  "kind": "api",
2538
- "operation": "selectByWeight",
2536
+ "operation": "recordImpression",
2539
2537
  "code": "not-included",
2540
2538
  "reason": "not listed in api.include",
2541
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2539
+ "objectName": "@happyvertical/smrt-ads:AdVariation"
2542
2540
  }
2543
2541
  ],
2544
2542
  "relationshipFeatures": [
2543
+ "crossPackageRef",
2544
+ "foreignKey",
2545
2545
  "uuidColumns"
2546
2546
  ],
2547
2547
  "tags": [],
@@ -2549,6 +2549,222 @@
2549
2549
  }
2550
2550
  ],
2551
2551
  "surfaces": [
2552
+ {
2553
+ "kind": "cli",
2554
+ "name": "addeliverytiercollection_findByPriority",
2555
+ "operation": "findByPriority",
2556
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
2557
+ },
2558
+ {
2559
+ "kind": "cli",
2560
+ "name": "addeliverytiercollection_findByPricingModel",
2561
+ "operation": "findByPricingModel",
2562
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
2563
+ },
2564
+ {
2565
+ "kind": "cli",
2566
+ "name": "addeliverytiercollection_getHighestPriority",
2567
+ "operation": "getHighestPriority",
2568
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
2569
+ },
2570
+ {
2571
+ "kind": "cli",
2572
+ "name": "addeliverytiercollection_findFixedPricing",
2573
+ "operation": "findFixedPricing",
2574
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
2575
+ },
2576
+ {
2577
+ "kind": "cli",
2578
+ "name": "addeliverytiercollection_findCPM",
2579
+ "operation": "findCPM",
2580
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
2581
+ },
2582
+ {
2583
+ "kind": "cli",
2584
+ "name": "addeliverytiercollection_findPerformanceBased",
2585
+ "operation": "findPerformanceBased",
2586
+ "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
2587
+ },
2588
+ {
2589
+ "kind": "cli",
2590
+ "name": "adformatcollection_findByDimensions",
2591
+ "operation": "findByDimensions",
2592
+ "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
2593
+ },
2594
+ {
2595
+ "kind": "cli",
2596
+ "name": "adformatcollection_findByType",
2597
+ "operation": "findByType",
2598
+ "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
2599
+ },
2600
+ {
2601
+ "kind": "cli",
2602
+ "name": "adformatcollection_findBanners",
2603
+ "operation": "findBanners",
2604
+ "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
2605
+ },
2606
+ {
2607
+ "kind": "cli",
2608
+ "name": "adformatcollection_findNative",
2609
+ "operation": "findNative",
2610
+ "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
2611
+ },
2612
+ {
2613
+ "kind": "cli",
2614
+ "name": "adformatcollection_findVideo",
2615
+ "operation": "findVideo",
2616
+ "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
2617
+ },
2618
+ {
2619
+ "kind": "cli",
2620
+ "name": "adgroupcollection_findByContract",
2621
+ "operation": "findByContract",
2622
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2623
+ },
2624
+ {
2625
+ "kind": "cli",
2626
+ "name": "adgroupcollection_findByTier",
2627
+ "operation": "findByTier",
2628
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2629
+ },
2630
+ {
2631
+ "kind": "cli",
2632
+ "name": "adgroupcollection_findByStatus",
2633
+ "operation": "findByStatus",
2634
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2635
+ },
2636
+ {
2637
+ "kind": "cli",
2638
+ "name": "adgroupcollection_findActive",
2639
+ "operation": "findActive",
2640
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2641
+ },
2642
+ {
2643
+ "kind": "cli",
2644
+ "name": "adgroupcollection_findByVertical",
2645
+ "operation": "findByVertical",
2646
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2647
+ },
2648
+ {
2649
+ "kind": "cli",
2650
+ "name": "adgroupcollection_findByZone",
2651
+ "operation": "findByZone",
2652
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2653
+ },
2654
+ {
2655
+ "kind": "cli",
2656
+ "name": "adgroupcollection_findEligibleForZone",
2657
+ "operation": "findEligibleForZone",
2658
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2659
+ },
2660
+ {
2661
+ "kind": "cli",
2662
+ "name": "adgroupcollection_findDrafts",
2663
+ "operation": "findDrafts",
2664
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2665
+ },
2666
+ {
2667
+ "kind": "cli",
2668
+ "name": "adgroupcollection_findPaused",
2669
+ "operation": "findPaused",
2670
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2671
+ },
2672
+ {
2673
+ "kind": "cli",
2674
+ "name": "adgroupcollection_findCompleted",
2675
+ "operation": "findCompleted",
2676
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2677
+ },
2678
+ {
2679
+ "kind": "cli",
2680
+ "name": "adgroupcollection_findByTenant",
2681
+ "operation": "findByTenant",
2682
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2683
+ },
2684
+ {
2685
+ "kind": "cli",
2686
+ "name": "adgroupcollection_findGlobal",
2687
+ "operation": "findGlobal",
2688
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2689
+ },
2690
+ {
2691
+ "kind": "cli",
2692
+ "name": "adgroupcollection_findWithGlobals",
2693
+ "operation": "findWithGlobals",
2694
+ "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
2695
+ },
2696
+ {
2697
+ "kind": "cli",
2698
+ "name": "advariationcollection_findByGroup",
2699
+ "operation": "findByGroup",
2700
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2701
+ },
2702
+ {
2703
+ "kind": "cli",
2704
+ "name": "advariationcollection_findByFormat",
2705
+ "operation": "findByFormat",
2706
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2707
+ },
2708
+ {
2709
+ "kind": "cli",
2710
+ "name": "advariationcollection_findActiveByGroup",
2711
+ "operation": "findActiveByGroup",
2712
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2713
+ },
2714
+ {
2715
+ "kind": "cli",
2716
+ "name": "advariationcollection_selectByWeight",
2717
+ "operation": "selectByWeight",
2718
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2719
+ },
2720
+ {
2721
+ "kind": "cli",
2722
+ "name": "advariationcollection_findByStatus",
2723
+ "operation": "findByStatus",
2724
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2725
+ },
2726
+ {
2727
+ "kind": "cli",
2728
+ "name": "advariationcollection_findActive",
2729
+ "operation": "findActive",
2730
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2731
+ },
2732
+ {
2733
+ "kind": "cli",
2734
+ "name": "advariationcollection_findDrafts",
2735
+ "operation": "findDrafts",
2736
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2737
+ },
2738
+ {
2739
+ "kind": "cli",
2740
+ "name": "advariationcollection_findPaused",
2741
+ "operation": "findPaused",
2742
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2743
+ },
2744
+ {
2745
+ "kind": "cli",
2746
+ "name": "advariationcollection_findTopPerformers",
2747
+ "operation": "findTopPerformers",
2748
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2749
+ },
2750
+ {
2751
+ "kind": "cli",
2752
+ "name": "advariationcollection_findByTenant",
2753
+ "operation": "findByTenant",
2754
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2755
+ },
2756
+ {
2757
+ "kind": "cli",
2758
+ "name": "advariationcollection_findGlobal",
2759
+ "operation": "findGlobal",
2760
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2761
+ },
2762
+ {
2763
+ "kind": "cli",
2764
+ "name": "advariationcollection_findWithGlobals",
2765
+ "operation": "findWithGlobals",
2766
+ "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
2767
+ },
2552
2768
  {
2553
2769
  "kind": "api",
2554
2770
  "name": "addeliverytiers.list",
@@ -3022,222 +3238,6 @@
3022
3238
  "name": "advariation_create",
3023
3239
  "operation": "create",
3024
3240
  "objectName": "@happyvertical/smrt-ads:AdVariation"
3025
- },
3026
- {
3027
- "kind": "cli",
3028
- "name": "addeliverytiercollection_findByPriority",
3029
- "operation": "findByPriority",
3030
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
3031
- },
3032
- {
3033
- "kind": "cli",
3034
- "name": "addeliverytiercollection_findByPricingModel",
3035
- "operation": "findByPricingModel",
3036
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
3037
- },
3038
- {
3039
- "kind": "cli",
3040
- "name": "addeliverytiercollection_getHighestPriority",
3041
- "operation": "getHighestPriority",
3042
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
3043
- },
3044
- {
3045
- "kind": "cli",
3046
- "name": "addeliverytiercollection_findFixedPricing",
3047
- "operation": "findFixedPricing",
3048
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
3049
- },
3050
- {
3051
- "kind": "cli",
3052
- "name": "addeliverytiercollection_findCPM",
3053
- "operation": "findCPM",
3054
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
3055
- },
3056
- {
3057
- "kind": "cli",
3058
- "name": "addeliverytiercollection_findPerformanceBased",
3059
- "operation": "findPerformanceBased",
3060
- "objectName": "@happyvertical/smrt-ads:AdDeliveryTierCollection"
3061
- },
3062
- {
3063
- "kind": "cli",
3064
- "name": "adformatcollection_findByDimensions",
3065
- "operation": "findByDimensions",
3066
- "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
3067
- },
3068
- {
3069
- "kind": "cli",
3070
- "name": "adformatcollection_findByType",
3071
- "operation": "findByType",
3072
- "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
3073
- },
3074
- {
3075
- "kind": "cli",
3076
- "name": "adformatcollection_findBanners",
3077
- "operation": "findBanners",
3078
- "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
3079
- },
3080
- {
3081
- "kind": "cli",
3082
- "name": "adformatcollection_findNative",
3083
- "operation": "findNative",
3084
- "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
3085
- },
3086
- {
3087
- "kind": "cli",
3088
- "name": "adformatcollection_findVideo",
3089
- "operation": "findVideo",
3090
- "objectName": "@happyvertical/smrt-ads:AdFormatCollection"
3091
- },
3092
- {
3093
- "kind": "cli",
3094
- "name": "adgroupcollection_findByContract",
3095
- "operation": "findByContract",
3096
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
3097
- },
3098
- {
3099
- "kind": "cli",
3100
- "name": "adgroupcollection_findByTier",
3101
- "operation": "findByTier",
3102
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
3103
- },
3104
- {
3105
- "kind": "cli",
3106
- "name": "adgroupcollection_findByStatus",
3107
- "operation": "findByStatus",
3108
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
3109
- },
3110
- {
3111
- "kind": "cli",
3112
- "name": "adgroupcollection_findActive",
3113
- "operation": "findActive",
3114
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
3115
- },
3116
- {
3117
- "kind": "cli",
3118
- "name": "adgroupcollection_findByVertical",
3119
- "operation": "findByVertical",
3120
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
3121
- },
3122
- {
3123
- "kind": "cli",
3124
- "name": "adgroupcollection_findByZone",
3125
- "operation": "findByZone",
3126
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
3127
- },
3128
- {
3129
- "kind": "cli",
3130
- "name": "adgroupcollection_findEligibleForZone",
3131
- "operation": "findEligibleForZone",
3132
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
3133
- },
3134
- {
3135
- "kind": "cli",
3136
- "name": "adgroupcollection_findDrafts",
3137
- "operation": "findDrafts",
3138
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
3139
- },
3140
- {
3141
- "kind": "cli",
3142
- "name": "adgroupcollection_findPaused",
3143
- "operation": "findPaused",
3144
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
3145
- },
3146
- {
3147
- "kind": "cli",
3148
- "name": "adgroupcollection_findCompleted",
3149
- "operation": "findCompleted",
3150
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
3151
- },
3152
- {
3153
- "kind": "cli",
3154
- "name": "adgroupcollection_findByTenant",
3155
- "operation": "findByTenant",
3156
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
3157
- },
3158
- {
3159
- "kind": "cli",
3160
- "name": "adgroupcollection_findGlobal",
3161
- "operation": "findGlobal",
3162
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
3163
- },
3164
- {
3165
- "kind": "cli",
3166
- "name": "adgroupcollection_findWithGlobals",
3167
- "operation": "findWithGlobals",
3168
- "objectName": "@happyvertical/smrt-ads:AdGroupCollection"
3169
- },
3170
- {
3171
- "kind": "cli",
3172
- "name": "advariationcollection_findByGroup",
3173
- "operation": "findByGroup",
3174
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
3175
- },
3176
- {
3177
- "kind": "cli",
3178
- "name": "advariationcollection_findByFormat",
3179
- "operation": "findByFormat",
3180
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
3181
- },
3182
- {
3183
- "kind": "cli",
3184
- "name": "advariationcollection_findActiveByGroup",
3185
- "operation": "findActiveByGroup",
3186
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
3187
- },
3188
- {
3189
- "kind": "cli",
3190
- "name": "advariationcollection_selectByWeight",
3191
- "operation": "selectByWeight",
3192
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
3193
- },
3194
- {
3195
- "kind": "cli",
3196
- "name": "advariationcollection_findByStatus",
3197
- "operation": "findByStatus",
3198
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
3199
- },
3200
- {
3201
- "kind": "cli",
3202
- "name": "advariationcollection_findActive",
3203
- "operation": "findActive",
3204
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
3205
- },
3206
- {
3207
- "kind": "cli",
3208
- "name": "advariationcollection_findDrafts",
3209
- "operation": "findDrafts",
3210
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
3211
- },
3212
- {
3213
- "kind": "cli",
3214
- "name": "advariationcollection_findPaused",
3215
- "operation": "findPaused",
3216
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
3217
- },
3218
- {
3219
- "kind": "cli",
3220
- "name": "advariationcollection_findTopPerformers",
3221
- "operation": "findTopPerformers",
3222
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
3223
- },
3224
- {
3225
- "kind": "cli",
3226
- "name": "advariationcollection_findByTenant",
3227
- "operation": "findByTenant",
3228
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
3229
- },
3230
- {
3231
- "kind": "cli",
3232
- "name": "advariationcollection_findGlobal",
3233
- "operation": "findGlobal",
3234
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
3235
- },
3236
- {
3237
- "kind": "cli",
3238
- "name": "advariationcollection_findWithGlobals",
3239
- "operation": "findWithGlobals",
3240
- "objectName": "@happyvertical/smrt-ads:AdVariationCollection"
3241
3241
  }
3242
3242
  ],
3243
3243
  "prompts": [],