@koda-sl/baker-cli 0.520.0 → 0.521.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 (100) hide show
  1. package/dist/{account-Z2N545F3.js → account-JXUUHDEB.js} +3 -3
  2. package/dist/{account-assets-UQ5RS66K.js → account-assets-3SIBPJXJ.js} +9 -9
  3. package/dist/account-assets-3SIBPJXJ.js.map +1 -0
  4. package/dist/{account-level-QHTIN4DY.js → account-level-46AIGZXA.js} +5 -5
  5. package/dist/{account-reads-QDVBCQ7D.js → account-reads-5VPDX6NF.js} +3 -3
  6. package/dist/{accounts-DAWCHDAC.js → accounts-D6FP4DC2.js} +3 -3
  7. package/dist/{activities-UIBWZUGE.js → activities-NYWRMNCH.js} +3 -3
  8. package/dist/{ads-6OUSUM5Y.js → ads-ALI6QLW2.js} +4 -4
  9. package/dist/{ads-I2KFV42R.js → ads-DRMVHMJH.js} +12 -12
  10. package/dist/{adsets-GYVCPG4K.js → adsets-XE5S6J5S.js} +11 -11
  11. package/dist/{asset-writes-F5E3TWLS.js → asset-writes-5TAUIKSN.js} +5 -5
  12. package/dist/{audience-writes-LVPTXKT7.js → audience-writes-P63WFDXJ.js} +4 -4
  13. package/dist/{audiences-AVQ2VWHF.js → audiences-U6MQRRTP.js} +8 -8
  14. package/dist/{businesses-XH7A32WX.js → businesses-RRYQYTG4.js} +3 -3
  15. package/dist/{campaigns-7ZUR46T2.js → campaigns-DDUXFR77.js} +11 -11
  16. package/dist/{catalogs-L6SLRMPR.js → catalogs-A6CHXN5B.js} +4 -4
  17. package/dist/{chunk-LC75VG6J.js → chunk-2UQJ5BDJ.js} +2 -2
  18. package/dist/{chunk-AI3ICPS6.js → chunk-3XG6I4K6.js} +2 -2
  19. package/dist/{chunk-7RERKOMK.js → chunk-IQ3MYXCJ.js} +2 -2
  20. package/dist/{chunk-6HZF5XQB.js → chunk-JHEWSMOS.js} +2 -2
  21. package/dist/{chunk-EAIFDVBK.js → chunk-NAYO267Q.js} +2 -2
  22. package/dist/{chunk-Y2JZX6JB.js → chunk-QALAJNBG.js} +6 -5
  23. package/dist/chunk-QALAJNBG.js.map +1 -0
  24. package/dist/cli.js +2 -2
  25. package/dist/{conversion-upload-command-OG3UCC5N.js → conversion-upload-command-TYGIB7XJ.js} +3 -3
  26. package/dist/{copy-writes-USCBG57G.js → copy-writes-GUOL2QUD.js} +5 -5
  27. package/dist/{creatives-52E7O3RB.js → creatives-BGYARLCC.js} +6 -6
  28. package/dist/{custom-conversions-L3CMZCTZ.js → custom-conversions-SUXA7KSN.js} +6 -6
  29. package/dist/{draft-7VJRJ2XH.js → draft-2EO63W4K.js} +3 -3
  30. package/dist/{draft-RF6LORXE.js → draft-PJT5TSFQ.js} +3 -3
  31. package/dist/{forecast-3G6GGAKZ.js → forecast-IECMUBL2.js} +3 -3
  32. package/dist/{google-4BN4ERUJ.js → google-CWHRLDBL.js} +11 -11
  33. package/dist/{insights-HOZ5H4A3.js → insights-VW475N6G.js} +3 -3
  34. package/dist/{instant-experiences-ARUYYGVW.js → instant-experiences-JJJKZAQQ.js} +4 -4
  35. package/dist/{leads-KCFSCWZY.js → leads-2BXRQDT5.js} +4 -4
  36. package/dist/{media-SXILZKYE.js → media-KXBWT2YJ.js} +3 -3
  37. package/dist/{meta-ZQLFWVAR.js → meta-5ODNL2LA.js} +38 -38
  38. package/dist/{page-photos-22Q6ZH2W.js → page-photos-CJIFQDW5.js} +4 -4
  39. package/dist/{pages-DYWRNXQP.js → pages-NJN2E5HU.js} +3 -3
  40. package/dist/{pixels-R3ISRBUJ.js → pixels-E7UYF4KE.js} +3 -3
  41. package/dist/{preview-UOMZ5TUK.js → preview-QGLUDJ3A.js} +3 -3
  42. package/dist/{rule-writes-OGVSR5US.js → rule-writes-AHDYOYVO.js} +4 -4
  43. package/dist/{rules-O2TI4YBB.js → rules-5HIC2F34.js} +9 -9
  44. package/dist/{shared-DADIQPBQ.js → shared-S7ZPZXF5.js} +3 -3
  45. package/dist/{shopify-3KNP5U4O.js → shopify-4JA7QEOL.js} +2 -2
  46. package/dist/{studies-6NJN4GE4.js → studies-FXX4XW4A.js} +7 -7
  47. package/dist/{study-writes-UTBR34XR.js → study-writes-H6RDMXF3.js} +4 -4
  48. package/dist/{targeting-RF7GL7TJ.js → targeting-URLZVNS2.js} +4 -4
  49. package/dist/{terms-2PXN3ZKO.js → terms-VIAM2BO5.js} +2 -2
  50. package/dist/{themes-SHDZQODW.js → themes-CIXQPTFX.js} +3 -3
  51. package/dist/{write-commands-K2XXF7JP.js → write-commands-AANGPJ5F.js} +8 -8
  52. package/package.json +1 -1
  53. package/dist/account-assets-UQ5RS66K.js.map +0 -1
  54. package/dist/chunk-Y2JZX6JB.js.map +0 -1
  55. /package/dist/{account-Z2N545F3.js.map → account-JXUUHDEB.js.map} +0 -0
  56. /package/dist/{account-level-QHTIN4DY.js.map → account-level-46AIGZXA.js.map} +0 -0
  57. /package/dist/{account-reads-QDVBCQ7D.js.map → account-reads-5VPDX6NF.js.map} +0 -0
  58. /package/dist/{accounts-DAWCHDAC.js.map → accounts-D6FP4DC2.js.map} +0 -0
  59. /package/dist/{activities-UIBWZUGE.js.map → activities-NYWRMNCH.js.map} +0 -0
  60. /package/dist/{ads-6OUSUM5Y.js.map → ads-ALI6QLW2.js.map} +0 -0
  61. /package/dist/{ads-I2KFV42R.js.map → ads-DRMVHMJH.js.map} +0 -0
  62. /package/dist/{adsets-GYVCPG4K.js.map → adsets-XE5S6J5S.js.map} +0 -0
  63. /package/dist/{asset-writes-F5E3TWLS.js.map → asset-writes-5TAUIKSN.js.map} +0 -0
  64. /package/dist/{audience-writes-LVPTXKT7.js.map → audience-writes-P63WFDXJ.js.map} +0 -0
  65. /package/dist/{audiences-AVQ2VWHF.js.map → audiences-U6MQRRTP.js.map} +0 -0
  66. /package/dist/{businesses-XH7A32WX.js.map → businesses-RRYQYTG4.js.map} +0 -0
  67. /package/dist/{campaigns-7ZUR46T2.js.map → campaigns-DDUXFR77.js.map} +0 -0
  68. /package/dist/{catalogs-L6SLRMPR.js.map → catalogs-A6CHXN5B.js.map} +0 -0
  69. /package/dist/{chunk-LC75VG6J.js.map → chunk-2UQJ5BDJ.js.map} +0 -0
  70. /package/dist/{chunk-AI3ICPS6.js.map → chunk-3XG6I4K6.js.map} +0 -0
  71. /package/dist/{chunk-7RERKOMK.js.map → chunk-IQ3MYXCJ.js.map} +0 -0
  72. /package/dist/{chunk-6HZF5XQB.js.map → chunk-JHEWSMOS.js.map} +0 -0
  73. /package/dist/{chunk-EAIFDVBK.js.map → chunk-NAYO267Q.js.map} +0 -0
  74. /package/dist/{conversion-upload-command-OG3UCC5N.js.map → conversion-upload-command-TYGIB7XJ.js.map} +0 -0
  75. /package/dist/{copy-writes-USCBG57G.js.map → copy-writes-GUOL2QUD.js.map} +0 -0
  76. /package/dist/{creatives-52E7O3RB.js.map → creatives-BGYARLCC.js.map} +0 -0
  77. /package/dist/{custom-conversions-L3CMZCTZ.js.map → custom-conversions-SUXA7KSN.js.map} +0 -0
  78. /package/dist/{draft-7VJRJ2XH.js.map → draft-2EO63W4K.js.map} +0 -0
  79. /package/dist/{draft-RF6LORXE.js.map → draft-PJT5TSFQ.js.map} +0 -0
  80. /package/dist/{forecast-3G6GGAKZ.js.map → forecast-IECMUBL2.js.map} +0 -0
  81. /package/dist/{google-4BN4ERUJ.js.map → google-CWHRLDBL.js.map} +0 -0
  82. /package/dist/{insights-HOZ5H4A3.js.map → insights-VW475N6G.js.map} +0 -0
  83. /package/dist/{instant-experiences-ARUYYGVW.js.map → instant-experiences-JJJKZAQQ.js.map} +0 -0
  84. /package/dist/{leads-KCFSCWZY.js.map → leads-2BXRQDT5.js.map} +0 -0
  85. /package/dist/{media-SXILZKYE.js.map → media-KXBWT2YJ.js.map} +0 -0
  86. /package/dist/{meta-ZQLFWVAR.js.map → meta-5ODNL2LA.js.map} +0 -0
  87. /package/dist/{page-photos-22Q6ZH2W.js.map → page-photos-CJIFQDW5.js.map} +0 -0
  88. /package/dist/{pages-DYWRNXQP.js.map → pages-NJN2E5HU.js.map} +0 -0
  89. /package/dist/{pixels-R3ISRBUJ.js.map → pixels-E7UYF4KE.js.map} +0 -0
  90. /package/dist/{preview-UOMZ5TUK.js.map → preview-QGLUDJ3A.js.map} +0 -0
  91. /package/dist/{rule-writes-OGVSR5US.js.map → rule-writes-AHDYOYVO.js.map} +0 -0
  92. /package/dist/{rules-O2TI4YBB.js.map → rules-5HIC2F34.js.map} +0 -0
  93. /package/dist/{shared-DADIQPBQ.js.map → shared-S7ZPZXF5.js.map} +0 -0
  94. /package/dist/{shopify-3KNP5U4O.js.map → shopify-4JA7QEOL.js.map} +0 -0
  95. /package/dist/{studies-6NJN4GE4.js.map → studies-FXX4XW4A.js.map} +0 -0
  96. /package/dist/{study-writes-UTBR34XR.js.map → study-writes-H6RDMXF3.js.map} +0 -0
  97. /package/dist/{targeting-RF7GL7TJ.js.map → targeting-URLZVNS2.js.map} +0 -0
  98. /package/dist/{terms-2PXN3ZKO.js.map → terms-VIAM2BO5.js.map} +0 -0
  99. /package/dist/{themes-SHDZQODW.js.map → themes-CIXQPTFX.js.map} +0 -0
  100. /package/dist/{write-commands-K2XXF7JP.js.map → write-commands-AANGPJ5F.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../api/src/ads-terms.ts","../src/commands/ads/terms-output.ts"],"sourcesContent":["/**\n * Ad platform terms — the shared CLI ⇄ backend ⇄ dashboard contract for the agreements a Baker\n * feature depends on (`baker ads terms`, `/api/ads/terms`, every staging gate that checks one, and\n * the review's \"Action needed before publishing\" row).\n *\n * Each platform asks a person on the account to accept some terms once before it takes certain\n * work (a customer list, a lead form, conversions matched by email). Baker can read whether most\n * of them are accepted, never accept them for anyone, and must say who does it and where — in the\n * same plain words wherever it is said. So the words live here, once: `adsTermGuide` is the whole\n * guide for one agreement, `termsActionNotice` is the one sentence a staging refusal or warning\n * carries, and `parseTermsActionNotice` lets the review render that sentence as a row with the\n * platform's mark and numbered steps.\n *\n * The inventory and its official sources: docs/platform-terms.md.\n *\n * This package must not depend on `convex`.\n */\nimport { z } from \"zod\";\n\nexport const ADS_TERMS_PLATFORMS = [\"meta\", \"google\", \"linkedin\"] as const;\nexport const adsTermsPlatformSchema = z.enum(ADS_TERMS_PLATFORMS);\nexport type AdsTermsPlatform = z.infer<typeof adsTermsPlatformSchema>;\n\nexport const ADS_TERMS_PLATFORM_LABEL: Readonly<Record<AdsTermsPlatform, string>> = {\n meta: \"Meta\",\n google: \"Google Ads\",\n linkedin: \"LinkedIn\",\n};\n\nexport const ADS_TERM_IDS = [\n \"meta.custom_audience\",\n \"meta.web_custom_audience\",\n \"meta.lead_generation\",\n \"google.customer_data\",\n \"google.lead_form\",\n] as const;\nexport const adsTermIdSchema = z.enum(ADS_TERM_IDS);\nexport type AdsTermId = z.infer<typeof adsTermIdSchema>;\n\nexport const ADS_TERM_STATUSES = [\"accepted\", \"not_accepted\", \"unknown\"] as const;\nexport type AdsTermStatus = (typeof ADS_TERM_STATUSES)[number];\n\n/** Where one agreement is accepted: the account (or Page) it belongs to, as the platform names it. */\nexport interface AdsTermSubject {\n accountId: string;\n pageId?: string;\n pageName?: string;\n}\n\nexport interface AdsTermGuide {\n id: AdsTermId;\n platform: AdsTermsPlatform;\n /** What the platform calls it on its own screens. */\n name: string;\n /** The Baker work that needs it, in the user's words. */\n neededFor: string[];\n /** True when the platform refuses that work without it; false when it takes it but its policy requires them. */\n blocks: boolean;\n /** What happens without them, one sentence. */\n consequence: string;\n /** Who can accept them. */\n who: string;\n /** Numbered-in-order steps a person follows, plain words. */\n steps: string[];\n /** Where to start, when the platform has a direct address for it. */\n link: string | null;\n}\n\nconst bare = (accountId: string) => accountId.replace(/^act_/, \"\").replace(/-/g, \"\");\n\n/** The address Meta gives for an ad account's Custom Audience terms (`act=` takes the bare id). */\nexport function metaCustomAudienceTermsUrl(accountId: string): string {\n return `https://business.facebook.com/ads/manage/customaudiences/tos/?act=${bare(accountId)}`;\n}\n\nexport const META_LEAD_GENERATION_TERMS_URL = \"https://www.facebook.com/ads/leadgen/tos\";\n\nconst GOOGLE_ADS_URL = \"https://ads.google.com\";\n\n/** \"the Google Ads account 386-508-3115\" as Google writes it, or just \"the Google Ads account\" when unknown. */\nfunction googleAccount(accountId: string): string {\n const digits = bare(accountId);\n if (!digits) return \"the Google Ads account\";\n return `the Google Ads account ${digits.length === 10 ? `${digits.slice(0, 3)}-${digits.slice(3, 6)}-${digits.slice(6)}` : digits}`;\n}\n\n/** The whole guide for one agreement on one account (or Page). Sources: docs/platform-terms.md. */\nexport function adsTermGuide(id: AdsTermId, subject: AdsTermSubject): AdsTermGuide {\n const account = bare(subject.accountId);\n switch (id) {\n case \"meta.custom_audience\": {\n const link = metaCustomAudienceTermsUrl(account);\n return {\n id,\n platform: \"meta\",\n name: \"Custom Audience terms\",\n neededFor: [\"customer lists\", \"Shopify buyer audiences\", \"lookalikes made from a customer list\"],\n blocks: true,\n consequence: \"Meta refuses every customer list on this ad account until they are accepted.\",\n who: `a person with a role on the ad account ${account}`,\n steps: [\n `Open ${link} while signed in to Facebook as a person with a role on ad account ${account}.`,\n \"Read Meta's Custom Audience terms and click Accept.\",\n \"Tell Baker it's done; Baker checks again before anything is published.\",\n ],\n link,\n };\n }\n case \"meta.web_custom_audience\": {\n const link = `https://adsmanager.facebook.com/adsmanager/audiences?act=${account}`;\n return {\n id,\n platform: \"meta\",\n name: \"Custom Audience terms for website audiences\",\n neededFor: [\"website visitor audiences (from the Meta pixel)\"],\n blocks: true,\n consequence: \"Meta refuses website visitor audiences on this ad account until they are accepted.\",\n who: `a person with a role on the ad account ${account}`,\n steps: [\n `Open ${link} (Meta Ads Manager ▸ Audiences for ad account ${account}).`,\n \"Click Create audience ▸ Custom audience ▸ Website; Meta shows its terms the first time.\",\n \"Read them and click Accept, then close the window without creating anything.\",\n \"Tell Baker it's done; Baker checks again before anything is published.\",\n ],\n link,\n };\n }\n case \"meta.lead_generation\": {\n const page = subject.pageName ? `\"${subject.pageName}\"` : `with id ${subject.pageId ?? \"?\"}`;\n return {\n id,\n platform: \"meta\",\n name: \"Lead Ads Terms\",\n neededFor: [\"instant forms\", \"lead ads that open a form inside the ad\"],\n blocks: true,\n consequence: `Meta refuses instant forms and lead ads for the Facebook Page ${page} until they are accepted, once per Page.`,\n who: `someone who can advertise for the Facebook Page ${page}`,\n steps: [\n `Open ${META_LEAD_GENERATION_TERMS_URL} while signed in to Facebook as someone who manages the Page.`,\n `Choose the Page ${page}.`,\n \"Read Meta's Lead Ads Terms and click Accept (in Ads Manager the same terms appear as View Terms ▸ I agree when making a first instant form).\",\n \"Tell Baker it's done; Baker checks again before anything is published.\",\n ],\n link: META_LEAD_GENERATION_TERMS_URL,\n };\n }\n case \"google.customer_data\":\n return {\n id,\n platform: \"google\",\n name: \"Customer data terms\",\n neededFor: [\n \"conversions uploaded with a customer's email or phone\",\n \"enhanced conversions\",\n \"customer lists and Shopify buyer audiences\",\n ],\n blocks: true,\n consequence:\n \"Google refuses conversions matched by a customer's email or phone until they are accepted, and its Customer Match policy expects them for customer lists.\",\n who: `an admin of ${googleAccount(account)} — or of its manager account, when the manager tracks this account's conversions`,\n steps: [\n `Sign in at ${GOOGLE_ADS_URL} and open ${googleAccount(account)} (the manager account instead, if it tracks this account's conversions).`,\n \"Click Goals, then Settings (in some accounts: Goals ▸ Conversions ▸ Settings).\",\n 'Next to \"Customer data terms\" (newer accounts: \"Customer data use\"), click View terms, tick that you accept them for your company, and click Agree.',\n \"Tell Baker it's done; Baker checks again before anything is published.\",\n ],\n link: GOOGLE_ADS_URL,\n };\n case \"google.lead_form\":\n return {\n id,\n platform: \"google\",\n name: \"Lead form ads terms\",\n neededFor: [\"lead forms inside Google ads (Baker can't create these yet)\"],\n blocks: true,\n consequence: \"Google refuses lead forms on this account until they are accepted.\",\n who: `an admin of ${googleAccount(account)}`,\n steps: [\n `Sign in at ${GOOGLE_ADS_URL} and open ${googleAccount(account)}.`,\n 'Click Admin, then Account settings, open \"Lead form ads terms\" and accept them (Google also asks the first time a lead form is made in Google Ads).',\n \"Tell Baker it's done; Baker checks again before anything is published.\",\n ],\n link: GOOGLE_ADS_URL,\n };\n default:\n return unreachableTerm(id);\n }\n}\n\nfunction unreachableTerm(id: never): never {\n throw new Error(`No guide for terms ${String(id)}`);\n}\n\n/** Every refusal or warning that asks a person to accept a platform's terms starts with this. */\nexport const TERMS_ACTION_PREFIX = \"Action needed before publishing:\";\n\nconst PLATFORM_BY_LABEL = new Map(\n ADS_TERMS_PLATFORMS.map((platform) => [ADS_TERMS_PLATFORM_LABEL[platform], platform] as const),\n);\n\n/**\n * The one sentence a staging refusal or warning carries for terms a person still has to accept:\n * what, where, why, who, and the numbered steps. Read back by `parseTermsActionNotice`. `consequence`\n * replaces the guide's when the caller knows more (how many conversions, what else would work).\n */\nexport function termsActionNotice(guide: AdsTermGuide, consequence: string = guide.consequence): string {\n return actionNotice(\"accept\", guide.name, guide.platform, consequence, guide.who, guide.steps);\n}\n\n/** What a notice asks the person to do: accept terms, or complete a check the platform runs on them. */\nexport type NoticeAction = \"accept\" | \"complete\";\n\nfunction actionNotice(\n action: NoticeAction,\n name: string,\n platform: AdsTermsPlatform,\n consequence: string,\n who: string,\n steps: readonly string[],\n): string {\n const numbered = steps.map((step, index) => `${index + 1}. ${step}`).join(\" \");\n return `${TERMS_ACTION_PREFIX} ${action} ${name} in ${ADS_TERMS_PLATFORM_LABEL[platform]}. ${consequence} Who: ${who}. Steps: ${numbered}`;\n}\n\n/** An ad account's \"Verifications and ad transparency\" settings in Ads Manager (`act=` takes the bare id). */\nexport function metaAdvertisingSettingsUrl(accountId: string): string {\n return `https://adsmanager.facebook.com/adsmanager/manage/advertising_settings?act=${bare(accountId)}`;\n}\n\n/**\n * Meta refusing an ad set until the ad account names an advertiser it has verified for where the ad\n * set runs (subcode 3858634, \"Provide a verified advertiser so ads in this ad set can be delivered to\n * audiences in the selected locations\"; 3858548, \"Advertiser is missing\"). Meta asks it of some ad\n * accounts and not others, so only a person on that account can clear it, in Ads Manager.\n */\nexport function metaAdvertiserVerificationNotice(\n accountId: string,\n consequence = \"Meta won't run new ad sets from this ad account where the ads are shown (the EU among those places) until it has verified who the advertiser is and who pays.\",\n): string {\n const account = bare(accountId);\n return actionNotice(\n \"complete\",\n \"advertiser verification\",\n \"meta\",\n consequence,\n `an admin of the ad account ${account}`,\n [\n `Open ${metaAdvertisingSettingsUrl(account)} while signed in to Facebook as an admin of ad account ${account}.`,\n \"Choose Verifications and ad transparency, then the section for where the ads run (European Union for Spain, France, Germany and the rest of the EU).\",\n \"Complete the advertiser verification Meta asks for, and set the advertiser and the payer to the company's exact legal name.\",\n \"Tell Baker it's done and ask it to make the ad set again; Baker uses the names saved there.\",\n ],\n );\n}\n\nexport interface ParsedTermsActionNotice {\n platform: AdsTermsPlatform;\n action: NoticeAction;\n name: string;\n consequence: string;\n who: string;\n steps: string[];\n link: string | null;\n}\n\nconst NOTICE_SHAPE = /^(accept|complete) (.+?) in (Meta|Google Ads|LinkedIn)\\. (.+?) Who: (.+?)\\. Steps: (1\\. .+)$/;\n\n/** \"1. a 2. b\" → [\"a\", \"b\"], cutting only at the next number in sequence (a step may hold other numbers). */\nfunction numberedSteps(text: string): string[] {\n const steps: string[] = [];\n let rest = text.replace(/^1\\.\\s/, \"\");\n for (let next = 2; ; next++) {\n const cut = rest.indexOf(` ${next}. `);\n if (cut < 0) break;\n steps.push(rest.slice(0, cut).trim());\n rest = rest.slice(cut + ` ${next}. `.length);\n }\n steps.push(rest.trim());\n return steps;\n}\n\n/** A notice made by `termsActionNotice`, taken apart for the review row; `undefined` for any other text. */\nexport function parseTermsActionNotice(text: string): ParsedTermsActionNotice | undefined {\n if (!text.startsWith(TERMS_ACTION_PREFIX)) return undefined;\n const match = NOTICE_SHAPE.exec(text.slice(TERMS_ACTION_PREFIX.length).trim());\n if (!match) return undefined;\n const [, verb, name, label, consequence, who, stepText] = match;\n const platform = label ? PLATFORM_BY_LABEL.get(label) : undefined;\n const action = verb === \"accept\" || verb === \"complete\" ? verb : undefined;\n if (!platform || !action || !name || !consequence || !who || !stepText) return undefined;\n const steps = numberedSteps(stepText);\n const link = stepText.match(/https:\\/\\/\\S+?(?=[\\s,;)]|\\.(?:\\s|$)|$)/)?.[0] ?? null;\n return { platform, action, name, consequence, who, steps, link };\n}\n\n// --- `baker ads terms` -------------------------------------------------------------------------\n\nexport const adsTermsRequestSchema = z.strictObject({\n platform: adsTermsPlatformSchema,\n /** Meta `act_<id>` or bare id; Google 10-digit customer id; LinkedIn sponsored account id. */\n accountId: z.string().min(1),\n /** Google: the manager the account is reached through, when there is one. */\n managerId: z\n .string()\n .regex(/^\\d{10}$/, \"a 10-digit manager id\")\n .optional(),\n /** Meta: the Facebook Pages whose Lead Ads Terms to read (`baker ads meta pages`). */\n pageIds: z.array(z.string().regex(/^\\d+$/, \"a numeric Facebook Page id\")).max(10).optional(),\n});\nexport type AdsTermsRequest = z.infer<typeof adsTermsRequestSchema>;\n\nexport const adsTermSchema = z.object({\n id: adsTermIdSchema,\n name: z.string(),\n status: z.enum(ADS_TERM_STATUSES),\n /** The Page this row is about, for Page-owned terms. */\n pageId: z.string().optional(),\n neededFor: z.array(z.string()),\n blocks: z.boolean(),\n who: z.string(),\n steps: z.array(z.string()),\n link: z.string().nullable(),\n /** Why the status is what it is — the field read, or why it could not be. */\n basis: z.string(),\n});\nexport type AdsTerm = z.infer<typeof adsTermSchema>;\n\nexport const adsTermsResponseSchema = z.object({\n platform: adsTermsPlatformSchema,\n accountId: z.string(),\n terms: z.array(adsTermSchema),\n /** Agreements this platform has that Baker cannot read, or no Baker work needs today. */\n notes: z.array(z.string()),\n});\nexport type AdsTermsResponse = z.infer<typeof adsTermsResponseSchema>;\n\n/** One row of the read: the guide, plus what the platform said. */\nexport function adsTermRow(guide: AdsTermGuide, status: AdsTermStatus, basis: string, pageId?: string): AdsTerm {\n return {\n id: guide.id,\n name: guide.name,\n status,\n ...(pageId ? { pageId } : {}),\n neededFor: guide.neededFor,\n blocks: guide.blocks,\n who: guide.who,\n steps: guide.steps,\n link: guide.link,\n basis,\n };\n}\n","import {\n ADS_TERMS_PLATFORM_LABEL,\n type AdsTerm,\n type AdsTermsResponse,\n parseTermsActionNotice,\n} from \"@baker/api/ads-terms\";\n\n/**\n * What `baker ads terms` prints, and the `error.fix` every staging command gives for terms a\n * person still has to accept. Pure.\n */\n\ntype CompactTerm = Pick<AdsTerm, \"id\" | \"name\" | \"status\" | \"neededFor\"> &\n Partial<Pick<AdsTerm, \"pageId\" | \"who\" | \"steps\" | \"link\">>;\n\n/** Compact by default: an accepted term needs no steps; one that isn't carries who and how. */\nexport function compactTerms(answer: AdsTermsResponse): {\n platform: string;\n accountId: string;\n terms: CompactTerm[];\n notes: string[];\n} {\n return {\n platform: answer.platform,\n accountId: answer.accountId,\n terms: answer.terms.map((term) => ({\n id: term.id,\n name: term.name,\n status: term.status,\n ...(term.pageId ? { pageId: term.pageId } : {}),\n neededFor: term.neededFor,\n ...(term.status === \"accepted\" ? {} : { who: term.who, steps: term.steps, link: term.link }),\n })),\n notes: answer.notes,\n };\n}\n\nexport function termsHints(answer: AdsTermsResponse): string[] {\n const platform = ADS_TERMS_PLATFORM_LABEL[answer.platform];\n const hints: string[] = [];\n for (const term of answer.terms) {\n const page = term.pageId ? ` for Page ${term.pageId}` : \"\";\n if (term.status === \"not_accepted\") {\n hints.push(\n `${term.name}${page} are NOT accepted in ${platform}; needed for ${term.neededFor.join(\", \")}. Before proposing or staging that work, tell the user in plain words, give them the numbered steps and link exactly as listed, and say who has to do it (${term.who}). Baker cannot accept terms for them. Carry on with the rest of the task, and run this command again when they say it's done.`,\n );\n } else if (term.status === \"unknown\") {\n hints.push(\n `${platform} did not say whether ${term.name}${page} are accepted (${term.basis}). Don't tell the user they are accepted; if the work needs them, give the steps and ask the user to check.`,\n );\n }\n }\n if (hints.length === 0 && answer.terms.length > 0) {\n hints.push(`Every ${platform} term listed is accepted; nothing for the user to do.`);\n }\n return hints;\n}\n\nexport interface TermsRefusal {\n code: \"PLATFORM_TERMS_NOT_ACCEPTED\";\n fix: { action: \"ask_user\"; explanation: string; steps?: string[]; link?: string };\n}\n\n/**\n * The fix for a staging refusal whose message is a `termsActionNotice`; null for any other failure.\n * `code` is the CLI client's (`client.ts` `mapHttpError`): a backend 400 arrives as VALIDATION_ERROR.\n */\nexport function termsRefusalFix(code: string, message: string): TermsRefusal | null {\n if (code !== \"VALIDATION_ERROR\" && code !== \"FORBIDDEN\") return null;\n const notice = parseTermsActionNotice(message);\n if (!notice) return null;\n const platform = ADS_TERMS_PLATFORM_LABEL[notice.platform];\n return {\n code: \"PLATFORM_TERMS_NOT_ACCEPTED\",\n fix: {\n action: \"ask_user\",\n explanation: `${platform} needs ${notice.name} accepted first, and only ${notice.who} can do it — Baker cannot. Tell the user plainly, give them the numbered steps (and link) below, and ask them to say when it's done. Don't retry before that; keep going with the rest of the task. When they confirm, run \\`baker ads terms --platform ${notice.platform} --account-id <id>\\` to check, then stage it again.`,\n steps: notice.steps,\n ...(notice.link ? { link: notice.link } : {}),\n },\n };\n}\n"],"mappings":"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","names":[]}
