@mj-biz-apps/marketing-server 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/__tests__/adConversionParity.test.d.ts +2 -0
  2. package/dist/__tests__/adConversionParity.test.d.ts.map +1 -0
  3. package/dist/__tests__/adConversionParity.test.js +127 -0
  4. package/dist/__tests__/adConversionParity.test.js.map +1 -0
  5. package/dist/__tests__/googleCreativeImage.test.d.ts +2 -0
  6. package/dist/__tests__/googleCreativeImage.test.d.ts.map +1 -0
  7. package/dist/__tests__/googleCreativeImage.test.js +53 -0
  8. package/dist/__tests__/googleCreativeImage.test.js.map +1 -0
  9. package/dist/programs/google/GoogleAdsClient.d.ts +38 -3
  10. package/dist/programs/google/GoogleAdsClient.d.ts.map +1 -1
  11. package/dist/programs/google/GoogleAdsClient.js +96 -14
  12. package/dist/programs/google/GoogleAdsClient.js.map +1 -1
  13. package/dist/programs/google/GoogleAdsProgramDriver.d.ts +19 -1
  14. package/dist/programs/google/GoogleAdsProgramDriver.d.ts.map +1 -1
  15. package/dist/programs/google/GoogleAdsProgramDriver.js +155 -15
  16. package/dist/programs/google/GoogleAdsProgramDriver.js.map +1 -1
  17. package/dist/programs/google/googleBrandAssets.d.ts +6 -2
  18. package/dist/programs/google/googleBrandAssets.d.ts.map +1 -1
  19. package/dist/programs/google/googleBrandAssets.js +12 -3
  20. package/dist/programs/google/googleBrandAssets.js.map +1 -1
  21. package/dist/programs/linkedin/LinkedInAdsProgramDriver.d.ts.map +1 -1
  22. package/dist/programs/linkedin/LinkedInAdsProgramDriver.js +4 -3
  23. package/dist/programs/linkedin/LinkedInAdsProgramDriver.js.map +1 -1
  24. package/dist/programs/meta/MetaAdsClient.d.ts +34 -1
  25. package/dist/programs/meta/MetaAdsClient.d.ts.map +1 -1
  26. package/dist/programs/meta/MetaAdsClient.js +45 -4
  27. package/dist/programs/meta/MetaAdsClient.js.map +1 -1
  28. package/dist/programs/meta/MetaAdsProgramDriver.d.ts +13 -1
  29. package/dist/programs/meta/MetaAdsProgramDriver.d.ts.map +1 -1
  30. package/dist/programs/meta/MetaAdsProgramDriver.js +120 -15
  31. package/dist/programs/meta/MetaAdsProgramDriver.js.map +1 -1
  32. package/package.json +6 -6
@@ -25,7 +25,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
25
25
  */
26
26
  import { LogStatus, Metadata, RunView } from '@memberjunction/core';
27
27
  import { EscapeSQLString, RegisterClass } from '@memberjunction/global';
28
- import { ConvergeObservation } from '@mj-biz-apps/marketing-actions';
28
+ import { ConvergeObservation, checkBrandImageUrl } from '@mj-biz-apps/marketing-actions';
29
29
  import { BaseProgramTypeDriver, GOOGLE_ADS_TYPE_NAME, effectiveCreative, parseAdCampaignConfig, platformObjectName, stampUtm, elapsedReportingRange, } from '@mj-biz-apps/marketing-core';
30
30
  import { isGoogleRefused, resolveGoogleExecutionContext, GOOGLE_CREDENTIAL_TYPE } from './googleAdsExecutionContext.js';
31
31
  import { ensureGoogleBrandAssets, isAssetsRefused, uploadImageAssetFromUrl } from './googleBrandAssets.js';
@@ -51,6 +51,8 @@ let GoogleAdsProgramDriver = class GoogleAdsProgramDriver extends BaseProgramTyp
51
51
  const issues = [...parsed.issues];
52
52
  if (parsed.config) {
53
53
  issues.push(...this.validateGoogleCreative(parsed.config));
54
+ if (parsed.config.creativeImageUrl)
55
+ issues.push(...await this.validateCreativeImage(parsed.config.creativeImageUrl));
54
56
  }
55
57
  const user = this.contextUser;
56
58
  if (user) {
@@ -63,6 +65,56 @@ let GoogleAdsProgramDriver = class GoogleAdsProgramDriver extends BaseProgramTyp
63
65
  message: `${i.message} Lock will refuse until this is resolved.`,
64
66
  })));
65
67
  }
