v0.9.29 — plugin OAuth wizard + Meta account_id & STATE.json fixes
Plugin OAuth onboarding plus two credential/state correctness fixes surfaced while integrating the multi-account / agency layering.
Added
- Generic per-account OAuth (authorization-code) wizard for plugins (#201) — a third-party provider whose per-account secret is obtained via the OAuth2 authorization-code grant (Yahoo! JAPAN Ads first) can declare an
AccountOAuthConfig.mureo configurethen offers an Authenticate button that runs the browser consent flow, exchanges the code at the provider's token endpoint, and saves therefresh_tokeninto the named field — instead of the operator pasting it by hand. Same "OSS = mechanism, plugin = values" split as #186; a parallel, library-agnostic flow that reuses the bridge / callback-server / status-poll machinery without touching the Google/Meta onboarding path. Secrets are never logged, the exchange ishttps-only, and the callback enforces the host +stateguards before any exchange. Providers withoutaccount_oauthkeep manual entry.
Fixed
- Meta per-account override silently ignored (#202) — the Meta adapter declared its per-account field as
ad_account_id, butload_meta_ads_credentialsreadsaccount_id(and the wizard persistsaccount_id). The mismatch dropped a per-account override and connected to the wrong ad account. The declared key is nowaccount_id, so the declaration, wizard output, and loader all agree. - STATE.json renders clients as inactive after campaign upsert —
mureo_state_upsert_campaignonly wrote the legacy v1 flatcampaignslist and never stampedlast_synced_at, leaving the v2platformssection (with its requiredaccount_id) empty. The tool now requiresplatform+account_id, populatesplatforms[platform], stampslast_synced_at, and keeps the v1 flat list in lockstep.
Full changelog: https://github.com/logly/mureo/blob/main/CHANGELOG.md