Repository navigation
chore(release): @getbrevo/cli@2.5.0 - #148
Merged
Merged
Conversation
…el with 2.5.0 - CHANGELOG 2.5.0: same facts, a third shorter — consolidates the duplicated consent mechanics into one paragraph, merges the overlapping app submit refusal-ordering fixes, and drops build internals and fix rationale that a CLI user cannot act on. Every command, flag, exit code, --json shape, the submit-is-a-form-hand-off rule, and the platform-side 400 limitation are kept. - README: 'What's new' now covers 2.5.0 (public apps GA, consent flags, PKCE scaffold); new 'Public apps and the review lifecycle' section alongside the other app-kind sections; app submit table row gains --accept-submission-terms and the nothing-submitted-until-the-form-is-completed note. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
shubham773
approved these changes
Oct 16, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



📦 Release summary
@getbrevo/cliReleases
@getbrevo/cli@2.5.0
Minor Changes
e208fbf: feat(public apps): public app distribution and the review lifecycle are now GA (BEX-405)
brevo app create --distribution publicis accepted,Publicis selectable in the interactive distribution prompt, andbrevo app submit,brevo app statusandbrevo app withdrawship in the published package. They were built but eliminated from published builds at compile time; that gate is gone and the build now asserts the three commands are present in every artifact.brevo app status— an app's review lifecycle state (draft,submitted,in_review,approved,rejected,changes_requested, orunknown) with a human message. Read-only;--jsongives{ state, message }.brevo app submit— opens the public-app review submission form. Requiresdistribution_type: public, an uploaded app, and a localapp-config.jsonthat matches the server (shown as a field-by-field diff with(local only)/(server only)tags on drift).--jsonprints{"app_id","form_url"}on stdout with the next-steps notes on stderr. The app is submitted only once the form itself is completed — the command changes nothing server-side.brevo app withdraw— withdraws an app from submission (--force,--json). An app that was never submitted prints a hint and exits0.All three resolve the target app from
--app-id, the linkedapp-config.json, or an interactive picker.The scaffolded OAuth flow now branches on distribution: a public app gets Authorization Code + PKCE (RFC 7636) —
/auth/logingenerates acode_verifierand sendscode_challenge+code_challenge_method=S256, and the token exchange and refresh send the verifier with noclient_secret, so the generated.env.local/.env.examplecarry none. Private apps keep the confidential-client flow unchanged.Note that Brevo currently refuses public app creation from the CLI at the platform level:
brevo app create --distribution publicsends the request and the API answers400, which the CLI reports as "Public apps can't be created from the CLI yet" with the server's own message quoted. The CLI-side commands are all in place and will work as soon as the platform allows it.distribution_typeremains immutable afterbrevo app create— pickprivatefor apps used exclusively by your own organisation andpublicfor apps distributed to end users or marketplace listings. Only a public app can be submitted for review.fix(app submit): refuse an app that was never uploaded before reading its review state, naming the real cause. A never-uploaded app has no version for a review state to hang off, and the server's message for that failure listed
name,logo_uri,scopesandredirect_urisas the fields to fix — all of which could already be correct.fix(app submit): skip the redundant app fetch when the app isn't submittable, and show missing required-field names exactly as returned by the API (BEX-454)
fix(app status): show the status message returned by the API, falling back to the built-in per-state copy when absent (BEX-454)
feat(public apps): creating a public app now requires agreeing to the Brevo Developer Terms (https://developers.brevo.com/docs/apps-developer-terms). Interactively,
brevo app createshows the terms notice, opens the terms in the browser automatically (the URL is printed too, with a quiet fallback when no browser can open), and asks "Do you confirm that you have read and agree to the Brevo Developer Terms?" (y/N, default No) as soon aspublicis chosen — declining cancels the create with exit0and nothing is sent. Non-interactive runs (--jsonor piped) pass the new--accept-developer-termsflag as explicit consent; without it a--distribution publiccreate is refused before any prompt or network call. The flag also skips the question in interactive runs. Private, M2M, UI and Function apps are unaffected.docs:
agent-context/SKILL.mdandagent-context/AGENTS.mddocument the publication and review flow — the route from a public create to an approved app, the refusalssubmitapplies in order, the review states, and the fact that a successfulsubmithas not yet submitted anything.feat(app submit): submitting an app for review now requires confirming the Submission Process statement (you have read and agree to the Brevo Developer Terms, the submission is accurate and complete, the app complies with the terms and applicable laws, and activation is not a review, certification, or endorsement). Interactively,
brevo app submitprints the statement after the app summary and asks "Do you confirm the above statement?" (y/N, default No) — one answer serving as both the legal affirmation and the submit confirmation; declining cancels with exit0. Non-interactive runs (--jsonor piped) pass the new--accept-submission-termsflag as explicit consent; without it the run is refused before the form URL is printed or opened. The flag also skips the question in interactive runs. The gate fires only once the form URL is known to exist, so an ineligible app still gets its specific refusal first.fix(app submit): the public-only check now fires first, before the never-uploaded guard and the review-state read. A private app is told it cannot be submitted — previously it was told to run
brevo app uploador fix "missing fields", remedies that can never make a private app submittable.fix(app submit):
submittable: falsewith nomissing_fieldsfrom the state API now gets generic not-ready copy instead of a malformed message that named nothing to fix.fix: a failed browser open is now actually reported. Opening a browser can only fail asynchronously (a missing
xdg-openon a headless box never throws), so the fallback lines inapp create's Developer-Terms consent,app submit's form open andapp available-scopes --webwere unreachable; they now print via the spawn's error event. The URL is always printed regardless, as before.