Skip to content

Releases: shipeasy-ai/sdk-ts

@shipeasy/devtools-core 1.1.0

Choose a tag to compare

@vshaveyko vshaveyko released this 26 Oct 13:52

submitPublicBug / submitPublicFeature take an optional tags: string[]; each name is matched case-insensitively against the project's existing tags — reused when it matches, created when it doesn't. @shipeasy/sdk is unchanged (9.0.2).

v9.0.2

Choose a tag to compare

@vshaveyko vshaveyko released this 09 Aug 21:47

Fixed: bundling the server entry no longer tries to resolve next/headers

@shipeasy/sdk has never depended on Next — the next/headers read in shipeasy() is a Next-only ambient fallback in a try/catch, for Next apps that never pass opts.cookies. But the catch is a runtime guard, and the specifier was a plain literal, so any non-Next app that BUNDLED the server entry had its build fail while resolving it:

[vite]: Rollup failed to resolve import "next/headers" from "@shipeasy/sdk/dist/server/index.mjs"

The published bundle now carries the specifier in a form Rollup and Vite decline to analyse (so it stays a runtime-only lookup that lands in the catch off Next), while webpack and Turbopack still evaluate it — a Next app keeps binding to its own bundled next/headers, and the ambient cookie read (and the stable anonymous bucketing that depends on it) is unchanged.

Verified end to end on Next 16 (Turbopack and webpack), a Vite/Rollup SSR build, esbuild, and unbundled Node + Express.

No API change. Apps that already pass cookies were never affected.

v9.0.1

Choose a tag to compare

@vshaveyko vshaveyko released this 27 Jul 19:24

Docs: where see() extras go in the chain

causes_the(subject) and .to(outcome) are two halves of one sentence, so the docs no longer teach causes_the(x).extras({...}).to(y) — wedging the debug payload between the subject and the outcome splits the consequence in half and is hard to read. That shape is now a documented hard ban.

The preferred form in TypeScript is trailing extras, .to(outcome).extras({...}): the chain dispatches on the next microtask, so extras chained after the terminal still make the report. Inline .to(outcome, extras) remains equivalent, and addExtras() still buffers context from any layer.

Docs, snippet, skill and the to() JSDoc updated to match. No behaviour change.

v9.0.0

Choose a tag to compare

@vshaveyko vshaveyko released this 27 Jul 14:36

Removes the /sdk/loader.js script loader and points the SSR bootstrap tag at /sdk/runtime.js. See CHANGELOG.md for the full 8.0.0 + 9.0.0 diff since 7.9.0.

v7.9.0 — server identity resolver (no anon→identified flip)

Choose a tag to compare

@vshaveyko vshaveyko released this 20 Jul 00:54

Register a request-scoped server identity resolver (setServerIdentity / shipeasy({ identify })) so SSR bootstrap evaluates for the identified user — no anon→identified flip. The bootstrap tag carries the identity (data-user); the browser SDK adopts it and reconciles a later identify() idempotently. See CHANGELOG for details.

v7.8.2

Choose a tag to compare

@vshaveyko vshaveyko released this 19 Jul 04:54

Fix: DevTools override cookie now survives reloads.

The per-session signing grant that lets the overlay write the server-trusted se_ov cookie lived only in module memory (set once from the auth popup) while the devtools session token is persisted — so after the reload every override triggers, the overlay looked connected yet silently failed to write the cookie, changing only the URL param. The grant is now mirrored into sessionStorage and rehydrated on overlay init, dropped on sign-out and when expired/project-mismatched.

v7.8.1

Choose a tag to compare

@vshaveyko vshaveyko released this 19 Jul 04:36

Fix: honor the gatekeeper stack when evaluating gates locally.

evalGateInternal previously read only the flat rules+rolloutPct columns and ignored a gate's ordered stack. For a modern gatekeeper the flat columns are a lossy approximation (a whitelist condition at 100% followed by a 0% public rollout flattens to rolloutPct:0, wrongly read as never-true). The SDK now evaluates the stack top-to-bottom exactly like @shipeasy/core evalGatekeeper and the edge worker. Stack-less gates keep the legacy flat path.

v7.8.0 — signed DevTools override cookies

Choose a tag to compare

@vshaveyko vshaveyko released this 18 Jul 21:54

Signed DevTools override cookies: overrides for feature flags, kill switches, configs and experiments now reach the server (SSR nav, route guards, __SE_BOOTSTRAP) via a signed se_ov cookie, not just the client via URL params.

  • Paired-key HMAC handshake (per-project verify key on /sdk/flags + /sdk/evaluate; per-session signing key issued to the authenticated overlay). Fail-closed on missing key / forged / expired.
  • Framework-general: shipeasy({ overrideCookie }) takes the bare value or a Cookie header; flags.verifyOverrides(cookie). No next/* dependency.
  • Also: gate the "No server key" setup warning to real deploys.

See CHANGELOG.md for details.

v7.7.0 — see() inline extras + ambient add_extras

Choose a tag to compare

@vshaveyko vshaveyko released this 14 Jul 03:58

.to(outcome, extras) folds extras into the terminal alongside the existing trailing .extras(). Adds addExtras/clearExtras (+ runWithExtras): AsyncLocalStorage on the server so concurrent requests don't bleed, a module buffer in the browser; merged under chain extras (chain wins) at dispatch.

v7.6.0

Choose a tag to compare

@vshaveyko vshaveyko released this 11 Jul 06:17

React Native devtools overlay round: full-page config viewer + experiment detail drill-ins, ops-queue redesign (Bugs/Features/Errors/Alerts with status sections, priority left-borders, AI/PR row tints + PR links), Active-overrides screen + header ⚡ pill, redesigned create-success screens, read-only ValueTree for structured values, forced-variant params delivered live, and the I18n panel removed for now. See CHANGELOG.md for the full list.