@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.
Files changed (104) hide show
  1. package/README.md +146 -0
  2. package/dist/cli.js +1 -1
  3. package/dist/commands/actions/create.d.ts.map +1 -1
  4. package/dist/commands/actions/create.js +10 -2
  5. package/dist/commands/actions/create.js.map +1 -1
  6. package/dist/commands/ads/index.d.ts.map +1 -1
  7. package/dist/commands/ads/index.js +7 -3
  8. package/dist/commands/ads/index.js.map +1 -1
  9. package/dist/commands/ads/linkedin/account.d.ts +20 -0
  10. package/dist/commands/ads/linkedin/account.d.ts.map +1 -0
  11. package/dist/commands/ads/linkedin/account.js +39 -0
  12. package/dist/commands/ads/linkedin/account.js.map +1 -0
  13. package/dist/commands/ads/linkedin/accounts.d.ts +20 -0
  14. package/dist/commands/ads/linkedin/accounts.d.ts.map +1 -0
  15. package/dist/commands/ads/linkedin/accounts.js +56 -0
  16. package/dist/commands/ads/linkedin/accounts.js.map +1 -0
  17. package/dist/commands/ads/linkedin/analytics.d.ts +84 -0
  18. package/dist/commands/ads/linkedin/analytics.d.ts.map +1 -0
  19. package/dist/commands/ads/linkedin/analytics.js +249 -0
  20. package/dist/commands/ads/linkedin/analytics.js.map +1 -0
  21. package/dist/commands/ads/linkedin/audience-size.d.ts +28 -0
  22. package/dist/commands/ads/linkedin/audience-size.d.ts.map +1 -0
  23. package/dist/commands/ads/linkedin/audience-size.js +75 -0
  24. package/dist/commands/ads/linkedin/audience-size.js.map +1 -0
  25. package/dist/commands/ads/linkedin/audit.d.ts +35 -0
  26. package/dist/commands/ads/linkedin/audit.d.ts.map +1 -0
  27. package/dist/commands/ads/linkedin/audit.js +136 -0
  28. package/dist/commands/ads/linkedin/audit.js.map +1 -0
  29. package/dist/commands/ads/linkedin/bid-pricing.d.ts +38 -0
  30. package/dist/commands/ads/linkedin/bid-pricing.d.ts.map +1 -0
  31. package/dist/commands/ads/linkedin/bid-pricing.js +76 -0
  32. package/dist/commands/ads/linkedin/bid-pricing.js.map +1 -0
  33. package/dist/commands/ads/linkedin/campaign-groups.d.ts +32 -0
  34. package/dist/commands/ads/linkedin/campaign-groups.d.ts.map +1 -0
  35. package/dist/commands/ads/linkedin/campaign-groups.js +50 -0
  36. package/dist/commands/ads/linkedin/campaign-groups.js.map +1 -0
  37. package/dist/commands/ads/linkedin/campaigns.d.ts +36 -0
  38. package/dist/commands/ads/linkedin/campaigns.d.ts.map +1 -0
  39. package/dist/commands/ads/linkedin/campaigns.js +57 -0
  40. package/dist/commands/ads/linkedin/campaigns.js.map +1 -0
  41. package/dist/commands/ads/linkedin/conversation.d.ts +36 -0
  42. package/dist/commands/ads/linkedin/conversation.d.ts.map +1 -0
  43. package/dist/commands/ads/linkedin/conversation.js +77 -0
  44. package/dist/commands/ads/linkedin/conversation.js.map +1 -0
  45. package/dist/commands/ads/linkedin/conversions.d.ts +2 -0
  46. package/dist/commands/ads/linkedin/conversions.d.ts.map +1 -0
  47. package/dist/commands/ads/linkedin/conversions.js +102 -0
  48. package/dist/commands/ads/linkedin/conversions.js.map +1 -0
  49. package/dist/commands/ads/linkedin/creatives.d.ts +36 -0
  50. package/dist/commands/ads/linkedin/creatives.d.ts.map +1 -0
  51. package/dist/commands/ads/linkedin/creatives.js +57 -0
  52. package/dist/commands/ads/linkedin/creatives.js.map +1 -0
  53. package/dist/commands/ads/linkedin/demographics.d.ts +40 -0
  54. package/dist/commands/ads/linkedin/demographics.d.ts.map +1 -0
  55. package/dist/commands/ads/linkedin/demographics.js +117 -0
  56. package/dist/commands/ads/linkedin/demographics.js.map +1 -0
  57. package/dist/commands/ads/linkedin/facets.d.ts +2 -0
  58. package/dist/commands/ads/linkedin/facets.d.ts.map +1 -0
  59. package/dist/commands/ads/linkedin/facets.js +95 -0
  60. package/dist/commands/ads/linkedin/facets.js.map +1 -0
  61. package/dist/commands/ads/linkedin/forecast.d.ts +50 -0
  62. package/dist/commands/ads/linkedin/forecast.d.ts.map +1 -0
  63. package/dist/commands/ads/linkedin/forecast.js +83 -0
  64. package/dist/commands/ads/linkedin/forecast.js.map +1 -0
  65. package/dist/commands/ads/linkedin/index.d.ts +19 -0
  66. package/dist/commands/ads/linkedin/index.d.ts.map +1 -0
  67. package/dist/commands/ads/linkedin/index.js +83 -0
  68. package/dist/commands/ads/linkedin/index.js.map +1 -0
  69. package/dist/commands/ads/linkedin/leads.d.ts +40 -0
  70. package/dist/commands/ads/linkedin/leads.d.ts.map +1 -0
  71. package/dist/commands/ads/linkedin/leads.js +75 -0
  72. package/dist/commands/ads/linkedin/leads.js.map +1 -0
  73. package/dist/commands/ads/linkedin/presets.d.ts +40 -0
  74. package/dist/commands/ads/linkedin/presets.d.ts.map +1 -0
  75. package/dist/commands/ads/linkedin/presets.js +193 -0
  76. package/dist/commands/ads/linkedin/presets.js.map +1 -0
  77. package/dist/commands/ads/linkedin/presets.test.d.ts +2 -0
  78. package/dist/commands/ads/linkedin/presets.test.d.ts.map +1 -0
  79. package/dist/commands/ads/linkedin/presets.test.js +98 -0
  80. package/dist/commands/ads/linkedin/presets.test.js.map +1 -0
  81. package/dist/commands/ads/linkedin/schemas.d.ts +2 -0
  82. package/dist/commands/ads/linkedin/schemas.d.ts.map +1 -0
  83. package/dist/commands/ads/linkedin/schemas.js +300 -0
  84. package/dist/commands/ads/linkedin/schemas.js.map +1 -0
  85. package/dist/commands/ads/linkedin/shared.d.ts +17 -0
  86. package/dist/commands/ads/linkedin/shared.d.ts.map +1 -0
  87. package/dist/commands/ads/linkedin/shared.js +116 -0
  88. package/dist/commands/ads/linkedin/shared.js.map +1 -0
  89. package/dist/commands/ads/linkedin/top-companies.d.ts +44 -0
  90. package/dist/commands/ads/linkedin/top-companies.d.ts.map +1 -0
  91. package/dist/commands/ads/linkedin/top-companies.js +86 -0
  92. package/dist/commands/ads/linkedin/top-companies.js.map +1 -0
  93. package/dist/env.d.ts +1 -0
  94. package/dist/env.d.ts.map +1 -1
  95. package/dist/env.js +4 -0
  96. package/dist/env.js.map +1 -1
  97. package/dist/error-handler.d.ts +1 -1
  98. package/dist/error-handler.d.ts.map +1 -1
  99. package/dist/error-handler.js +3 -0
  100. package/dist/error-handler.js.map +1 -1
  101. package/dist/output.d.ts +1 -0
  102. package/dist/output.d.ts.map +1 -1
  103. package/dist/output.js.map +1 -1
  104. package/package.json +1 -1