package/dist/cli.js CHANGED
@@ -169,7 +169,7 @@ Introspection: Run 'baker schema <command>' to inspect argument schemas.`
169
169
  capabilities: () => import("./capabilities-IV3TIY5P.js").then((m) => m.capabilitiesCommand),
170
170
  actions: () => import("./actions-WQBRBRQM.js").then((m) => m.actionsCommand),
171
171
  "scheduled-agents": () => import("./scheduled-agents-A5OLKMAB.js").then((m) => m.scheduledAgentsCommand),
172
- ads: () => import("./ads-6OUSUM5Y.js").then((m) => m.adsCommand),
172
+ ads: () => import("./ads-ALI6QLW2.js").then((m) => m.adsCommand),
173
173
  brand: () => import("./brand-XPLJH74A.js").then((m) => m.brandCommand),
174
174
  analytics: () => import("./analytics-OBXOCY64.js").then((m) => m.analyticsCommand),
175
175
  experiment: () => import("./experiment-XNEYJVLH.js").then((m) => m.experimentCommand),
@@ -195,7 +195,7 @@ Introspection: Run 'baker schema <command>' to inspect argument schemas.`
195
195
  hubspot: () => import("./hubspot-FHJHMYJI.js").then((m) => m.hubspotCommand),
196
196
  activecampaign: () => import("./activecampaign-GJ4QHU5I.js").then((m) => m.activecampaignCommand),
