@koda-sl/baker-cli 0.25.1 → 0.27.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 (182) hide show
  1. package/README.md +218 -0
  2. package/dist/cli.js +1 -1
  3. package/dist/commands/ads/index.d.ts.map +1 -1
  4. package/dist/commands/ads/index.js +12 -3
  5. package/dist/commands/ads/index.js.map +1 -1
  6. package/dist/commands/ads/linkedin/account.d.ts +20 -0
  7. package/dist/commands/ads/linkedin/account.d.ts.map +1 -0
  8. package/dist/commands/ads/linkedin/account.js +39 -0
  9. package/dist/commands/ads/linkedin/account.js.map +1 -0
  10. package/dist/commands/ads/linkedin/accounts.d.ts +20 -0
  11. package/dist/commands/ads/linkedin/accounts.d.ts.map +1 -0
  12. package/dist/commands/ads/linkedin/accounts.js +56 -0
  13. package/dist/commands/ads/linkedin/accounts.js.map +1 -0
  14. package/dist/commands/ads/linkedin/analytics.d.ts +84 -0
  15. package/dist/commands/ads/linkedin/analytics.d.ts.map +1 -0
  16. package/dist/commands/ads/linkedin/analytics.js +249 -0
  17. package/dist/commands/ads/linkedin/analytics.js.map +1 -0
  18. package/dist/commands/ads/linkedin/audience-size.d.ts +28 -0
  19. package/dist/commands/ads/linkedin/audience-size.d.ts.map +1 -0
  20. package/dist/commands/ads/linkedin/audience-size.js +75 -0
  21. package/dist/commands/ads/linkedin/audience-size.js.map +1 -0
  22. package/dist/commands/ads/linkedin/audit.d.ts +35 -0
  23. package/dist/commands/ads/linkedin/audit.d.ts.map +1 -0
  24. package/dist/commands/ads/linkedin/audit.js +136 -0
  25. package/dist/commands/ads/linkedin/audit.js.map +1 -0
  26. package/dist/commands/ads/linkedin/bid-pricing.d.ts +38 -0
  27. package/dist/commands/ads/linkedin/bid-pricing.d.ts.map +1 -0
  28. package/dist/commands/ads/linkedin/bid-pricing.js +76 -0
  29. package/dist/commands/ads/linkedin/bid-pricing.js.map +1 -0
  30. package/dist/commands/ads/linkedin/campaign-groups.d.ts +32 -0
  31. package/dist/commands/ads/linkedin/campaign-groups.d.ts.map +1 -0
  32. package/dist/commands/ads/linkedin/campaign-groups.js +50 -0
  33. package/dist/commands/ads/linkedin/campaign-groups.js.map +1 -0
  34. package/dist/commands/ads/linkedin/campaigns.d.ts +36 -0
  35. package/dist/commands/ads/linkedin/campaigns.d.ts.map +1 -0
  36. package/dist/commands/ads/linkedin/campaigns.js +57 -0
  37. package/dist/commands/ads/linkedin/campaigns.js.map +1 -0
  38. package/dist/commands/ads/linkedin/conversation.d.ts +36 -0
  39. package/dist/commands/ads/linkedin/conversation.d.ts.map +1 -0
  40. package/dist/commands/ads/linkedin/conversation.js +77 -0
  41. package/dist/commands/ads/linkedin/conversation.js.map +1 -0
  42. package/dist/commands/ads/linkedin/conversions.d.ts +2 -0
  43. package/dist/commands/ads/linkedin/conversions.d.ts.map +1 -0
  44. package/dist/commands/ads/linkedin/conversions.js +102 -0
  45. package/dist/commands/ads/linkedin/conversions.js.map +1 -0
  46. package/dist/commands/ads/linkedin/creatives.d.ts +36 -0
  47. package/dist/commands/ads/linkedin/creatives.d.ts.map +1 -0
  48. package/dist/commands/ads/linkedin/creatives.js +57 -0
  49. package/dist/commands/ads/linkedin/creatives.js.map +1 -0
  50. package/dist/commands/ads/linkedin/demographics.d.ts +40 -0
  51. package/dist/commands/ads/linkedin/demographics.d.ts.map +1 -0
  52. package/dist/commands/ads/linkedin/demographics.js +117 -0
  53. package/dist/commands/ads/linkedin/demographics.js.map +1 -0
  54. package/dist/commands/ads/linkedin/facets.d.ts +2 -0
  55. package/dist/commands/ads/linkedin/facets.d.ts.map +1 -0
  56. package/dist/commands/ads/linkedin/facets.js +95 -0
  57. package/dist/commands/ads/linkedin/facets.js.map +1 -0
  58. package/dist/commands/ads/linkedin/forecast.d.ts +50 -0
  59. package/dist/commands/ads/linkedin/forecast.d.ts.map +1 -0
  60. package/dist/commands/ads/linkedin/forecast.js +83 -0
  61. package/dist/commands/ads/linkedin/forecast.js.map +1 -0
  62. package/dist/commands/ads/linkedin/index.d.ts +19 -0
  63. package/dist/commands/ads/linkedin/index.d.ts.map +1 -0
  64. package/dist/commands/ads/linkedin/index.js +83 -0
  65. package/dist/commands/ads/linkedin/index.js.map +1 -0
  66. package/dist/commands/ads/linkedin/leads.d.ts +40 -0
  67. package/dist/commands/ads/linkedin/leads.d.ts.map +1 -0
  68. package/dist/commands/ads/linkedin/leads.js +75 -0
  69. package/dist/commands/ads/linkedin/leads.js.map +1 -0
  70. package/dist/commands/ads/linkedin/presets.d.ts +40 -0
  71. package/dist/commands/ads/linkedin/presets.d.ts.map +1 -0
  72. package/dist/commands/ads/linkedin/presets.js +193 -0
  73. package/dist/commands/ads/linkedin/presets.js.map +1 -0
  74. package/dist/commands/ads/linkedin/presets.test.d.ts +2 -0
  75. package/dist/commands/ads/linkedin/presets.test.d.ts.map +1 -0
  76. package/dist/commands/ads/linkedin/presets.test.js +98 -0
  77. package/dist/commands/ads/linkedin/presets.test.js.map +1 -0
  78. package/dist/commands/ads/linkedin/schemas.d.ts +2 -0
  79. package/dist/commands/ads/linkedin/schemas.d.ts.map +1 -0
  80. package/dist/commands/ads/linkedin/schemas.js +300 -0
  81. package/dist/commands/ads/linkedin/schemas.js.map +1 -0
  82. package/dist/commands/ads/linkedin/shared.d.ts +17 -0
  83. package/dist/commands/ads/linkedin/shared.d.ts.map +1 -0
  84. package/dist/commands/ads/linkedin/shared.js +116 -0
  85. package/dist/commands/ads/linkedin/shared.js.map +1 -0
  86. package/dist/commands/ads/linkedin/top-companies.d.ts +44 -0
  87. package/dist/commands/ads/linkedin/top-companies.d.ts.map +1 -0
  88. package/dist/commands/ads/linkedin/top-companies.js +86 -0
  89. package/dist/commands/ads/linkedin/top-companies.js.map +1 -0
  90. package/dist/commands/ads/x/accounts.d.ts +14 -0
  91. package/dist/commands/ads/x/accounts.d.ts.map +1 -0
  92. package/dist/commands/ads/x/accounts.js +73 -0
  93. package/dist/commands/ads/x/accounts.js.map +1 -0
  94. package/dist/commands/ads/x/active-entities.d.ts +43 -0
  95. package/dist/commands/ads/x/active-entities.d.ts.map +1 -0
  96. package/dist/commands/ads/x/active-entities.js +88 -0
  97. package/dist/commands/ads/x/active-entities.js.map +1 -0
  98. package/dist/commands/ads/x/audiences.d.ts +19 -0
  99. package/dist/commands/ads/x/audiences.d.ts.map +1 -0
  100. package/dist/commands/ads/x/audiences.js +65 -0
  101. package/dist/commands/ads/x/audiences.js.map +1 -0
  102. package/dist/commands/ads/x/campaigns.d.ts +34 -0
  103. package/dist/commands/ads/x/campaigns.d.ts.map +1 -0
  104. package/dist/commands/ads/x/campaigns.js +56 -0
  105. package/dist/commands/ads/x/campaigns.js.map +1 -0
  106. package/dist/commands/ads/x/cards.d.ts +19 -0
  107. package/dist/commands/ads/x/cards.d.ts.map +1 -0
  108. package/dist/commands/ads/x/cards.js +65 -0
  109. package/dist/commands/ads/x/cards.js.map +1 -0
  110. package/dist/commands/ads/x/error-parser.d.ts +3 -0
  111. package/dist/commands/ads/x/error-parser.d.ts.map +1 -0
  112. package/dist/commands/ads/x/error-parser.js +80 -0
  113. package/dist/commands/ads/x/error-parser.js.map +1 -0
  114. package/dist/commands/ads/x/funding.d.ts +19 -0
  115. package/dist/commands/ads/x/funding.d.ts.map +1 -0
  116. package/dist/commands/ads/x/funding.js +65 -0
  117. package/dist/commands/ads/x/funding.js.map +1 -0
  118. package/dist/commands/ads/x/index.d.ts +2 -0
  119. package/dist/commands/ads/x/index.d.ts.map +1 -0
  120. package/dist/commands/ads/x/index.js +50 -0
  121. package/dist/commands/ads/x/index.js.map +1 -0
  122. package/dist/commands/ads/x/line-items.d.ts +34 -0
  123. package/dist/commands/ads/x/line-items.d.ts.map +1 -0
  124. package/dist/commands/ads/x/line-items.js +55 -0
  125. package/dist/commands/ads/x/line-items.js.map +1 -0
  126. package/dist/commands/ads/x/media.d.ts +24 -0
  127. package/dist/commands/ads/x/media.d.ts.map +1 -0
  128. package/dist/commands/ads/x/media.js +70 -0
  129. package/dist/commands/ads/x/media.js.map +1 -0
  130. package/dist/commands/ads/x/output.d.ts +13 -0
  131. package/dist/commands/ads/x/output.d.ts.map +1 -0
  132. package/dist/commands/ads/x/output.js +75 -0
  133. package/dist/commands/ads/x/output.js.map +1 -0
  134. package/dist/commands/ads/x/presets.d.ts +15 -0
  135. package/dist/commands/ads/x/presets.d.ts.map +1 -0
  136. package/dist/commands/ads/x/presets.js +60 -0
  137. package/dist/commands/ads/x/presets.js.map +1 -0
  138. package/dist/commands/ads/x/promoted-tweets.d.ts +29 -0
  139. package/dist/commands/ads/x/promoted-tweets.d.ts.map +1 -0
  140. package/dist/commands/ads/x/promoted-tweets.js +74 -0
  141. package/dist/commands/ads/x/promoted-tweets.js.map +1 -0
  142. package/dist/commands/ads/x/run-list.d.ts +17 -0
  143. package/dist/commands/ads/x/run-list.d.ts.map +1 -0
  144. package/dist/commands/ads/x/run-list.js +60 -0
  145. package/dist/commands/ads/x/run-list.js.map +1 -0
  146. package/dist/commands/ads/x/stats/index.d.ts +2 -0
  147. package/dist/commands/ads/x/stats/index.d.ts.map +1 -0
  148. package/dist/commands/ads/x/stats/index.js +32 -0
  149. package/dist/commands/ads/x/stats/index.js.map +1 -0
  150. package/dist/commands/ads/x/stats/job-create.d.ts +58 -0
  151. package/dist/commands/ads/x/stats/job-create.d.ts.map +1 -0
  152. package/dist/commands/ads/x/stats/job-create.js +95 -0
  153. package/dist/commands/ads/x/stats/job-create.js.map +1 -0
  154. package/dist/commands/ads/x/stats/job-status.d.ts +18 -0
  155. package/dist/commands/ads/x/stats/job-status.d.ts.map +1 -0
  156. package/dist/commands/ads/x/stats/job-status.js +58 -0
  157. package/dist/commands/ads/x/stats/job-status.js.map +1 -0
  158. package/dist/commands/ads/x/stats/job.d.ts +63 -0
  159. package/dist/commands/ads/x/stats/job.d.ts.map +1 -0
  160. package/dist/commands/ads/x/stats/job.js +183 -0
  161. package/dist/commands/ads/x/stats/job.js.map +1 -0
  162. package/dist/commands/ads/x/stats/sync.d.ts +73 -0
  163. package/dist/commands/ads/x/stats/sync.d.ts.map +1 -0
  164. package/dist/commands/ads/x/stats/sync.js +151 -0
  165. package/dist/commands/ads/x/stats/sync.js.map +1 -0
  166. package/dist/commands/ads/x/targeting-constants.d.ts +34 -0
  167. package/dist/commands/ads/x/targeting-constants.d.ts.map +1 -0
  168. package/dist/commands/ads/x/targeting-constants.js +80 -0
  169. package/dist/commands/ads/x/targeting-constants.js.map +1 -0
  170. package/dist/commands/ads/x/targeting-criteria.d.ts +24 -0
  171. package/dist/commands/ads/x/targeting-criteria.d.ts.map +1 -0
  172. package/dist/commands/ads/x/targeting-criteria.js +69 -0
  173. package/dist/commands/ads/x/targeting-criteria.js.map +1 -0
  174. package/dist/env.d.ts +2 -0
  175. package/dist/env.d.ts.map +1 -1
  176. package/dist/env.js +8 -0
  177. package/dist/env.js.map +1 -1
  178. package/dist/error-handler.d.ts +1 -1
  179. package/dist/error-handler.d.ts.map +1 -1
  180. package/dist/error-handler.js +6 -0
  181. package/dist/error-handler.js.map +1 -1
  182. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=presets.test.d.ts.map
@@ -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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,UAAU,EACV,UAAU,EACV,aAAa,EACb,SAAS,EACT,OAAO,EACP,OAAO,EACP,OAAO,EACP,WAAW,EACX,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CACzC;YACE,UAAU;YACV,UAAU;YACV,YAAY;YACZ,QAAQ;YACR,UAAU;YACV,QAAQ;YACR,UAAU;YACV,SAAS;YACT,SAAS;YACT,OAAO;SACR,CAAC,IAAI,EAAE,CACT,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mFAAmF,EAAE,GAAG,EAAE;QAC3F,MAAM,EAAE,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QACvD,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC/C,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACtC,iBAAiB;QACjB,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;QAChG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,KAAK,MAAM,CAAC,IAAI;YACd,SAAS;YACT,WAAW;YACX,cAAc;YACd,WAAW;YACX,UAAU;YACV,cAAc;YACd,SAAS;YACT,QAAQ;SACT,EAAE,CAAC;YACF,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAA4C,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/schemas.ts"],"names":[],"mappings":""}