{"name":"@playlive/tiltify-core","dist-tags":{"latest":"0.4.19"},"versions":{"0.4.17":{"name":"@playlive/tiltify-core","version":"0.4.17","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-WdKuHaglV3pSQSuOqYa2fwoUyWRQSJf1hn8TcASAwXKi1JpiQM+1NzAxhF8NQA7WtB2CTHrjxBPVuh7osGcQqw==","shasum":"1c87a867c43fa182a9c5b70940d6795fe563a960","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.17.tgz","shasum":"1c87a867c43fa182a9c5b70940d6795fe563a960","integrity":"sha512-WdKuHaglV3pSQSuOqYa2fwoUyWRQSJf1hn8TcASAwXKi1JpiQM+1NzAxhF8NQA7WtB2CTHrjxBPVuh7osGcQqw=="}},"0.1.0":{"name":"@playlive/tiltify-core","version":"0.1.0","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"bun":"./src/index.ts","import":"./dist/index.js","types":"./dist/index.d.ts"},"./types":{"bun":"./src/types/index.ts","import":"./dist/types/index.js","types":"./dist/types/index.d.ts"},"./constants":{"bun":"./src/constants.ts","import":"./dist/constants.js","types":"./dist/constants.d.ts"},"./errors":{"bun":"./src/errors.ts","import":"./dist/errors.js","types":"./dist/errors.d.ts"},"./client":{"bun":"./src/client.ts","import":"./dist/client.js","types":"./dist/client.d.ts"}},"files":["dist","coverage-badge.svg","README.md","CHANGELOG.md"],"scripts":{"build":"bun run build.ts","test":"bun test","coverage":"bun run ../../../scripts/generate-coverage-badge.ts --cwd . --label Coverage","docs:build":"typedoc --out dist/docs src/index.ts","clean":"rm -rf dist","release":"release-it --config ../../../.release-it.json","release:dry":"release-it --config ../../../.release-it.json --dry-run"},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0"},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-vul5guyOr/YzMtbMV2pkvOHFjEO0PYmIul2PQSnHGEQb6klf1vQhHk79C6GRAR/RIDD9JLuv1y0DEaibS3LjLQ==","shasum":"ff0a06010431678abf837fb7904559530e99307a","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.1.0.tgz","shasum":"ff0a06010431678abf837fb7904559530e99307a","integrity":"sha512-vul5guyOr/YzMtbMV2pkvOHFjEO0PYmIul2PQSnHGEQb6klf1vQhHk79C6GRAR/RIDD9JLuv1y0DEaibS3LjLQ=="}},"0.1.1":{"name":"@playlive/tiltify-core","version":"0.1.1","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-uL3aO+TWiqbtH4u9fQpJrpasK4YiLBO1LPihVGGW/fxczfaujTWtG6DFO/U8lXfh8UgS3ytxvqy0nx7j9P3vkw==","shasum":"fabcae3fd1acce5928073ac8f0106f35a8ee3791","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.1.1.tgz","shasum":"fabcae3fd1acce5928073ac8f0106f35a8ee3791","integrity":"sha512-uL3aO+TWiqbtH4u9fQpJrpasK4YiLBO1LPihVGGW/fxczfaujTWtG6DFO/U8lXfh8UgS3ytxvqy0nx7j9P3vkw=="}},"0.1.2":{"name":"@playlive/tiltify-core","version":"0.1.2","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-HjmP/Sid9tR7VjcAciV/TxcAS0Z23SI3FYaO+uJV948linsXjB7yS3TkXxTIYgyfkvI7RPnT+qqmVrM63YLAUQ==","shasum":"5404be2373fa0142538294446a21a5d74cf852ae","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.1.2.tgz","shasum":"5404be2373fa0142538294446a21a5d74cf852ae","integrity":"sha512-HjmP/Sid9tR7VjcAciV/TxcAS0Z23SI3FYaO+uJV948linsXjB7yS3TkXxTIYgyfkvI7RPnT+qqmVrM63YLAUQ=="}},"0.2.0":{"name":"@playlive/tiltify-core","version":"0.2.0","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-caojz9eRd2Vz9mMOYJ7x8qaET3S91d3dst++R4fbZ1U4LgEwKfzD3YrGVR9Pf8ynBPg8Q7Uhll61cDFzY87TJA==","shasum":"ae5cf062035c33ceebeb4673070e76e291da2def","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.2.0.tgz","shasum":"ae5cf062035c33ceebeb4673070e76e291da2def","integrity":"sha512-caojz9eRd2Vz9mMOYJ7x8qaET3S91d3dst++R4fbZ1U4LgEwKfzD3YrGVR9Pf8ynBPg8Q7Uhll61cDFzY87TJA=="}},"0.3.0":{"name":"@playlive/tiltify-core","version":"0.3.0","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-vPCV6uvHdXodSqW9Dvrc2UWH09fuZIr9w/SKDgaxxmloxxvjMmv8ERNY/0l77BFIaVCpSx3y0sZjI6vPeuLuPQ==","shasum":"118dff93b77769219e8964777bddcb2323167a1a","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.3.0.tgz","shasum":"118dff93b77769219e8964777bddcb2323167a1a","integrity":"sha512-vPCV6uvHdXodSqW9Dvrc2UWH09fuZIr9w/SKDgaxxmloxxvjMmv8ERNY/0l77BFIaVCpSx3y0sZjI6vPeuLuPQ=="}},"0.4.0":{"name":"@playlive/tiltify-core","version":"0.4.0","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-UwsKmUkRuJX7FQZ19ELmo3KhBPS74m/7Sa81066bpwt8UTu1Rocld4Nqjtb41fHVaFl7KJI00WAT0+xa/I9r2w==","shasum":"da443ae1ef0e8a48d6c9482734761c6a6a31ae9e","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.0.tgz","shasum":"da443ae1ef0e8a48d6c9482734761c6a6a31ae9e","integrity":"sha512-UwsKmUkRuJX7FQZ19ELmo3KhBPS74m/7Sa81066bpwt8UTu1Rocld4Nqjtb41fHVaFl7KJI00WAT0+xa/I9r2w=="}},"0.4.1":{"name":"@playlive/tiltify-core","version":"0.4.1","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-i7NzeUxEwzLDu1bDClNHZoIqGc01g+MJ1oZG7j6p/3oVDpHj/ueKHILU4GgU8BbM6DWO/jitAxomIDtYX6ueww==","shasum":"f69efc3ebc5445d72795c7ea0f3b676ec4b5dcb9","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.1.tgz","shasum":"f69efc3ebc5445d72795c7ea0f3b676ec4b5dcb9","integrity":"sha512-i7NzeUxEwzLDu1bDClNHZoIqGc01g+MJ1oZG7j6p/3oVDpHj/ueKHILU4GgU8BbM6DWO/jitAxomIDtYX6ueww=="}},"0.4.2":{"name":"@playlive/tiltify-core","version":"0.4.2","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-kjkv8XZ5gZWKb5JsA9VsUeoY1a6zz12aHU1bdUovcjIxD10Wm/VGeZbV0MVRRSyvWRUyu+rT1lpT0Oq6qGzksw==","shasum":"81f0a0c232f38fe1e101fe8200db854073f1742d","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.2.tgz","shasum":"81f0a0c232f38fe1e101fe8200db854073f1742d","integrity":"sha512-kjkv8XZ5gZWKb5JsA9VsUeoY1a6zz12aHU1bdUovcjIxD10Wm/VGeZbV0MVRRSyvWRUyu+rT1lpT0Oq6qGzksw=="}},"0.4.3":{"name":"@playlive/tiltify-core","version":"0.4.3","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-Up+3NYpgCYJhErLElSWOUzYAEMPVmqJTVPJ/zur84pYV+fyLpjm5ZdJvNv8h7MvsRUghs0HTEQASGuIEud9Gvw==","shasum":"ed627e9429c3defa2a0408eb102cef8155ad6d76","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.3.tgz","shasum":"ed627e9429c3defa2a0408eb102cef8155ad6d76","integrity":"sha512-Up+3NYpgCYJhErLElSWOUzYAEMPVmqJTVPJ/zur84pYV+fyLpjm5ZdJvNv8h7MvsRUghs0HTEQASGuIEud9Gvw=="}},"0.4.4":{"name":"@playlive/tiltify-core","version":"0.4.4","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-SGlRhTFhPrAD43y57WfwyjUchMbeAbxMJMEsOrHop+gpQ6jY3KHDPD7v7cNZj20qfh1eFSWJovpjYqN+6qelhw==","shasum":"0a256065b0c1fdd3821da9e71020788203d30778","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.4.tgz","shasum":"0a256065b0c1fdd3821da9e71020788203d30778","integrity":"sha512-SGlRhTFhPrAD43y57WfwyjUchMbeAbxMJMEsOrHop+gpQ6jY3KHDPD7v7cNZj20qfh1eFSWJovpjYqN+6qelhw=="}},"0.4.5":{"name":"@playlive/tiltify-core","version":"0.4.5","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-IhGZPOp3IwAXq9w76qiBRBLETYFgmk3J6o1ZvBOvUSYfyMPWr3iUFIT59GDAkdX+UdqjpSdSYntx8A98N1Z8PA==","shasum":"c8e9d825279bf77f94c0ee57de5ed8486569fbba","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.5.tgz","shasum":"c8e9d825279bf77f94c0ee57de5ed8486569fbba","integrity":"sha512-IhGZPOp3IwAXq9w76qiBRBLETYFgmk3J6o1ZvBOvUSYfyMPWr3iUFIT59GDAkdX+UdqjpSdSYntx8A98N1Z8PA=="}},"0.4.6":{"name":"@playlive/tiltify-core","version":"0.4.6","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-O7YMYASKz/iEtqjei/IlwwjPZ6aKR6Haxd/pv4tAozjPmoCSCYP2fuwwKS3pvhFCdywtv5Vda9Sc0aoXogvJ8Q==","shasum":"c585376203cb65f22a21cdbfdc6f96f98788c5d0","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.6.tgz","shasum":"c585376203cb65f22a21cdbfdc6f96f98788c5d0","integrity":"sha512-O7YMYASKz/iEtqjei/IlwwjPZ6aKR6Haxd/pv4tAozjPmoCSCYP2fuwwKS3pvhFCdywtv5Vda9Sc0aoXogvJ8Q=="}},"0.4.7":{"name":"@playlive/tiltify-core","version":"0.4.7","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-LdxFHxYy1ae5fQmW3TObsR1AHTcx4GdU+2Jb2TFXrBpjMmEagp8r20HZqjdb/nqdZUepdKcR2j/o8cI78EU2BQ==","shasum":"0c1ec516bd36b49889784855dd4f4502ff949381","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.7.tgz","shasum":"0c1ec516bd36b49889784855dd4f4502ff949381","integrity":"sha512-LdxFHxYy1ae5fQmW3TObsR1AHTcx4GdU+2Jb2TFXrBpjMmEagp8r20HZqjdb/nqdZUepdKcR2j/o8cI78EU2BQ=="}},"0.4.8":{"name":"@playlive/tiltify-core","version":"0.4.8","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-9JTClNEfeBDc85zefc2BMcC8woz6Hap/vTDoS1bUX1HrHDzpF191s43RI3rfNSNSGrBTsxz5Mj5mesnFitjq4w==","shasum":"e204ac0d848a1399815754fd624bd3196af8a5c2","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.8.tgz","shasum":"e204ac0d848a1399815754fd624bd3196af8a5c2","integrity":"sha512-9JTClNEfeBDc85zefc2BMcC8woz6Hap/vTDoS1bUX1HrHDzpF191s43RI3rfNSNSGrBTsxz5Mj5mesnFitjq4w=="}},"0.4.9":{"name":"@playlive/tiltify-core","version":"0.4.9","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-/Kfo6s/5HdtLhkK/19r56aobqsk72hzGX17OGOvchaU/s/UTfhHLLg+/X4tzmNIgY7NBnKD1Pi0UbKTH6ETiUg==","shasum":"d122c7f6d16d7f96a57fc56b3f38f0eda48a0a76","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.9.tgz","shasum":"d122c7f6d16d7f96a57fc56b3f38f0eda48a0a76","integrity":"sha512-/Kfo6s/5HdtLhkK/19r56aobqsk72hzGX17OGOvchaU/s/UTfhHLLg+/X4tzmNIgY7NBnKD1Pi0UbKTH6ETiUg=="}},"0.4.10":{"name":"@playlive/tiltify-core","version":"0.4.10","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-QtdxymBUPLQkmhXO9mZ+sqeiGdMWyy8bYLNCLwiWWL4WEBU9qV7uz9q9Is0vFOmoHpBSmiCfcnK5ODzACFETnw==","shasum":"c0e7f11f2c399044ccc580e7e27c07ade9bde3c3","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.10.tgz","shasum":"c0e7f11f2c399044ccc580e7e27c07ade9bde3c3","integrity":"sha512-QtdxymBUPLQkmhXO9mZ+sqeiGdMWyy8bYLNCLwiWWL4WEBU9qV7uz9q9Is0vFOmoHpBSmiCfcnK5ODzACFETnw=="}},"0.4.11":{"name":"@playlive/tiltify-core","version":"0.4.11","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-KOpQbJQoe58UdUxmeY4qqyGIfLZM5AG5w4mgA50pkY1IBk2aCl/nBtHpw2/bybQQW3eVfs3PJP4kIs+b0sqoEQ==","shasum":"a36bbbc988111d6cab91cdc783ae649f1551f207","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.11.tgz","shasum":"a36bbbc988111d6cab91cdc783ae649f1551f207","integrity":"sha512-KOpQbJQoe58UdUxmeY4qqyGIfLZM5AG5w4mgA50pkY1IBk2aCl/nBtHpw2/bybQQW3eVfs3PJP4kIs+b0sqoEQ=="}},"0.4.12":{"name":"@playlive/tiltify-core","version":"0.4.12","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-5XQTot1arDEdnZ67AXwn668v/CGxmZ9PHvBeGLu1gaQkUWcHKjUdfi+KvTTMpPbgIWPDMnJGXwzcvhPBXTaJQw==","shasum":"c05bc63dd618dbabd0cbacaa55ab1b5f48df4db3","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.12.tgz","shasum":"c05bc63dd618dbabd0cbacaa55ab1b5f48df4db3","integrity":"sha512-5XQTot1arDEdnZ67AXwn668v/CGxmZ9PHvBeGLu1gaQkUWcHKjUdfi+KvTTMpPbgIWPDMnJGXwzcvhPBXTaJQw=="}},"0.4.13":{"name":"@playlive/tiltify-core","version":"0.4.13","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-XxTfQX6nLzrMCjWayRwiSG5oJYGrUFTWAKt3YzhJueGrVaNMSKhPU2jkh24Mf8ak3EiLhHV4wlhulzIZyQHC1w==","shasum":"a6447a389b47789d545acd8be003a149eab735c4","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.13.tgz","shasum":"a6447a389b47789d545acd8be003a149eab735c4","integrity":"sha512-XxTfQX6nLzrMCjWayRwiSG5oJYGrUFTWAKt3YzhJueGrVaNMSKhPU2jkh24Mf8ak3EiLhHV4wlhulzIZyQHC1w=="}},"0.4.14":{"name":"@playlive/tiltify-core","version":"0.4.14","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-DhW0LUYmgxqFpvXd+0WRnWTKsjC7CAxGWvjFfRflMCYI8+y6nYfaAoiElj9h6nmn+margq2OR35CkJvcw42+yQ==","shasum":"3260da508ae278a55a541c868916767e50d261d3","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.14.tgz","shasum":"3260da508ae278a55a541c868916767e50d261d3","integrity":"sha512-DhW0LUYmgxqFpvXd+0WRnWTKsjC7CAxGWvjFfRflMCYI8+y6nYfaAoiElj9h6nmn+margq2OR35CkJvcw42+yQ=="}},"0.4.15":{"name":"@playlive/tiltify-core","version":"0.4.15","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-5vR7pcVcdKeeDa04hJ9/CzIwJnjhtHb4ATGrgVCTnblhGx6NsBvU8vKpJvFExCyETP+hsRO2zTe4T2lViKtKOQ==","shasum":"ab20776261b2a7f2900cdc65688073f67fe0c486","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.15.tgz","shasum":"ab20776261b2a7f2900cdc65688073f67fe0c486","integrity":"sha512-5vR7pcVcdKeeDa04hJ9/CzIwJnjhtHb4ATGrgVCTnblhGx6NsBvU8vKpJvFExCyETP+hsRO2zTe4T2lViKtKOQ=="}},"0.4.16":{"name":"@playlive/tiltify-core","version":"0.4.16","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-xAxCp6KIh9WuVlGJW7eQi7M/eseWlPXLf/wHoQA7Xn+j0q8lWQuQmNbfZuxZCmTY+dJmPnh4RTwDvqn4Q64jPQ==","shasum":"881e14b863726df4912a8c866c8fd62aa9759d39","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                            | Description                                                          |\n| ---------------------------------- | -------------------------------------------------------------------- |\n| `@playlive/tiltify-core`           | Default barrel — re-exports everything below.                        |\n| `@playlive/tiltify-core/client`    | Just `Tiltify` class + `tiltify` singleton.                          |\n| `@playlive/tiltify-core/types`     | Type-only barrel (campaign / donation / user / cause / auction / …). |\n| `@playlive/tiltify-core/constants` | URL + header constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).   |\n| `@playlive/tiltify-core/errors`    | `TiltifyLibError`, `TiltifyErrorCode`, `normalizeEnvelopeError`.     |\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                  | Source           | Notes                                        |\n| ----------------------- | ---------------- | -------------------------------------------- |\n| `Tiltify`               | `./client`       | Class. Prefer the singleton.                 |\n| `tiltify`               | `./client`       | Singleton (`Tiltify.Instance`).              |\n| `TILTIFY_AUTH_MODE`     | `./auth`         | `DISABLED / CLIENT / USER` enum.             |\n| `TILTIFY_AUTH_STATUS`   | `./auth`         | `MISSING / VALID / NEEDS_REFRESH` enum.      |\n| `TiltifyOAuthScope`     | `./auth`         | `\"public\" | \"cause\" | \"webhooks:write\"`.    |\n| `TiltifyLibError`       | `./errors`       | Throwable, branchable via `err.code`.        |\n| `TiltifyErrorCode`      | `./errors`       | Union of error categories.                   |\n| `normalizeEnvelopeError`| `./errors`       | String/object/`HTTP 4xx` body normaliser.    |\n| `LogLevel` / `LogFn`    | `./logging`      | Pluggable logger primitives.                 |\n| `TiltifyProxyEnv`       | `./proxy`        | `\"dev\" | \"qa\" | \"prod\"` shorthand.          |\n| `PROXY_URLS`            | `./proxy`        | Env → URL map.                               |\n| `BASE_URL`              | `./constants`    | Default Tiltify v5 API URL.                  |\n| `PROD/QA/DEV_PROXY_URL` | `./constants`    | Hosted St. Jude proxy URLs.                  |\n| `SJ_CAUSE_ID`           | `./constants`    | Static UUID for the St. Jude cause.          |\n| `SOURCE_HEADER_*`       | `./constants`    | Proxy request-tagging header constants.      |\n| `Tiltify*` types        | `./types`        | Every public Tiltify resource shape.         |\n| `KNOWN_URLS`            | `./`             | Twitch Extension URL disclosure list.        |\n| `PACKAGE_NAME`          | `./`             | Identifier for runtime version-pinning.      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/).\nRe-sync via the `/charity:sync` skill or `bun run specs:sync:tiltify`. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow. Every public method on `Tiltify` carries an `@see` tag pointing at the\nupstream `operationId`; `bun run check:spec-coverage` enforces that those tags\nresolve to a real spec entry.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\nRealistic end-to-end scenarios (campaign + donation feed + leaderboard) land in\n`examples/` once `dev/greenroom` (phase 8) is wired up as the harness.\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.16.tgz","shasum":"881e14b863726df4912a8c866c8fd62aa9759d39","integrity":"sha512-xAxCp6KIh9WuVlGJW7eQi7M/eseWlPXLf/wHoQA7Xn+j0q8lWQuQmNbfZuxZCmTY+dJmPnh4RTwDvqn4Q64jPQ=="}},"0.4.18":{"name":"@playlive/tiltify-core","version":"0.4.18","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-9r4Aidv82MCxrjzhrK2moJoJHWPORKbaoHg9nSgHQLndnAMez1LyycNHqUENMIRpv/OyZNHp5u1YS+CKEKIQZw==","shasum":"2e51aeaa91bb858f3b3cd82ba344a55b1f172b38","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies and no runtime dependencies — `peerDependencies` in\n`package.json` is empty and the client uses the platform's `fetch`.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                                  | Description                                                                                    |\n| ---------------------------------------- | ---------------------------------------------------------------------------------------------- |\n| `@playlive/tiltify-core`                 | Default barrel — re-exports every module below.                                                 |\n| `@playlive/tiltify-core/client`          | `Tiltify` class + `tiltify` singleton.                                                          |\n| `@playlive/tiltify-core/types`           | Type-only barrel (campaign / donation / user / cause / auction / webhook / common).             |\n| `@playlive/tiltify-core/constants`       | URL, header, and version constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).                  |\n| `@playlive/tiltify-core/errors`          | `TiltifyLibError`, `TiltifyErrorCode`, `TiltifyLibErrorOptions`, `normalizeEnvelopeError`.      |\n| `@playlive/tiltify-core/backoff`         | Pure `Retry-After` / exponential-backoff helpers. No REST deps.                                 |\n| `@playlive/tiltify-core/urls`            | Pure `tiltify.com` URL parse/build helpers. No REST deps.                                        |\n| `@playlive/tiltify-core/cause-classifier`| `isCampaignForCause` / `filterCampaignsByCause` (performs REST lookups).                        |\n\n`/backoff` and `/urls` are dependency-free — import them when you want the\nhelpers without pulling the client (and its `globalThis.fetch` touch) into a\nbundle. `auth`, `logging`, and `proxy` have no dedicated subpath; import those\nsymbols from the default barrel.\n\n## API reference\n\nRun `bun run docs:build` inside this package to emit the TypeDoc site at\n`dist/docs/`. The aggregate site (every package merged) is built via\n`bun run docs:site` at the workspace root.\n\nTop-level exports:\n\n| Export                                                                       | Source               | Kind     | Notes                                                                       |\n| ---------------------------------------------------------------------------- | -------------------- | -------- | --------------------------------------------------------------------------- |\n| `Tiltify`                                                                    | `./client`           | class    | Prefer the singleton. `Tiltify.Instance` is `globalThis`-pinned.            |\n| `tiltify`                                                                    | `./client`           | const    | The singleton (`Tiltify.Instance`).                                          |\n| `TILTIFY_AUTH_MODE`                                                          | `./auth`             | enum     | `DISABLED` / `CLIENT` / `USER`.                                              |\n| `TILTIFY_AUTH_STATUS`                                                        | `./auth`             | enum     | `MISSING` / `VALID` / `NEEDS_REFRESH`.                                       |\n| `TiltifyOAuthScope`                                                          | `./auth`             | type     | `\"public\"` / `\"cause\"` / `\"webhooks:write\"`.                                 |\n| `TiltifyLibError`                                                            | `./errors`           | class    | Throwable; branch via `err.code`. `.fromTiltifyError()`, `.toJSON()`.        |\n| `TiltifyErrorCode`                                                           | `./errors`           | type     | Union of error categories (`\"NOT_FOUND\"`, `\"TIMEOUT\"`, …).                   |\n| `TiltifyLibErrorOptions`                                                     | `./errors`           | type     | Structured throw-site context.                                               |\n| `normalizeEnvelopeError`                                                     | `./errors`           | function | String / object / `\"HTTP 4xx\"` body normalizer.                              |\n| `LogLevel`, `LogFn`                                                          | `./logging`          | type     | Pluggable logger primitives.                                                 |\n| `LOG_LEVEL_RANK`, `defaultLogger`                                            | `./logging`          | const    | Level ranks + the built-in `console.*` sink.                                 |\n| `TiltifyProxyEnv`                                                            | `./proxy`            | type     | `\"dev\"` / `\"qa\"` / `\"prod\"`.                                                 |\n| `PROXY_URLS`, `PROXY_FALLBACK_ORDER`                                         | `./proxy`            | const    | Env → URL map; ordered fallback envs.                                        |\n| `isProxyEnv`, `joinURL`, `shouldFallbackOnError`                             | `./proxy`            | function | Type guard, slash-safe URL join, transient-error predicate.                  |\n| `BASE_URL`, `OAUTH_TOKEN_URL`                                                | `./constants`        | const    | Tiltify v5 API + token endpoints.                                            |\n| `PROD_PROXY_URL`, `QA_PROXY_URL`, `DEV_PROXY_URL`, `PROXY_FALLBACK_CHAIN`    | `./constants`        | const    | Hosted St. Jude proxy URLs + their ordered chain.                            |\n| `SJ_CAUSE_ID`, `ALWAYS_INCLUDE_SJ_FUNDRAISING_EVENT_IDS`                     | `./constants`        | const    | St. Jude cause UUID + legacy event-ID allow-set.                             |\n| `SOURCE_HEADER_NAME`, `SOURCE_HEADER_VALUE`                                  | `./constants`        | const    | Proxy request-tagging header (overridable via `SetSourceTag`).               |\n| `CLIENT_VERSION`, `CLIENT_VERSION_HEADER_NAME`, `CLIENT_VERSION_HEADER_VALUE`| `./constants`        | const    | Build stamp; proxy-only telemetry header. `\"dev\"` when run from source.      |\n| `USER_AGENT_HEADER_NAME`, `USER_AGENT_HEADER_VALUE`                          | `./constants`        | const    | Default outbound UA (overridable via `SetUserAgent`).                        |\n| `parseRetryAfter`, `computeBackoffMs`, `nextRetrySleepMs`                    | `./backoff`          | function | RFC 7231 `Retry-After` parsing + jittered exponential backoff.               |\n| `ComputeBackoffOptions`                                                      | `./backoff`          | type     | Tunables for the two backoff helpers.                                        |\n| `DEFAULT_MAX_BACKOFF_MS`, `DEFAULT_BASE_BACKOFF_MS`, `DEFAULT_JITTER_MS`     | `./backoff`          | const    | `30_000` / `500` / `250`.                                                    |\n| `normalizeTiltifyUrl`, `extractSlugsFromTiltifyUrl`, `isTeamCampaignUrl`, `buildTiltifyUrl` | `./urls` | function | Absolute + relative `@user` / `+team` URL handling.                          |\n| `ExtractedSlugs`                                                             | `./urls`             | type     | `{ fundraiserType, fundraiserSlug, campaignSlug }`.                          |\n| `isCampaignForCause`, `filterCampaignsByCause`                               | `./cause-classifier` | function | Direct + fundraising-event-mediated cause attribution.                       |\n| `FundraisingEventLookup`, `CauseClassifierOptions`                           | `./cause-classifier` | type     | Injection seam + options bag for the classifier.                             |\n| `KNOCK_KNOCK_JOKES`, `getRandomJoke`                                         | `./knock-knock-jokes`| const/fn | Appended to the outbound `User-Agent`. Yes, really.                          |\n| `Tiltify*` types                                                             | `./types`            | type     | Every public Tiltify resource shape.                                         |\n| `KNOWN_URLS`                                                                 | `./`                 | const    | Twitch Extension URL disclosure list.                                        |\n| `PACKAGE_NAME`                                                               | `./`                 | const    | Identifier for runtime version-pinning.                                      |\n\n## Upstream spec\n\nTiltify v5 OpenAPI snapshots live at [`specs/tiltify/`](../../../specs/tiltify/)\n(`public`, `private`, `cause`, plus `webhooks.json`). Re-sync via the\n`/charity:sync` skill or `bun run sync-charity-specs` at the workspace root. See\n[`docs/charity-spec-sync.md`](../../../docs/charity-spec-sync.md) for the full\nflow.\n\nPublic methods on `Tiltify` that map 1:1 to an upstream operation carry an\n`@see` tag naming the `operationId`; `bun run scripts/check-spec-coverage.ts`\nenforces that those tags still resolve to a real spec entry, and suggests a\nrename target when Tiltify moves one.\n\nTo add a new endpoint, use the `/charity:add-tiltify-endpoint` agent skill — it\nscaffolds the method, types, fixture, `KNOWN_URLS` update, and CHANGELOG entry.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch. See [`docs/twitch-extension-checklist.md`](../../../docs/twitch-extension-checklist.md).\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nSee the root [`MIGRATION.md`](../../../MIGRATION.md) for the full per-symbol\ntable and notes on the dual ESM+CJS → ESM-only build change.\n\n## Examples\n\n### Build an overlay payload for one campaign\n\nConfigure the singleton once at boot, resolve a `tiltify.com` URL to its slugs,\nthen fan out to the per-campaign resources. Every method throws\n`TiltifyLibError`, so a single `catch` covers the whole batch — branch on\n`err.code` rather than parsing messages.\n\n```ts\nimport {\n  extractSlugsFromTiltifyUrl,\n  TiltifyLibError,\n  tiltify,\n  type TiltifyCampaign,\n  type TiltifyDonation,\n  type TiltifyLeaderboardEntry,\n  type TiltifyMilestone,\n  type TiltifyTeamCampaign,\n} from \"@playlive/tiltify-core\";\n\n// ── Boot-time configuration (do this once) ────────────────────────────────\ntiltify.UseProxyWithFallback(\"playlive-overlay\"); // prod → qa → dev, tagged\ntiltify.SetPublicMode();\ntiltify.SetLogLevel(\"warn\");\ntiltify.SetTiltifyTimeout(8_000);\ntiltify.SetMaxRetryDuration(20_000); // cap total retry wall-time\n\nexport interface OverlayPayload {\n  campaign: TiltifyCampaign | TiltifyTeamCampaign;\n  nextMilestone: TiltifyMilestone | null;\n  topDonors: TiltifyLeaderboardEntry[];\n  recentDonations: TiltifyDonation[];\n}\n\nexport async function loadOverlay(campaignUrl: string): Promise<OverlayPayload | null> {\n  const slugs = extractSlugsFromTiltifyUrl(campaignUrl);\n  if (!slugs) {\n    throw new TiltifyLibError(`Not a Tiltify campaign URL: ${campaignUrl}`, {\n      code: \"INVALID_ARGUMENT\",\n      fields: [\"campaignUrl\"],\n    });\n  }\n\n  const isTeam = slugs.fundraiserType === \"team\";\n\n  try {\n    // FindCampaign returns null on 404 rather than throwing.\n    const campaign = await tiltify.FindCampaign(\n      slugs.fundraiserSlug,\n      slugs.campaignSlug,\n      isTeam,\n    );\n    if (!campaign) return null;\n\n    const [milestones, topDonors, recentDonations] = await Promise.all([\n      tiltify.GetMilestones(campaign.id, isTeam),\n      tiltify.GetLeaderboard(campaign.id, \"all\", isTeam, 10),\n      tiltify.GetCampaignDonations(campaign.id, isTeam, 25),\n    ]);\n\n    const raised = Number(campaign.amount_raised?.value ?? 0);\n    const nextMilestone =\n      milestones\n        .filter((m) => m.active && Number(m.amount.value) > raised)\n        .sort((a, b) => Number(a.amount.value) - Number(b.amount.value))[0] ?? null;\n\n    return { campaign, nextMilestone, topDonors, recentDonations };\n  } catch (err) {\n    if (err instanceof TiltifyLibError) {\n      // Structured context: code / status / endpoint / cursor / fields.\n      if (err.code === \"NOT_FOUND\") return null;\n      if (err.code === \"TIMEOUT\" || (err.status ?? 0) >= 500) {\n        console.warn(\"tiltify upstream degraded\", err.toJSON());\n        return null;\n      }\n    }\n    throw err;\n  }\n}\n```\n\n### Attribute campaigns to St. Jude\n\nA campaign belongs to a cause either directly (`cause_id` matches) or\nindirectly (its fundraising event's `cause_id` matches).\n`filterCampaignsByCause` resolves both, memoizing each unique\n`fundraising_event_id` so a 500-campaign list issues one lookup per event.\n\n```ts\nimport {\n  ALWAYS_INCLUDE_SJ_FUNDRAISING_EVENT_IDS,\n  filterCampaignsByCause,\n  SJ_CAUSE_ID,\n  tiltify,\n} from \"@playlive/tiltify-core\";\n\ntiltify.UseClientAuth();\ntiltify.SetCredentials(process.env.TILTIFY_CLIENT_ID!, process.env.TILTIFY_SECRET!);\n\nconst { data: events } = await tiltify.GetCurrentEvents();\nconst supporting = await tiltify.GetFundraisingEventsSupportingCampaigns(events[0]!.id, 100);\n\nconst stJudeOnly = await filterCampaignsByCause(supporting, SJ_CAUSE_ID, {\n  // Legacy Play Live events whose upstream cause attribution drifted.\n  alwaysIncludeEventIds: ALWAYS_INCLUDE_SJ_FUNDRAISING_EVENT_IDS,\n});\n\nconsole.log(`${stJudeOnly.length}/${supporting.length} campaigns are for St. Jude`);\n```\n\n### Reuse the retry policy outside the client\n\n`@playlive/tiltify-core/backoff` is pure and dependency-free — the same policy\n`PerformRequest` uses internally.\n\n```ts\nimport { nextRetrySleepMs } from \"@playlive/tiltify-core/backoff\";\n\n// Server said \"Retry-After: 2\" → 2000ms, capped at DEFAULT_MAX_BACKOFF_MS.\nnextRetrySleepMs(\"2\", 0, Date.now()); // 2000\n\n// No header → exponential + jitter for the 3rd retry (attempt is 0-based).\nnextRetrySleepMs(null, 2, Date.now(), { baseMs: 500, jitterMs: 0 }); // 2000\n```\n\nRealtime scenarios that pair this client with the Phoenix socket and the\nGreenRoom harness live in [`dev/greenroom`](../../../dev/greenroom/); see\n[`docs/greenroom-cookbook.md`](../../../docs/greenroom-cookbook.md).\n\n## Contributing\n\nSee [CONTRIBUTING.md](../../../CONTRIBUTING.md). For adding new API surface, use\nthe scaffolding skills in [`.agents/skills/`](../../../.agents/skills/).\n\n## License\n\nMIT — see [LICENSE](../../../LICENSE). Distributed via Play Live CodeArtifact\n(PRD §6).\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.18.tgz","shasum":"2e51aeaa91bb858f3b3cd82ba344a55b1f172b38","integrity":"sha512-9r4Aidv82MCxrjzhrK2moJoJHWPORKbaoHg9nSgHQLndnAMez1LyycNHqUENMIRpv/OyZNHp5u1YS+CKEKIQZw=="}},"0.4.19":{"name":"@playlive/tiltify-core","version":"0.4.19","description":"Tiltify v5 REST client (public + private + cause) with native fetch.","type":"module","sideEffects":false,"main":"./index.js","types":"./index.d.ts","exports":{".":{"import":"./index.js","types":"./index.d.ts"},"./types":{"import":"./types/index.js","types":"./types/index.d.ts"},"./constants":{"import":"./constants.js","types":"./constants.d.ts"},"./errors":{"import":"./errors.js","types":"./errors.d.ts"},"./client":{"import":"./client.js","types":"./client.d.ts"},"./backoff":{"import":"./backoff.js","types":"./backoff.d.ts"},"./urls":{"import":"./urls.js","types":"./urls.d.ts"},"./cause-classifier":{"import":"./cause-classifier.js","types":"./cause-classifier.d.ts"}},"publishConfig":{"access":"restricted","registry":"https://playlive-767397689694.d.codeartifact.us-east-1.amazonaws.com/npm/playlive/"},"peerDependencies":{},"playlive":{"target":"browser","frontendEligible":true,"coverageFloor":85},"integrity":"sha512-9/6aaRi2mN7dpbQ9F9aRRl3GQ2vMqY4CY0zp8pseyfwGKEBmxrhspv/+gRM0jAm8As15nhKb+VsqYCQfTNoiTQ==","shasum":"74d1dfb8019bfa1c6b86bc68d7dd2551315c912c","readme":"# @playlive/tiltify-core\n\nTiltify v5 REST client (public + private + cause) with native fetch. Singleton\nported from `@playlive/tiltify-lib`; the public surface is preserved verbatim so\nconsumers can migrate by changing the import specifier alone.\n\n![Coverage](./coverage-badge.svg)\n\n## Install\n\n```bash\nbun add @playlive/tiltify-core\n```\n\nNo peer dependencies and no runtime dependencies — `peerDependencies` in\n`package.json` is empty and the client uses the platform's `fetch`.\n\n## Quick start\n\n```ts\nimport { tiltify } from \"@playlive/tiltify-core\";\n\n// Server-side, client-credential OAuth (reads TILTIFY_CLIENT_ID / TILTIFY_SECRET):\ntiltify.UseClientAuth();\nconst events = await tiltify.GetCurrentEvents();\n\n// Frontend / browser usage via the St. Jude proxy (no credentials shipped):\ntiltify.UseProxy(\"prod\");\ntiltify.SetPublicMode();\nconst campaign = await tiltify.FindCampaign(\"philckd\", \"philckd-x-st-jude-play-live-2023\");\n\n// Auto-fallback prod → qa → dev on transient errors:\ntiltify.UseProxyWithFallback();\n\n// User OAuth — caller performs the code-exchange and pushes the token in:\ntiltify.UseUserAuth();\ntiltify.SetCredentials(clientID, clientSecret);\ntiltify.OverrideAuthToken(`Bearer ${accessToken}`, Date.now() + expiresInMs, refreshToken);\nconst me = await tiltify.GetCurrentUser();\n```\n\n## Subpath exports\n\n| Subpath                                  | Description                                                                                    |\n| ---------------------------------------- | ---------------------------------------------------------------------------------------------- |\n| `@playlive/tiltify-core`                 | Default barrel — re-exports every module below.                                                 |\n| `@playlive/tiltify-core/client`          | `Tiltify` class + `tiltify` singleton.                                                          |\n| `@playlive/tiltify-core/types`           | Type-only barrel (campaign / donation / user / cause / auction / webhook / common).             |\n| `@playlive/tiltify-core/constants`       | URL, header, and version constants (`BASE_URL`, proxy URLs, `SJ_CAUSE_ID`, …).                  |\n| `@playlive/tiltify-core/errors`          | `TiltifyLibError`, `TiltifyErrorCode`, `TiltifyLibErrorOptions`, `normalizeEnvelopeError`.      |\n| `@playlive/tiltify-core/backoff`         | Pure `Retry-After` / exponential-backoff helpers. No REST deps.                                 |\n| `@playlive/tiltify-core/urls`            | Pure `tiltify.com` URL parse/build helpers. No REST deps.                                        |\n| `@playlive/tiltify-core/cause-classifier`| `isCampaignForCause` / `filterCampaignsByCause` (performs REST lookups).                        |\n\n`/backoff` and `/urls` are dependency-free — import them when you want the\nhelpers without pulling the client (and its `globalThis.fetch` touch) into a\nbundle. `auth`, `logging`, and `proxy` have no dedicated subpath; import those\nsymbols from the default barrel.\n\n## API reference\n\nFull generated API documentation:\n<https://packages.playlive.experience.stjude.org/p/@playlive/tiltify-core/docs/>\n\nTop-level exports:\n\n| Export                                                                       | Source               | Kind     | Notes                                                                       |\n| ---------------------------------------------------------------------------- | -------------------- | -------- | --------------------------------------------------------------------------- |\n| `Tiltify`                                                                    | `./client`           | class    | Prefer the singleton. `Tiltify.Instance` is `globalThis`-pinned.            |\n| `tiltify`                                                                    | `./client`           | const    | The singleton (`Tiltify.Instance`).                                          |\n| `TILTIFY_AUTH_MODE`                                                          | `./auth`             | enum     | `DISABLED` / `CLIENT` / `USER`.                                              |\n| `TILTIFY_AUTH_STATUS`                                                        | `./auth`             | enum     | `MISSING` / `VALID` / `NEEDS_REFRESH`.                                       |\n| `TiltifyOAuthScope`                                                          | `./auth`             | type     | `\"public\"` / `\"cause\"` / `\"webhooks:write\"`.                                 |\n| `TiltifyLibError`                                                            | `./errors`           | class    | Throwable; branch via `err.code`. `.fromTiltifyError()`, `.toJSON()`.        |\n| `TiltifyErrorCode`                                                           | `./errors`           | type     | Union of error categories (`\"NOT_FOUND\"`, `\"TIMEOUT\"`, …).                   |\n| `TiltifyLibErrorOptions`                                                     | `./errors`           | type     | Structured throw-site context.                                               |\n| `normalizeEnvelopeError`                                                     | `./errors`           | function | String / object / `\"HTTP 4xx\"` body normalizer.                              |\n| `LogLevel`, `LogFn`                                                          | `./logging`          | type     | Pluggable logger primitives.                                                 |\n| `LOG_LEVEL_RANK`, `defaultLogger`                                            | `./logging`          | const    | Level ranks + the built-in `console.*` sink.                                 |\n| `TiltifyProxyEnv`                                                            | `./proxy`            | type     | `\"dev\"` / `\"qa\"` / `\"prod\"`.                                                 |\n| `PROXY_URLS`, `PROXY_FALLBACK_ORDER`                                         | `./proxy`            | const    | Env → URL map; ordered fallback envs.                                        |\n| `isProxyEnv`, `joinURL`, `shouldFallbackOnError`                             | `./proxy`            | function | Type guard, slash-safe URL join, transient-error predicate.                  |\n| `BASE_URL`, `OAUTH_TOKEN_URL`                                                | `./constants`        | const    | Tiltify v5 API + token endpoints.                                            |\n| `PROD_PROXY_URL`, `QA_PROXY_URL`, `DEV_PROXY_URL`, `PROXY_FALLBACK_CHAIN`    | `./constants`        | const    | Hosted St. Jude proxy URLs + their ordered chain.                            |\n| `SJ_CAUSE_ID`, `ALWAYS_INCLUDE_SJ_FUNDRAISING_EVENT_IDS`                     | `./constants`        | const    | St. Jude cause UUID + legacy event-ID allow-set.                             |\n| `SOURCE_HEADER_NAME`, `SOURCE_HEADER_VALUE`                                  | `./constants`        | const    | Proxy request-tagging header (overridable via `SetSourceTag`).               |\n| `CLIENT_VERSION`, `CLIENT_VERSION_HEADER_NAME`, `CLIENT_VERSION_HEADER_VALUE`| `./constants`        | const    | Build stamp; proxy-only telemetry header. `\"dev\"` when run from source.      |\n| `USER_AGENT_HEADER_NAME`, `USER_AGENT_HEADER_VALUE`                          | `./constants`        | const    | Default outbound UA (overridable via `SetUserAgent`).                        |\n| `parseRetryAfter`, `computeBackoffMs`, `nextRetrySleepMs`                    | `./backoff`          | function | RFC 7231 `Retry-After` parsing + jittered exponential backoff.               |\n| `ComputeBackoffOptions`                                                      | `./backoff`          | type     | Tunables for the two backoff helpers.                                        |\n| `DEFAULT_MAX_BACKOFF_MS`, `DEFAULT_BASE_BACKOFF_MS`, `DEFAULT_JITTER_MS`     | `./backoff`          | const    | `30_000` / `500` / `250`.                                                    |\n| `normalizeTiltifyUrl`, `extractSlugsFromTiltifyUrl`, `isTeamCampaignUrl`, `buildTiltifyUrl` | `./urls` | function | Absolute + relative `@user` / `+team` URL handling.                          |\n| `ExtractedSlugs`                                                             | `./urls`             | type     | `{ fundraiserType, fundraiserSlug, campaignSlug }`.                          |\n| `isCampaignForCause`, `filterCampaignsByCause`                               | `./cause-classifier` | function | Direct + fundraising-event-mediated cause attribution.                       |\n| `FundraisingEventLookup`, `CauseClassifierOptions`                           | `./cause-classifier` | type     | Injection seam + options bag for the classifier.                             |\n| `KNOCK_KNOCK_JOKES`, `getRandomJoke`                                         | `./knock-knock-jokes`| const/fn | Appended to the outbound `User-Agent`. Yes, really.                          |\n| `Tiltify*` types                                                             | `./types`            | type     | Every public Tiltify resource shape.                                         |\n| `KNOWN_URLS`                                                                 | `./`                 | const    | Twitch Extension URL disclosure list.                                        |\n| `PACKAGE_NAME`                                                               | `./`                 | const    | Identifier for runtime version-pinning.                                      |\n\n## Upstream spec\n\nThis package targets the **Tiltify v5 REST API** (`https://v5api.tiltify.com`)\nacross all three published scopes — public, private, and cause. Upstream\nreference documentation, OAuth scope descriptions, and per-endpoint payload\nshapes live at <https://developers.tiltify.com>.\n\nPublic methods on `Tiltify` that map 1:1 to an upstream operation carry an\n`@see` tag naming the upstream `operationId`, so you can jump from a method in\nthe generated API docs straight to the matching entry in Tiltify's reference.\n\n## Twitch Extension URL disclosure\n\nThe `KNOWN_URLS` export enumerates every absolute URL or host this package can\nfetch — the list a Twitch Extension submission must disclose verbatim.\n\n```ts\nimport { KNOWN_URLS } from \"@playlive/tiltify-core\";\nconsole.log(KNOWN_URLS);\n//   [\n//     \"https://v5api.tiltify.com\",\n//     \"https://tiltify-proxy.prod.experience.stjude.org\",\n//     \"https://tiltify-proxy.qa.experience.stjude.org\",\n//     \"https://tiltify-proxy.dev.experience.stjude.org\",\n//   ]\n```\n\nKeep this list and the source export in sync — the Extension submission form\nrequires the disclosure list verbatim.\n\n## Migration from `@playlive/tiltify-lib`\n\n`@playlive/tiltify-core` is a drop-in replacement: the `Tiltify` class, the\n`tiltify` singleton, every method signature, every exported type, every\nconstant, and every `TiltifyLibError` code are preserved unchanged. Only the\nimport paths move:\n\n```diff\n- import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-lib\";\n+ import { tiltify, TiltifyLibError, BASE_URL } from \"@playlive/tiltify-core\";\n```\n\nThe build is ESM-only (the legacy package shipped dual ESM+CJS); CommonJS\nconsumers need a dynamic `import()`.\n\n## Examples\n\n### Build an overlay payload for one campaign\n\nConfigure the singleton once at boot, resolve a `tiltify.com` URL to its slugs,\nthen fan out to the per-campaign resources. Every method throws\n`TiltifyLibError`, so a single `catch` covers the whole batch — branch on\n`err.code` rather than parsing messages.\n\n```ts\nimport {\n  extractSlugsFromTiltifyUrl,\n  TiltifyLibError,\n  tiltify,\n  type TiltifyCampaign,\n  type TiltifyDonation,\n  type TiltifyLeaderboardEntry,\n  type TiltifyMilestone,\n  type TiltifyTeamCampaign,\n} from \"@playlive/tiltify-core\";\n\n// ── Boot-time configuration (do this once) ────────────────────────────────\ntiltify.UseProxyWithFallback(\"playlive-overlay\"); // prod → qa → dev, tagged\ntiltify.SetPublicMode();\ntiltify.SetLogLevel(\"warn\");\ntiltify.SetTiltifyTimeout(8_000);\ntiltify.SetMaxRetryDuration(20_000); // cap total retry wall-time\n\nexport interface OverlayPayload {\n  campaign: TiltifyCampaign | TiltifyTeamCampaign;\n  nextMilestone: TiltifyMilestone | null;\n  topDonors: TiltifyLeaderboardEntry[];\n  recentDonations: TiltifyDonation[];\n}\n\nexport async function loadOverlay(campaignUrl: string): Promise<OverlayPayload | null> {\n  const slugs = extractSlugsFromTiltifyUrl(campaignUrl);\n  if (!slugs) {\n    throw new TiltifyLibError(`Not a Tiltify campaign URL: ${campaignUrl}`, {\n      code: \"INVALID_ARGUMENT\",\n      fields: [\"campaignUrl\"],\n    });\n  }\n\n  const isTeam = slugs.fundraiserType === \"team\";\n\n  try {\n    // FindCampaign returns null on 404 rather than throwing.\n    const campaign = await tiltify.FindCampaign(\n      slugs.fundraiserSlug,\n      slugs.campaignSlug,\n      isTeam,\n    );\n    if (!campaign) return null;\n\n    const [milestones, topDonors, recentDonations] = await Promise.all([\n      tiltify.GetMilestones(campaign.id, isTeam),\n      tiltify.GetLeaderboard(campaign.id, \"all\", isTeam, 10),\n      tiltify.GetCampaignDonations(campaign.id, isTeam, 25),\n    ]);\n\n    const raised = Number(campaign.amount_raised?.value ?? 0);\n    const nextMilestone =\n      milestones\n        .filter((m) => m.active && Number(m.amount.value) > raised)\n        .sort((a, b) => Number(a.amount.value) - Number(b.amount.value))[0] ?? null;\n\n    return { campaign, nextMilestone, topDonors, recentDonations };\n  } catch (err) {\n    if (err instanceof TiltifyLibError) {\n      // Structured context: code / status / endpoint / cursor / fields.\n      if (err.code === \"NOT_FOUND\") return null;\n      if (err.code === \"TIMEOUT\" || (err.status ?? 0) >= 500) {\n        console.warn(\"tiltify upstream degraded\", err.toJSON());\n        return null;\n      }\n    }\n    throw err;\n  }\n}\n```\n\n### Attribute campaigns to St. Jude\n\nA campaign belongs to a cause either directly (`cause_id` matches) or\nindirectly (its fundraising event's `cause_id` matches).\n`filterCampaignsByCause` resolves both, memoizing each unique\n`fundraising_event_id` so a 500-campaign list issues one lookup per event.\n\n```ts\nimport {\n  ALWAYS_INCLUDE_SJ_FUNDRAISING_EVENT_IDS,\n  filterCampaignsByCause,\n  SJ_CAUSE_ID,\n  tiltify,\n} from \"@playlive/tiltify-core\";\n\ntiltify.UseClientAuth();\ntiltify.SetCredentials(process.env.TILTIFY_CLIENT_ID!, process.env.TILTIFY_SECRET!);\n\nconst { data: events } = await tiltify.GetCurrentEvents();\nconst supporting = await tiltify.GetFundraisingEventsSupportingCampaigns(events[0]!.id, 100);\n\nconst stJudeOnly = await filterCampaignsByCause(supporting, SJ_CAUSE_ID, {\n  // Legacy Play Live events whose upstream cause attribution drifted.\n  alwaysIncludeEventIds: ALWAYS_INCLUDE_SJ_FUNDRAISING_EVENT_IDS,\n});\n\nconsole.log(`${stJudeOnly.length}/${supporting.length} campaigns are for St. Jude`);\n```\n\n### Reuse the retry policy outside the client\n\n`@playlive/tiltify-core/backoff` is pure and dependency-free — the same policy\n`PerformRequest` uses internally.\n\n```ts\nimport { nextRetrySleepMs } from \"@playlive/tiltify-core/backoff\";\n\n// Server said \"Retry-After: 2\" → 2000ms, capped at DEFAULT_MAX_BACKOFF_MS.\nnextRetrySleepMs(\"2\", 0, Date.now()); // 2000\n\n// No header → exponential + jitter for the 3rd retry (attempt is 0-based).\nnextRetrySleepMs(null, 2, Date.now(), { baseMs: 500, jitterMs: 0 }); // 2000\n```\n\nRealtime traffic for the same campaign is available over Tiltify's Phoenix\nChannels gateway via [`@playlive/tiltify-phoenix`](../phoenix/), which uses this\nclient for its slug → fact-id lookups.\n\n## License\n\nMIT © St. Jude Children's Research Hospital\n","readmeFilename":"README.md","dist":{"tarball":"https://packages.playlive.experience.stjude.org/@playlive/tiltify-core/-/tiltify-core-0.4.19.tgz","shasum":"74d1dfb8019bfa1c6b86bc68d7dd2551315c912c","integrity":"sha512-9/6aaRi2mN7dpbQ9F9aRRl3GQ2vMqY4CY0zp8pseyfwGKEBmxrhspv/+gRM0jAm8As15nhKb+VsqYCQfTNoiTQ=="}}},"time":{"0.4.17":"2026-08-26T18:10:07.146Z","modified":"2026-08-26T20:05:41.971Z","0.1.0":"2026-08-26T18:15:52.099Z","0.1.1":"2026-08-26T18:15:53.069Z","0.1.2":"2026-08-26T18:15:53.579Z","0.2.0":"2026-08-26T18:15:54.176Z","0.3.0":"2026-08-26T18:15:54.791Z","0.4.0":"2026-08-26T18:15:55.774Z","0.4.1":"2026-08-26T18:15:56.294Z","0.4.2":"2026-08-26T18:15:56.963Z","0.4.3":"2026-08-26T18:15:57.619Z","0.4.4":"2026-08-26T18:15:58.254Z","0.4.5":"2026-08-26T18:15:58.841Z","0.4.6":"2026-08-26T18:15:59.352Z","0.4.7":"2026-08-26T18:16:00.497Z","0.4.8":"2026-08-26T18:16:01.459Z","0.4.9":"2026-08-26T18:16:02.051Z","0.4.10":"2026-08-26T18:16:02.704Z","0.4.11":"2026-08-26T18:16:03.292Z","0.4.12":"2026-08-26T18:16:04.015Z","0.4.13":"2026-08-26T18:16:04.567Z","0.4.14":"2026-08-26T18:16:05.143Z","0.4.15":"2026-08-26T18:16:05.724Z","0.4.16":"2026-08-26T18:16:06.254Z","0.4.18":"2026-08-26T19:40:51.154Z","0.4.19":"2026-08-26T20:05:41.971Z"}}