197
197
  accounts: () => import("./accounts-X6OS6LFQ.js").then((m) => m.accountsCommand),
198
- shopify: () => import("./shopify-3KNP5U4O.js").then((m) => m.shopifyCommand),
198
+ shopify: () => import("./shopify-4JA7QEOL.js").then((m) => m.shopifyCommand),
199
199
  "winning-ads": () => import("./winning-ads-YIBTH2Q5.js").then((m) => m.winningAdsCommand),
200
200
  "media-sources": () => import("./media-sources-WZJ67OP7.js").then((m) => m.mediaSourcesCommand),
201
201
  posts: () => import("./posts-PPSQ726T.js").then((m) => m.postsCommand),
@@ -2,13 +2,13 @@ import {
2
2
  failWriteValidation,
3
3
  requireCustomerId,
4
4
  stageGoogleOps
5
- } from "./chunk-7RERKOMK.js";
5
+ } from "./chunk-IQ3MYXCJ.js";
6
6
  import "./chunk-ERSX3MKH.js";
7
7
  import "./chunk-QBFJGCWA.js";
8
8
  import "./chunk-4NZ47VXO.js";
9
9
  import "./chunk-D5FY4FAK.js";
10
10
  import "./chunk-JRQI6EVP.js";
11
- import "./chunk-Y2JZX6JB.js";
11
+ import "./chunk-QALAJNBG.js";
12
12
  import "./chunk-44ZRCSR7.js";
