Releases: warmbly/warmbly-go
Releases · warmbly/warmbly-go
Release list
v0.3.1 — carry waiting_for_leads on a campaign start
go get github.com/warmbly/warmbly-go@v0.3.1
Picks up the API changes that landed while 0.3.0 was being prepared. Additive,
so nothing needs touching at a call site.
Added
CampaignStatusChange.WaitingForLeads, whichPOST /campaigns/:id/startnow
returns. It is true when the start found nothing left to send, so a caller
learns the campaign is parked and waiting without a second fetch.ErrCodeNoLeadsandErrCodeNoRemainingLeads, the two refusals a start can
answer with.
Changed
- Starting a campaign whose every lead has finished no longer re-completes it
with a 400. The start turnsContinuouson, leaves the campaign active and
idle, and reportsWaitingForLeads.CampaignService.Startdocumented that
older behaviour, which is now wrong. - A form linked to a campaign, or an automation that enrolls into one, turns
Continuouson, as linking a segment already did.
What's Changed
Full Changelog: v0.3.0...v0.3.1
v0.3.0 — sync with the current v1 API
go get github.com/warmbly/warmbly-go@v0.3.0
Reconciled the SDK with the current v1 API, covering the 484 server commits
since the 0.2.0 sync. Whole resources landed on the server in that window and
several existing shapes moved underneath the SDK. This release also fixes a
handful of methods that could never have worked.
Breaking changes are made directly rather than deprecated, as there is still no
public release. Expect to touch call sites.
Added
- New services for resources the API grew:
client.Segments(saved contact
audiences, evaluated live, with per-contact overrides),client.Suppressions
(the workspace do-not-contact list),client.Forms(hosted lead-capture
forms, their submissions, assets and custom domain),client.AgentTools(the
AI tool registry over plain HTTP, for function-calling agents that do not
speak MCP),client.WebsiteTracking, andclient.PoolLink/
client.CloudLinkfor the self-hosted warmup pool link. - Mailboxes:
Allowancereports how many mailboxes a workspace may hold and
why;HoldandReleasetake a mailbox in and out of campaign rotation;
SyncStatusexposes the backfill and fair-use throttle state;Behavior,
UpdateBehaviorandBehaviorPlandrive humanlike sending;RefreshAuthCheck
records a domain verdict rather than only reading one;GetTrackingDomainand
VerifyTrackingDomaincomplete the custom tracking domain flow; bulk
SMTP/IMAP connect and the two reconnect routes. - Campaigns:
Estimateprojects recipients, capacity and finish date before a
launch;Duplicate;Forms;ListSegmentsandSetSegments;
StartWithOptionscarries the acknowledgement that clears a list-risk
refusal. - Contacts: address verification (
VerificationOverview,RequestVerification),
CampaignStates,Segments, and a cursor-paginatedListTimeline. - Sign-in: the browser single-sign-on start and exchange, the first-run claim,
deployment capabilities viaAuthConfig, instance version reporting, and the
full CLI device-code flow with aWaitForCLIAuthhelper. APIKeys.RevokeSelf, so a credential can always end itself.- Workspace archives: export and import, with the download streaming to an
io.Writer, plus the workspace risk posture. Error.HasCodeand theErrCode*constants, so a caller can branch on the
specific refusal rather than on a status several refusals share.- Gateway: typed
JoinErrorwith the server's code and reason slug, a
Permanentmethod separating retryable refusals from final ones, automatic
retry of a rate-limited join on the same socket, topic builders and
WithTopics, a heartbeat watchdog, and theCAMPAIGN_IDLE,
ACCOUNT_SYNC_STATE,PAGE_HITandFORM_SUBMISSION_CREATEDevents. - Webhooks: the
form.submittedevent, the richer dedicatedcontact.created
payload, thewebhook.testchallenge payload, andWebhookEvent.Into.
Fixed
gateway.IntentAIwas"AI", which is a substring ofEMAILand
CAMPAIGN. Intent matching is a substring test, so anyone filtering for AI
events received nearly the entire stream. It is now"AI_".- Gateway join-refusal codes were mapped wrongly. 4003 and 4005 both
resolved toErrForbidden, and 4001, which the server never sends, was
mapped at all. Corrected against the gateway's ownerror_code/1. - A client could get permanently stuck after a failed resume. The
resume_failedpath left the sequence at the evicted position, so every
later resume failed too. It now advances to the server's current sequence. Meetings.Createdecoded nothing. The endpoint answers a wrapped
envelope, so every field of the returned meeting was silently zero.Billing.Cancelwas unusable. The endpoint binds a JSON body and the SDK
sent none, so every call was refused with a 400.- Avatar uploads were wrong twice over. Both endpoints read a part named
file, notavatar, and answer a bare URL rather than the object. EnsureReferralCode,PreviewInvitationandRegisterDeviceTokeneach
decoded a type the endpoint does not return.ReferralEarningcarried invented fields; it now matches the wire.Campaigns.UpdateAdvancedSettingssent the wrong body key, so it silently
changed nothing.- The audit catalogue was badly stale: 5 actions and 8 entity types against the
server's 30 and 49, withAuditEntitySequencecarrying the wrong value.
Changed
Campaigns.StartandCampaigns.Stopreturn a*CampaignStatusChange.
The endpoints answer a status envelope, never a campaign, so the previous
*Campaignwas always zero.Campaigns.UpdateAdvancedSettingsandOutreach.Updatereturn only a
*Response; both endpoints answer 204 with no body.Email.LastSyncedAtis now*time.Time. It is null until the first sync,
which previously failed to decode.Auth.LoginandAuth.Registerreturn an*AuthStep. Whether an emailed
code step follows is the deployment's choice and is skipped on a known device,
so the flow can finish in one call. Branch onCodeRequired.CRM.ListDealsandCRM.ListTaskstake their own parameter types,
exposing the pipeline, stage, status, contact, deal and assignee filters the
server always accepted and the SDK never sent.Billing.ValidateDiscount,PreviewPlanChangeandAppliedDiscountsreturn
typed results instead ofmap[string]any.Auth.UploadAvatarandOrganization.UploadAvatarreturn the avatar URL.- Campaigns carry continuous sending (
Continuous,IdleSince), guardrails,
UTM tagging, unsubscribe mode and akind; a campaign that runs out of leads
now stays active and idle rather than finishing. - Contact search and export filter by segment, engagement and verification
status; the timeline carries page hits, link clicks with UTM parameters, and
the client, device and location an engagement came from. - Mailboxes carry
SaveToSent, and the sending-domain authentication gate is
modelled withAuthFailingSinceand theAuthState*constants.
Removed
DeviceToken, which no route ever returned.
What's Changed
Full Changelog: v0.2.0...v0.3.0
v0.2.0
What's Changed
- Add the official Warmbly Go SDK (warmbly-go) by @meszmate in #1
- test: near-complete coverage for SDK, gateway and wsconn (+organization example) by @meszmate in #7
- feat: rebuild the SDK against the current v1 API by @meszmate in #8
- fix: remove a compiled binary committed by mistake by @meszmate in #9
- ci(deps): bump github/codeql-action from 3 to 4 by @dependabot[bot] in #2
- ci(deps): bump softprops/action-gh-release from 2 to 3 by @dependabot[bot] in #3
- ci(deps): bump actions/checkout from 4 to 6 by @dependabot[bot] in #4
- ci(deps): bump actions/setup-go from 5 to 6 by @dependabot[bot] in #5
- ci(deps): bump codecov/codecov-action from 4 to 7 by @dependabot[bot] in #6
- docs: cut the 0.2.0 release by @meszmate in #10
New Contributors
- @meszmate made their first contribution in #1
- @dependabot[bot] made their first contribution in #2
Full Changelog: https://github.com/warmbly/warmbly-go/commits/v0.2.0