68
+ else if (parsed.config) {
69
+ issues.push(...await this.validateConversionChoice(parsed.config, ctx));
70
+ }
71
+ }
72
+ return issues;
73
+ }
74
+ /**
75
+ * The conversion is a platform OBJECT the levers point at by id (R5, D-34 — the same rule as LinkedIn's): a
76
+ * named action must exist on the customer, a disabled one is a warning, and a program that names none must say
77
+ * `optimizeFor: "clicks"` (D-31) — otherwise it would be measured by a number Google reports as whatever the
78
+ * account counts by default, which for a secondary action such as HubSpot's form-submit action is nothing.
79
+ */
80
+ async validateConversionChoice(config, ctx) {
81
+ const issues = [];
82
+ if (config.conversionId) {
83
+ try {
84
+ const action = await ctx.client.findConversionActionById(config.conversionId);
85
+ if (!action) {
86
+ const have = (await ctx.client.conversionActions()).map(c => `${c.id} "${c.name}"`).slice(0, 12).join(', ');
87
+ issues.push({
88
+ severity: 'error', code: 'GA_CONVERSION_UNKNOWN',
89
+ message: `No conversion action with id ${config.conversionId} on customer ${ctx.customerId}. The customer has: ${have || 'none'}.`,
90
+ });
91
+ }
92
+ else if (!action.enabled) {
93
+ issues.push({ severity: 'warning', code: 'GA_CONVERSION_DISABLED', message: `Conversion action "${action.name}" is paused in Google Ads — the campaign will be pointed at it but it will not count until it is enabled.` });
94
+ }
95
+ }
96
+ catch (e) {
97
+ issues.push({ severity: 'warning', code: 'GA_CONVERSION_LOOKUP_FAILED', message: `Could not read the customer's conversion actions: ${e instanceof Error ? e.message : String(e)}. Lock will look again.` });
98
+ }
99
+ }
100
+ else if (config.optimizeFor === 'clicks') {
101
+ issues.push({
102
+ severity: 'notice', code: 'GA_OPTIMISES_FOR_CLICKS',
103
+ message: 'No conversion — the campaign counts clicks and the program is measured by them (D-31). The metric must be a click count; a download, sign-up or form fill needs a conversion action named in the levers.',
104
+ });
105
+ }
106
+ else {
107
+ let names = '';
108
+ try {
109
+ names = (await ctx.client.conversionActions()).map(c => `"${c.name}"`).slice(0, 12).join(', ');
110
+ }
111
+ catch { /* the list is a courtesy */ }
112
+ issues.push({
113
+ severity: 'error', code: 'GA_NO_CONVERSION',
114
+ message: 'Choose what the program is measured by: name a conversion action from the Google Ads customer in the levers (conversionId) so the campaign is pointed at it and counts it, '
115
+ + 'or set optimizeFor: "clicks" and make the metric a click count. '
116
+ + `Customer ${ctx.customerId} has: ${names || 'no conversion actions yet — create one in Google Ads (or let HubSpot sync one), or optimise for clicks'}.`,
117
+ });
66
118
  }
67
119
  return issues;
68
120
  }
@@ -90,6 +142,36 @@ let GoogleAdsProgramDriver = class GoogleAdsProgramDriver extends BaseProgramTyp
90
142
  }
91
143
  return issues;
92
144
  }
145
+ /**
146
+ * The program's own image is held to Google's landscape slot at PROPOSE (KI-156): Google crops nothing and refuses a
147
+ * non-1.91:1 image at ad creation — after the campaign, budget, ad group and goal exist. The same check Settings
148
+ * runs on the brand's landscape image, so the refusal names the size and the requirement while the proposal is a draft.
149
+ */
150
+ async validateCreativeImage(url) {
151
+ let problem;
152
+ try {
153
+ problem = await checkBrandImageUrl('MarketingImageURL', url);
154
+ }
155
+ catch (e) {
156
+ return [{ severity: 'warning', code: 'GA_CREATIVE_IMAGE_UNREACHABLE', message: `The creative image could not be checked (${e instanceof Error ? e.message : String(e)}); lock will check it again and refuse if Google's landscape slot cannot use it.` }];
157
+ }
158
+ if (!problem)
159
+ return [];
160
+ // The checker reports a fetch failure as a sentence too; that is the platform's or the host's problem, not the image's.
161
+ if (/could not be fetched|returned HTTP/.test(problem)) {
162
+ return [{ severity: 'warning', code: 'GA_CREATIVE_IMAGE_UNREACHABLE', message: `The creative image could not be checked: ${problem} Lock will check it again and refuse if Google's landscape slot cannot use it.` }];
163
+ }
164
+ if (/aspect ratio|minimum is/.test(problem)) {
165
+ return [{
166
+ severity: 'error', code: 'GA_CREATIVE_IMAGE_RATIO',
167
+ message: `Google refuses the creative image: ${problem} Google crops nothing — supply a 1.91:1 image (1200×628 or larger, or generate/adapt it via the Marketing Creative Agent), or leave creativeImageUrl out so the brand's landscape image serves.`,
168
+ }];
169
+ }
170
+ return [{
171
+ severity: 'error', code: 'GA_CREATIVE_IMAGE_INVALID',
172
+ message: `Google refuses the creative image: ${problem}`,
173
+ }];
174
+ }
93
175
  async onLock(program) {
94
176
  const user = this.requireUser();
95
177
  const config = this.requireConfig(program);
@@ -100,6 +182,8 @@ let GoogleAdsProgramDriver = class GoogleAdsProgramDriver extends BaseProgramTyp
100
182
  }
101
183
  if (!program.id)
102
184
  throw new Error('Google Ads launch requires a saved program (no id).');
185
+ // The conversion (R5, D-34 parity): set by id → the campaign is pointed at a one-action goal for it and measured by it.
186
+ const conversion = await this.resolveConversionForLock(config, ctx);
103
187
  // Per-object reuse, NOT an early return: every step reuses its recorded ref or
104
188
  // creates fresh, so a lock that failed partway resumes exactly where it stopped.
105
189
  // (The first cut early-returned on an existing Campaign ref — which would have
@@ -126,7 +210,8 @@ let GoogleAdsProgramDriver = class GoogleAdsProgramDriver extends BaseProgramTyp
126
210
  ?? await ctx.client.createCampaignBudget(budgetName, config.dailyBudgetUsd);
127
211
  await this.saveRef(program.id, ctx.brandConnectionId, 'Other', budgetRef, { role: BUDGET_ROLE, dailyBudgetUsd: config.dailyBudgetUsd }, user);
128
212
  }
129
- let campaignRef = existing.find(r => r.ExternalKind === 'Campaign')?.ExternalURN ?? null;
213
+ let campaignRow = existing.find(r => r.ExternalKind === 'Campaign') ?? null;
214
+ let campaignRef = campaignRow?.ExternalURN ?? null;
130
215
  if (!campaignRef) {
131
216
  const campaignName = platformObjectName(code, 'campaign');
132
217
  // The connection decides whether lock means "running" or "ready": PAUSED by default,
@@ -138,13 +223,25 @@ let GoogleAdsProgramDriver = class GoogleAdsProgramDriver extends BaseProgramTyp
138
223
  budgetResourceName: budgetRef,
139
224
  status: campaignStatus,
140
225
  });
141
- await this.saveRef(program.id, ctx.brandConnectionId, 'Campaign', campaignRef, {
226
+ campaignRow = await this.saveRef(program.id, ctx.brandConnectionId, 'Campaign', campaignRef, {
142
227
  dailyBudgetUsd: config.dailyBudgetUsd,
143
228
  landingPageUrl: stampedUrl,
144
229
  audience: config.audience,
230
+ conversion: conversion ? { id: conversion.id, name: conversion.name, resourceName: conversion.resourceName } : null,
231
+ // D-31: what collectMetrics reads back as the program's number — frozen with the campaign, like the levers.
232
+ optimizeFor: conversion ? 'conversions' : 'clicks',
145
233
  status: campaignStatus,
146
234
  }, user);
147
235
  }
236
+ // Idempotent per step: the goal is created and the campaign pointed at it once, recorded on the campaign ref,
237
+ // so a lock that died between the campaign and this step finishes it on the next run.
238
+ if (conversion && campaignRow && this.stateOf(campaignRow)['conversionGoal'] == null) {
239
+ // The goal belongs to the ACTION (one per action list on the customer): shared by every program naming it,
240
+ // named after the action when this lock has to create it.
241
+ const goalRef = await ctx.client.ensureCustomConversionGoal(conversion.resourceName, `Marketing: ${conversion.name}`);
242
+ await ctx.client.setCampaignConversionGoal(campaignRef, goalRef);
243
+ await this.updateRefState(campaignRow, { conversionGoal: goalRef });
244
+ }
148
245
  // Display campaigns take user-list targeting ONLY at ad-group level — the ad group
149
246
  // is created here and the audience attached to IT (campaign-level 400s, spike-verified).
150
247
  let adGroupRef = existing.find(r => r.ExternalKind === 'Other' && this.stateRole(r) === ADGROUP_ROLE)?.ExternalURN ?? null;
@@ -177,15 +274,17 @@ let GoogleAdsProgramDriver = class GoogleAdsProgramDriver extends BaseProgramTyp
177
274
  adNote = `creative declared but no usable brand imagery — ad not created (${provisioned.reason}); the campaign runs ad-less until it is fixed and the program re-locks`;
178
275
  }
179
276
  else {
180
- // The program's own landscape image first (the creativeImageUrl lever, KI-117); the brand's is the
181
- // DEFAULT. Square and logo stay the brand's. An unusable program image degrades to the brand image.
277
+ // The program's own landscape image when the levers carry one (creativeImageUrl, KI-117), the brand's
278
+ // landscape image when they do not. Square and logo stay the brand's. NO substitution (Ian, 2026-10-28):
279
+ // the picture the founder approved on the card is the picture that serves — a program image Google
280
+ // would refuse fails the lock by name, it is never swapped for the brand image behind the approval.
182
281
  let marketingImageAsset = provisioned.assets.marketingImageAsset;
183
282
  if (creative.imageUrl) {
184
283
  try {
185
- marketingImageAsset = await uploadImageAssetFromUrl(ctx, creative.imageUrl, platformObjectName(code, 'campaign', 'creative image'), 'program creative image');
284
+ marketingImageAsset = await uploadImageAssetFromUrl(ctx, creative.imageUrl, platformObjectName(code, 'campaign', 'creative image'), 'program creative image', 'MarketingImageURL');
186
285
  }
187
286
  catch (e) {
188
- LogStatus(`GoogleAdsProgramDriver.onLock: ${code} program creative image not used (${e instanceof Error ? e.message : String(e)}) — falling back to the brand image`);
287
+ throw new Error(`Google Ads launch refused: the approved creative image cannot serve — ${e instanceof Error ? e.message : String(e)} Propose with a 1.91:1 image (Generate Ad Image cuts to 1200×628 automatically), or without creativeImageUrl so the brand's landscape image is what the card shows and the ad serves.`);
189
288
  }
190
289
  }
191
290
  const adRef = await ctx.client.createResponsiveDisplayAd({
@@ -207,7 +306,7 @@ let GoogleAdsProgramDriver = class GoogleAdsProgramDriver extends BaseProgramTyp
207
306
  }
208
307
  }
209
308
  LogStatus(`GoogleAdsProgramDriver.onLock: ${code} ${ctx.launchState === 'Active' ? 'launched' : 'created PAUSED (Settings → Connections decides when it serves)'} — ${config.audience} audience, `
210
- + `$${config.dailyBudgetUsd}/day, campaign ${campaignRef}, ad group ${adGroupRef}; ${adNote}. `
309
+ + `$${config.dailyBudgetUsd}/day${conversion ? ` optimising for "${conversion.name}"` : ', measured by clicks'}, campaign ${campaignRef}, ad group ${adGroupRef}; ${adNote}. `
211
310
  + `Stamped landing URL recorded on the campaign ref.`);
212
311
  }