13
13
  import "./chunk-X7DMNLDD.js";
14
14
  import "./chunk-K6HH2KF3.js";
@@ -436,4 +436,4 @@ var conversionsUploadCommand = defineCommand({
436
436
  export {
437
437
  conversionsUploadCommand
438
438
  };
439
- //# sourceMappingURL=conversion-upload-command-OG3UCC5N.js.map
439
+ //# sourceMappingURL=conversion-upload-command-TYGIB7XJ.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  command
3
- } from "./chunk-EAIFDVBK.js";
3
+ } from "./chunk-NAYO267Q.js";
4
4
  import {
5
5
  bareAccountId,
6
6
  failWriteValidation,
@@ -8,16 +8,16 @@ import {
8
8
  requireTarget,
9
9
  stageOp,
10
10
  upper
11
- } from "./chunk-LC75VG6J.js";
11
+ } from "./chunk-2UQJ5BDJ.js";
12
12
  import "./chunk-GC5P4KWY.js";
13
13
  import "./chunk-GDFJOCDO.js";
14
- import "./chunk-6HZF5XQB.js";
14
+ import "./chunk-JHEWSMOS.js";
15
15
  import "./chunk-ERSX3MKH.js";
16
16
  import "./chunk-QBFJGCWA.js";
17
17
  import "./chunk-4NZ47VXO.js";
