@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.
- package/dist/__tests__/adConversionParity.test.d.ts +2 -0
- package/dist/__tests__/adConversionParity.test.d.ts.map +1 -0
- package/dist/__tests__/adConversionParity.test.js +127 -0
- package/dist/__tests__/adConversionParity.test.js.map +1 -0
- package/dist/__tests__/googleCreativeImage.test.d.ts +2 -0
- package/dist/__tests__/googleCreativeImage.test.d.ts.map +1 -0
- package/dist/__tests__/googleCreativeImage.test.js +53 -0
- package/dist/__tests__/googleCreativeImage.test.js.map +1 -0
- package/dist/programs/google/GoogleAdsClient.d.ts +38 -3
- package/dist/programs/google/GoogleAdsClient.d.ts.map +1 -1
- package/dist/programs/google/GoogleAdsClient.js +96 -14
- package/dist/programs/google/GoogleAdsClient.js.map +1 -1
- package/dist/programs/google/GoogleAdsProgramDriver.d.ts +19 -1
- package/dist/programs/google/GoogleAdsProgramDriver.d.ts.map +1 -1
- package/dist/programs/google/GoogleAdsProgramDriver.js +155 -15
- package/dist/programs/google/GoogleAdsProgramDriver.js.map +1 -1
- package/dist/programs/google/googleBrandAssets.d.ts +6 -2
- package/dist/programs/google/googleBrandAssets.d.ts.map +1 -1
- package/dist/programs/google/googleBrandAssets.js +12 -3
- package/dist/programs/google/googleBrandAssets.js.map +1 -1
- package/dist/programs/linkedin/LinkedInAdsProgramDriver.d.ts.map +1 -1
- package/dist/programs/linkedin/LinkedInAdsProgramDriver.js +4 -3
- package/dist/programs/linkedin/LinkedInAdsProgramDriver.js.map +1 -1
- package/dist/programs/meta/MetaAdsClient.d.ts +34 -1
- package/dist/programs/meta/MetaAdsClient.d.ts.map +1 -1
- package/dist/programs/meta/MetaAdsClient.js +45 -4
- package/dist/programs/meta/MetaAdsClient.js.map +1 -1
- package/dist/programs/meta/MetaAdsProgramDriver.d.ts +13 -1
- package/dist/programs/meta/MetaAdsProgramDriver.d.ts.map +1 -1
- package/dist/programs/meta/MetaAdsProgramDriver.js +120 -15
- package/dist/programs/meta/MetaAdsProgramDriver.js.map +1 -1
- 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
|
|
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
|
|
181
|
-
//
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
307
|
-
|
|
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`.
|
|
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;
|
|
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`.
|
|
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":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAiB,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;
|
|
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;
|
|
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)
|
|
290
|
-
// landscape 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
|
-
|
|
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) {
|