213
312
  async collectMetrics(program, window) {
@@ -215,9 +314,15 @@ let GoogleAdsProgramDriver = class GoogleAdsProgramDriver extends BaseProgramTyp
215
314
  if (!user || !program.id)
216
315
  return null;
217
316
  const refs = await this.loadRefs(program.id, user);
218
- const campaigns = refs.filter(r => r.ExternalKind === 'Campaign').map(r => r.ExternalURN);
317
+ const campaignRefs = refs.filter(r => r.ExternalKind === 'Campaign');
318
+ const campaigns = campaignRefs.map(r => r.ExternalURN);
219
319
  if (campaigns.length === 0)
220
320
  return null;
321
+ // D-31: the observed metric is what the campaign was built to count — the named conversion action when one
322
+ // is set (its own figure, by id), clicks otherwise. Read from the ref, so the measurement stays with the
323
+ // campaign that actually ran.
324
+ const conversionRef = campaignRefs.map(r => this.stateOf(r)['conversion']).find((c) => c != null && typeof c === 'object' && typeof c.resourceName === 'string') ?? null;
325
+ const measuresConversions = conversionRef != null;
221
326
  const ctx = await this.resolveContext(program.brandId, user);
222
327
  if (isGoogleRefused(ctx)) {
223
328
  LogStatus(`GoogleAdsProgramDriver.collectMetrics: connection unavailable (${ctx.issues.map(i => i.code).join(', ')}) — no observation.`);
@@ -227,14 +332,15 @@ let GoogleAdsProgramDriver = class GoogleAdsProgramDriver extends BaseProgramTyp
227
332
  const range = elapsedReportingRange(window, new Date());
228
333
  if (!range)
229
334
  return null;
230
- const m = await ctx.client.campaignMetrics(campaigns, range.from, range.to);
335
+ const m = await ctx.client.campaignMetrics(campaigns, range.from, range.to, conversionRef ? conversionRef.resourceName : null);
231
336
  // All-zero is still an observation: the campaign exists, the connection answered, and
232
337
  // the platform reported nothing served. Returning null here made 'served nothing'
233
338
  // indistinguishable from 'no campaign / no connection' and Refresh Program Status
234
339
  // wrote no row at all for a paused or test-account campaign (KI-34, host rehearsal).
235
340
  return [{
236
341
  segmentLabel: null,
237
- observedMetric: m.conversions,
342
+ observedMetric: measuresConversions ? m.conversions : m.clicks,
343
+ measures: measuresConversions ? 'conversions' : 'clicks',
238
344
  conversionsCount: m.conversions,
239
345
  sampleSize: m.impressions,
240
346
  source: `google:searchStream:${ctx.customerId}`,
@@ -261,8 +367,8 @@ let GoogleAdsProgramDriver = class GoogleAdsProgramDriver extends BaseProgramTyp
261
367
  if (!top)
262
368
  return { refreshed: false, sprintsUpdated: 0, observationsWritten: 0, note: `GoogleAdsProgramDriver: no campaign ref or the connection is unavailable — nothing to observe.` };
263
369
  const saved = await ConvergeObservation({ programId: program.id, sprintId, attribution: top.attribution ?? 'Inferred', sourceRefPrefix: 'google:' }, { window, activityCount: top.sampleSize ?? 0, conversionsCount: top.conversionsCount, observedMetric: top.observedMetric, sourceRef: top.source,
264
- notes: `platform-reported (Inferred): conversions ${top.conversionsCount}, impressions ${top.sampleSize ?? 0}` }, user);
265
- const note = `GoogleAdsProgramDriver: ${top.conversionsCount} platform conversion(s) over ${top.sampleSize ?? 0} impressions — ${saved ? 'observation converged' : 'observation NOT saved'}.`;
370
+ notes: `platform-reported (Inferred): measured ${top.observedMetric} ${top.measures ?? 'conversions'}, conversions ${top.conversionsCount}, impressions ${top.sampleSize ?? 0}` }, user);
371
+ const note = `GoogleAdsProgramDriver: measured ${top.observedMetric} ${top.measures ?? 'conversions'}, ${top.conversionsCount} platform conversion(s) over ${top.sampleSize ?? 0} impressions — ${saved ? 'observation converged' : 'observation NOT saved'}.`;
266
372
  LogStatus(`GoogleAdsProgramDriver.refreshStatus: ${note}`);
267
373
  return { refreshed: true, sprintsUpdated: 0, observationsWritten: saved ? 1 : 0, note };
268
374
  }
@@ -289,6 +395,38 @@ let GoogleAdsProgramDriver = class GoogleAdsProgramDriver extends BaseProgramTyp
289
395
  return { stoodDown: true, note };
290
396
  }
291
397
  // ── refs (the driver's memory) ──────────────────────────────────────────