18
18
  import "./chunk-D5FY4FAK.js";
19
19
  import "./chunk-JRQI6EVP.js";
20
- import "./chunk-Y2JZX6JB.js";
20
+ import "./chunk-QALAJNBG.js";
21
21
  import "./chunk-X7DMNLDD.js";
22
22
  import "./chunk-K6HH2KF3.js";
23
23
  import "./chunk-M7MLFR2S.js";
@@ -167,4 +167,4 @@ export {
167
167
  campaignsCopyCommand,
168
168
  copyPayloadFromFlags
169
169
  };
170
- //# sourceMappingURL=copy-writes-USCBG57G.js.map
170
+ //# sourceMappingURL=copy-writes-GUOL2QUD.js.map
@@ -2,8 +2,8 @@ import {
2
2
  csvOrJson,
3
3
  handleMetaError,
4
4
  resolveAccountIdArg
5
- } from "./chunk-6HZF5XQB.js";
6
- import "./chunk-Y2JZX6JB.js";
5
+ } from "./chunk-JHEWSMOS.js";
6
+ import "./chunk-QALAJNBG.js";
7
7
  import {
8
8
  writeAdsJson,
9
9
  writeAdsOutput
@@ -72,9 +72,9 @@ Examples:
72
72
  },
73
73
  subCommands: {
74
74
  list: listCommand,
75
- create: () => import("./write-commands-K2XXF7JP.js").then((m) => m.adCreativesCreateCommand),
76
- update: () => import("./write-commands-K2XXF7JP.js").then((m) => m.adCreativesUpdateCommand),
77
- delete: () => import("./asset-writes-F5E3TWLS.js").then((m) => m.creativesDeleteCommand)
75
+ create: () => import("./write-commands-AANGPJ5F.js").then((m) => m.adCreativesCreateCommand),
76
+ update: () => import("./write-commands-AANGPJ5F.js").then((m) => m.adCreativesUpdateCommand),
77
+ delete: () => import("./asset-writes-5TAUIKSN.js").then((m) => m.creativesDeleteCommand)
78
78
  },
79
79
  // `args` stays even though the parent has no `run`: citty scans rawArgs for the
80
80
  // subcommand name using THIS command's arg defs, so without them `--account-id act_1`
@@ -86,4 +86,4 @@ Examples:
86
86
  export {
87
87
  creativesCommand
88
88
  };
89
- //# sourceMappingURL=creatives-52E7O3RB.js.map
89
+ //# sourceMappingURL=creatives-BGYARLCC.js.map
@@ -2,8 +2,8 @@ import {
2
2
  csvOrJson,
3
3
  handleMetaError,
4
4
  resolveAccountIdArg
5
- } from "./chunk-6HZF5XQB.js";
6
- import "./chunk-Y2JZX6JB.js";
5
+ } from "./chunk-JHEWSMOS.js";
6
+ import "./chunk-QALAJNBG.js";
7
7
  import {
8
8
  writeAdsOutput,
9
9
  writeJsonEnvelope
@@ -110,9 +110,9 @@ Examples:
110
110
  },
111
111
  subCommands: {
112
112
  list: listCommand,
113
- create: () => import("./write-commands-K2XXF7JP.js").then((m) => m.customConversionsCreateCommand),
114
- update: () => import("./asset-writes-F5E3TWLS.js").then((m) => m.customConversionsUpdateCommand),
115
- delete: () => import("./asset-writes-F5E3TWLS.js").then((m) => m.customConversionsDeleteCommand)
113
+ create: () => import("./write-commands-AANGPJ5F.js").then((m) => m.customConversionsCreateCommand),
114
+ update: () => import("./asset-writes-5TAUIKSN.js").then((m) => m.customConversionsUpdateCommand),
115
+ delete: () => import("./asset-writes-5TAUIKSN.js").then((m) => m.customConversionsDeleteCommand)
116
116
  },
117
117
  // `args` stays even though the parent has no `run`: citty scans rawArgs for
118
118
  // the subcommand name using THIS command's arg defs. `default` (not `run`)
@@ -125,4 +125,4 @@ export {
125
125
  customConversionHints,
126
126
  customConversionsCommand
127
127
  };
128
- //# sourceMappingURL=custom-conversions-L3CMZCTZ.js.map
128
+ //# sourceMappingURL=custom-conversions-SUXA7KSN.js.map
@@ -7,13 +7,13 @@ import {
7
7
  loadPatchArg,
8
8
  requireTarget,
9
9
  stageGoogleOps
10
- } from "./chunk-7RERKOMK.js";
10
+ } from "./chunk-IQ3MYXCJ.js";
11
11
  import "./chunk-ERSX3MKH.js";
12
12
  import "./chunk-QBFJGCWA.js";
13
13
  import "./chunk-4NZ47VXO.js";
14
14
  import "./chunk-D5FY4FAK.js";
15
15
  import "./chunk-JRQI6EVP.js";
16
- import "./chunk-Y2JZX6JB.js";
16
+ import "./chunk-QALAJNBG.js";
17
17
  import "./chunk-44ZRCSR7.js";
18
18
  import {
19
19
  writeJsonEnvelope
@@ -305,4 +305,4 @@ export {
305
305
  BULK_STAGE_HINTS,
306
306
  draftCommand
307
307
  };
308
- //# sourceMappingURL=draft-7VJRJ2XH.js.map
308
+ //# sourceMappingURL=draft-2EO63W4K.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  handleMetaError
3
- } from "./chunk-6HZF5XQB.js";
3
+ } from "./chunk-JHEWSMOS.js";
4
4
  import {
5
5
  hintLines
6
6
  } from "./chunk-D5FY4FAK.js";
