transport

package
v1.801.458 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 5, 2026 License: Apache-2.0 Imports: 12 Imported by: 0

Documentation

Overview

Package transport is the ONE seam that lets every cloud subsystem that speaks the commerce billing S2S surface (clients/{billing,account,admin, referrals,authors,affiliates,usage} + the request-edge metering gate in build.go) reach the co-resident, in-process commerce handler with a DIRECT Go call instead of an HTTP hop to the standalone commerce pod (CLOUD_COMMERCE_HTTP_URL, commerce.hanzo.svc:8001). This is what lets the standalone be RETIRED (task #111): once commerce is folded in-process (#114), every /v1/billing read/write + the metering debit routes to the same in-tree gin engine that /v1/commerce already does.

It is a SIBLING of clients/commerce, never a part of it: this package owns the BYTE STREAM (an http.RoundTripper), clients/commerce owns the DOMAIN reads (entitlement, active plan, balance) as typed Go calls on the embedded datastore. Two concerns, two packages — and the split is load-bearing, not cosmetic: the domain client resolves plan tiers through clients/plan, which imports the root cloud package, while build.go (in that same root package) needs this transport. One package would close that loop into an import cycle.

HOW. commerce.Mount registers the embedded commerce http.Handler here via SetHandler once, at boot. A subsystem builds its S2S HTTP request EXACTLY as before (same path, same `Authorization: Bearer <COMMERCE_SERVICE_TOKEN>`, same server-pinned `X-Org-Id`) and sends it through Transport(): when the handler is co-resident the request is dispatched to it in-process (httptest recorder — no socket, no network, no serialization change); when it is NOT (commerce staged / split-deploy) the request falls back to plain HTTP to its URL — the pre-#111 behavior, unchanged. So the SAME request, headers, body, status and body bytes flow either way — the transport swap is behaviour-preserving, which is exactly what the money-parity gate proves.

DE-COMPLECTED: subsystems keep their own request-building + subject-pinning (the tenant-isolation security boundary stays where it is); this package owns ONLY "where does the byte stream go", nothing about auth or scope.

Index

Constants

View Source
const PlaceholderBase = "http://commerce.inproc"

PlaceholderBase is the sentinel commerce base URL used when commerce is co-resident and CLOUD_COMMERCE_HTTP_URL is unset (the post-retirement steady state). The self-routing Transport ignores the host and dispatches by PATH, so the value only has to be a parseable absolute URL; it is never dialed.

Variables

This section is empty.

Functions

func Available

func Available() bool

Available reports whether commerce is co-resident (a handler is published). A subsystem uses this to keep its "configured" gate true even when CLOUD_COMMERCE_HTTP_URL is unset — the standalone is gone but commerce still answers, in-process.

func BaseURL

func BaseURL(env string) string

BaseURL returns env when non-empty, else — when commerce is co-resident — the in-process PlaceholderBase, else "". This lets a subsystem drop its dependence on CLOUD_COMMERCE_HTTP_URL: once the standalone is retired and the env is removed, the base becomes the placeholder and requests still route in-process.

func Client

func Client(timeout time.Duration) *http.Client

Client returns an *http.Client wired to the self-routing Transport with the given timeout (0 → no timeout; the in-process path is synchronous anyway). Drop-in for the &http.Client{Timeout: …} every commerce proxy builds today.

func SetApp

func SetApp(app *fiber.App)

SetApp publishes the co-resident app commerce's routes live on (the SharedApp contract). The S2S dispatch enters the app's fasthttp pipeline directly; the http.Handler shape survives only inside this seam for the bridge-building subsystems that still speak *http.Request. Passing nil un-publishes.

It takes the *fiber.App — cloud.Router.Fiber() — rather than the *zip.App: this package is imported by cloud itself, so it cannot name cloud.Router, and the engine is all the dispatch ever needed.

func SetHandler

func SetHandler(h http.Handler)

SetHandler publishes the in-process commerce handler. SetApp is the production path; this remains the seam tests stub. Passing nil un-publishes (used by tests).

func Transport

func Transport() http.RoundTripper

Transport returns the self-routing RoundTripper (in-process when co-resident, plain HTTP otherwise). Give it to any subsystem's *http.Client.Transport.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL