@koda-sl/baker-cli 0.557.0 → 0.558.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{account-reads-T6GTSAXE.js → account-reads-GQWTMLTY.js} +2 -2
- package/dist/{accounts-HJAQTVDA.js → accounts-ZFQYZT3J.js} +7 -2
- package/dist/accounts-ZFQYZT3J.js.map +1 -0
- package/dist/{ads-WWZK7UYG.js → ads-VYMFRGAC.js} +2 -2
- package/dist/{advertisers-FME2ABRB.js → advertisers-A3Q53R2S.js} +2 -2
- package/dist/{autocomplete-CBOYGT73.js → autocomplete-OOLUPUIJ.js} +2 -2
- package/dist/{changes-OIVPZJHE.js → changes-MVCX3GLE.js} +16 -11
- package/dist/changes-MVCX3GLE.js.map +1 -0
- package/dist/{chunk-JPK34QPS.js → chunk-2L24FULD.js} +3 -3
- package/dist/chunk-2L24FULD.js.map +1 -0
- package/dist/{chunk-PQ7RLE43.js → chunk-HNELOMY2.js} +26 -433
- package/dist/chunk-HNELOMY2.js.map +1 -0
- package/dist/chunk-NPGPRZW2.js +1313 -0
- package/dist/chunk-NPGPRZW2.js.map +1 -0
- package/dist/{chunk-SNWFM2DB.js → chunk-Q2JDS6WL.js} +11 -1
- package/dist/chunk-Q2JDS6WL.js.map +1 -0
- package/dist/cli.js +2 -2
- package/dist/{conversion-upload-command-J2FIO74Y.js → conversion-upload-command-U36QYHUT.js} +2 -2
- package/dist/{currency-B5T7TYKD.js → currency-XFY2EX72.js} +3 -3
- package/dist/{discover-SS3PO5Y6.js → discover-J5344ATV.js} +2 -2
- package/dist/{draft-EB5ZFDVN.js → draft-OIGJUFOH.js} +2 -2
- package/dist/{forecast-XDRKCR65.js → forecast-HFCRTFIF.js} +2 -2
- package/dist/{google-UJ4YJGTJ.js → google-TOO3FDZ6.js} +22 -22
- package/dist/{intent-OMSJPOJZ.js → intent-PU3XUDLL.js} +2 -2
- package/dist/{keyword-gap-3P72T4NV.js → keyword-gap-B6T7ZFTZ.js} +2 -2
- package/dist/{keyword-metrics-DDY2RDYK.js → keyword-metrics-CXGNLERO.js} +2 -2
- package/dist/{keywords-for-site-TFHOM23P.js → keywords-for-site-OYMDRMMX.js} +2 -2
- package/dist/{languages-WWKMRZCH.js → languages-ETKG5WM3.js} +2 -2
- package/dist/{locations-P3CUBKYZ.js → locations-VPZYTFVK.js} +2 -2
- package/dist/{metrics-PSXIV4QS.js → metrics-J3WD2CUD.js} +2 -2
- package/dist/{query-PC7V3OFF.js → query-ZYG5RCCW.js} +5 -5
- package/dist/{relevant-pages-3CCAQA5Y.js → relevant-pages-7U6I2WPM.js} +2 -2
- package/dist/{research-M6LXE3VX.js → research-3BWJCS7N.js} +8 -8
- package/dist/{themes-BGBDYQQK.js → themes-C4PPU427.js} +2 -2
- package/dist/{url-options-GJ7ZIUPD.js → url-options-C3ZOWN2L.js} +3 -3
- package/package.json +1 -1
- package/dist/accounts-HJAQTVDA.js.map +0 -1
- package/dist/changes-OIVPZJHE.js.map +0 -1
- package/dist/chunk-6HPTF5YS.js +0 -857
- package/dist/chunk-6HPTF5YS.js.map +0 -1
- package/dist/chunk-JPK34QPS.js.map +0 -1
- package/dist/chunk-PQ7RLE43.js.map +0 -1
- package/dist/chunk-SNWFM2DB.js.map +0 -1
- /package/dist/{account-reads-T6GTSAXE.js.map → account-reads-GQWTMLTY.js.map} +0 -0
- /package/dist/{ads-WWZK7UYG.js.map → ads-VYMFRGAC.js.map} +0 -0
- /package/dist/{advertisers-FME2ABRB.js.map → advertisers-A3Q53R2S.js.map} +0 -0
- /package/dist/{autocomplete-CBOYGT73.js.map → autocomplete-OOLUPUIJ.js.map} +0 -0
- /package/dist/{conversion-upload-command-J2FIO74Y.js.map → conversion-upload-command-U36QYHUT.js.map} +0 -0
- /package/dist/{currency-B5T7TYKD.js.map → currency-XFY2EX72.js.map} +0 -0
- /package/dist/{discover-SS3PO5Y6.js.map → discover-J5344ATV.js.map} +0 -0
- /package/dist/{draft-EB5ZFDVN.js.map → draft-OIGJUFOH.js.map} +0 -0
- /package/dist/{forecast-XDRKCR65.js.map → forecast-HFCRTFIF.js.map} +0 -0
- /package/dist/{google-UJ4YJGTJ.js.map → google-TOO3FDZ6.js.map} +0 -0
- /package/dist/{intent-OMSJPOJZ.js.map → intent-PU3XUDLL.js.map} +0 -0
- /package/dist/{keyword-gap-3P72T4NV.js.map → keyword-gap-B6T7ZFTZ.js.map} +0 -0
- /package/dist/{keyword-metrics-DDY2RDYK.js.map → keyword-metrics-CXGNLERO.js.map} +0 -0
- /package/dist/{keywords-for-site-TFHOM23P.js.map → keywords-for-site-OYMDRMMX.js.map} +0 -0
- /package/dist/{languages-WWKMRZCH.js.map → languages-ETKG5WM3.js.map} +0 -0
- /package/dist/{locations-P3CUBKYZ.js.map → locations-VPZYTFVK.js.map} +0 -0
- /package/dist/{metrics-PSXIV4QS.js.map → metrics-J3WD2CUD.js.map} +0 -0
- /package/dist/{query-PC7V3OFF.js.map → query-ZYG5RCCW.js.map} +0 -0
- /package/dist/{relevant-pages-3CCAQA5Y.js.map → relevant-pages-7U6I2WPM.js.map} +0 -0
- /package/dist/{research-M6LXE3VX.js.map → research-3BWJCS7N.js.map} +0 -0
- /package/dist/{themes-BGBDYQQK.js.map → themes-C4PPU427.js.map} +0 -0
- /package/dist/{url-options-GJ7ZIUPD.js.map → url-options-C3ZOWN2L.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
GOOGLE_ADS_LANGUAGES
|
|
3
3
|
} from "./chunk-FVDC6AKZ.js";
|
|
4
|
-
import "./chunk-
|
|
4
|
+
import "./chunk-Q2JDS6WL.js";
|
|
5
5
|
import {
|
|
6
6
|
writeAdsJson
|
|
7
7
|
} from "./chunk-QYH2UZAK.js";
|
|
@@ -37,4 +37,4 @@ var languagesCommand = defineCommand({
|
|
|
37
37
|
export {
|
|
38
38
|
languagesCommand
|
|
39
39
|
};
|
|
40
|
-
//# sourceMappingURL=languages-
|
|
40
|
+
//# sourceMappingURL=languages-ETKG5WM3.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
GOOGLE_ADS_LOCATIONS
|
|
3
3
|
} from "./chunk-FVDC6AKZ.js";
|
|
4
|
-
import "./chunk-
|
|
4
|
+
import "./chunk-Q2JDS6WL.js";
|
|
5
5
|
import {
|
|
6
6
|
writeAdsJson
|
|
7
7
|
} from "./chunk-QYH2UZAK.js";
|
|
@@ -37,4 +37,4 @@ var locationsCommand = defineCommand({
|
|
|
37
37
|
export {
|
|
38
38
|
locationsCommand
|
|
39
39
|
};
|
|
40
|
-
//# sourceMappingURL=locations-
|
|
40
|
+
//# sourceMappingURL=locations-VPZYTFVK.js.map
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
buildAdsQueryContext,
|
|
8
8
|
warnDefaults
|
|
9
9
|
} from "./chunk-FVDC6AKZ.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-Q2JDS6WL.js";
|
|
11
11
|
import {
|
|
12
12
|
buildQueryCacheKey,
|
|
13
13
|
cacheGet,
|
|
@@ -149,4 +149,4 @@ export {
|
|
|
149
149
|
metricsCommand,
|
|
150
150
|
stampMetricsResponse
|
|
151
151
|
};
|
|
152
|
-
//# sourceMappingURL=metrics-
|
|
152
|
+
//# sourceMappingURL=metrics-J3WD2CUD.js.map
|
|
@@ -22,11 +22,11 @@ import {
|
|
|
22
22
|
unobservedSelectedFields,
|
|
23
23
|
unwrittenColumnWarnings,
|
|
24
24
|
warningLines
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-HNELOMY2.js";
|
|
26
26
|
import "./chunk-Y2FAUFWK.js";
|
|
27
|
-
import "./chunk-
|
|
28
|
-
import "./chunk-
|
|
29
|
-
import "./chunk-
|
|
27
|
+
import "./chunk-2L24FULD.js";
|
|
28
|
+
import "./chunk-NPGPRZW2.js";
|
|
29
|
+
import "./chunk-Q2JDS6WL.js";
|
|
30
30
|
import "./chunk-QYH2UZAK.js";
|
|
31
31
|
import "./chunk-MSMTG6OC.js";
|
|
32
32
|
import "./chunk-GFWWHCBF.js";
|
|
@@ -59,4 +59,4 @@ export {
|
|
|
59
59
|
unwrittenColumnWarnings,
|
|
60
60
|
warningLines
|
|
61
61
|
};
|
|
62
|
-
//# sourceMappingURL=query-
|
|
62
|
+
//# sourceMappingURL=query-ZYG5RCCW.js.map
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
buildResearchQueryContext,
|
|
10
10
|
warnDefaults
|
|
11
11
|
} from "./chunk-FVDC6AKZ.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-Q2JDS6WL.js";
|
|
13
13
|
import "./chunk-MSMTG6OC.js";
|
|
14
14
|
import {
|
|
15
15
|
apiPost
|
|
@@ -96,4 +96,4 @@ Examples:
|
|
|
96
96
|
export {
|
|
97
97
|
relevantPagesCommand
|
|
98
98
|
};
|
|
99
|
-
//# sourceMappingURL=relevant-pages-
|
|
99
|
+
//# sourceMappingURL=relevant-pages-7U6I2WPM.js.map
|
|
@@ -57,19 +57,19 @@ Full guide: __tooling__/docs/tools/baker/research.md`
|
|
|
57
57
|
"google-ads": () => import("./google-ads-DYGNJEIT.js").then((m) => m.googleAdsCommand),
|
|
58
58
|
reddit: () => import("./reddit-3KAMZIPT.js").then((m) => m.redditCommand),
|
|
59
59
|
customers: () => import("./customers-DXOLSUXV.js").then((m) => m.customersCommand),
|
|
60
|
-
advertisers: () => import("./advertisers-
|
|
61
|
-
autocomplete: () => import("./autocomplete-
|
|
60
|
+
advertisers: () => import("./advertisers-A3Q53R2S.js").then((m) => m.advertisersCommand),
|
|
61
|
+
autocomplete: () => import("./autocomplete-OOLUPUIJ.js").then((m) => m.autocompleteCommand),
|
|
62
62
|
countries: () => import("./countries-6ST54UGJ.js").then((m) => m.countriesCommand),
|
|
63
|
-
intent: () => import("./intent-
|
|
64
|
-
"keyword-metrics": () => import("./keyword-metrics-
|
|
65
|
-
"keywords-for-site": () => import("./keywords-for-site-
|
|
66
|
-
"keyword-gap": () => import("./keyword-gap-
|
|
63
|
+
intent: () => import("./intent-PU3XUDLL.js").then((m) => m.intentCommand),
|
|
64
|
+
"keyword-metrics": () => import("./keyword-metrics-CXGNLERO.js").then((m) => m.keywordMetricsCommand),
|
|
65
|
+
"keywords-for-site": () => import("./keywords-for-site-OYMDRMMX.js").then((m) => m.keywordsForSiteCommand),
|
|
66
|
+
"keyword-gap": () => import("./keyword-gap-B6T7ZFTZ.js").then((m) => m.keywordGapCommand),
|
|
67
67
|
languages: () => import("./languages-Q5RMPGI4.js").then((m) => m.languagesCommand),
|
|
68
68
|
lighthouse: () => import("./lighthouse-D3BJGHLO.js").then((m) => m.lighthouseCommand),
|
|
69
|
-
"relevant-pages": () => import("./relevant-pages-
|
|
69
|
+
"relevant-pages": () => import("./relevant-pages-7U6I2WPM.js").then((m) => m.relevantPagesCommand)
|
|
70
70
|
}
|
|
71
71
|
});
|
|
72
72
|
export {
|
|
73
73
|
researchCommand
|
|
74
74
|
};
|
|
75
|
-
//# sourceMappingURL=research-
|
|
75
|
+
//# sourceMappingURL=research-3BWJCS7N.js.map
|
|
@@ -12,7 +12,7 @@ import "./chunk-4NZ47VXO.js";
|
|
|
12
12
|
import "./chunk-D5FY4FAK.js";
|
|
13
13
|
import "./chunk-4H6XLX7E.js";
|
|
14
14
|
import "./chunk-QALAJNBG.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-Q2JDS6WL.js";
|
|
16
16
|
import {
|
|
17
17
|
getManagerIdForCustomer,
|
|
18
18
|
writeJsonEnvelope
|
|
@@ -92,4 +92,4 @@ Example:
|
|
|
92
92
|
export {
|
|
93
93
|
themesCommand
|
|
94
94
|
};
|
|
95
|
-
//# sourceMappingURL=themes-
|
|
95
|
+
//# sourceMappingURL=themes-C4PPU427.js.map
|
|
@@ -5,10 +5,10 @@ import {
|
|
|
5
5
|
import "./chunk-NKQWDEB7.js";
|
|
6
6
|
import {
|
|
7
7
|
parseApiError
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-NPGPRZW2.js";
|
|
9
9
|
import {
|
|
10
10
|
urlOptionsHints
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-Q2JDS6WL.js";
|
|
12
12
|
import {
|
|
13
13
|
getManagerIdForCustomer,
|
|
14
14
|
resolveCustomerId,
|
|
@@ -128,4 +128,4 @@ Examples:
|
|
|
128
128
|
export {
|
|
129
129
|
urlOptionsCommand
|
|
130
130
|
};
|
|
131
|
-
//# sourceMappingURL=url-options-
|
|
131
|
+
//# sourceMappingURL=url-options-C3ZOWN2L.js.map
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/ads/google/accounts.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport { AVAILABLE_ARG, writeAvailableAccounts } from \"../../../available-accounts.ts\";\nimport { ApiError, apiGet } from \"../../../client.ts\";\nimport { connectedResourceHints } from \"../../../connected-resources.ts\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { cacheGet, cacheSet } from \"../cache.ts\";\nimport { writeAdsJson, writeAdsOutput, writeJsonEnvelope } from \"../output.ts\";\nimport type { AdsErrorEnvelope } from \"../types.ts\";\n\nregisterSchema({\n command: \"ads.google.accounts\",\n description:\n \"List the Google Ads accounts this company connected — there can be several, and every one of them is yours to work in. Returns accounts with id, name, access_type (direct or managed), level in the hierarchy, and optional manager_id for managed accounts. Run this first to find account IDs for other commands.\",\n args: {\n \"no-cache\": { type: \"boolean\", description: \"Skip cache, hit API directly\", required: false },\n output: { type: \"string\", description: \"Format: json|csv|md\", required: false, default: \"json\" },\n available: AVAILABLE_ARG,\n },\n});\n\ninterface AccountInfo {\n id: string;\n name: string;\n access_type: \"direct\" | \"managed\";\n level: number;\n manager_id?: string;\n}\n\nimport { handleConnectionError, needsConnectionFix } from \"../../../error-handler.ts\";\n\nfunction accountHints(accounts: AccountInfo[]): string[] {\n return connectedResourceHints({\n plural: \"Google Ads accounts\",\n singular: \"Google Ads account\",\n flag: \"--customer-id\",\n resources: accounts.map((account) => ({ id: account.id, label: account.name })),\n });\n}\n\nfunction handleAccountsError(err: unknown): never {\n if (err instanceof ApiError) {\n if (needsConnectionFix(err.code, err.message)) {\n handleConnectionError(\"google_ads\", err.message);\n }\n const envelope: AdsErrorEnvelope = {\n ok: false,\n error: {\n code: err.code,\n message: err.message,\n fix: {\n action: \"reject\",\n explanation: err.message,\n },\n retryable: false,\n },\n };\n writeAdsJson(envelope);\n process.exit(1);\n }\n writeAdsJson({ ok: false, error: { code: \"NETWORK_ERROR\", message: \"Unexpected error\" } });\n process.exit(1);\n}\n\nexport const accountsCommand = defineCommand({\n meta: {\n name: \"accounts\",\n description: `List accessible Google Ads accounts. Returns customer IDs needed for all other commands.\n\nExamples:\n baker ads google accounts\n baker ads google accounts --available # every account the login reaches, selected or not`,\n },\n args: {\n \"no-cache\": { type: \"boolean\", description: \"Skip cache\", required: false },\n output: { type: \"string\", description: \"Format: json|csv|md\", required: false, default: \"json\" },\n available: AVAILABLE_ARG,\n },\n run: async ({ args }) => {\n if (args.available) return writeAvailableAccounts(\"google-ads\", handleAccountsError);\n const useCache = !args[\"no-cache\"];\n\n if (useCache) {\n const cached = cacheGet<AccountInfo[]>(\"accounts\", \"list\");\n if (cached) {\n writeJsonEnvelope({ ok: true, data: cached.data, cached: true, hints: accountHints(cached.data) });\n return;\n }\n }\n\n try {\n const params = !useCache ? { \"skip-cache\": \"true\" } : undefined;\n const data = await apiGet<AccountInfo[]>(\"/api/ads/google/accounts\", params);\n if (useCache) {\n cacheSet(\"accounts\", \"list\", data, 60 * 60 * 1000);\n }\n const format = (args.output as string) || \"json\";\n if (format !== \"json\") {\n writeAdsOutput(data as unknown as Array<Record<string, unknown>>, format);\n return;\n }\n writeJsonEnvelope({ ok: true, data, hints: accountHints(data) });\n } catch (err) {\n handleAccountsError(err);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,qBAAqB;AAS9B,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aACE;AAAA,EACF,MAAM;AAAA,IACJ,YAAY,EAAE,MAAM,WAAW,aAAa,gCAAgC,UAAU,MAAM;AAAA,IAC5F,QAAQ,EAAE,MAAM,UAAU,aAAa,uBAAuB,UAAU,OAAO,SAAS,OAAO;AAAA,IAC/F,WAAW;AAAA,EACb;AACF,CAAC;AAYD,SAAS,aAAa,UAAmC;AACvD,SAAO,uBAAuB;AAAA,IAC5B,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,IACN,WAAW,SAAS,IAAI,CAAC,aAAa,EAAE,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,EAAE;AAAA,EAChF,CAAC;AACH;AAEA,SAAS,oBAAoB,KAAqB;AAChD,MAAI,eAAe,UAAU;AAC3B,QAAI,mBAAmB,IAAI,MAAM,IAAI,OAAO,GAAG;AAC7C,4BAAsB,cAAc,IAAI,OAAO;AAAA,IACjD;AACA,UAAM,WAA6B;AAAA,MACjC,IAAI;AAAA,MACJ,OAAO;AAAA,QACL,MAAM,IAAI;AAAA,QACV,SAAS,IAAI;AAAA,QACb,KAAK;AAAA,UACH,QAAQ;AAAA,UACR,aAAa,IAAI;AAAA,QACnB;AAAA,QACA,WAAW;AAAA,MACb;AAAA,IACF;AACA,iBAAa,QAAQ;AACrB,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,eAAa,EAAE,IAAI,OAAO,OAAO,EAAE,MAAM,iBAAiB,SAAS,mBAAmB,EAAE,CAAC;AACzF,UAAQ,KAAK,CAAC;AAChB;AAEO,IAAM,kBAAkB,cAAc;AAAA,EAC3C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,EAKf;AAAA,EACA,MAAM;AAAA,IACJ,YAAY,EAAE,MAAM,WAAW,aAAa,cAAc,UAAU,MAAM;AAAA,IAC1E,QAAQ,EAAE,MAAM,UAAU,aAAa,uBAAuB,UAAU,OAAO,SAAS,OAAO;AAAA,IAC/F,WAAW;AAAA,EACb;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,QAAI,KAAK,UAAW,QAAO,uBAAuB,cAAc,mBAAmB;AACnF,UAAM,WAAW,CAAC,KAAK,UAAU;AAEjC,QAAI,UAAU;AACZ,YAAM,SAAS,SAAwB,YAAY,MAAM;AACzD,UAAI,QAAQ;AACV,0BAAkB,EAAE,IAAI,MAAM,MAAM,OAAO,MAAM,QAAQ,MAAM,OAAO,aAAa,OAAO,IAAI,EAAE,CAAC;AACjG;AAAA,MACF;AAAA,IACF;AAEA,QAAI;AACF,YAAM,SAAS,CAAC,WAAW,EAAE,cAAc,OAAO,IAAI;AACtD,YAAM,OAAO,MAAM,OAAsB,4BAA4B,MAAM;AAC3E,UAAI,UAAU;AACZ,iBAAS,YAAY,QAAQ,MAAM,KAAK,KAAK,GAAI;AAAA,MACnD;AACA,YAAM,SAAU,KAAK,UAAqB;AAC1C,UAAI,WAAW,QAAQ;AACrB,uBAAe,MAAmD,MAAM;AACxE;AAAA,MACF;AACA,wBAAkB,EAAE,IAAI,MAAM,MAAM,OAAO,aAAa,IAAI,EAAE,CAAC;AAAA,IACjE,SAAS,KAAK;AACZ,0BAAoB,GAAG;AAAA,IACzB;AAAA,EACF;AACF,CAAC;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/ads/google/changes.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport { ApiError, apiPost } from \"../../../client.ts\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { getManagerIdForCustomer } from \"../cache.ts\";\nimport { getFieldDescriptions } from \"../field-descriptions.ts\";\nimport { resolveCustomerId, writeAdsJson, writeAdsOutput, writeJsonEnvelope } from \"../output.ts\";\nimport {\n CHANGE_SCOPE_MAX_DAYS,\n cappedChangesHint,\n DEFAULT_CHANGE_DAYS,\n resolveChangesWindow,\n} from \"./changes-window.ts\";\nimport { parseApiError } from \"./error-parser.ts\";\n\nregisterSchema({\n command: \"ads.google.changes\",\n description:\n \"Read the account's change history. --scope detail (default) shows what changed and to what value, back 30 days; --scope summary shows which resources changed, back 90 days.\",\n args: {\n \"customer-id\": {\n type: \"string\",\n description: \"Google Ads customer ID (10 digits, no dashes). Falls back to BAKER_GOOGLE_ADS_CUSTOMER_ID env var.\",\n required: false,\n },\n days: {\n type: \"string\",\n description: `Lookback days (default: ${DEFAULT_CHANGE_DAYS}). Max ${CHANGE_SCOPE_MAX_DAYS.detail} with --scope detail, ${CHANGE_SCOPE_MAX_DAYS.summary} with --scope summary. Google keeps nothing older behind any API.`,\n required: false,\n default: DEFAULT_CHANGE_DAYS,\n },\n scope: {\n type: \"string\",\n description: `detail|summary (default: detail). detail = old/new values plus who made the change, ${CHANGE_SCOPE_MAX_DAYS.detail} days. summary = which resources were added, changed or removed, ${CHANGE_SCOPE_MAX_DAYS.summary} days, without values.`,\n required: false,\n default: \"detail\",\n },\n \"resource-type\": {\n type: \"string\",\n description:\n \"Filter by type: CAMPAIGN, CAMPAIGN_CRITERION, AD_GROUP, AD_GROUP_AD, AD_GROUP_CRITERION. CAMPAIGN_CRITERION covers campaign-level negatives, location and audience exclusions.\",\n required: false,\n },\n limit: {\n type: \"string\",\n description:\n \"Max change events (default: 50, max: 1000). A read that comes back exactly this full has older changes behind it, and a hint says so.\",\n required: false,\n default: 50,\n },\n output: { type: \"string\", description: \"Format: json|csv|jsonl|md\", required: false, default: \"json\" },\n \"no-cache\": { type: \"boolean\", description: \"Skip cache, hit API directly\", required: false },\n },\n});\n\nexport const changesCommand = defineCommand({\n meta: {\n name: \"changes\",\n description: `Read the change history of a Google Ads account.\n\nGoogle keeps account history in two layers, and neither reaches past 90 days:\n --scope detail (default) what changed, old → new value, who changed it — last ${CHANGE_SCOPE_MAX_DAYS.detail} days\n --scope summary which resources were added, changed or removed — last ${CHANGE_SCOPE_MAX_DAYS.summary} days\n\nFor anything older, infer it from performance instead — a monthly spend trend per\ncampaign shows what started or stopped, just not who did it.\n\nExamples:\n baker ads google changes --customer-id 1234567890\n baker ads google changes --customer-id 1234567890 --days 14 --resource-type CAMPAIGN\n baker ads google changes --customer-id 1234567890 --days 60 --scope summary`,\n },\n args: {\n \"customer-id\": { type: \"string\", description: \"Google Ads customer ID\", required: false },\n days: { type: \"string\", description: `Lookback days (default ${DEFAULT_CHANGE_DAYS})`, required: false },\n scope: { type: \"string\", description: \"detail (30 days) or summary (90 days)\", required: false },\n \"resource-type\": { type: \"string\", description: \"Filter by resource type\", required: false },\n limit: { type: \"string\", description: \"Max results (default 50)\", required: false },\n \"no-cache\": { type: \"boolean\", description: \"Skip cache, hit API directly\", required: false },\n output: { type: \"string\", description: \"Format: json|csv|jsonl|md\", required: false, default: \"json\" },\n },\n run: async ({ args }) => {\n const customerId = await resolveCustomerId(args);\n\n const window = resolveChangesWindow({\n days: args.days ? Number(args.days) : undefined,\n scope: args.scope as string | undefined,\n });\n if (!window.ok) {\n writeJsonEnvelope({ ok: false, error: { ...window.error, retryable: false } });\n process.exit(1);\n return;\n }\n\n const limit = args.limit ? Number(args.limit) : 50;\n const body: Record<string, unknown> = { customerId, days: window.days, scope: window.scope, limit };\n const managerId = getManagerIdForCustomer(customerId);\n if (managerId) body.managerId = managerId;\n if (args[\"resource-type\"]) body.resourceType = args[\"resource-type\"];\n if (args[\"no-cache\"]) body.skipCache = true;\n\n try {\n const data = await apiPost<Array<Record<string, unknown>>>(\"/api/ads/google/changes\", body);\n const format = (args.output as string) || \"json\";\n const capped = cappedChangesHint(data, limit, window.days);\n\n if (format !== \"json\") {\n writeAdsOutput(data, format, undefined, capped ? [capped] : []);\n return;\n }\n\n const first = data[0];\n const fields = first ? Object.keys(first) : [];\n const fieldDescs = getFieldDescriptions(fields);\n writeJsonEnvelope({\n ok: true,\n data,\n fields: fieldDescs,\n hints: capped ? [capped, ...window.hints] : window.hints,\n });\n } catch (err) {\n if (err instanceof ApiError) {\n writeAdsJson(parseApiError(err.message, \"\", customerId, err.code));\n process.exit(1);\n }\n writeAdsJson({ ok: false, error: { code: \"NETWORK_ERROR\", message: \"Unexpected error\" } });\n process.exit(1);\n }\n },\n});\n"],"mappings":"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","names":[]}
|