7
- import "./chunk-Y2JZX6JB.js";
7
+ import "./chunk-QALAJNBG.js";
8
8
  import {
9
9
  writeJsonEnvelope
10
10
  } from "./chunk-X7DMNLDD.js";
@@ -237,4 +237,4 @@ var metaDraftCommand = defineCommand({
237
237
  export {
238
238
  metaDraftCommand
239
239
  };
240
- //# sourceMappingURL=draft-RF6LORXE.js.map
240
+ //# sourceMappingURL=draft-PJT5TSFQ.js.map
@@ -6,13 +6,13 @@ import {
6
6
  keywordEntries,
7
7
  microsFlag,
8
8
  requireCustomerId
9
- } from "./chunk-7RERKOMK.js";
9
+ } from "./chunk-IQ3MYXCJ.js";
10
10
  import "./chunk-ERSX3MKH.js";
11
11
  import "./chunk-QBFJGCWA.js";
12
12
  import "./chunk-4NZ47VXO.js";
13
13
  import "./chunk-D5FY4FAK.js";
14
14
  import "./chunk-JRQI6EVP.js";
15
- import "./chunk-Y2JZX6JB.js";
15
+ import "./chunk-QALAJNBG.js";
16
16
  import {
17
17
  googleKeywordForecastRequestSchema
18
18
  } from "./chunk-44ZRCSR7.js";
@@ -166,4 +166,4 @@ export {
166
166
  forecastBidding,
167
167
  forecastCommand
168
168
  };
169
- //# sourceMappingURL=forecast-3G6GGAKZ.js.map
169
+ //# sourceMappingURL=forecast-IECMUBL2.js.map
@@ -29,7 +29,7 @@ import {
29
29
  stageTarget,
30
30
  stageUpdate,
31
31
  targetEntries
32
- } from "./chunk-7RERKOMK.js";
32
+ } from "./chunk-IQ3MYXCJ.js";
33
33
  import {
34
34
  repeatedFlagValues,
35
35
  repeatedValues
@@ -40,7 +40,7 @@ import {
40
40
  import "./chunk-4NZ47VXO.js";
41
41
  import "./chunk-D5FY4FAK.js";
42
42
  import "./chunk-JRQI6EVP.js";
43
- import "./chunk-Y2JZX6JB.js";
43
+ import "./chunk-QALAJNBG.js";
44
44
  import "./chunk-44ZRCSR7.js";
45
45
  import {
46
46
  getManagerIdForCustomer
@@ -92,8 +92,8 @@ Examples:
92
92
  subCommands: {
93
93
  discover: () => import("./discover-2ZX3DYSF.js").then((m) => m.discoverCommand),
94
94
  metrics: () => import("./metrics-NCSG7SLD.js").then((m) => m.metricsCommand),
95
- forecast: () => import("./forecast-3G6GGAKZ.js").then((m) => m.forecastCommand),
96
- themes: () => import("./themes-SHDZQODW.js").then((m) => m.themesCommand),
95
+ forecast: () => import("./forecast-IECMUBL2.js").then((m) => m.forecastCommand),
96
+ themes: () => import("./themes-CIXQPTFX.js").then((m) => m.themesCommand),
97
97
  locations: () => import("./locations-N5TZTS5F.js").then((m) => m.locationsCommand),
98
98
  languages: () => import("./languages-JR3RSGUP.js").then((m) => m.languagesCommand)
99
99
  }
@@ -2989,7 +2989,7 @@ var conversionsCommand = defineCommand4({
2989
2989
  description: "Stage conversion action create/update (via --file), the account-level goal, and manual conversion uploads for a period where tracking was broken"
2990
2990
  },
2991
2991
  subCommands: {
2992
- upload: () => import("./conversion-upload-command-OG3UCC5N.js").then((m) => m.conversionsUploadCommand),
2992
+ upload: () => import("./conversion-upload-command-TYGIB7XJ.js").then((m) => m.conversionsUploadCommand),
2993
2993
  create: fileCreateCommand(
2994
2994
  "create",
2995
2995
  "google.conversionAction.create",
@@ -3250,18 +3250,18 @@ Full guide: __tooling__/docs/tools/baker/ads-google.md`
3250
3250
  currency: () => import("./currency-SVEUNKHP.js").then((m) => m.currencyCommand),
3251
3251
  "url-options": () => import("./url-options-7ZFP6Y2T.js").then((m) => m.urlOptionsCommand),
3252
3252
  changes: () => import("./changes-UQYFPZWO.js").then((m) => m.changesCommand),
3253
- invoices: () => import("./account-reads-QDVBCQ7D.js").then((m) => m.invoicesCommand),
3254
- "identity-verification": () => import("./account-reads-QDVBCQ7D.js").then((m) => m.identityVerificationCommand),
3255
- previews: () => import("./account-reads-QDVBCQ7D.js").then((m) => m.previewsCommand),
3256
- brands: () => import("./account-reads-QDVBCQ7D.js").then((m) => m.brandsCommand),
3253
+ invoices: () => import("./account-reads-5VPDX6NF.js").then((m) => m.invoicesCommand),
3254
+ "identity-verification": () => import("./account-reads-5VPDX6NF.js").then((m) => m.identityVerificationCommand),
3255
+ previews: () => import("./account-reads-5VPDX6NF.js").then((m) => m.previewsCommand),
3256
+ brands: () => import("./account-reads-5VPDX6NF.js").then((m) => m.brandsCommand),
3257
3257
  query: () => import("./query-G4L42FHT.js").then((m) => m.queryCommand),
3258
3258
  keywords: keywordsWithWrites,
3259
3259
  ...googleWriteCommandsWithLists,
3260
3260
  "merchant-center": merchantCenterCommand,
3261
- draft: () => import("./draft-7VJRJ2XH.js").then((m) => m.draftCommand)
3261
+ draft: () => import("./draft-2EO63W4K.js").then((m) => m.draftCommand)
3262
3262
  }
3263
3263
  });
3264
3264
  export {
3265
3265
  googleCommand
3266
3266
  };
3267
- //# sourceMappingURL=google-4BN4ERUJ.js.map
3267
+ //# sourceMappingURL=google-CWHRLDBL.js.map
@@ -7,12 +7,12 @@ import {
7
7
  csvOrJson,
8
8
  getDateRange,
9
9
  handleMetaError
10
- } from "./chunk-6HZF5XQB.js";
10
+ } from "./chunk-JHEWSMOS.js";
11
11
  import {
12
12
  metaBreakdownSyncedHint,
13
13
  syncedFirstHint
14
14
  } from "./chunk-Y2FAUFWK.js";
15
- import "./chunk-Y2JZX6JB.js";
15
+ import "./chunk-QALAJNBG.js";
16
16
  import {
17
17
  writeAdsJson,
18
18
  writeAdsOutput,
@@ -436,4 +436,4 @@ export {
436
436
  insightsCommand,
437
437
  wantsAsync
438
438
  };
439
- //# sourceMappingURL=insights-HOZ5H4A3.js.map
439
+ //# sourceMappingURL=insights-VW475N6G.js.map
@@ -5,19 +5,19 @@ import {
5
5
  mergePayload,
6
6
  requireTarget,
7
7
  stageOp
8
- } from "./chunk-LC75VG6J.js";
8
+ } from "./chunk-2UQJ5BDJ.js";
9
9
  import "./chunk-GC5P4KWY.js";
10
10
  import "./chunk-GDFJOCDO.js";
11
11
  import {
12
12
  csvOrJson,
13
13
  handleMetaError
14
- } from "./chunk-6HZF5XQB.js";
14
+ } from "./chunk-JHEWSMOS.js";
15
15
  import "./chunk-ERSX3MKH.js";
16
16
  import "./chunk-QBFJGCWA.js";
17
17
  import "./chunk-4NZ47VXO.js";
18
18
  import "./chunk-D5FY4FAK.js";
19
19
  import "./chunk-JRQI6EVP.js";
20
- import "./chunk-Y2JZX6JB.js";
20
+ import "./chunk-QALAJNBG.js";
21
21
  import {
22
22
  writeAdsOutput,
23
23
  writeJsonEnvelope
@@ -257,4 +257,4 @@ export {
257
257
  instantExperiencesCreateCommand,
258
258
  instantExperiencesUpdateCommand
259
259
  };
260
- //# sourceMappingURL=instant-experiences-ARUYYGVW.js.map
260
+ //# sourceMappingURL=instant-experiences-JJJKZAQQ.js.map
@@ -6,7 +6,7 @@ import {
6
6
  requireTarget,
7
7
  stageOp,
8
8
  upper
9
- } from "./chunk-LC75VG6J.js";
9
+ } from "./chunk-2UQJ5BDJ.js";
10
10
  import {
11
11
  isMetaLeadAdsRefusal
12
12
  } from "./chunk-GC5P4KWY.js";
@@ -14,7 +14,7 @@ import "./chunk-GDFJOCDO.js";
14
14
  import {
15
15
  csvOrJson,
16
16
  handleMetaError
17
- } from "./chunk-6HZF5XQB.js";
17
+ } from "./chunk-JHEWSMOS.js";
18
18
  import {
19
19
  repeatedValues
20
20
  } from "./chunk-ERSX3MKH.js";
@@ -22,7 +22,7 @@ import "./chunk-QBFJGCWA.js";
22
22
  import "./chunk-4NZ47VXO.js";
23
23
  import "./chunk-D5FY4FAK.js";
24
24
  import "./chunk-JRQI6EVP.js";
25
- import "./chunk-Y2JZX6JB.js";
25
+ import "./chunk-QALAJNBG.js";
26
26
  import {
27
27
  writeAdsJson,
28
28
  writeAdsOutput,
@@ -537,4 +537,4 @@ export {
537
537
  leadPageHints,
538
538
  leadsCommand
539
539
  };
540
- //# sourceMappingURL=leads-KCFSCWZY.js.map
540
+ //# sourceMappingURL=leads-2BXRQDT5.js.map
@@ -8,11 +8,11 @@ var metaMediaCommand = defineCommand({
8
8
  description: "Stage Baker library media uploads to Meta so creatives can reference them (upload), or take an image out of the account's image library (delete --image-hash). Upload publishes an ad-image hash or video id a creative binds via --image-ref/--video-ref."
9
9
  },
10
10
  subCommands: {
11
- upload: () => import("./write-commands-K2XXF7JP.js").then((m) => m.mediaUploadCommand),
12
- delete: () => import("./asset-writes-F5E3TWLS.js").then((m) => m.mediaDeleteCommand)
11
+ upload: () => import("./write-commands-AANGPJ5F.js").then((m) => m.mediaUploadCommand),
12
+ delete: () => import("./asset-writes-5TAUIKSN.js").then((m) => m.mediaDeleteCommand)
13
13
  }
14
14
  });
15
15
  export {
16
16
  metaMediaCommand
17
17
  };
18
- //# sourceMappingURL=media-SXILZKYE.js.map
18
+ //# sourceMappingURL=media-KXBWT2YJ.js.map
@@ -77,46 +77,46 @@ Audit & review:
77
77
  Full guide: __tooling__/docs/tools/baker/ads-meta.md`
78
78
  },
79
79
  subCommands: {
80
- accounts: () => import("./accounts-DAWCHDAC.js").then((m) => m.accountsCommand),
81
- account: () => import("./account-Z2N545F3.js").then((m) => m.accountCommand),
82
- businesses: () => import("./businesses-XH7A32WX.js").then((m) => m.businessesCommand),
83
- pages: () => import("./pages-DYWRNXQP.js").then((m) => m.pagesCommand),
84
- "lead-forms": () => import("./leads-KCFSCWZY.js").then((m) => m.leadFormsCommand),
85
- "instant-experiences": () => import("./instant-experiences-ARUYYGVW.js").then((m) => m.instantExperiencesCommand),
86
- leads: () => import("./leads-KCFSCWZY.js").then((m) => m.leadsCommand),
87
- campaigns: () => import("./campaigns-7ZUR46T2.js").then((m) => m.campaignsCommand),
88
- adsets: () => import("./adsets-GYVCPG4K.js").then((m) => m.adsetsCommand),
89
- ads: () => import("./ads-I2KFV42R.js").then((m) => m.adsListCommand),
90
- creatives: () => import("./creatives-52E7O3RB.js").then((m) => m.creativesCommand),
91
- audiences: () => import("./audiences-AVQ2VWHF.js").then((m) => m.audiencesCommand),
92
- "custom-conversions": () => import("./custom-conversions-L3CMZCTZ.js").then((m) => m.customConversionsCommand),
93
- pixels: () => import("./pixels-R3ISRBUJ.js").then((m) => m.pixelsCommand),
94
- activities: () => import("./activities-UIBWZUGE.js").then((m) => m.activitiesCommand),
95
- insights: () => import("./insights-HOZ5H4A3.js").then((m) => m.insightsCommand),
96
- preview: () => import("./preview-UOMZ5TUK.js").then((m) => m.previewCommand),
97
- targeting: () => import("./targeting-RF7GL7TJ.js").then((m) => m.targetingCommand),
98
- "instagram-accounts": () => import("./account-assets-UQ5RS66K.js").then((m) => m.instagramAccountsCommand),
99
- apps: () => import("./account-assets-UQ5RS66K.js").then((m) => m.appsCommand),
100
- "dsa-recommendations": () => import("./account-assets-UQ5RS66K.js").then((m) => m.dsaRecommendationsCommand),
101
- images: () => import("./account-assets-UQ5RS66K.js").then((m) => m.imagesCommand),
102
- labels: () => import("./account-assets-UQ5RS66K.js").then((m) => m.labelsCommand),
103
- studies: () => import("./studies-6NJN4GE4.js").then((m) => m.studiesCommand),
104
- catalogs: () => import("./catalogs-L6SLRMPR.js").then((m) => m.catalogsCommand),
105
- "page-photos": () => import("./page-photos-22Q6ZH2W.js").then((m) => m.pagePhotosCommand),
106
- "page-posts": () => import("./account-level-QHTIN4DY.js").then((m) => m.pagePostsCommand),
107
- "instagram-media": () => import("./account-level-QHTIN4DY.js").then((m) => m.instagramMediaCommand),
108
- comments: () => import("./account-level-QHTIN4DY.js").then((m) => m.commentsCommand),
109
- "account-settings": () => import("./account-level-QHTIN4DY.js").then((m) => m.accountSettingsCommand),
110
- "account-details": () => import("./account-level-QHTIN4DY.js").then((m) => m.accountDetailsCommand),
111
- "block-lists": () => import("./account-level-QHTIN4DY.js").then((m) => m.blockListsCommand),
112
- "reach-frequency": () => import("./account-level-QHTIN4DY.js").then((m) => m.reachFrequencyCommand),
113
- "high-demand-periods": () => import("./account-assets-UQ5RS66K.js").then((m) => m.highDemandPeriodsCommand),
114
- rules: () => import("./rules-O2TI4YBB.js").then((m) => m.rulesCommand),
115
- media: () => import("./media-SXILZKYE.js").then((m) => m.metaMediaCommand),
116
- draft: () => import("./draft-RF6LORXE.js").then((m) => m.metaDraftCommand)
80
+ accounts: () => import("./accounts-D6FP4DC2.js").then((m) => m.accountsCommand),
81
+ account: () => import("./account-JXUUHDEB.js").then((m) => m.accountCommand),
82
+ businesses: () => import("./businesses-RRYQYTG4.js").then((m) => m.businessesCommand),
83
+ pages: () => import("./pages-NJN2E5HU.js").then((m) => m.pagesCommand),
84
+ "lead-forms": () => import("./leads-2BXRQDT5.js").then((m) => m.leadFormsCommand),
85
+ "instant-experiences": () => import("./instant-experiences-JJJKZAQQ.js").then((m) => m.instantExperiencesCommand),
86
+ leads: () => import("./leads-2BXRQDT5.js").then((m) => m.leadsCommand),
87
+ campaigns: () => import("./campaigns-DDUXFR77.js").then((m) => m.campaignsCommand),
88
+ adsets: () => import("./adsets-XE5S6J5S.js").then((m) => m.adsetsCommand),
89
+ ads: () => import("./ads-DRMVHMJH.js").then((m) => m.adsListCommand),
90
+ creatives: () => import("./creatives-BGYARLCC.js").then((m) => m.creativesCommand),
91
+ audiences: () => import("./audiences-U6MQRRTP.js").then((m) => m.audiencesCommand),
92
+ "custom-conversions": () => import("./custom-conversions-SUXA7KSN.js").then((m) => m.customConversionsCommand),
93
+ pixels: () => import("./pixels-E7UYF4KE.js").then((m) => m.pixelsCommand),
94
+ activities: () => import("./activities-NYWRMNCH.js").then((m) => m.activitiesCommand),
95
+ insights: () => import("./insights-VW475N6G.js").then((m) => m.insightsCommand),
96
+ preview: () => import("./preview-QGLUDJ3A.js").then((m) => m.previewCommand),
97
+ targeting: () => import("./targeting-URLZVNS2.js").then((m) => m.targetingCommand),
98
+ "instagram-accounts": () => import("./account-assets-3SIBPJXJ.js").then((m) => m.instagramAccountsCommand),
99
+ apps: () => import("./account-assets-3SIBPJXJ.js").then((m) => m.appsCommand),
100
+ "dsa-recommendations": () => import("./account-assets-3SIBPJXJ.js").then((m) => m.dsaRecommendationsCommand),
101
+ images: () => import("./account-assets-3SIBPJXJ.js").then((m) => m.imagesCommand),
102
+ labels: () => import("./account-assets-3SIBPJXJ.js").then((m) => m.labelsCommand),
103
+ studies: () => import("./studies-FXX4XW4A.js").then((m) => m.studiesCommand),
104
+ catalogs: () => import("./catalogs-A6CHXN5B.js").then((m) => m.catalogsCommand),
105
+ "page-photos": () => import("./page-photos-CJIFQDW5.js").then((m) => m.pagePhotosCommand),
106
+ "page-posts": () => import("./account-level-46AIGZXA.js").then((m) => m.pagePostsCommand),
107
+ "instagram-media": () => import("./account-level-46AIGZXA.js").then((m) => m.instagramMediaCommand),
108
+ comments: () => import("./account-level-46AIGZXA.js").then((m) => m.commentsCommand),
109
+ "account-settings": () => import("./account-level-46AIGZXA.js").then((m) => m.accountSettingsCommand),
110
+ "account-details": () => import("./account-level-46AIGZXA.js").then((m) => m.accountDetailsCommand),
111
+ "block-lists": () => import("./account-level-46AIGZXA.js").then((m) => m.blockListsCommand),
112
+ "reach-frequency": () => import("./account-level-46AIGZXA.js").then((m) => m.reachFrequencyCommand),
113
+ "high-demand-periods": () => import("./account-assets-3SIBPJXJ.js").then((m) => m.highDemandPeriodsCommand),
114
+ rules: () => import("./rules-5HIC2F34.js").then((m) => m.rulesCommand),
115
+ media: () => import("./media-KXBWT2YJ.js").then((m) => m.metaMediaCommand),
116
+ draft: () => import("./draft-PJT5TSFQ.js").then((m) => m.metaDraftCommand)
117
117
  }
118
118
  });
119
119
  export {
120
120
  metaCommand
121
121
  };
122
- //# sourceMappingURL=meta-ZQLFWVAR.js.map
122
+ //# sourceMappingURL=meta-5ODNL2LA.js.map
@@ -3,16 +3,16 @@ import {
3
3
  failWriteValidation,
4
4
  requireTarget,
5
5
  stageOp
6
- } from "./chunk-LC75VG6J.js";
6
+ } from "./chunk-2UQJ5BDJ.js";
7
7
  import "./chunk-GC5P4KWY.js";
8
8
  import "./chunk-GDFJOCDO.js";
9
- import "./chunk-6HZF5XQB.js";
9
+ import "./chunk-JHEWSMOS.js";
10
10
  import "./chunk-ERSX3MKH.js";
11
11
  import "./chunk-QBFJGCWA.js";
12
12
  import "./chunk-4NZ47VXO.js";
13
13
  import "./chunk-D5FY4FAK.js";
14
14
  import "./chunk-JRQI6EVP.js";
15
- import "./chunk-Y2JZX6JB.js";
15
+ import "./chunk-QALAJNBG.js";
16
16
  import "./chunk-X7DMNLDD.js";
17
17
  import "./chunk-K6HH2KF3.js";
18
18
  import "./chunk-M7MLFR2S.js";
@@ -115,4 +115,4 @@ var pagePhotosCommand = defineCommand({
115
115
  export {
116
116
  pagePhotosCommand
117
117
  };
118
- //# sourceMappingURL=page-photos-22Q6ZH2W.js.map
118
+ //# sourceMappingURL=page-photos-CJIFQDW5.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  csvOrJson,
3
3
  handleMetaError
4
- } from "./chunk-6HZF5XQB.js";
5
- import "./chunk-Y2JZX6JB.js";
4
+ } from "./chunk-JHEWSMOS.js";
5
+ import "./chunk-QALAJNBG.js";
6
6
  import {
7
7
  writeAdsOutput,
8
8
  writeJsonEnvelope
@@ -64,4 +64,4 @@ export {
64
64
  pageSelectionHints,
65
65
  pagesCommand
66
66
  };
67
- //# sourceMappingURL=pages-DYWRNXQP.js.map
67
+ //# sourceMappingURL=pages-NJN2E5HU.js.map
@@ -4,8 +4,8 @@ import {
4
4
  handleMetaError,
5
5
  resolveAccountIdArg,
6
6
  todayIso
7
- } from "./chunk-6HZF5XQB.js";
8
- import "./chunk-Y2JZX6JB.js";
7
+ } from "./chunk-JHEWSMOS.js";
8
+ import "./chunk-QALAJNBG.js";
9
9
  import {
10
10
  writeAdsJson,
11
11
  writeAdsOutput
@@ -106,4 +106,4 @@ export {
106
106
  pixelWarnings,
107
107
  pixelsCommand
108
108
  };
109
- //# sourceMappingURL=pixels-R3ISRBUJ.js.map
109
+ //# sourceMappingURL=pixels-E7UYF4KE.js.map
@@ -7,8 +7,8 @@ import {
7
7
  import "./chunk-GDFJOCDO.js";
8
8
  import {
9
9
  handleMetaError
10
- } from "./chunk-6HZF5XQB.js";
11
- import "./chunk-Y2JZX6JB.js";
10
+ } from "./chunk-JHEWSMOS.js";
11
+ import "./chunk-QALAJNBG.js";
12
12
  import {
13
13
  writeAdsJson,
14
14
  writeJsonEnvelope
@@ -215,4 +215,4 @@ Examples:
215
215
  export {
216
216
  previewCommand
217
217
  };
218
- //# sourceMappingURL=preview-UOMZ5TUK.js.map
218
+ //# sourceMappingURL=preview-QGLUDJ3A.js.map
@@ -6,10 +6,10 @@ import {
6
6
  failWriteValidation,
7
7
  requireTarget,
8
8
  stageOp
9
- } from "./chunk-LC75VG6J.js";
9
+ } from "./chunk-2UQJ5BDJ.js";
10
10
  import "./chunk-GC5P4KWY.js";
11
11
  import "./chunk-GDFJOCDO.js";
12
- import "./chunk-6HZF5XQB.js";
12
+ import "./chunk-JHEWSMOS.js";
13
13
  import {
14
14
  repeatedValues
15
15
  } from "./chunk-ERSX3MKH.js";
@@ -17,7 +17,7 @@ import "./chunk-QBFJGCWA.js";
17
17
  import "./chunk-4NZ47VXO.js";
18
18
  import "./chunk-D5FY4FAK.js";
19
19
  import "./chunk-JRQI6EVP.js";
20
- import "./chunk-Y2JZX6JB.js";
20
+ import "./chunk-QALAJNBG.js";
21
21
  import "./chunk-X7DMNLDD.js";
22
22
  import "./chunk-K6HH2KF3.js";
23
23
  import "./chunk-M7MLFR2S.js";
@@ -522,4 +522,4 @@ export {
522
522
  rulesRunCommand,
523
523
  rulesUpdateCommand
524
524
  };
525
- //# sourceMappingURL=rule-writes-OGVSR5US.js.map
525
+ //# sourceMappingURL=rule-writes-AHDYOYVO.js.map