398
+ /** The conversion actions a brand's customer can point at by id (R5, D-34); Google offers no saved audiences here yet. */
399
+ async listAudienceOptions(brandId) {
400
+ const user = this.contextUser;
401
+ if (!user)
402
+ return null;
403
+ const ctx = await this.resolveContext(brandId, user);
404
+ if (isGoogleRefused(ctx))
405
+ return null;
406
+ const actions = await ctx.client.conversionActions();
407
+ return { audiences: [], conversions: actions.map(a => ({ id: a.id, name: a.name, enabled: a.enabled })) };
408
+ }
409
+ /** Lock's answer to D-31: the named action, or null when the levers chose clicks; anything else is refused. */
410
+ async resolveConversionForLock(config, ctx) {
411
+ if (config.conversionId) {
412
+ const action = await ctx.client.findConversionActionById(config.conversionId);
413
+ if (!action)
414
+ throw new Error(`Google Ads launch refused: no conversion action with id ${config.conversionId} on customer ${ctx.customerId}.`);
415
+ return action;
416
+ }
417
+ if (config.optimizeFor !== 'clicks') {
418
+ throw new Error('Google Ads launch refused: the levers name no conversion and do not choose optimizeFor: "clicks" — the program has nothing to be measured by (D-31).');
419
+ }
420
+ return null;
421
+ }
422
+ stateOf(ref) {
423
+ try {
424
+ return ref.StateJSON ? JSON.parse(ref.StateJSON) : {};
425
+ }
426
+ catch {
427
+ return {};
428
+ }
429
+ }
292
430
  async loadRefs(programId, user) {
293
431
  const res = await new RunView().RunView({
294
432
  EntityName: REFS_ENTITY,
@@ -303,8 +441,9 @@ let GoogleAdsProgramDriver = class GoogleAdsProgramDriver extends BaseProgramTyp
303
441
  }
304
442
  async saveRef(programId, brandConnectionId, kind, urn, state, user) {
305
443
  const existing = await this.loadRefs(programId, user);
306
- if (existing.some(r => r.ExternalKind === kind && r.ExternalURN === urn))
307
- return;
444
+ const found = existing.find(r => r.ExternalKind === kind && r.ExternalURN === urn);
445
+ if (found)
446
+ return found;
308
447
  const md = new Metadata();
309
448
  const ref = await md.GetEntityObject(REFS_ENTITY, user);
310
449
  ref.NewRecord();
@@ -317,6 +456,7 @@ let GoogleAdsProgramDriver = class GoogleAdsProgramDriver extends BaseProgramTyp
317
456
  throw new Error(`Could not record the ${kind} ref ${urn}: ${ref.LatestResult?.CompleteMessage ?? 'save failed'} `
318
457
  + '— the platform object EXISTS; re-running lock is idempotent once the ref saves.');
319
458
  }
459
+ return ref;
320
460
  }
321
461
  async updateRefState(ref, patch) {
322
462
  let state = {};
@@ -1 +1 @@
1
- {"version":3,"file":"GoogleAdsProgramDriver.js","sourceRoot":"","sources":["../../../src/programs/google/GoogleAdsProgramDriver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GoogleAdsProgramDriver.js","sourceRoot":"","sources":["../../../src/programs/google/GoogleAdsProgramDriver.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@
11
11
  * absence — the caller launches ad-less and says so, never guesses.
12
12
  */
13
13
  import { type UserInfo } from '@memberjunction/core';
14
+ import { type BrandImageField } from '@mj-biz-apps/marketing-core';
14
15
  import type { GoogleBrandAssets, GoogleExecutionReady } from './googleAdsExecutionContext.js';
15
16
  export interface EnsureAssetsReady {
16
17
  ok: true;
@@ -25,8 +26,11 @@ export type EnsureAssetsResult = EnsureAssetsReady | EnsureAssetsRefused;
25
26
  export declare function isAssetsRefused(r: EnsureAssetsResult): r is EnsureAssetsRefused;
26
27
  /**
27
28
  * One fetch-and-upload for every image source (brand or program, KI-117): public URL only (SSRF-guarded),
28
- * PNG/JPEG, 5MB, uploaded as a Google image asset named `assetName`. Throws with the reason, verbatim.
29
+ * PNG/JPEG, ≤5MB, uploaded as a Google image asset named `assetName`. With `spec`, the bytes are measured first and a
30
+ * picture Google's slot would refuse (ratio, minimum size) throws a named error BEFORE the upload so the driver
31
+ * refuses the lock with the exact dimension failure instead of dying at ad creation with a bare ASPECT_RATIO_NOT_ALLOWED
32
+ * (KI-156). Brand images pass no spec: Settings already held them to it.
29
33
  */
30
- export declare function uploadImageAssetFromUrl(ctx: GoogleExecutionReady, url: string, assetName: string, label: string): Promise<string>;
34
+ export declare function uploadImageAssetFromUrl(ctx: GoogleExecutionReady, url: string, assetName: string, label: string, spec?: BrandImageField): Promise<string>;
31
35
  export declare function ensureGoogleBrandAssets(ctx: GoogleExecutionReady, brandId: string, contextUser: UserInfo): Promise<EnsureAssetsResult>;
32
36
  //# sourceMappingURL=googleBrandAssets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"googleBrandAssets.d.ts","sourceRoot":"","sources":["../../../src/programs/google/googleBrandAssets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAuB,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAM1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAK9F,MAAM,WAAW,iBAAiB;IAAG,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE;AAC1E,MAAM,WAAW,mBAAmB;IAAG,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAClE,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;AAEzE,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,CAAC,EAAE,kBAAkB,GAAG,CAAC,IAAI,mBAAmB,CAE/E;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUvI;AAED,wBAAsB,uBAAuB,CACzC,GAAG,EAAE,oBAAoB,EACzB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,QAAQ,GACtB,OAAO,CAAC,kBAAkB,CAAC,CA8C7B"}
1
+ {"version":3,"file":"googleBrandAssets.d.ts","sourceRoot":"","sources":["../../../src/programs/google/googleBrandAssets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAuB,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAA4D,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAK7H,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAK9F,MAAM,WAAW,iBAAiB;IAAG,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE;AAC1E,MAAM,WAAW,mBAAmB;IAAG,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAClE,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;AAEzE,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,CAAC,EAAE,kBAAkB,GAAG,CAAC,IAAI,mBAAmB,CAE/E;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAe/J;AAED,wBAAsB,uBAAuB,CACzC,GAAG,EAAE,oBAAoB,EACzB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,QAAQ,GACtB,OAAO,CAAC,kBAAkB,CAAC,CA8C7B"}
@@ -11,7 +11,7 @@
11
11
  * absence — the caller launches ad-less and says so, never guesses.
12
12
  */
13
13
  import { LogStatus, Metadata } from '@memberjunction/core';
14
- import { assertPublicHttpUrl } from '@mj-biz-apps/marketing-core';
14
+ import { assertPublicHttpUrl, imageDimensions, validateBrandImage } from '@mj-biz-apps/marketing-core';
15
15
  const MAX_IMAGE_BYTES = 5 * 1024 * 1024;
16
16
  const ALLOWED_TYPES = new Set(['image/png', 'image/jpeg']);
17
17
  /** Explicit guard — this package compiles without strict, where `!r.ok` does not narrow. */
@@ -20,9 +20,12 @@ export function isAssetsRefused(r) {
20
20
  }
21
21
  /**
22
22
  * One fetch-and-upload for every image source (brand or program, KI-117): public URL only (SSRF-guarded),
23
- * PNG/JPEG, 5MB, uploaded as a Google image asset named `assetName`. Throws with the reason, verbatim.
23
+ * PNG/JPEG, ≤5MB, uploaded as a Google image asset named `assetName`. With `spec`, the bytes are measured first and a
24
+ * picture Google's slot would refuse (ratio, minimum size) throws a named error BEFORE the upload so the driver
25
+ * refuses the lock with the exact dimension failure instead of dying at ad creation with a bare ASPECT_RATIO_NOT_ALLOWED
26
+ * (KI-156). Brand images pass no spec: Settings already held them to it.
24
27
  */
25
- export async function uploadImageAssetFromUrl(ctx, url, assetName, label) {
28
+ export async function uploadImageAssetFromUrl(ctx, url, assetName, label, spec) {
26
29
  const safety = assertPublicHttpUrl(url);
27
30
  if (!safety.ok)
28
31
  throw new Error(`${label} URL refused: ${safety.reason}`);
@@ -35,6 +38,12 @@ export async function uploadImageAssetFromUrl(ctx, url, assetName, label) {
35
38
  const bytes = Buffer.from(await res.arrayBuffer());
36
39
  if (bytes.length > MAX_IMAGE_BYTES)
37
40
  throw new Error(`${label} image exceeds 5MB`);
41
+ if (spec) {
42
+ const dims = imageDimensions(new Uint8Array(bytes));
43
+ const problem = dims ? validateBrandImage(spec, dims) : 'the file does not parse as a PNG or JPEG image.';
44
+ if (problem)
45
+ throw new Error(`${label} refused by Google's ${spec === 'MarketingImageURL' ? 'landscape' : 'square'} slot: ${problem}`);
46
+ }
38
47
  return ctx.client.uploadImageAsset(assetName, bytes.toString('base64'));
39
48
  }
40
49
  export async function ensureGoogleBrandAssets(ctx, brandId, contextUser) {
@@ -1 +1 @@
1
- {"version":3,"file":"googleBrandAssets.js","sourceRoot":"","sources":["../../../src/programs/google/googleBrandAssets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"googleBrandAssets.js","sourceRoot":"","sources":["../../../src/programs/google/googleBrandAssets.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LinkedInAdsProgramDriver.d.ts","sourceRoot":"","sources":["../../../src/programs/linkedin/LinkedInAdsProgramDriver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAA0C,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG7F,OAAO,EACH,qBAAqB,EAKrB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAOsC,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAKnJ,OAAO,EAGH,KAAK,uBAAuB,EAA4B,MAAM,+BAA+B,CAAC;AAIlG,qBACa,wBAAyB,SAAQ,qBAAqB;IAS3D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IATnC,SAAgB,QAAQ,kBAA0B;IAClD,yFAAyF;IACzF,SAAgB,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAG7D;gBAGmB,WAAW,CAAC,EAAE,QAAQ,EACtB,cAAc,GAAE,uBAAyD;IAKjF,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAsB1F;;;;;OAKG;YACW,6BAA6B;IAiE9B,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmH7D;;;;;;;OAOG;YACW,eAAe;IAyE7B;;;;;OAKG;YACW,gBAAgB;IAM9B,sGAAsG;YACxF,kBAAkB;IAYnB,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC;IAoC3H;;;;;OAKG;IACmB,aAAa,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAoB/G,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkD7G,sGAAsG;IAChF,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAIhE,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAIzE,UAAU;IAmBxB,0GAA0G;IACpF,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;IAYnG,6FAA6F;IACvE,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAejG;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAqBtB;;;;;;OAMG;YACW,cAAc;IAiB5B;;;;OAIG;IACmB,aAAa,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAyBhG,QAAQ;YAaR,OAAO;IAqBrB,sGAAsG;IACtG,OAAO,CAAC,OAAO;YAID,cAAc;IAW5B,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,WAAW;CAItB;AAED,wBAAgB,4BAA4B,SAAK;AAEjD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,gBAAgB,GAAG,qBAAqB,EAAE,CAa1F;AAED,qHAAqH;AACrH,wBACS,sBAAsB,IAAI,MAAM,CAGxC"}
1
+ {"version":3,"file":"LinkedInAdsProgramDriver.d.ts","sourceRoot":"","sources":["../../../src/programs/linkedin/LinkedInAdsProgramDriver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAA0C,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG7F,OAAO,EACH,qBAAqB,EAKrB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAOsC,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAKnJ,OAAO,EAGH,KAAK,uBAAuB,EAA4B,MAAM,+BAA+B,CAAC;AAIlG,qBACa,wBAAyB,SAAQ,qBAAqB;IAS3D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IATnC,SAAgB,QAAQ,kBAA0B;IAClD,yFAAyF;IACzF,SAAgB,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAG7D;gBAGmB,WAAW,CAAC,EAAE,QAAQ,EACtB,cAAc,GAAE,uBAAyD;IAKjF,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAsB1F;;;;;OAKG;YACW,6BAA6B;IAiE9B,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmH7D;;;;;;;OAOG;YACW,eAAe;IA0E7B;;;;;OAKG;YACW,gBAAgB;IAM9B,sGAAsG;YACxF,kBAAkB;IAYnB,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC;IAoC3H;;;;;OAKG;IACmB,aAAa,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAoB/G,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkD7G,sGAAsG;IAChF,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAIhE,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAIzE,UAAU;IAmBxB,0GAA0G;IACpF,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;IAYnG,6FAA6F;IACvE,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAejG;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAqBtB;;;;;;OAMG;YACW,cAAc;IAiB5B;;;;OAIG;IACmB,aAAa,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAyBhG,QAAQ;YAaR,OAAO;IAqBrB,sGAAsG;IACtG,OAAO,CAAC,OAAO;YAID,cAAc;IAW5B,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,WAAW;CAItB;AAED,wBAAgB,4BAA4B,SAAK;AAEjD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,gBAAgB,GAAG,qBAAqB,EAAE,CAa1F;AAED,qHAAqH;AACrH,wBACS,sBAAsB,IAAI,MAAM,CAGxC"}
@@ -286,8 +286,9 @@ let LinkedInAdsProgramDriver = class LinkedInAdsProgramDriver extends BaseProgra
286
286
  const attached = new Set(existing.filter(r => r.ExternalKind === 'Creative').map(r => Number(this.stateOf(r)['variant'] ?? 1)));
287
287
  if (variants.every((_, i) => attached.has(i + 1)))
288
288
  return `${variants.length} ad(s) already attached (idempotent)`;
289
- // The image once, shared by every variant: the program's own (creativeImageUrl, KI-117) first; the brand's
290
- // landscape image is the DEFAULT, not the only option. An unusable program image degrades to the brand image.
289
+ // The image once, shared by every variant: the program's own (creativeImageUrl, KI-117) when the levers carry
290
+ // one, the brand's landscape image when they do not. NO substitution (Ian, 2026-10-28): the picture approved
291
+ // on the card is the picture that serves — an unusable program image refuses the lock by name.
291
292
  let imageUrn = null;
292
293
  let imageNote = 'article ad (no brand marketing image)';
293
294
  if (creative.imageUrl) {
@@ -296,7 +297,7 @@ let LinkedInAdsProgramDriver = class LinkedInAdsProgramDriver extends BaseProgra
296
297
  imageNote = 'single-image ad with the program\'s own creative image';
297
298
  }
298
299
  catch (e) {
299
- LogStatus(`LinkedInAdsProgramDriver.onLock: ${code} program creative image not used (${e instanceof Error ? e.message : String(e)}) — falling back to the brand image.`);
300
+ throw new Error(`LinkedIn Ads launch refused: the approved creative image cannot serve — ${e instanceof Error ? e.message : String(e)}`);
300
301
  }
301
302
  }
302
303
  if (!imageUrn) {