@koda-sl/baker-cli 0.26.0 → 0.27.1-dev.bcbc31f8
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/README.md +146 -0
- package/dist/cli.js +1 -1
- package/dist/commands/actions/create.d.ts.map +1 -1
- package/dist/commands/actions/create.js +10 -2
- package/dist/commands/actions/create.js.map +1 -1
- package/dist/commands/ads/index.d.ts.map +1 -1
- package/dist/commands/ads/index.js +7 -3
- package/dist/commands/ads/index.js.map +1 -1
- package/dist/commands/ads/linkedin/account.d.ts +20 -0
- package/dist/commands/ads/linkedin/account.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/account.js +39 -0
- package/dist/commands/ads/linkedin/account.js.map +1 -0
- package/dist/commands/ads/linkedin/accounts.d.ts +20 -0
- package/dist/commands/ads/linkedin/accounts.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/accounts.js +56 -0
- package/dist/commands/ads/linkedin/accounts.js.map +1 -0
- package/dist/commands/ads/linkedin/analytics.d.ts +84 -0
- package/dist/commands/ads/linkedin/analytics.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/analytics.js +249 -0
- package/dist/commands/ads/linkedin/analytics.js.map +1 -0
- package/dist/commands/ads/linkedin/audience-size.d.ts +28 -0
- package/dist/commands/ads/linkedin/audience-size.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/audience-size.js +75 -0
- package/dist/commands/ads/linkedin/audience-size.js.map +1 -0
- package/dist/commands/ads/linkedin/audit.d.ts +35 -0
- package/dist/commands/ads/linkedin/audit.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/audit.js +136 -0
- package/dist/commands/ads/linkedin/audit.js.map +1 -0
- package/dist/commands/ads/linkedin/bid-pricing.d.ts +38 -0
- package/dist/commands/ads/linkedin/bid-pricing.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/bid-pricing.js +76 -0
- package/dist/commands/ads/linkedin/bid-pricing.js.map +1 -0
- package/dist/commands/ads/linkedin/campaign-groups.d.ts +32 -0
- package/dist/commands/ads/linkedin/campaign-groups.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/campaign-groups.js +50 -0
- package/dist/commands/ads/linkedin/campaign-groups.js.map +1 -0
- package/dist/commands/ads/linkedin/campaigns.d.ts +36 -0
- package/dist/commands/ads/linkedin/campaigns.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/campaigns.js +57 -0
- package/dist/commands/ads/linkedin/campaigns.js.map +1 -0
- package/dist/commands/ads/linkedin/conversation.d.ts +36 -0
- package/dist/commands/ads/linkedin/conversation.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/conversation.js +77 -0
- package/dist/commands/ads/linkedin/conversation.js.map +1 -0
- package/dist/commands/ads/linkedin/conversions.d.ts +2 -0
- package/dist/commands/ads/linkedin/conversions.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/conversions.js +102 -0
- package/dist/commands/ads/linkedin/conversions.js.map +1 -0
- package/dist/commands/ads/linkedin/creatives.d.ts +36 -0
- package/dist/commands/ads/linkedin/creatives.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/creatives.js +57 -0
- package/dist/commands/ads/linkedin/creatives.js.map +1 -0
- package/dist/commands/ads/linkedin/demographics.d.ts +40 -0
- package/dist/commands/ads/linkedin/demographics.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/demographics.js +117 -0
- package/dist/commands/ads/linkedin/demographics.js.map +1 -0
- package/dist/commands/ads/linkedin/facets.d.ts +2 -0
- package/dist/commands/ads/linkedin/facets.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/facets.js +95 -0
- package/dist/commands/ads/linkedin/facets.js.map +1 -0
- package/dist/commands/ads/linkedin/forecast.d.ts +50 -0
- package/dist/commands/ads/linkedin/forecast.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/forecast.js +83 -0
- package/dist/commands/ads/linkedin/forecast.js.map +1 -0
- package/dist/commands/ads/linkedin/index.d.ts +19 -0
- package/dist/commands/ads/linkedin/index.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/index.js +83 -0
- package/dist/commands/ads/linkedin/index.js.map +1 -0
- package/dist/commands/ads/linkedin/leads.d.ts +40 -0
- package/dist/commands/ads/linkedin/leads.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/leads.js +75 -0
- package/dist/commands/ads/linkedin/leads.js.map +1 -0
- package/dist/commands/ads/linkedin/presets.d.ts +40 -0
- package/dist/commands/ads/linkedin/presets.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/presets.js +193 -0
- package/dist/commands/ads/linkedin/presets.js.map +1 -0
- package/dist/commands/ads/linkedin/presets.test.d.ts +2 -0
- package/dist/commands/ads/linkedin/presets.test.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/presets.test.js +98 -0
- package/dist/commands/ads/linkedin/presets.test.js.map +1 -0
- package/dist/commands/ads/linkedin/schemas.d.ts +2 -0
- package/dist/commands/ads/linkedin/schemas.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/schemas.js +300 -0
- package/dist/commands/ads/linkedin/schemas.js.map +1 -0
- package/dist/commands/ads/linkedin/shared.d.ts +17 -0
- package/dist/commands/ads/linkedin/shared.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/shared.js +116 -0
- package/dist/commands/ads/linkedin/shared.js.map +1 -0
- package/dist/commands/ads/linkedin/top-companies.d.ts +44 -0
- package/dist/commands/ads/linkedin/top-companies.d.ts.map +1 -0
- package/dist/commands/ads/linkedin/top-companies.js +86 -0
- package/dist/commands/ads/linkedin/top-companies.js.map +1 -0
- package/dist/env.d.ts +1 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +4 -0
- package/dist/env.js.map +1 -1
- package/dist/error-handler.d.ts +1 -1
- package/dist/error-handler.d.ts.map +1 -1
- package/dist/error-handler.js +3 -0
- package/dist/error-handler.js.map +1 -1
- package/dist/output.d.ts +1 -0
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
import { apiGet } from "../../../client.js";
|
|
3
|
+
import { writeAdsJson, writeAdsOutput } from "../output.js";
|
|
4
|
+
import { csvOrJson, handleLinkedinError, resolveAccountIdArg } from "./shared.js";
|
|
5
|
+
const DAY_MS = 86_400_000;
|
|
6
|
+
export const leadsCommand = defineCommand({
|
|
7
|
+
meta: {
|
|
8
|
+
name: "leads",
|
|
9
|
+
description: `List Lead Gen Form responses (playbook §07).
|
|
10
|
+
|
|
11
|
+
LinkedIn retains LGF responses for 90 days only — sync to your CRM via this
|
|
12
|
+
endpoint or you'll lose them.
|
|
13
|
+
|
|
14
|
+
Examples:
|
|
15
|
+
baker ads linkedin leads --account-id 503001492
|
|
16
|
+
baker ads linkedin leads --account-id 503001492 --campaign-id 1234
|
|
17
|
+
baker ads linkedin leads --account-id 503001492 --form-id 5678 --since-days 7
|
|
18
|
+
baker ads linkedin leads --account-id 503001492 --output csv`,
|
|
19
|
+
},
|
|
20
|
+
args: {
|
|
21
|
+
"account-id": { type: "string", description: "Numeric account ID or urn:li:sponsoredAccount:N" },
|
|
22
|
+
"account-urn": { type: "string", description: "Alias for --account-id" },
|
|
23
|
+
"form-id": { type: "string", description: "Filter by Lead Gen Form ID" },
|
|
24
|
+
"campaign-id": { type: "string", description: "Filter by campaign ID" },
|
|
25
|
+
"since-days": { type: "string", description: "Only responses submitted in the last N days" },
|
|
26
|
+
"since-ms": {
|
|
27
|
+
type: "string",
|
|
28
|
+
description: "Only responses submitted at or after this epoch ms (alternative to --since-days)",
|
|
29
|
+
},
|
|
30
|
+
limit: { type: "string", description: "Max rows (default: 500)" },
|
|
31
|
+
"skip-cache": { type: "boolean", description: "Bypass server-side cache" },
|
|
32
|
+
output: { type: "string", description: "json|csv|jsonl|md", default: "json" },
|
|
33
|
+
},
|
|
34
|
+
run: async ({ args }) => {
|
|
35
|
+
const accountId = resolveAccountIdArg(args);
|
|
36
|
+
try {
|
|
37
|
+
const params = { "account-id": accountId };
|
|
38
|
+
if (args["form-id"])
|
|
39
|
+
params["form-id"] = String(args["form-id"]);
|
|
40
|
+
if (args["campaign-id"])
|
|
41
|
+
params["campaign-id"] = String(args["campaign-id"]);
|
|
42
|
+
const sinceDays = args["since-days"] ? Number(args["since-days"]) : undefined;
|
|
43
|
+
const sinceMs = args["since-ms"]
|
|
44
|
+
? Number(args["since-ms"])
|
|
45
|
+
: sinceDays
|
|
46
|
+
? Date.now() - sinceDays * DAY_MS
|
|
47
|
+
: undefined;
|
|
48
|
+
if (sinceMs)
|
|
49
|
+
params["since-ms"] = String(sinceMs);
|
|
50
|
+
if (args.limit)
|
|
51
|
+
params.limit = String(args.limit);
|
|
52
|
+
if (args["skip-cache"])
|
|
53
|
+
params["skip-cache"] = "true";
|
|
54
|
+
const data = await apiGet("/api/ads/linkedin/leads", params);
|
|
55
|
+
const fmt = csvOrJson(args);
|
|
56
|
+
if (fmt !== "json") {
|
|
57
|
+
// Flatten the answers array for CSV/MD output.
|
|
58
|
+
const flat = data.map((r) => ({
|
|
59
|
+
id: r.id,
|
|
60
|
+
formId: r.formId,
|
|
61
|
+
campaignUrn: r.campaignUrn,
|
|
62
|
+
submittedAt: r.submittedAt ? new Date(r.submittedAt).toISOString() : "",
|
|
63
|
+
answers: (r.answers ?? []).map((a) => `${a.question}: ${a.answer}`).join(" | "),
|
|
64
|
+
}));
|
|
65
|
+
writeAdsOutput(flat, fmt);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
writeAdsJson({ ok: true, data });
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
handleLinkedinError(err);
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=leads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leads.js","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/leads.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LinkedIn analytics field bundles. Three-axis design:
|
|
3
|
+
* --intent → metric bundle (baseline | revenue | funnel | engagement | video |
|
|
4
|
+
* lead-gen | inmail | document | ranking | identity)
|
|
5
|
+
* --level → object scope (account | campaign-group | campaign | creative)
|
|
6
|
+
* --pivot → demographic / firmographic breakdown
|
|
7
|
+
* (none | job-title | company | industry | seniority | function |
|
|
8
|
+
* company-size | country | region | device | placement | …)
|
|
9
|
+
*
|
|
10
|
+
* Backend recomputes the field list itself (single source of truth in
|
|
11
|
+
* `packages/backend/convex/ads/linkedin/constants.ts`). The CLI keeps a
|
|
12
|
+
* mirror copy so `--list-intents` / `--list-pivots` work offline.
|
|
13
|
+
*/
|
|
14
|
+
export type IntentName = "baseline" | "revenue" | "funnel" | "engagement" | "video" | "lead-gen" | "inmail" | "document" | "ranking" | "identity";
|
|
15
|
+
export type LevelName = "account" | "campaign-group" | "campaign" | "creative";
|
|
16
|
+
export type PivotSlug = "none" | "campaign" | "campaign-group" | "creative" | "company" | "account" | "conversion" | "job-title" | "job-function" | "seniority" | "industry" | "company-size" | "country" | "region" | "device" | "placement" | "serving-location" | "card-index" | "objective" | "conversation-node" | "conversation-node-button";
|
|
17
|
+
interface IntentDefinition {
|
|
18
|
+
name: IntentName;
|
|
19
|
+
description: string;
|
|
20
|
+
metrics: string[];
|
|
21
|
+
/** Derived (CLI-side) metrics this bundle materializes. Documentation only. */
|
|
22
|
+
derived?: string[];
|
|
23
|
+
}
|
|
24
|
+
export declare const INTENTS: Record<IntentName, IntentDefinition>;
|
|
25
|
+
/** Pivots that LinkedIn rejects with DAILY granularity — CLI auto-forces ALL. */
|
|
26
|
+
export declare const MEMBER_PIVOTS: Set<PivotSlug>;
|
|
27
|
+
export declare const ALL_PIVOTS: PivotSlug[];
|
|
28
|
+
export declare const ALL_LEVELS: LevelName[];
|
|
29
|
+
export declare function getIntent(name: string): IntentDefinition | undefined;
|
|
30
|
+
export declare function listIntents(): IntentDefinition[];
|
|
31
|
+
export declare function isPivot(slug: string): slug is PivotSlug;
|
|
32
|
+
export declare function isLevel(slug: string): slug is LevelName;
|
|
33
|
+
/**
|
|
34
|
+
* Compose final field list — intent bundle + identity columns + pivotValues +
|
|
35
|
+
* dateRange. Backend re-validates and recomposes; this is just for offline
|
|
36
|
+
* preview (`baker ads linkedin analytics --list-intents`).
|
|
37
|
+
*/
|
|
38
|
+
export declare function composeFields(intent: IntentName, _level: LevelName, metricsOverride?: string[]): string[];
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=presets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/presets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,SAAS,GACT,QAAQ,GACR,YAAY,GACZ,OAAO,GACP,UAAU,GACV,QAAQ,GACR,UAAU,GACV,SAAS,GACT,UAAU,CAAC;AAEf,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,gBAAgB,GAAG,UAAU,GAAG,UAAU,CAAC;AAE/E,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,UAAU,GACV,gBAAgB,GAChB,UAAU,GACV,SAAS,GACT,SAAS,GACT,YAAY,GACZ,WAAW,GACX,cAAc,GACd,WAAW,GACX,UAAU,GACV,cAAc,GACd,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,kBAAkB,GAClB,YAAY,GACZ,WAAW,GACX,mBAAmB,GACnB,0BAA0B,CAAC;AAE/B,UAAU,gBAAgB;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAmHxD,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,aAAa,gBASxB,CAAC;AAEH,eAAO,MAAM,UAAU,EAAE,SAAS,EAsBjC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,SAAS,EAA0D,CAAC;AAE7F,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEpE;AAED,wBAAgB,WAAW,IAAI,gBAAgB,EAAE,CAEhD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,SAAS,CAEvD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,SAAS,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAWzG"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LinkedIn analytics field bundles. Three-axis design:
|
|
3
|
+
* --intent → metric bundle (baseline | revenue | funnel | engagement | video |
|
|
4
|
+
* lead-gen | inmail | document | ranking | identity)
|
|
5
|
+
* --level → object scope (account | campaign-group | campaign | creative)
|
|
6
|
+
* --pivot → demographic / firmographic breakdown
|
|
7
|
+
* (none | job-title | company | industry | seniority | function |
|
|
8
|
+
* company-size | country | region | device | placement | …)
|
|
9
|
+
*
|
|
10
|
+
* Backend recomputes the field list itself (single source of truth in
|
|
11
|
+
* `packages/backend/convex/ads/linkedin/constants.ts`). The CLI keeps a
|
|
12
|
+
* mirror copy so `--list-intents` / `--list-pivots` work offline.
|
|
13
|
+
*/
|
|
14
|
+
export const INTENTS = {
|
|
15
|
+
baseline: {
|
|
16
|
+
name: "baseline",
|
|
17
|
+
description: "Spend, impressions, clicks. The default 'how is delivery?' question. Derives CTR, CPC, CPM.",
|
|
18
|
+
metrics: ["impressions", "clicks", "costInUsd", "costInLocalCurrency", "approximateUniqueImpressions"],
|
|
19
|
+
derived: ["ctr", "cpc", "cpm", "frequency"],
|
|
20
|
+
},
|
|
21
|
+
revenue: {
|
|
22
|
+
name: "revenue",
|
|
23
|
+
description: "Spend, conversions, conversion value. 'How much money are we making?'",
|
|
24
|
+
metrics: [
|
|
25
|
+
"costInUsd",
|
|
26
|
+
"externalWebsiteConversions",
|
|
27
|
+
"externalWebsitePostClickConversions",
|
|
28
|
+
"externalWebsitePostViewConversions",
|
|
29
|
+
"conversionValueInLocalCurrency",
|
|
30
|
+
"oneClickLeads",
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
funnel: {
|
|
34
|
+
name: "funnel",
|
|
35
|
+
description: "Impression → click → landing → form open → lead → conversion. 'Where do users drop off?'",
|
|
36
|
+
metrics: [
|
|
37
|
+
"impressions",
|
|
38
|
+
"clicks",
|
|
39
|
+
"landingPageClicks",
|
|
40
|
+
"oneClickLeadFormOpens",
|
|
41
|
+
"oneClickLeads",
|
|
42
|
+
"externalWebsiteConversions",
|
|
43
|
+
"costInUsd",
|
|
44
|
+
],
|
|
45
|
+
derived: ["ctr", "leadCompletionRate"],
|
|
46
|
+
},
|
|
47
|
+
engagement: {
|
|
48
|
+
name: "engagement",
|
|
49
|
+
description: "Likes, comments, shares, follows + viral spillover. TLA-aware — measures organic reach effect.",
|
|
50
|
+
metrics: [
|
|
51
|
+
"impressions",
|
|
52
|
+
"likes",
|
|
53
|
+
"comments",
|
|
54
|
+
"shares",
|
|
55
|
+
"reactions",
|
|
56
|
+
"follows",
|
|
57
|
+
"totalEngagements",
|
|
58
|
+
"viralImpressions",
|
|
59
|
+
"viralLikes",
|
|
60
|
+
"viralShares",
|
|
61
|
+
"viralOneClickLeads",
|
|
62
|
+
"costInUsd",
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
video: {
|
|
66
|
+
name: "video",
|
|
67
|
+
description: "Video watch quartiles + cost. 'How are video creatives holding attention?'",
|
|
68
|
+
metrics: [
|
|
69
|
+
"videoStarts",
|
|
70
|
+
"videoFirstQuartileCompletions",
|
|
71
|
+
"videoMidpointCompletions",
|
|
72
|
+
"videoThirdQuartileCompletions",
|
|
73
|
+
"videoCompletions",
|
|
74
|
+
"videoViews",
|
|
75
|
+
"fullScreenPlays",
|
|
76
|
+
"costInUsd",
|
|
77
|
+
"impressions",
|
|
78
|
+
],
|
|
79
|
+
},
|
|
80
|
+
"lead-gen": {
|
|
81
|
+
name: "lead-gen",
|
|
82
|
+
description: "Lead Gen Form opens + completions. CLI derives form-completion-rate.",
|
|
83
|
+
metrics: [
|
|
84
|
+
"oneClickLeadFormOpens",
|
|
85
|
+
"oneClickLeads",
|
|
86
|
+
"viralOneClickLeads",
|
|
87
|
+
"viralOneClickLeadFormOpens",
|
|
88
|
+
"costInUsd",
|
|
89
|
+
],
|
|
90
|
+
derived: ["leadCompletionRate"],
|
|
91
|
+
},
|
|
92
|
+
inmail: {
|
|
93
|
+
name: "inmail",
|
|
94
|
+
description: "Sponsored Message / Conversation Ads — sends, opens, clicks, lead-gen taps.",
|
|
95
|
+
metrics: [
|
|
96
|
+
"sends",
|
|
97
|
+
"opens",
|
|
98
|
+
"clicks",
|
|
99
|
+
"costInUsd",
|
|
100
|
+
"leadGenerationMailContactInfoShares",
|
|
101
|
+
"leadGenerationMailInterestedClicks",
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
document: {
|
|
105
|
+
name: "document",
|
|
106
|
+
description: "Document Ads — quartile read-through, completion, downloads.",
|
|
107
|
+
metrics: [
|
|
108
|
+
"documentFirstQuartileCompletions",
|
|
109
|
+
"documentMidpointCompletions",
|
|
110
|
+
"documentThirdQuartileCompletions",
|
|
111
|
+
"documentCompletions",
|
|
112
|
+
"downloadClicks",
|
|
113
|
+
"costInUsd",
|
|
114
|
+
"impressions",
|
|
115
|
+
],
|
|
116
|
+
},
|
|
117
|
+
ranking: {
|
|
118
|
+
name: "ranking",
|
|
119
|
+
description: "Frequency + reach metrics for fatigue detection. CLI derives frequency = impressions/uniqueImpressions.",
|
|
120
|
+
metrics: ["impressions", "clicks", "costInUsd", "approximateUniqueImpressions"],
|
|
121
|
+
derived: ["frequency", "ctr"],
|
|
122
|
+
},
|
|
123
|
+
identity: {
|
|
124
|
+
name: "identity",
|
|
125
|
+
description: "Just spend + impressions. Cheap roll-up.",
|
|
126
|
+
metrics: ["costInUsd", "impressions"],
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
/** Pivots that LinkedIn rejects with DAILY granularity — CLI auto-forces ALL. */
|
|
130
|
+
export const MEMBER_PIVOTS = new Set([
|
|
131
|
+
"company",
|
|
132
|
+
"job-title",
|
|
133
|
+
"job-function",
|
|
134
|
+
"seniority",
|
|
135
|
+
"industry",
|
|
136
|
+
"company-size",
|
|
137
|
+
"country",
|
|
138
|
+
"region",
|
|
139
|
+
]);
|
|
140
|
+
export const ALL_PIVOTS = [
|
|
141
|
+
"none",
|
|
142
|
+
"campaign",
|
|
143
|
+
"campaign-group",
|
|
144
|
+
"creative",
|
|
145
|
+
"company",
|
|
146
|
+
"account",
|
|
147
|
+
"conversion",
|
|
148
|
+
"job-title",
|
|
149
|
+
"job-function",
|
|
150
|
+
"seniority",
|
|
151
|
+
"industry",
|
|
152
|
+
"company-size",
|
|
153
|
+
"country",
|
|
154
|
+
"region",
|
|
155
|
+
"device",
|
|
156
|
+
"placement",
|
|
157
|
+
"serving-location",
|
|
158
|
+
"card-index",
|
|
159
|
+
"objective",
|
|
160
|
+
"conversation-node",
|
|
161
|
+
"conversation-node-button",
|
|
162
|
+
];
|
|
163
|
+
export const ALL_LEVELS = ["account", "campaign-group", "campaign", "creative"];
|
|
164
|
+
export function getIntent(name) {
|
|
165
|
+
return INTENTS[name];
|
|
166
|
+
}
|
|
167
|
+
export function listIntents() {
|
|
168
|
+
return Object.values(INTENTS);
|
|
169
|
+
}
|
|
170
|
+
export function isPivot(slug) {
|
|
171
|
+
return ALL_PIVOTS.includes(slug);
|
|
172
|
+
}
|
|
173
|
+
export function isLevel(slug) {
|
|
174
|
+
return ALL_LEVELS.includes(slug);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Compose final field list — intent bundle + identity columns + pivotValues +
|
|
178
|
+
* dateRange. Backend re-validates and recomposes; this is just for offline
|
|
179
|
+
* preview (`baker ads linkedin analytics --list-intents`).
|
|
180
|
+
*/
|
|
181
|
+
export function composeFields(intent, _level, metricsOverride) {
|
|
182
|
+
const base = metricsOverride && metricsOverride.length > 0 ? metricsOverride : INTENTS[intent].metrics;
|
|
183
|
+
const seen = new Set();
|
|
184
|
+
const out = [];
|
|
185
|
+
for (const f of ["pivotValues", "dateRange", ...base]) {
|
|
186
|
+
if (!seen.has(f)) {
|
|
187
|
+
seen.add(f);
|
|
188
|
+
out.push(f);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return out;
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/presets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.test.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/presets.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { ALL_LEVELS, ALL_PIVOTS, composeFields, getIntent, INTENTS, isLevel, isPivot, listIntents, MEMBER_PIVOTS, } from "./presets.js";
|
|
3
|
+
describe("INTENTS", () => {
|
|
4
|
+
it("defines a metric bundle for every intent", () => {
|
|
5
|
+
for (const def of Object.values(INTENTS)) {
|
|
6
|
+
expect(def.metrics.length).toBeGreaterThan(0);
|
|
7
|
+
expect(def.description.length).toBeGreaterThan(10);
|
|
8
|
+
}
|
|
9
|
+
});
|
|
10
|
+
it("exposes the canonical 10-intent set", () => {
|
|
11
|
+
expect(Object.keys(INTENTS).sort()).toEqual([
|
|
12
|
+
"baseline",
|
|
13
|
+
"document",
|
|
14
|
+
"engagement",
|
|
15
|
+
"funnel",
|
|
16
|
+
"identity",
|
|
17
|
+
"inmail",
|
|
18
|
+
"lead-gen",
|
|
19
|
+
"ranking",
|
|
20
|
+
"revenue",
|
|
21
|
+
"video",
|
|
22
|
+
].sort());
|
|
23
|
+
});
|
|
24
|
+
it("baseline derives ctr/cpc/cpm/frequency", () => {
|
|
25
|
+
const baseline = getIntent("baseline");
|
|
26
|
+
expect(baseline?.derived).toEqual(["ctr", "cpc", "cpm", "frequency"]);
|
|
27
|
+
});
|
|
28
|
+
it("lead-gen includes oneClickLeadFormOpens — required for completion-rate derivation", () => {
|
|
29
|
+
const lg = getIntent("lead-gen");
|
|
30
|
+
expect(lg?.metrics).toContain("oneClickLeadFormOpens");
|
|
31
|
+
expect(lg?.metrics).toContain("oneClickLeads");
|
|
32
|
+
expect(lg?.derived).toContain("leadCompletionRate");
|
|
33
|
+
});
|
|
34
|
+
it("listIntents returns all definitions", () => {
|
|
35
|
+
expect(listIntents()).toHaveLength(10);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
describe("composeFields", () => {
|
|
39
|
+
it("always prepends pivotValues + dateRange", () => {
|
|
40
|
+
const fields = composeFields("baseline", "campaign");
|
|
41
|
+
expect(fields[0]).toBe("pivotValues");
|
|
42
|
+
expect(fields[1]).toBe("dateRange");
|
|
43
|
+
});
|
|
44
|
+
it("includes the intent's metrics deduplicated", () => {
|
|
45
|
+
const fields = composeFields("baseline", "campaign");
|
|
46
|
+
expect(fields).toContain("impressions");
|
|
47
|
+
expect(fields).toContain("clicks");
|
|
48
|
+
expect(fields).toContain("costInUsd");
|
|
49
|
+
// No duplicates.
|
|
50
|
+
expect(new Set(fields).size).toBe(fields.length);
|
|
51
|
+
});
|
|
52
|
+
it("respects metrics override (escape hatch)", () => {
|
|
53
|
+
const fields = composeFields("baseline", "account", ["impressions", "clicks", "oneClickLeads"]);
|
|
54
|
+
expect(fields).toEqual(["pivotValues", "dateRange", "impressions", "clicks", "oneClickLeads"]);
|
|
55
|
+
});
|
|
56
|
+
it("treats empty override as 'use the intent default'", () => {
|
|
57
|
+
const fields = composeFields("identity", "account", []);
|
|
58
|
+
expect(fields).toContain("costInUsd");
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
describe("MEMBER_PIVOTS", () => {
|
|
62
|
+
it("includes the firmographic dims that LinkedIn rejects with DAILY", () => {
|
|
63
|
+
for (const p of [
|
|
64
|
+
"company",
|
|
65
|
+
"job-title",
|
|
66
|
+
"job-function",
|
|
67
|
+
"seniority",
|
|
68
|
+
"industry",
|
|
69
|
+
"company-size",
|
|
70
|
+
"country",
|
|
71
|
+
"region",
|
|
72
|
+
]) {
|
|
73
|
+
expect(MEMBER_PIVOTS.has(p)).toBe(true);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
it("does NOT include device/placement/none", () => {
|
|
77
|
+
expect(MEMBER_PIVOTS.has("device")).toBe(false);
|
|
78
|
+
expect(MEMBER_PIVOTS.has("placement")).toBe(false);
|
|
79
|
+
expect(MEMBER_PIVOTS.has("none")).toBe(false);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
describe("type guards", () => {
|
|
83
|
+
it("isPivot recognizes all known slugs", () => {
|
|
84
|
+
for (const p of ALL_PIVOTS) {
|
|
85
|
+
expect(isPivot(p)).toBe(true);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
it("isPivot rejects unknown slugs", () => {
|
|
89
|
+
expect(isPivot("foo")).toBe(false);
|
|
90
|
+
});
|
|
91
|
+
it("isLevel recognizes the 4 canonical levels", () => {
|
|
92
|
+
for (const l of ALL_LEVELS) {
|
|
93
|
+
expect(isLevel(l)).toBe(true);
|
|
94
|
+
}
|
|
95
|
+
expect(isLevel("ad")).toBe(false);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
//# sourceMappingURL=presets.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.test.js","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/presets.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/schemas.ts"],"names":[],"mappings":""}
|