Skip to content

Releases: warmbly/warmbly-go

v0.3.1 — carry waiting_for_leads on a campaign start

Choose a tag to compare

@github-actions github-actions released this 07 Sep 10:28
e691c83
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, which POST /campaigns/:id/start now
    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.
  • ErrCodeNoLeads and ErrCodeNoRemainingLeads, 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 turns Continuous on, leaves the campaign active and
    idle, and reports WaitingForLeads. CampaignService.Start documented that
    older behaviour, which is now wrong.
  • A form linked to a campaign, or an automation that enrolls into one, turns
    Continuous on, as linking a segment already did.

What's Changed

  • feat(campaigns): carry waiting_for_leads on a campaign start by @meszmate in #15

Full Changelog: v0.3.0...v0.3.1

v0.3.0 — sync with the current v1 API

Choose a tag to compare

@github-actions github-actions released this 07 Sep 10:04
5cc2aac
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, and client.PoolLink /
    client.CloudLink for the self-hosted warmup pool link.
  • Mailboxes: Allowance reports how many mailboxes a workspace may hold and
    why; Hold and Release take a mailbox in and out of campaign rotation;
    SyncStatus exposes the backfill and fair-use throttle state; Behavior,
    UpdateBehavior and BehaviorPlan drive humanlike sending; RefreshAuthCheck
    records a domain verdict rather than only reading one; GetTrackingDomain and
    VerifyTrackingDomain complete the custom tracking domain flow; bulk
    SMTP/IMAP connect and the two reconnect routes.
  • Campaigns: Estimate projects recipients, capacity and finish date before a
    launch; Duplicate; Forms; ListSegments and SetSegments;
    StartWithOptions carries the acknowledgement that clears a list-risk
    refusal.
  • Contacts: address verification (VerificationOverview, RequestVerification),
    CampaignStates, Segments, and a cursor-paginated ListTimeline.
  • Sign-in: the browser single-sign-on start and exchange, the first-run claim,
    deployment capabilities via AuthConfig, instance version reporting, and the
    full CLI device-code flow with a WaitForCLIAuth helper.
  • 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.HasCode and the ErrCode* constants, so a caller can branch on the
    specific refusal rather than on a status several refusals share.
  • Gateway: typed JoinError with the server's code and reason slug, a
    Permanent method 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 the CAMPAIGN_IDLE,
    ACCOUNT_SYNC_STATE, PAGE_HIT and FORM_SUBMISSION_CREATED events.
  • Webhooks: the form.submitted event, the richer dedicated contact.created
    payload, the webhook.test challenge payload, and WebhookEvent.Into.

Fixed

  • gateway.IntentAI was "AI", which is a substring of EMAIL and
    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 to ErrForbidden, and 4001, which the server never sends, was
    mapped at all. Corrected against the gateway's own error_code/1.
  • A client could get permanently stuck after a failed resume. The
    resume_failed path left the sequence at the evicted position, so every
    later resume failed too. It now advances to the server's current sequence.
  • Meetings.Create decoded nothing. The endpoint answers a wrapped
    envelope, so every field of the returned meeting was silently zero.
  • Billing.Cancel was 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, not avatar, and answer a bare URL rather than the object.
  • EnsureReferralCode, PreviewInvitation and RegisterDeviceToken each
    decoded a type the endpoint does not return.
  • ReferralEarning carried invented fields; it now matches the wire.
  • Campaigns.UpdateAdvancedSettings sent 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, with AuditEntitySequence carrying the wrong value.

Changed

  • Campaigns.Start and Campaigns.Stop return a *CampaignStatusChange.
    The endpoints answer a status envelope, never a campaign, so the previous
    *Campaign was always zero.
  • Campaigns.UpdateAdvancedSettings and Outreach.Update return only a
    *Response; both endpoints answer 204 with no body.
  • Email.LastSyncedAt is now *time.Time. It is null until the first sync,
    which previously failed to decode.
  • Auth.Login and Auth.Register return 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 on CodeRequired.
  • CRM.ListDeals and CRM.ListTasks take 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, PreviewPlanChange and AppliedDiscounts return
    typed results instead of map[string]any.
  • Auth.UploadAvatar and Organization.UploadAvatar return the avatar URL.
  • Campaigns carry continuous sending (Continuous, IdleSince), guardrails,
    UTM tagging, unsubscribe mode and a kind; 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 with AuthFailingSince and the AuthState* constants.

Removed

  • DeviceToken, which no route ever returned.

What's Changed

  • feat: sync the SDK with the current v1 API for 0.3.0 by @meszmate in #14

Full Changelog: v0.2.0...v0.3.0

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 05 Aug 03:43
2646571

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

Full Changelog: https://github.com/warmbly/warmbly-go/commits/v0.2.0