@@ -0,0 +1,300 @@
1
+ import { registerSchema } from "../../../schemas.js";
2
+ // Single file rather than per-command. Imported from ./index.ts so registration
3
+ // runs at CLI startup. Mirrors the surface visible to AI agents via
4
+ // `baker schema ads.linkedin.<name>`.
5
+ registerSchema({
6
+ command: "ads.linkedin.accounts",
7
+ description: "List LinkedIn ad accounts in the company's connected scope. Pass --include-all to list every account the OAuth token can see.",
8
+ args: {
9
+ "include-all": { type: "boolean", description: "Ignore picker scope", required: false },
10
+ "no-cache": { type: "boolean", description: "Skip CLI-side cache", required: false },
11
+ "skip-cache": { type: "boolean", description: "Bypass server-side cache", required: false },
12
+ output: { type: "string", description: "json|csv|jsonl|md", required: false, default: "json" },
13
+ },
14
+ });
15
+ registerSchema({
16
+ command: "ads.linkedin.account",
17
+ description: "Single LinkedIn ad account detail (currency, status, type). Resolves the urn → {id, name, currency, status, type}.",
18
+ args: {
19
+ "account-id": { type: "string", description: "Numeric ID or urn:li:sponsoredAccount:N", required: false },
20
+ "account-urn": { type: "string", description: "Alias for --account-id", required: false },
21
+ "skip-cache": { type: "boolean", description: "Bypass cache", required: false },
22
+ output: { type: "string", description: "json|csv|jsonl|md", required: false, default: "json" },
23
+ },
24
+ });
25
+ registerSchema({
26
+ command: "ads.linkedin.campaign-groups",
27
+ description: "List LinkedIn campaign groups in an account. Default ACTIVE-only — pass --all-statuses to widen.",
28
+ args: {
29
+ "account-id": { type: "string", description: "Account ID", required: false },
30
+ "account-urn": { type: "string", description: "Alias for --account-id", required: false },
31
+ "all-statuses": { type: "boolean", description: "Drop the ACTIVE filter", required: false },
32
+ statuses: { type: "string", description: "CSV of statuses", required: false },
33
+ limit: { type: "string", description: "Max rows (default 500)", required: false },
34
+ "skip-cache": { type: "boolean", description: "Bypass cache", required: false },
35
+ output: { type: "string", description: "json|csv|jsonl|md", required: false, default: "json" },
36
+ },
37
+ });
38
+ registerSchema({
39
+ command: "ads.linkedin.campaigns",
40
+ description: "List LinkedIn campaigns. Returns audit-relevant settings (audienceExpansionEnabled, offsiteDeliveryEnabled, optimizationTargetType, costType, budgets, runSchedule, targetingCriteria).",
41
+ args: {
42
+ "account-id": { type: "string", description: "Account ID", required: false },
43
+ "account-urn": { type: "string", description: "Alias", required: false },
44
+ "campaign-group-id": { type: "string", description: "Filter by campaign group", required: false },
45
+ "all-statuses": { type: "boolean", description: "Drop the ACTIVE filter", required: false },
46
+ statuses: { type: "string", description: "CSV of statuses", required: false },
47
+ limit: { type: "string", description: "Max rows", required: false },
48
+ "skip-cache": { type: "boolean", description: "Bypass cache", required: false },
49
+ output: { type: "string", description: "json|csv|jsonl|md", required: false, default: "json" },
50
+ },
51
+ });
52
+ registerSchema({
53
+ command: "ads.linkedin.creatives",
54
+ description: "List LinkedIn creatives. 'content' block varies by creative type (image, video, document, spotlight, conversation, dynamic).",
55
+ args: {
56
+ "account-id": { type: "string", description: "Account ID", required: false },
57
+ "account-urn": { type: "string", description: "Alias", required: false },
58
+ "campaign-id": { type: "string", description: "Filter by campaign", required: false },
59
+ "all-statuses": { type: "boolean", description: "Drop the ACTIVE filter", required: false },
60
+ statuses: { type: "string", description: "CSV of statuses", required: false },
61
+ limit: { type: "string", description: "Max rows", required: false },
62
+ "skip-cache": { type: "boolean", description: "Bypass cache", required: false },
63
+ output: { type: "string", description: "json|csv|jsonl|md", required: false, default: "json" },
64
+ },
65
+ });
66
+ registerSchema({
67
+ command: "ads.linkedin.analytics",
68
+ description: "Performance reporting (3-axis: --level × --intent × --pivot). LinkedIn's superpower: pivot=job-title|company|industry|seniority. Demographic pivots auto-force granularity=ALL and surface a delayed-data warning.",
69
+ args: {
70
+ level: {
71
+ type: "string",
72
+ description: "account|campaign-group|campaign|creative",
73
+ required: false,
74
+ default: "account",
75
+ },
76
+ "account-id": { type: "string", description: "When level=account", required: false },
77
+ "account-urn": { type: "string", description: "Alias", required: false },
78
+ "campaign-group-id": { type: "string", description: "CSV when level=campaign-group", required: false },
79
+ "campaign-id": { type: "string", description: "CSV when level=campaign", required: false },
80
+ "creative-id": { type: "string", description: "CSV when level=creative", required: false },
81
+ ids: { type: "string", description: "Generic CSV alternative", required: false },
82
+ intent: {
83
+ type: "string",
84
+ description: "Field bundle",
85
+ required: false,
86
+ default: "baseline",
87
+ enum: [
88
+ "baseline",
89
+ "revenue",
90
+ "funnel",
91
+ "engagement",
92
+ "video",
93
+ "lead-gen",
94
+ "inmail",
95
+ "document",
96
+ "ranking",
97
+ "identity",
98
+ ],
99
+ },
100
+ pivot: {
101
+ type: "string",
102
+ description: "Demographic / firmographic dim",
103
+ required: false,
104
+ default: "none",
105
+ enum: [
106
+ "none",
107
+ "campaign",
108
+ "campaign-group",
109
+ "creative",
110
+ "company",
111
+ "account",
112
+ "conversion",
113
+ "job-title",
114
+ "job-function",
115
+ "seniority",
116
+ "industry",
117
+ "company-size",
118
+ "country",
119
+ "region",
120
+ "device",
121
+ "placement",
122
+ "serving-location",
123
+ "card-index",
124
+ "objective",
125
+ "conversation-node",
126
+ "conversation-node-button",
127
+ ],
128
+ },
129
+ metrics: { type: "string", description: "CSV metric override (escape hatch)", required: false },
130
+ start: { type: "string", description: "YYYY-MM-DD", required: false },
131
+ end: { type: "string", description: "YYYY-MM-DD", required: false },
132
+ "last-days": { type: "string", description: "Window (default 7)", required: false },
133
+ granularity: {
134
+ type: "string",
135
+ description: "DAILY|MONTHLY|YEARLY|ALL",
136
+ required: false,
137
+ default: "DAILY",
138
+ enum: ["DAILY", "MONTHLY", "YEARLY", "ALL"],
139
+ },
140
+ limit: { type: "string", description: "Max rows", required: false },
141
+ "no-sort": { type: "boolean", description: "Skip default sort", required: false },
142
+ "list-intents": { type: "boolean", description: "List intents and exit", required: false },
143
+ "list-pivots": { type: "boolean", description: "List pivots and exit", required: false },
144
+ "skip-cache": { type: "boolean", description: "Bypass cache", required: false },
145
+ output: { type: "string", description: "json|csv|jsonl|md", required: false, default: "json" },
146
+ },
147
+ });
148
+ registerSchema({
149
+ command: "ads.linkedin.demographics",
150
+ description: "Sweep all firmographic pivots (job-title, company, industry, seniority, function, company-size) in one call. Returns top-N rows per pivot.",
151
+ args: {
152
+ "campaign-id": { type: "string", description: "CSV campaign IDs", required: true },
153
+ pivots: { type: "string", description: "CSV of pivots (default: all firmographic)", required: false },
154
+ "top-n": { type: "string", description: "Top rows per pivot (default 10)", required: false },
155
+ intent: { type: "string", description: "Field bundle", required: false, default: "baseline" },
156
+ start: { type: "string", description: "YYYY-MM-DD", required: false },
157
+ end: { type: "string", description: "YYYY-MM-DD", required: false },
158
+ "last-days": { type: "string", description: "Window (default 30)", required: false },
159
+ "skip-cache": { type: "boolean", description: "Bypass cache", required: false },
160
+ },
161
+ });
162
+ registerSchema({
163
+ command: "ads.linkedin.top-companies",
164
+ description: "Top companies whose employees saw / clicked / converted. Wrapper for analytics --pivot company. The ABM feedback loop.",
165
+ args: {
166
+ "campaign-id": { type: "string", description: "CSV campaign IDs", required: true },
167
+ intent: { type: "string", description: "Field bundle (default baseline)", required: false },
168
+ "top-n": { type: "string", description: "Top rows by impressions (default 25)", required: false },
169
+ start: { type: "string", description: "YYYY-MM-DD", required: false },
170
+ end: { type: "string", description: "YYYY-MM-DD", required: false },
171
+ "last-days": { type: "string", description: "Window (default 30)", required: false },
172
+ "skip-cache": { type: "boolean", description: "Bypass cache", required: false },
173
+ output: { type: "string", description: "json|csv|jsonl|md", required: false, default: "json" },
174
+ },
175
+ });
176
+ registerSchema({
177
+ command: "ads.linkedin.facets.list",
178
+ description: "List every targeting facet LinkedIn supports (industries, seniorities, titles, employers, growthRate, etc).",
179
+ args: {
180
+ "skip-cache": { type: "boolean", description: "Bypass cache", required: false },
181
+ output: { type: "string", description: "json|csv|jsonl|md", required: false, default: "json" },
182
+ },
183
+ });
184
+ registerSchema({
185
+ command: "ads.linkedin.facets.values",
186
+ description: "Look up entity values for a facet — full list (q=adTargetingFacet) or typeahead search (q=typeahead, with --query).",
187
+ args: {
188
+ facet: { type: "string", description: "Facet name (industries) or URN", required: true },
189
+ query: { type: "string", description: "Typeahead query (auto-switches finder)", required: false },
190
+ finder: { type: "string", description: "adTargetingFacet|typeahead|similarEntities", required: false },
191
+ locale: { type: "string", description: "Locale (default en_US)", required: false },
192
+ "skip-cache": { type: "boolean", description: "Bypass cache", required: false },
193
+ output: { type: "string", description: "json|csv|jsonl|md", required: false, default: "json" },
194
+ },
195
+ });
196
+ registerSchema({
197
+ command: "ads.linkedin.audience-size",
198
+ description: "Estimate audience size for a targetingCriteria payload. Returns total + active + playbook §04 sweet-spot warnings.",
199
+ args: {
200
+ "account-id": { type: "string", description: "Account ID", required: false },
201
+ "account-urn": { type: "string", description: "Alias", required: false },
202
+ targeting: { type: "string", description: "Inline JSON targetingCriteria", required: false },
203
+ "targeting-file": { type: "string", description: "Path to JSON file", required: false },
204
+ "skip-cache": { type: "boolean", description: "Bypass cache", required: false },
205
+ },
206
+ });
207
+ registerSchema({
208
+ command: "ads.linkedin.bid-pricing",
209
+ description: "LinkedIn's suggested bid range + playbook §06 floor (2/3 of suggested). Inputs: targeting + objective + cost type.",
210
+ args: {
211
+ "account-id": { type: "string", description: "Account ID", required: false },
212
+ "account-urn": { type: "string", description: "Alias", required: false },
213
+ objective: {
214
+ type: "string",
215
+ description: "Objective type (WEBSITE_CONVERSION, LEAD_GENERATION, etc.)",
216
+ required: true,
217
+ },
218
+ "cost-type": { type: "string", description: "CPC|CPM|CPV|CPS", required: true, enum: ["CPC", "CPM", "CPV", "CPS"] },
219
+ targeting: { type: "string", description: "Inline JSON targetingCriteria", required: false },
220
+ "targeting-file": { type: "string", description: "Path to JSON file", required: false },
221
+ "skip-cache": { type: "boolean", description: "Bypass cache", required: false },
222
+ },
223
+ });
224
+ registerSchema({
225
+ command: "ads.linkedin.forecast",
226
+ description: "Forecast reach + impressions + clicks + spend for a hypothetical campaign. Useful for §14 greenfield planning.",
227
+ args: {
228
+ "account-id": { type: "string", description: "Account ID", required: false },
229
+ "account-urn": { type: "string", description: "Alias", required: false },
230
+ objective: { type: "string", description: "Objective type", required: true },
231
+ "cost-type": { type: "string", description: "CPC|CPM|CPV|CPS", required: true },
232
+ "daily-budget": { type: "string", description: "e.g. '200 USD'", required: false },
233
+ "total-budget": { type: "string", description: "e.g. '6000 USD'", required: false },
234
+ bid: { type: "string", description: "Bid e.g. '8 USD'", required: false },
235
+ targeting: { type: "string", description: "Inline JSON targetingCriteria", required: false },
236
+ "targeting-file": { type: "string", description: "Path to JSON file", required: false },
237
+ "skip-cache": { type: "boolean", description: "Bypass cache", required: false },
238
+ },
239
+ });
240
+ registerSchema({
241
+ command: "ads.linkedin.leads",
242
+ description: "List Lead Gen Form responses (90-day LinkedIn retention — sync to CRM via this endpoint). Filter by --form-id, --campaign-id, or --since-days.",
243
+ args: {
244
+ "account-id": { type: "string", description: "Account ID", required: false },
245
+ "account-urn": { type: "string", description: "Alias", required: false },
246
+ "form-id": { type: "string", description: "Filter by form ID", required: false },
247
+ "campaign-id": { type: "string", description: "Filter by campaign", required: false },
248
+ "since-days": { type: "string", description: "Last N days", required: false },
249
+ "since-ms": { type: "string", description: "Epoch ms (alternative to --since-days)", required: false },
250
+ limit: { type: "string", description: "Max rows", required: false },
251
+ "skip-cache": { type: "boolean", description: "Bypass cache", required: false },
252
+ output: { type: "string", description: "json|csv|jsonl|md", required: false, default: "json" },
253
+ },
254
+ });
255
+ registerSchema({
256
+ command: "ads.linkedin.conversions.list",
257
+ description: "List conversion rules (Insight Tag + Conversions API).",
258
+ args: {
259
+ "account-id": { type: "string", description: "Account ID", required: false },
260
+ "account-urn": { type: "string", description: "Alias", required: false },
261
+ "skip-cache": { type: "boolean", description: "Bypass cache", required: false },
262
+ output: { type: "string", description: "json|csv|jsonl|md", required: false, default: "json" },
263
+ },
264
+ });
265
+ registerSchema({
266
+ command: "ads.linkedin.conversions.health",
267
+ description: "Playbook §07 5-point health check: rules enabled? lead/purchase event? CAPI fired in 7d? view-through ≤7d? lead de-dup correct?",
268
+ args: {
269
+ "account-id": { type: "string", description: "Account ID", required: false },
270
+ "account-urn": { type: "string", description: "Alias", required: false },
271
+ "skip-cache": { type: "boolean", description: "Bypass cache", required: false },
272
+ },
273
+ });
274
+ registerSchema({
275
+ command: "ads.linkedin.conversation",
276
+ description: "Per-button click rates inside Sponsored Messaging / Conversation Ads. Wraps analytics --pivot conversation-node-button.",
277
+ args: {
278
+ "campaign-id": { type: "string", description: "CSV campaign IDs", required: true },
279
+ start: { type: "string", description: "YYYY-MM-DD", required: false },
280
+ end: { type: "string", description: "YYYY-MM-DD", required: false },
281
+ "last-days": { type: "string", description: "Window (default 30)", required: false },
282
+ "skip-cache": { type: "boolean", description: "Bypass cache", required: false },
283
+ output: { type: "string", description: "json|csv|jsonl|md", required: false, default: "json" },
284
+ },
285
+ });
286
+ registerSchema({
287
+ command: "ads.linkedin.audit",
288
+ description: "Run a 30+ check playbook audit (Settings, Tracking, Audience, Campaigns, Creative, Performance, Bidding, Compliance, Hygiene). Each finding: {id, area, check, status, severity, evidence, fix} with playbook citations. --format md renders a deliverable-ready table.",
289
+ args: {
290
+ "account-id": { type: "string", description: "Account ID", required: false },
291
+ "account-urn": { type: "string", description: "Alias", required: false },
292
+ "campaign-id": { type: "string", description: "Narrow to a single campaign", required: false },
293
+ "window-days": { type: "string", description: "Performance lookback (default 30)", required: false },
294
+ severity: { type: "string", description: "CSV severity filter (critical,high,medium,low)", required: false },
295
+ area: { type: "string", description: "CSV area filter", required: false },
296
+ format: { type: "string", description: "json | md", required: false, default: "json" },
297
+ "skip-cache": { type: "boolean", description: "Bypass cache", required: false },
298
+ },
299
+ });
300
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Map LinkedIn-flavored API errors into the shared CLI error envelope. The
3
+ * backend already maps LinkedIn `serviceErrorCode` → tagged HTTP status, so by
4
+ * the time we get here we just need to attach an actionable `fix` and exit.
5
+ */
6
+ export declare function handleLinkedinError(err: unknown): never;
7
+ /** Pull the default LinkedIn ad account ID from `--account-id` arg or env. */
8
+ export declare function resolveAccountIdArg(args: Record<string, unknown>): string;
9
+ export declare function todayIso(): string;
10
+ export declare function daysAgoIso(days: number): string;
11
+ export declare function csvOrJson(args: Record<string, unknown>): string;
12
+ /**
13
+ * Default to ACTIVE-only on listings — almost always what an AI agent or human
14
+ * glance wants. `--all-statuses` widens; `--statuses ACTIVE,PAUSED` overrides.
15
+ */
16
+ export declare function resolveStatusFilter(args: Record<string, unknown>): string[] | undefined;
17
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/shared.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CA4BvD;AAmCD,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAyBzE;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAE/D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,SAAS,CAYvF"}
@@ -0,0 +1,116 @@
1
+ import { ApiError } from "../../../client.js";
2
+ import { getEnv } from "../../../env.js";
3
+ import { handleConnectionError } from "../../../error-handler.js";
4
+ import { writeAdsJson } from "../output.js";
5
+ const DAY_MS = 86_400_000;
6
+ /**
7
+ * Map LinkedIn-flavored API errors into the shared CLI error envelope. The
8
+ * backend already maps LinkedIn `serviceErrorCode` → tagged HTTP status, so by
9
+ * the time we get here we just need to attach an actionable `fix` and exit.
10
+ */
11
+ export function handleLinkedinError(err) {
12
+ if (err instanceof ApiError) {
13
+ if (err.code === "UNAUTHORIZED") {
14
+ handleConnectionError("linkedin_ads", err.message);
15
+ }
16
+ if (err.code === "NOT_FOUND") {
17
+ handleConnectionError("linkedin_ads", err.message);
18
+ }
19
+ const explanation = explainLinkedinError(err);
20
+ const envelope = {
21
+ ok: false,
22
+ error: {
23
+ code: err.code,
24
+ message: err.message,
25
+ fix: {
26
+ action: explanation.action,
27
+ explanation: explanation.message,
28
+ correctedCommand: explanation.correctedCommand,
29
+ },
30
+ retryable: err.code === "RATE_LIMITED" || err.code === "INTERNAL_ERROR",
31
+ },
32
+ };
33
+ writeAdsJson(envelope);
34
+ process.exit(1);
35
+ }
36
+ const message = err instanceof Error ? err.message : "Unexpected error";
37
+ writeAdsJson({ ok: false, error: { code: "NETWORK_ERROR", message } });
38
+ process.exit(1);
39
+ }
40
+ function explainLinkedinError(err) {
41
+ const lower = err.message.toLowerCase();
42
+ if (err.code === "VALIDATION_ERROR" && lower.includes("granularity") && lower.includes("daily")) {
43
+ return {
44
+ action: "retry_with_flag",
45
+ message: "LinkedIn rejects DAILY granularity when pivoting on demographic dims (job-title, company, etc.). Re-run with --granularity ALL or MONTHLY.",
46
+ correctedCommand: undefined,
47
+ };
48
+ }
49
+ if (err.code === "RATE_LIMITED") {
50
+ return {
51
+ action: "wait_and_retry",
52
+ message: "Hit a LinkedIn throttle. The CLI already backs off automatically — if you see this you've exhausted the retry budget. Wait ~60s and retry.",
53
+ };
54
+ }
55
+ if (err.code === "INTERNAL_ERROR" && lower.includes("deprecat")) {
56
+ return {
57
+ action: "reject",
58
+ message: "LinkedIn-Version header is deprecated. The backend constant LINKEDIN_API_VERSION needs to be bumped — file an issue or update the constant.",
59
+ };
60
+ }
61
+ return { action: "reject", message: err.message };
62
+ }
63
+ const LI_ACCOUNT_ID_RE = /^(urn:li:sponsoredAccount:)?\d+$/;
64
+ /** Pull the default LinkedIn ad account ID from `--account-id` arg or env. */
65
+ export function resolveAccountIdArg(args) {
66
+ const fromArgs = args["account-id"] ?? args["account-urn"];
67
+ const id = fromArgs || getEnv().BAKER_LINKEDIN_AD_ACCOUNT_ID;
68
+ if (!id) {
69
+ writeAdsJson({
70
+ ok: false,
71
+ error: {
72
+ code: "MISSING_ACCOUNT_ID",
73
+ message: "Pass --account-id (numeric) or --account-urn (urn:li:sponsoredAccount:N), or set BAKER_LINKEDIN_AD_ACCOUNT_ID. Run `baker ads linkedin accounts` to find IDs.",
74
+ },
75
+ });
76
+ process.exit(1);
77
+ }
78
+ if (!LI_ACCOUNT_ID_RE.test(id)) {
79
+ writeAdsJson({
80
+ ok: false,
81
+ error: {
82
+ code: "INVALID_ACCOUNT_ID",
83
+ message: `Invalid LinkedIn account ID "${id}". Expected numeric or urn:li:sponsoredAccount:N.`,
84
+ },
85
+ });
86
+ process.exit(1);
87
+ }
88
+ return id.startsWith("urn:") ? (id.split(":").pop() ?? id) : id;
89
+ }
90
+ export function todayIso() {
91
+ return new Date().toISOString().slice(0, 10);
92
+ }
93
+ export function daysAgoIso(days) {
94
+ return new Date(Date.now() - days * DAY_MS).toISOString().slice(0, 10);
95
+ }
96
+ export function csvOrJson(args) {
97
+ return args.output ?? "json";
98
+ }
99
+ /**
100
+ * Default to ACTIVE-only on listings — almost always what an AI agent or human
101
+ * glance wants. `--all-statuses` widens; `--statuses ACTIVE,PAUSED` overrides.
102
+ */
103
+ export function resolveStatusFilter(args) {
104
+ if (args["all-statuses"]) {
105
+ return undefined;
106
+ }
107
+ const explicit = args.statuses;
108
+ if (explicit) {
109
+ return explicit
110
+ .split(",")
111
+ .map((s) => s.trim().toUpperCase())
112
+ .filter(Boolean);
113
+ }
114
+ return ["ACTIVE"];
115
+ }
116
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Top-companies — pivot=MEMBER_COMPANY shortcut. The single highest-leverage
3
+ * LinkedIn-native query for ABM.
4
+ *
5
+ * pivotValues come back as ["urn:li:organization:1234567"]. The CLI surfaces
6
+ * the URN; agents can resolve names via /rest/organizations or via the
7
+ * Company Engagement Report. Future: backend-side name resolution.
8
+ */
9
+ export declare const topCompaniesCommand: import("citty").CommandDef<{
10
+ readonly "campaign-id": {
11
+ readonly type: "string";
12
+ readonly description: "Comma-separated campaign IDs (required)";
13
+ };
14
+ readonly intent: {
15
+ readonly type: "string";
16
+ readonly description: "baseline | revenue | funnel | engagement | lead-gen (default: baseline)";
17
+ };
18
+ readonly "top-n": {
19
+ readonly type: "string";
20
+ readonly description: "Top rows by impressions (default: 25)";
21
+ };
22
+ readonly start: {
23
+ readonly type: "string";
24
+ readonly description: "Start date YYYY-MM-DD";
25
+ };
26
+ readonly end: {
27
+ readonly type: "string";
28
+ readonly description: "End date YYYY-MM-DD";
29
+ };
30
+ readonly "last-days": {
31
+ readonly type: "string";
32
+ readonly description: "Window relative to today (default: 30)";
33
+ };
34
+ readonly "skip-cache": {
35
+ readonly type: "boolean";
36
+ readonly description: "Bypass server-side cache";
37
+ };
38
+ readonly output: {
39
+ readonly type: "string";
40
+ readonly description: "json|csv|jsonl|md";
41
+ readonly default: "json";
42
+ };
43
+ }>;
44
+ //# sourceMappingURL=top-companies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"top-companies.d.ts","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/top-companies.ts"],"names":[],"mappings":"AAWA;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2E9B,CAAC"}
@@ -0,0 +1,86 @@
1
+ import { defineCommand } from "citty";
2
+ import { apiPost } from "../../../client.js";
3
+ import { writeAdsJson, writeAdsOutput } from "../output.js";
4
+ import { csvOrJson, daysAgoIso, handleLinkedinError, todayIso } from "./shared.js";
5
+ /**
6
+ * Top-companies — pivot=MEMBER_COMPANY shortcut. The single highest-leverage
7
+ * LinkedIn-native query for ABM.
8
+ *
9
+ * pivotValues come back as ["urn:li:organization:1234567"]. The CLI surfaces
10
+ * the URN; agents can resolve names via /rest/organizations or via the
11
+ * Company Engagement Report. Future: backend-side name resolution.
12
+ */
13
+ export const topCompaniesCommand = defineCommand({
14
+ meta: {
15
+ name: "top-companies",
16
+ description: `Top companies whose employees saw / clicked / converted on a campaign.
17
+
18
+ Wrapper for: analytics --pivot company. Returns rows sorted by impressions desc.
19
+ Each row's pivot[] contains an urn:li:organization:NNN — that's the URN you
20
+ join against the Company Engagement Report or LinkedIn's Sales Navigator.
21
+
22
+ Demographic data is delayed 12-24h with a ≥3-event privacy floor.
23
+
24
+ Examples:
25
+ baker ads linkedin top-companies --campaign-id 1234 --last-days 30
26
+ baker ads linkedin top-companies --campaign-id 1,2,3 --intent revenue --last-days 90 --top-n 50
27
+ baker ads linkedin top-companies --campaign-id 1234 --output csv`,
28
+ },
29
+ args: {
30
+ "campaign-id": { type: "string", description: "Comma-separated campaign IDs (required)" },
31
+ intent: { type: "string", description: "baseline | revenue | funnel | engagement | lead-gen (default: baseline)" },
32
+ "top-n": { type: "string", description: "Top rows by impressions (default: 25)" },
33
+ start: { type: "string", description: "Start date YYYY-MM-DD" },
34
+ end: { type: "string", description: "End date YYYY-MM-DD" },
35
+ "last-days": { type: "string", description: "Window relative to today (default: 30)" },
36
+ "skip-cache": { type: "boolean", description: "Bypass server-side cache" },
37
+ output: { type: "string", description: "json|csv|jsonl|md", default: "json" },
38
+ },
39
+ run: async ({ args }) => {
40
+ const campaignIdsRaw = args["campaign-id"];
41
+ if (!campaignIdsRaw) {
42
+ handleLinkedinError(new Error("--campaign-id is required (CSV for multi)."));
43
+ }
44
+ const ids = campaignIdsRaw
45
+ .split(",")
46
+ .map((s) => s.trim())
47
+ .filter(Boolean);
48
+ const intent = args.intent ?? "baseline";
49
+ const topN = args["top-n"] ? Number(args["top-n"]) : 25;
50
+ const start = args.start ?? daysAgoIso(args["last-days"] ? Number(args["last-days"]) : 30);
51
+ const end = args.end ?? todayIso();
52
+ try {
53
+ const data = await apiPost("/api/ads/linkedin/analytics", {
54
+ request: {
55
+ level: "campaign",
56
+ ids,
57
+ intent,
58
+ pivot: "company",
59
+ start,
60
+ end,
61
+ granularity: "ALL",
62
+ limit: 500,
63
+ },
64
+ skipCache: Boolean(args["skip-cache"]),
65
+ });
66
+ const top = [...data.rows].sort((a, b) => Number(b.impressions ?? 0) - Number(a.impressions ?? 0)).slice(0, topN);
67
+ const fmt = csvOrJson(args);
68
+ if (fmt !== "json") {
69
+ writeAdsOutput(top, fmt, data.fields);
70
+ return;
71
+ }
72
+ writeAdsJson({
73
+ ok: true,
74
+ data: {
75
+ query: { campaigns: ids, start, end, intent, topN },
76
+ rows: top,
77
+ warnings: data.warnings,
78
+ },
79
+ });
80
+ }
81
+ catch (err) {
82
+ handleLinkedinError(err);
83
+ }
84
+ },
85
+ });
86
+ //# sourceMappingURL=top-companies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"top-companies.js","sourceRoot":"","sources":["../../../../src/commands/ads/linkedin/top-companies.ts"],"names":[],"mappings":"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"}
package/dist/env.d.ts CHANGED
@@ -7,6 +7,7 @@ type Env = {
7
7
  BAKER_GSC_SITE_URL?: string;
8
8
  BAKER_X_ADS_ACCOUNT_ID?: string;
9
9
  BAKER_META_AD_ACCOUNT_ID?: string;
10
+ BAKER_LINKEDIN_AD_ACCOUNT_ID?: string;
10
11
  };
11
12
  export declare function getEnv(): Env;
12
13
  export declare function requireChatId(): string;
package/dist/env.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAGA,KAAK,GAAG,GAAG;IACT,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC,CAAC;AAIF,wBAAgB,MAAM,IAAI,GAAG,CAuB5B;AAED,wBAAgB,aAAa,IAAI,MAAM,CAQtC"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAGA,KAAK,GAAG,GAAG;IACT,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,4BAA4B,CAAC,EAAE,MAAM,CAAC;CACvC,CAAC;AAIF,wBAAgB,MAAM,IAAI,GAAG,CA2B5B;AAED,wBAAgB,aAAa,IAAI,MAAM,CAQtC"}