Changelog
React Native SDK changelog
Release history for `@easylabs/react-native`.
Synced from packages/easy-react-native/CHANGELOG.md on the latest publish.
This is the canonical release history for @easylabs/react-native.
0.1.0
Minor Changes
-
0.1.0 — full SDK refresh aligning with the current Easy Labs API
This is the first published release that reflects the API as it stands at 2026-04-26. It is a coordinated bump across all four packages and contains a substantial number of breaking changes alongside a much larger additive surface. Pre-1.0 semver convention: minor bumps may carry breaking changes.
Publishing foundation
@easylabs/commonis now published as a standalone package. The other three packages depend on it directly instead of inlining its code at build time. A patch incommonripples to consumers via semver range rather than requiring three coordinated republishes.- All four packages now ship dual ESM + CJS, declaration files, source
maps, and a modern nested-conditions
exportsmap.arethetypeswrongis clean acrossnode10,node16-cjs,node16-esm, and bundler resolvers. - MIT license, full repository / homepage / bugs metadata,
sideEffects: false,engines.node: ">=22", andpublishConfig.access: "public"are set on every package. @basis-theory/node-sdkhas been removed from@easylabs/node— it was declared but never imported.@basis-theory/react-elements,@basis-theory/web-elements, and@basis-theory/react-native-elementsare bumped to current minors;@easylabs/react-native'sreact-nativepeer is tightened to>=0.79.0to match the card-vault SDK's floor.
Breaking API alignment
Subscriptions
The legacy Finix-shaped subscription engine is replaced with the new Stripe-style engine.
SubscriptionDatais rewritten withitems[],current_period_start/end,billing_cycle_anchor,cancel_at_period_end,pause_collection,latest_invoice_id,proration_behavior,credit_balance,pending_update. The old flat fields (subscription_plan_id,linked_to,buyer_details,subscription_phase, etc.) are gone.SubscriptionStatusreplacesSubscriptionState(lowercase Stripe-style:incomplete | incomplete_expired | trialing | active | past_due | unpaid | canceled | paused).createSubscription(data)— body shape is now{ identity_id, items: [{ price_id, quantity? }], instrument_id?, proration_behavior?, billing_cycle_anchor?, trial_period_days?, trial_end?, description?, metadata? }.cancelSubscription(id, options?)— nowDELETE /subscriptions/:id?at_period_end=..., defaulting to immediate cancel. Pass{ at_period_end: true }to schedule for the period boundary.getCustomerSubscriptions(id, params?)— returns the new paginated wrapperPaginated<SubscriptionData>({ data, total, limit, offset }) and accepts an optionalstatusfilter.- The four legacy subscription-plan methods (
getSubscriptionPlans,getSubscriptionPlan,createSubscriptionPlan,updateSubscriptionPlan) are removed.SubscriptionPlanDatais kept as a@deprecatedread-back type only.
Orders
updateOrderTags(orderId, tags)now hitsPATCH /orders/:id(the old/orders/:id/tagsroute returns 404 on the new API).OrderDatagains the documentedtags: Record<string, unknown>field.
Product prices
CreatePricerecurring branch now requires{ currency, unit_amount, interval, interval_count }and accepts optionalpricing_model,trial_period_days. The vestigialfinix_subscription_plan_idis gone.PriceDatareplacesfinix_subscription_plan_idwithinterval,interval_count,pricing_model,trial_period_days.- New
IntervalandPricingModelenums.
Wallet checkout
- The wallet-checkout flow is not currently served by the Easy API. The
three wallet-checkout methods (
createCheckoutWithWallet,createWalletCheckout,createWalletCheckoutLegacy) are removed. TheCreateWalletCheckoutandWalletCheckoutResponseDatatypes are kept in@easylabs/commonas internal reference.
Sessions
EasyApiClient.createBasisTheorySession(body)is narrowed to accept only{ nonce: string }. The sharedcreateBasisTheorySessionutility forwards only{ nonce }regardless of what callers pass, matching the API schema. The util's exposed parameter type is unchanged soEasyProvidercallers compile without changes.
Disputes
EasyApiClient.updateDisputeTagsrenamed toupdateDispute. Wire shape unchanged.
Balance transfers
- Balance transfer operations are removed from the SDK surface. Migration: treasury operations are managed internally by Easy Labs.
Additive expansion
Subscription lifecycle
13 new methods on
EasyApiClientcovering pause/resume, item management, discounts, one-time charges, metered usage, and proration preview:updateSubscription,pauseSubscription,resumeSubscription,getSubscriptionProrationPreviewaddSubscriptionItem,updateSubscriptionItem,removeSubscriptionItemapplySubscriptionDiscount,listSubscriptionDiscounts,removeSubscriptionDiscountcreateOneTimeChargereportSubscriptionUsage,getSubscriptionUsageSummary,getSubscriptionUsageReconciliation
Refunds
createRefund(transferId, { refund_amount, tags? })→POST /transfer/:id/reversals.
Payment links
CreatePaymentLinkPayloadgainspayment_limitandbranding_overrides.PaymentLinkDatagainspayment_count,payment_limit,branding_overrides, and the documentedstateenum.
Embedded checkout
validateEmbeddedCheckoutSession,confirmEmbeddedCheckoutSession,getEmbeddedCheckoutConfig,updateEmbeddedCheckoutConfig.validateandconfirmauthenticate via the session'sclient_secretrather than the API key — the SDK skips thex-easy-api-keyheader on those routes via a new internalskipAuthflag inmakeRequest.CryptoPaymentInfoexpanded with optionalstatusandtx_signature.
Webhooks
- Six management methods:
registerWebhookEndpoint,listWebhookEndpoints,updateWebhookEndpoint,deleteWebhookEndpoint,listWebhookDeliveries,listEndpointDeliveries. - New verifier in
@easylabs/node:EasyWebhooks.constructEvent(rawBody, signatureHeader, secret). Verifies HMAC-SHA256 vianode:crypto.timingSafeEqual, parses the payload, and returns a typedWebhookEvent<TData>. ThrowsEasyApiErrorwith a specificWEBHOOK_*code on signature problems. - Full event-type catalog:
EASY_EVENT_TYPES(40 values) +EasyEventTypeunion.
New domains
- Invoices — full lifecycle (
createInvoice,listInvoices,getInvoice,updateInvoice,sendInvoice,payInvoice,remindInvoice,voidInvoice,getInvoicePdfData). - Coupons — CRUD (
createCoupon,listCoupons,getCoupon,updateCoupon,deleteCoupon). - Promotion codes — CRUD +
validatePromotionCode. - Authorizations —
listAuthorizations,getAuthorization,captureAuthorization,voidAuthorization. - Analytics — five aggregator getters
(
getTransactionAnalytics,getDisputeAnalytics,getSettlementAnalytics,getRevenueAnalytics,getRevenueRecoveryAnalytics). - Compliance forms —
listComplianceForms,getComplianceForm,signComplianceForm. - Dunning / revenue-recovery config —
createOrReplaceDunningConfig,getDunningConfig,updateDunningConfig. - Revenue-recovery automations — list, create, update, delete, plus
listRevenueRecoveryAutomationRuns.
Error surface
- New
EasyApiErrorclass (exported from@easylabs/common). All non-2xx responses throw anEasyApiErrorcarryingstatus,code(from the API error envelope),message(preserves the legacy"API request failed: ..."prefix),details,retryAfterSeconds(parsed from theRetry-Afterheader), andraw. Existing callers matching against the message keep working; new callers caninstanceofbranch and read typed fields.
Out of scope (intentionally deferred)
- Customer Portal end-user flows are cookie/JWT-session based and outside the SDK's API-key-only auth model.
- Tax — feature deferred at the product level.
- Treasury — most routes gate on JWT + 2FA; revisit post-1.0.
- Custom Domains — JWT-only, dashboard-only.
Patch Changes
- Updated dependencies
- @easylabs/common@0.1.0
0.0.1
Patch Changes
- 7134a80: Update ProductData for new api contract returning price ids array