{
  "schemaVersion": 1,
  "packages": {
    "@farthershore/business": "3.2.0",
    "@farthershore/backend": "0.21.2",
    "@farthershore/farthershore-js": "0.32.0",
    "@farthershore/cli": "0.33.5"
  },
  "capabilities": [
    {
      "id": "cli.agents",
      "name": "farthershore agents",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/agents",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore agents [options] [command]\n\nEnable, disable, and inspect a business's operating agents\n\nOptions:\n  -h, --help                            display help for command\n\nCommands:\n  list [businessIdOrSlug]               List a business's operating agents +\n                                        enableable roles\n  status [businessIdOrSlug]             The Operator's activation state, recent\n                                        runs, and usage totals\n  runs-show [businessIdOrSlug] [runId]  One run's full paper trail: trace,\n                                        launches, action receipts\n  enable [businessIdOrSlug]             Turn the Operator on (creates it on\n                                        first enable)\n  disable [businessIdOrSlug]            Turn the Operator off (stops runs +\n                                        billing)\n  help [command]                        display help for command",
      "signature": "Usage: farthershore agents [options] [command]\n\nEnable, disable, and inspect a business's operating agents\n\nOptions:\n  -h, --help                            display help for command\n\nCommands:\n  list [businessIdOrSlug]               List a business's operating agents +\n                                        enableable roles\n  status [businessIdOrSlug]             The Operator's activation state, recent\n                                        runs, and usage totals\n  runs-show [businessIdOrSlug] [runId]  One run's full paper trail: trace,\n                                        launches, action receipts\n  enable [businessIdOrSlug]             Turn the Operator on (creates it on\n                                        first enable)\n  disable [businessIdOrSlug]            Turn the Operator off (stops runs +\n                                        billing)\n  help [command]                        display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.agents.disable",
      "name": "farthershore agents disable",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/agents",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore agents disable [options] [businessIdOrSlug]\n\nTurn the Operator off (stops runs + billing)\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore agents disable [options] [businessIdOrSlug]\n\nTurn the Operator off (stops runs + billing)\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.agents.enable",
      "name": "farthershore agents enable",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/agents",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore agents enable [options] [businessIdOrSlug]\n\nTurn the Operator on (creates it on first enable)\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore agents enable [options] [businessIdOrSlug]\n\nTurn the Operator on (creates it on first enable)\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.agents.list",
      "name": "farthershore agents list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/agents",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore agents list [options] [businessIdOrSlug]\n\nList a business's operating agents + enableable roles\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore agents list [options] [businessIdOrSlug]\n\nList a business's operating agents + enableable roles\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.agents.runs-show",
      "name": "farthershore agents runs-show",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/agents",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore agents runs-show [options] [businessIdOrSlug] <runId>\n\nOne run's full paper trail: trace, launches, action receipts\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore agents runs-show [options] [businessIdOrSlug] <runId>\n\nOne run's full paper trail: trace, launches, action receipts\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.agents.status",
      "name": "farthershore agents status",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/agents",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore agents status [options] [businessIdOrSlug]\n\nThe Operator's activation state, recent runs, and usage totals\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore agents status [options] [businessIdOrSlug]\n\nThe Operator's activation state, recent runs, and usage totals\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.agreements",
      "name": "farthershore agreements",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/agreements",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore agreements [options] [command]\n\nOptions:\n  -h, --help                                        display help for command\n\nCommands:\n  list [options] [businessIdOrSlug]                 List a business's economic agreements\n  show [businessIdOrSlug] [agreementId]             Show one economic agreement with its version history\n  pins [businessIdOrSlug] [subscriptionId]          Read a subject's subscription pins (recurring-price pin + usage-pricing binding). Read-only; migrate-to-latest is deferred.\n  create [options] [businessIdOrSlug]               Create an economic agreement (confirm-gated: previews first; pass --confirm <token> to commit)\n  amend [options] [businessIdOrSlug] [agreementId]  Amend an agreement's contract terms (append-only; confirm-gated: previews first; pass --confirm <token> to commit)\n  help [command]                                    display help for command",
      "signature": "Usage: farthershore agreements [options] [command]\n\nOptions:\n  -h, --help                                        display help for command\n\nCommands:\n  list [options] [businessIdOrSlug]                 List a business's economic agreements\n  show [businessIdOrSlug] [agreementId]             Show one economic agreement with its version history\n  pins [businessIdOrSlug] [subscriptionId]          Read a subject's subscription pins (recurring-price pin + usage-pricing binding). Read-only; migrate-to-latest is deferred.\n  create [options] [businessIdOrSlug]               Create an economic agreement (confirm-gated: previews first; pass --confirm <token> to commit)\n  amend [options] [businessIdOrSlug] [agreementId]  Amend an agreement's contract terms (append-only; confirm-gated: previews first; pass --confirm <token> to commit)\n  help [command]                                    display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.agreements.amend",
      "name": "farthershore agreements amend",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/agreements",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore agreements amend [options] [businessIdOrSlug] <agreementId>\n\nAmend an agreement's contract terms (append-only; confirm-gated: previews first;\npass --confirm <token> to commit)\n\nOptions:\n  --terms-json <json>      Negotiated contract terms as JSON:\n                           {\"percentDiscount\":{\"num\":\"1\",\"den\":\"5\"},\"floorNanos\":\"…\",\"capNanos\":\"…\",\"selectorScope\":[{\"kind\":\"provider_model_glob\",\"provider\":\"acme\",\"modelGlob\":\"acme-*\"}]}.\n                           Required for current_with_contract_terms and for\n                           amend.\n  --effective-at <iso>     When the agreement/version takes effect (ISO-8601).\n                           Default: now.\n  --confirm <token>        The confirmationToken returned by the preview run.\n                           Omit to preview only.\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n\nTwo-step: run once to PREVIEW (prints the effect + confirmationToken; nothing is written), then re-run the SAME command with --confirm <token> to append the new version.",
      "signature": "Usage: farthershore agreements amend [options] [businessIdOrSlug] <agreementId>\n\nAmend an agreement's contract terms (append-only; confirm-gated: previews first;\npass --confirm <token> to commit)\n\nOptions:\n  --terms-json <json>      Negotiated contract terms as JSON:\n                           {\"percentDiscount\":{\"num\":\"1\",\"den\":\"5\"},\"floorNanos\":\"…\",\"capNanos\":\"…\",\"selectorScope\":[{\"kind\":\"provider_model_glob\",\"provider\":\"acme\",\"modelGlob\":\"acme-*\"}]}.\n                           Required for current_with_contract_terms and for\n                           amend.\n  --effective-at <iso>     When the agreement/version takes effect (ISO-8601).\n                           Default: now.\n  --confirm <token>        The confirmationToken returned by the preview run.\n                           Omit to preview only.\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n\nTwo-step: run once to PREVIEW (prints the effect + confirmationToken; nothing is written), then re-run the SAME command with --confirm <token> to append the new version.\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.agreements.create",
      "name": "farthershore agreements create",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/agreements",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore agreements create [options] [businessIdOrSlug]\n\nCreate an economic agreement (confirm-gated: previews first; pass --confirm\n<token> to commit)\n\nOptions:\n  --subject <subscriptionId>                 The subject (subscription) the agreement binds.\n  --binding <mode>                           Usage-pricing binding: current | current_with_contract_terms | fixed_version.\n  --policy <pricingPolicyId>                 The pricing policy to bind.\n  --policy-version <pricingPolicyVersionId>  fixed_version only: the immutable policy version to pin.\n  --new-meter-policy <policy>                What a never-negotiated meter does: adopt_at_current_rate | exclude_until_renewal | require_amendment (default require_amendment).\n  --new-measure-policy <policy>              What a new measure on an agreed meter does: adopt_at_current_rate | exclude_until_renewal | require_amendment (default require_amendment).\n  --terms-json <json>                        Negotiated contract terms as JSON: {\"percentDiscount\":{\"num\":\"1\",\"den\":\"5\"},\"floorNanos\":\"…\",\"capNanos\":\"…\",\"selectorScope\":[{\"kind\":\"provider_model_glob\",\"provider\":\"acme\",\"modelGlob\":\"acme-*\"}]}. Required for current_with_contract_terms and for amend.\n  --effective-at <iso>                       When the agreement/version takes effect (ISO-8601). Default: now.\n  --expires-at <iso>                         Optional expiry (ISO-8601).\n  --env <slug>                               Preview environment slug or id (omit for production).\n  --confirm <token>                          The confirmationToken returned by the preview run. Omit to preview only.\n  --idempotency-key <key>                    Required for this mutation. Generate it once and reuse the exact value on retry.\n  -h, --help                                 display help for command\n\nTwo-step: run once to PREVIEW (prints the effect + confirmationToken; nothing is written), then re-run the SAME command with --confirm <token> to commit.",
      "signature": "Usage: farthershore agreements create [options] [businessIdOrSlug]\n\nCreate an economic agreement (confirm-gated: previews first; pass --confirm\n<token> to commit)\n\nOptions:\n  --subject <subscriptionId>                 The subject (subscription) the agreement binds.\n  --binding <mode>                           Usage-pricing binding: current | current_with_contract_terms | fixed_version.\n  --policy <pricingPolicyId>                 The pricing policy to bind.\n  --policy-version <pricingPolicyVersionId>  fixed_version only: the immutable policy version to pin.\n  --new-meter-policy <policy>                What a never-negotiated meter does: adopt_at_current_rate | exclude_until_renewal | require_amendment (default require_amendment).\n  --new-measure-policy <policy>              What a new measure on an agreed meter does: adopt_at_current_rate | exclude_until_renewal | require_amendment (default require_amendment).\n  --terms-json <json>                        Negotiated contract terms as JSON: {\"percentDiscount\":{\"num\":\"1\",\"den\":\"5\"},\"floorNanos\":\"…\",\"capNanos\":\"…\",\"selectorScope\":[{\"kind\":\"provider_model_glob\",\"provider\":\"acme\",\"modelGlob\":\"acme-*\"}]}. Required for current_with_contract_terms and for amend.\n  --effective-at <iso>                       When the agreement/version takes effect (ISO-8601). Default: now.\n  --expires-at <iso>                         Optional expiry (ISO-8601).\n  --env <slug>                               Preview environment slug or id (omit for production).\n  --confirm <token>                          The confirmationToken returned by the preview run. Omit to preview only.\n  --idempotency-key <key>                    Required for this mutation. Generate it once and reuse the exact value on retry.\n  -h, --help                                 display help for command\n\nTwo-step: run once to PREVIEW (prints the effect + confirmationToken; nothing is written), then re-run the SAME command with --confirm <token> to commit.\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.agreements.list",
      "name": "farthershore agreements list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/agreements",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore agreements list [options] [businessIdOrSlug]\n\nList a business's economic agreements\n\nOptions:\n  --subject <subscriptionId>  Filter by subject (subscription) id.\n  --env <slug>                Preview environment slug or id (omit for\n                              production).\n  -h, --help                  display help for command",
      "signature": "Usage: farthershore agreements list [options] [businessIdOrSlug]\n\nList a business's economic agreements\n\nOptions:\n  --subject <subscriptionId>  Filter by subject (subscription) id.\n  --env <slug>                Preview environment slug or id (omit for\n                              production).\n  -h, --help                  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.agreements.pins",
      "name": "farthershore agreements pins",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/agreements",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore agreements pins [options] [businessIdOrSlug] <subscriptionId>\n\nRead a subject's subscription pins (recurring-price pin + usage-pricing\nbinding). Read-only; migrate-to-latest is deferred.\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore agreements pins [options] [businessIdOrSlug] <subscriptionId>\n\nRead a subject's subscription pins (recurring-price pin + usage-pricing\nbinding). Read-only; migrate-to-latest is deferred.\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.agreements.show",
      "name": "farthershore agreements show",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/agreements",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore agreements show [options] [businessIdOrSlug] <agreementId>\n\nShow one economic agreement with its version history\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore agreements show [options] [businessIdOrSlug] <agreementId>\n\nShow one economic agreement with its version history\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.analytics",
      "name": "farthershore analytics",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/analytics",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore analytics [options] [command]\n\nQuery the business event archive\n\nOptions:\n  -h, --help                               display help for command\n\nCommands:\n  timeseries [options] [businessIdOrName]  Request (or denial) volume over time\n  latency [options] [businessIdOrName]     Request latency percentiles (p50 / p95 / p99)\n  top [options] [businessIdOrName]         Top callers / event types / environments by volume\n  log [options] [businessIdOrName]         Recent requests — the live metering signal, newest first\n  help [command]                           display help for command",
      "signature": "Usage: farthershore analytics [options] [command]\n\nQuery the business event archive\n\nOptions:\n  -h, --help                               display help for command\n\nCommands:\n  timeseries [options] [businessIdOrName]  Request (or denial) volume over time\n  latency [options] [businessIdOrName]     Request latency percentiles (p50 / p95 / p99)\n  top [options] [businessIdOrName]         Top callers / event types / environments by volume\n  log [options] [businessIdOrName]         Recent requests — the live metering signal, newest first\n  help [command]                           display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.analytics.latency",
      "name": "farthershore analytics latency",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/analytics",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore analytics latency [options] [businessIdOrName]\n\nRequest latency percentiles (p50 / p95 / p99)\n\nOptions:\n  --range <range>        Relative window: 1h | 24h | 7d | 30d (default: \"24h\")\n  --env <environmentId>  Environment id to scope to. Omit for production — never\n                         for 'all environments'.\n  -h, --help             display help for command",
      "signature": "Usage: farthershore analytics latency [options] [businessIdOrName]\n\nRequest latency percentiles (p50 / p95 / p99)\n\nOptions:\n  --range <range>        Relative window: 1h | 24h | 7d | 30d (default: \"24h\")\n  --env <environmentId>  Environment id to scope to. Omit for production — never\n                         for 'all environments'.\n  -h, --help             display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.analytics.log",
      "name": "farthershore analytics log",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/analytics",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore analytics log [options] [businessIdOrName]\n\nRecent requests — the live metering signal, newest first\n\nOptions:\n  --range <range>        Relative window: 1h | 24h | 7d | 30d (default: \"24h\")\n  --env <environmentId>  Environment id to scope to. Omit for production — never\n                         for 'all environments'.\n  --domain <domain>      Archive domain: usage | telemetry | denials | lifecycle\n                         | consumer_activity | audit (default: \"usage\")\n  --limit <count>        How many rows (1-100) (default: \"25\")\n  -h, --help             display help for command",
      "signature": "Usage: farthershore analytics log [options] [businessIdOrName]\n\nRecent requests — the live metering signal, newest first\n\nOptions:\n  --range <range>        Relative window: 1h | 24h | 7d | 30d (default: \"24h\")\n  --env <environmentId>  Environment id to scope to. Omit for production — never\n                         for 'all environments'.\n  --domain <domain>      Archive domain: usage | telemetry | denials | lifecycle\n                         | consumer_activity | audit (default: \"usage\")\n  --limit <count>        How many rows (1-100) (default: \"25\")\n  -h, --help             display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.analytics.timeseries",
      "name": "farthershore analytics timeseries",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/analytics",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore analytics timeseries [options] [businessIdOrName]\n\nRequest (or denial) volume over time\n\nOptions:\n  --range <range>        Relative window: 1h | 24h | 7d | 30d (default: \"24h\")\n  --env <environmentId>  Environment id to scope to. Omit for production — never\n                         for 'all environments'.\n  --domain <domain>      Archive domain: usage | telemetry | denials | lifecycle\n                         | consumer_activity | audit (default: \"usage\")\n  --interval <interval>  Bucket size: hour | day (default: \"hour\")\n  -h, --help             display help for command",
      "signature": "Usage: farthershore analytics timeseries [options] [businessIdOrName]\n\nRequest (or denial) volume over time\n\nOptions:\n  --range <range>        Relative window: 1h | 24h | 7d | 30d (default: \"24h\")\n  --env <environmentId>  Environment id to scope to. Omit for production — never\n                         for 'all environments'.\n  --domain <domain>      Archive domain: usage | telemetry | denials | lifecycle\n                         | consumer_activity | audit (default: \"usage\")\n  --interval <interval>  Bucket size: hour | day (default: \"hour\")\n  -h, --help             display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.analytics.top",
      "name": "farthershore analytics top",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/analytics",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore analytics top [options] [businessIdOrName]\n\nTop callers / event types / environments by volume\n\nOptions:\n  --range <range>        Relative window: 1h | 24h | 7d | 30d (default: \"24h\")\n  --env <environmentId>  Environment id to scope to. Omit for production — never\n                         for 'all environments'.\n  --by <dimension>       Break down by: actor_id | type | environment_id\n                         (default: \"actor_id\")\n  --domain <domain>      Archive domain: usage | telemetry | denials | lifecycle\n                         | consumer_activity | audit (default: \"usage\")\n  --k <count>            How many rows (1-50) (default: \"10\")\n  -h, --help             display help for command",
      "signature": "Usage: farthershore analytics top [options] [businessIdOrName]\n\nTop callers / event types / environments by volume\n\nOptions:\n  --range <range>        Relative window: 1h | 24h | 7d | 30d (default: \"24h\")\n  --env <environmentId>  Environment id to scope to. Omit for production — never\n                         for 'all environments'.\n  --by <dimension>       Break down by: actor_id | type | environment_id\n                         (default: \"actor_id\")\n  --domain <domain>      Archive domain: usage | telemetry | denials | lifecycle\n                         | consumer_activity | audit (default: \"usage\")\n  --k <count>            How many rows (1-50) (default: \"10\")\n  -h, --help             display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.apply-timeline",
      "name": "farthershore apply-timeline",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/apply-timeline",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore apply-timeline [options] [command]\n\nInspect the Apply Timeline: repo-triggered manifest applies (PRs, pushes,\nreleases), checks, diffs, apply phases\n\nOptions:\n  -h, --help                                                   display help for command\n\nCommands:\n  list [options] [businessIdOrName]                            List a business's Apply Timeline: repo-triggered manifest applies (PRs, pushes, releases), checks, semantic diffs, and apply phases.\n  inspect [options] [businessIdOrName] [id|tag|pr|branch|sha]  Inspect one Apply Timeline entry by id, release tag, PR number, branch, or commit SHA.\n  help [command]                                               display help for command",
      "signature": "Usage: farthershore apply-timeline [options] [command]\n\nInspect the Apply Timeline: repo-triggered manifest applies (PRs, pushes,\nreleases), checks, diffs, apply phases\n\nOptions:\n  -h, --help                                                   display help for command\n\nCommands:\n  list [options] [businessIdOrName]                            List a business's Apply Timeline: repo-triggered manifest applies (PRs, pushes, releases), checks, semantic diffs, and apply phases.\n  inspect [options] [businessIdOrName] [id|tag|pr|branch|sha]  Inspect one Apply Timeline entry by id, release tag, PR number, branch, or commit SHA.\n  help [command]                                               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.apply-timeline.inspect",
      "name": "farthershore apply-timeline inspect",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/apply-timeline",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore apply-timeline inspect [options] [businessIdOrName] <id|tag|pr|branch|sha>\n\nInspect one Apply Timeline entry by id, release tag, PR number, branch, or\ncommit SHA.\n\nOptions:\n  --env <env>  Environment scope: production, all, or a preview environment\n               name.\n  -h, --help   display help for command",
      "signature": "Usage: farthershore apply-timeline inspect [options] [businessIdOrName] <id|tag|pr|branch|sha>\n\nInspect one Apply Timeline entry by id, release tag, PR number, branch, or\ncommit SHA.\n\nOptions:\n  --env <env>  Environment scope: production, all, or a preview environment\n               name.\n  -h, --help   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.apply-timeline.list",
      "name": "farthershore apply-timeline list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/apply-timeline",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore apply-timeline list [options] [businessIdOrName]\n\nList a business's Apply Timeline: repo-triggered manifest applies (PRs, pushes,\nreleases), checks, semantic diffs, and apply phases.\n\nOptions:\n  --env <env>  Environment scope: production, all, or a preview environment\n               name.\n  -h, --help   display help for command",
      "signature": "Usage: farthershore apply-timeline list [options] [businessIdOrName]\n\nList a business's Apply Timeline: repo-triggered manifest applies (PRs, pushes,\nreleases), checks, semantic diffs, and apply phases.\n\nOptions:\n  --env <env>  Environment scope: production, all, or a preview environment\n               name.\n  -h, --help   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.audit-log",
      "name": "farthershore audit-log",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/audit-log",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore audit-log [options] [command]\n\nRead and export builder audit logs\n\nOptions:\n  -h, --help                                               display help for command\n\nCommands:\n  list [options] <organizationId>                          List organization or business-scoped audit-log rows\n  business-list [options] <organizationId> <businessId>    List one business's audit-log rows\n  export [options] <organizationId>                        Export organization or business-scoped audit logs as CSV\n  business-export [options] <organizationId> <businessId>  Export one business's audit logs as CSV\n  help [command]                                           display help for command",
      "signature": "Usage: farthershore audit-log [options] [command]\n\nRead and export builder audit logs\n\nOptions:\n  -h, --help                                               display help for command\n\nCommands:\n  list [options] <organizationId>                          List organization or business-scoped audit-log rows\n  business-list [options] <organizationId> <businessId>    List one business's audit-log rows\n  export [options] <organizationId>                        Export organization or business-scoped audit logs as CSV\n  business-export [options] <organizationId> <businessId>  Export one business's audit logs as CSV\n  help [command]                                           display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.audit-log.business-export",
      "name": "farthershore audit-log business-export",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/audit-log",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore audit-log business-export [options] <organizationId> <businessId>\n\nExport one business's audit logs as CSV\n\nOptions:\n  --action <action>\n  --actor <userId>\n  --decision <decision>\n  --from <isoDate>\n  --to <isoDate>\n  --limit <count>\n  --output <file>        Write CSV to this file; omit to return it in command\n                         output.\n  -h, --help             display help for command",
      "signature": "Usage: farthershore audit-log business-export [options] <organizationId> <businessId>\n\nExport one business's audit logs as CSV\n\nOptions:\n  --action <action>\n  --actor <userId>\n  --decision <decision>\n  --from <isoDate>\n  --to <isoDate>\n  --limit <count>\n  --output <file>        Write CSV to this file; omit to return it in command\n                         output.\n  -h, --help             display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.audit-log.business-list",
      "name": "farthershore audit-log business-list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/audit-log",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore audit-log business-list [options] <organizationId> <businessId>\n\nList one business's audit-log rows\n\nOptions:\n  --action <action>\n  --actor <userId>\n  --decision <decision>\n  --from <isoDate>\n  --to <isoDate>\n  --limit <count>\n  --cursor <cursor>\n  -h, --help             display help for command",
      "signature": "Usage: farthershore audit-log business-list [options] <organizationId> <businessId>\n\nList one business's audit-log rows\n\nOptions:\n  --action <action>\n  --actor <userId>\n  --decision <decision>\n  --from <isoDate>\n  --to <isoDate>\n  --limit <count>\n  --cursor <cursor>\n  -h, --help             display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.audit-log.export",
      "name": "farthershore audit-log export",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/audit-log",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore audit-log export [options] <organizationId>\n\nExport organization or business-scoped audit logs as CSV\n\nOptions:\n  --action <action>\n  --actor <userId>\n  --decision <decision>\n  --from <isoDate>\n  --to <isoDate>\n  --limit <count>\n  --output <file>        Write CSV to this file; omit to return it in command\n                         output.\n  -h, --help             display help for command",
      "signature": "Usage: farthershore audit-log export [options] <organizationId>\n\nExport organization or business-scoped audit logs as CSV\n\nOptions:\n  --action <action>\n  --actor <userId>\n  --decision <decision>\n  --from <isoDate>\n  --to <isoDate>\n  --limit <count>\n  --output <file>        Write CSV to this file; omit to return it in command\n                         output.\n  -h, --help             display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.audit-log.list",
      "name": "farthershore audit-log list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/audit-log",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore audit-log list [options] <organizationId>\n\nList organization or business-scoped audit-log rows\n\nOptions:\n  --action <action>\n  --actor <userId>\n  --decision <decision>\n  --from <isoDate>\n  --to <isoDate>\n  --limit <count>\n  --cursor <cursor>\n  -h, --help             display help for command",
      "signature": "Usage: farthershore audit-log list [options] <organizationId>\n\nList organization or business-scoped audit-log rows\n\nOptions:\n  --action <action>\n  --actor <userId>\n  --decision <decision>\n  --from <isoDate>\n  --to <isoDate>\n  --limit <count>\n  --cursor <cursor>\n  -h, --help             display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.auth",
      "name": "farthershore auth",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/auth",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore auth [options] [command]\n\nInspect CLI identity and select an organization\n\nOptions:\n  -h, --help                                  display help for command\n\nCommands:\n  organization                                List or select organizations for this CLI session\n  whoami                                      Show current auth identity and delegated authority\n  context-token [options] [businessIdOrName]  Issue a short-lived gateway context token for a subscriber member\n  help [command]                              display help for command",
      "signature": "Usage: farthershore auth [options] [command]\n\nInspect CLI identity and select an organization\n\nOptions:\n  -h, --help                                  display help for command\n\nCommands:\n  organization                                List or select organizations for this CLI session\n  whoami                                      Show current auth identity and delegated authority\n  context-token [options] [businessIdOrName]  Issue a short-lived gateway context token for a subscriber member\n  help [command]                              display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.auth.context-token",
      "name": "farthershore auth context-token",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/auth",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore auth context-token [options] [businessIdOrName]\n\nIssue a short-lived gateway context token for a subscriber member\n\nOptions:\n  --external-org <id>\n  --actor <id>\n  --ttl-seconds <seconds>\n  -h, --help               display help for command",
      "signature": "Usage: farthershore auth context-token [options] [businessIdOrName]\n\nIssue a short-lived gateway context token for a subscriber member\n\nOptions:\n  --external-org <id>\n  --actor <id>\n  --ttl-seconds <seconds>\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.auth.organization",
      "name": "farthershore auth organization",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/auth",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore auth organization [options] [command]\n\nList or select organizations for this CLI session\n\nOptions:\n  -h, --help        display help for command\n\nCommands:\n  list              List organizations available to the signed-in user\n  use <id-or-slug>  Set the default organization while retaining this credential\n  help [command]    display help for command",
      "signature": "Usage: farthershore auth organization [options] [command]\n\nList or select organizations for this CLI session\n\nOptions:\n  -h, --help        display help for command\n\nCommands:\n  list              List organizations available to the signed-in user\n  use <id-or-slug>  Set the default organization while retaining this credential\n  help [command]    display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.auth.organization.list",
      "name": "farthershore auth organization list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/auth",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore auth organization list [options]\n\nList organizations available to the signed-in user\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore auth organization list [options]\n\nList organizations available to the signed-in user\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.auth.organization.use",
      "name": "farthershore auth organization use",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/auth",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore auth organization use [options] <id-or-slug>\n\nSet the default organization while retaining this credential\n\nArguments:\n  id-or-slug  Organization id or slug\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore auth organization use [options] <id-or-slug>\n\nSet the default organization while retaining this credential\n\nArguments:\n  id-or-slug  Organization id or slug\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.auth.whoami",
      "name": "farthershore auth whoami",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/auth",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore auth whoami [options]\n\nShow current auth identity and delegated authority\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore auth whoami [options]\n\nShow current auth identity and delegated authority\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.automation",
      "name": "farthershore automation",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/automation",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore automation [options] [command]\n\nManage platform automation rules\n\nOptions:\n  -h, --help                                    display help for command\n\nCommands:\n  list [businessIdOrName]                       List automation rules\n  create [options] [businessIdOrName]           Create an automation rule\n  update [options] [businessIdOrName] [ruleId]  Update an automation rule\n  delete [options] [businessIdOrName] [ruleId]  Delete an automation rule\n  help [command]                                display help for command",
      "signature": "Usage: farthershore automation [options] [command]\n\nManage platform automation rules\n\nOptions:\n  -h, --help                                    display help for command\n\nCommands:\n  list [businessIdOrName]                       List automation rules\n  create [options] [businessIdOrName]           Create an automation rule\n  update [options] [businessIdOrName] [ruleId]  Update an automation rule\n  delete [options] [businessIdOrName] [ruleId]  Delete an automation rule\n  help [command]                                display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.automation.create",
      "name": "farthershore automation create",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/automation",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore automation create [options] [businessIdOrName]\n\nCreate an automation rule\n\nOptions:\n  --body <json>            Closed request body as a JSON object\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore automation create [options] [businessIdOrName]\n\nCreate an automation rule\n\nOptions:\n  --body <json>            Closed request body as a JSON object\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.automation.delete",
      "name": "farthershore automation delete",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/automation",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore automation delete [options] [businessIdOrName] <ruleId>\n\nDelete an automation rule\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command",
      "signature": "Usage: farthershore automation delete [options] [businessIdOrName] <ruleId>\n\nDelete an automation rule\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.automation.list",
      "name": "farthershore automation list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/automation",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore automation list [options] [businessIdOrName]\n\nList automation rules\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore automation list [options] [businessIdOrName]\n\nList automation rules\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.automation.update",
      "name": "farthershore automation update",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/automation",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore automation update [options] [businessIdOrName] <ruleId>\n\nUpdate an automation rule\n\nOptions:\n  --body <json>  Closed request body as a JSON object\n  -h, --help     display help for command",
      "signature": "Usage: farthershore automation update [options] [businessIdOrName] <ruleId>\n\nUpdate an automation rule\n\nOptions:\n  --body <json>  Closed request body as a JSON object\n  -h, --help     display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.backend",
      "name": "farthershore backend",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/backend",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore backend [options] [command]\n\nManage BYO backends and their runtime tokens\n\nOptions:\n  -h, --help                                       display help for command\n\nCommands:\n  list [options] [businessIdOrSlug]                List backends for a business (id, scope, name, transport, status)\n  create [options] [businessIdOrSlug]              Create a backend (default transport: direct)\n  bind [options] [businessIdOrSlug] <backend>      Bind a logical backend to a direct upstream in one environment\n  delete [options] [businessIdOrSlug] <backendId>  Delete a backend (revokes its runtime tokens). Requires --yes.\n  tokens                                           Manage runtime tokens (fsrt_) for BYO backends\n  help [command]                                   display help for command",
      "signature": "Usage: farthershore backend [options] [command]\n\nManage BYO backends and their runtime tokens\n\nOptions:\n  -h, --help                                       display help for command\n\nCommands:\n  list [options] [businessIdOrSlug]                List backends for a business (id, scope, name, transport, status)\n  create [options] [businessIdOrSlug]              Create a backend (default transport: direct)\n  bind [options] [businessIdOrSlug] <backend>      Bind a logical backend to a direct upstream in one environment\n  delete [options] [businessIdOrSlug] <backendId>  Delete a backend (revokes its runtime tokens). Requires --yes.\n  tokens                                           Manage runtime tokens (fsrt_) for BYO backends\n  help [command]                                   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.backend.bind",
      "name": "farthershore backend bind",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/backend",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore backend bind [options] [businessIdOrSlug] <backend>\n\nBind a logical backend to a direct upstream in one environment\n\nArguments:\n  businessIdOrSlug     The business id, or a slug (slug lookup requires\n                       business:read).\n  backend\n\nOptions:\n  --env <environment>  Environment name or id. Pass 'production' (or omit) for\n                       the live business.\n  --origin-url <url>   Concrete direct upstream URL for this environment\n  --dry-run            Preview the change without applying it.\n  -h, --help           display help for command",
      "signature": "Usage: farthershore backend bind [options] [businessIdOrSlug] <backend>\n\nBind a logical backend to a direct upstream in one environment\n\nArguments:\n  businessIdOrSlug     The business id, or a slug (slug lookup requires\n                       business:read).\n  backend\n\nOptions:\n  --env <environment>  Environment name or id. Pass 'production' (or omit) for\n                       the live business.\n  --origin-url <url>   Concrete direct upstream URL for this environment\n  --dry-run            Preview the change without applying it.\n  -h, --help           display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.backend.create",
      "name": "farthershore backend create",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/backend",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore backend create [options] [businessIdOrSlug]\n\nCreate a backend (default transport: direct)\n\nArguments:\n  businessIdOrSlug         The business id, or a slug (slug lookup requires\n                           business:read).\n\nOptions:\n  --name <name>            Human-friendly backend name\n  --slug <slug>            Stable slug (defaults to a slugified name)\n  --env <environment>      Scope backend to an environment name or id. Pass\n                           'production' (or omit) for the live business.\n  --transport <mode>       Transport mode: direct | tunnel (default: \"direct\")\n  --runner <runner>        embedded | sidecar\n  --runtime <runtime>      Container/runtime descriptor\n  --origin-url <url>       Builder origin URL (direct)\n  --default                Mark this backend the business default\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  --dry-run                Preview the change without applying it.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore backend create [options] [businessIdOrSlug]\n\nCreate a backend (default transport: direct)\n\nArguments:\n  businessIdOrSlug         The business id, or a slug (slug lookup requires\n                           business:read).\n\nOptions:\n  --name <name>            Human-friendly backend name\n  --slug <slug>            Stable slug (defaults to a slugified name)\n  --env <environment>      Scope backend to an environment name or id. Pass\n                           'production' (or omit) for the live business.\n  --transport <mode>       Transport mode: direct | tunnel (default: \"direct\")\n  --runner <runner>        embedded | sidecar\n  --runtime <runtime>      Container/runtime descriptor\n  --origin-url <url>       Builder origin URL (direct)\n  --default                Mark this backend the business default\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  --dry-run                Preview the change without applying it.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.backend.delete",
      "name": "farthershore backend delete",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/backend",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore backend delete [options] [businessIdOrSlug] <backendId>\n\nDelete a backend (revokes its runtime tokens). Requires --yes.\n\nArguments:\n  businessIdOrSlug  The business id, or a slug (slug lookup requires\n                    business:read).\n  backendId\n\nOptions:\n  --yes             Skip confirmation; required for this destructive action\n  -h, --help        display help for command",
      "signature": "Usage: farthershore backend delete [options] [businessIdOrSlug] <backendId>\n\nDelete a backend (revokes its runtime tokens). Requires --yes.\n\nArguments:\n  businessIdOrSlug  The business id, or a slug (slug lookup requires\n                    business:read).\n  backendId\n\nOptions:\n  --yes             Skip confirmation; required for this destructive action\n  -h, --help        display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.backend.list",
      "name": "farthershore backend list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/backend",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore backend list [options] [businessIdOrSlug]\n\nList backends for a business (id, scope, name, transport, status)\n\nArguments:\n  businessIdOrSlug     The business id, or a slug (slug lookup requires\n                       business:read).\n\nOptions:\n  --env <environment>  Only rows in this environment (name or id). Pass\n                       'production' for the production scope; omit for every\n                       scope.\n  -h, --help           display help for command\n\nScope:\n  Backends and their runtime tokens are per-(business, environment) rows.\n  Without --env every scope is listed; each row carries scope (production |\n  environment), environmentId, and the environment name. Two rows for the same\n  declared backend — one production, one environment-scoped — are expected, and\n  both may be 'default': the single-default rule is per scope.\n\n  'production' (or 'prod') is a valid --env on EVERY backend verb, read and\n  write alike, and selects the live business — the same scope you get by\n  omitting --env. It is not a preview environment: it has no environment id and\n  no branch, which is why 'farthershore env list' shows it with id: null. The\n  words production/prod/main are reserved and cannot name a real environment.",
      "signature": "Usage: farthershore backend list [options] [businessIdOrSlug]\n\nList backends for a business (id, scope, name, transport, status)\n\nArguments:\n  businessIdOrSlug     The business id, or a slug (slug lookup requires\n                       business:read).\n\nOptions:\n  --env <environment>  Only rows in this environment (name or id). Pass\n                       'production' for the production scope; omit for every\n                       scope.\n  -h, --help           display help for command\n\nScope:\n  Backends and their runtime tokens are per-(business, environment) rows.\n  Without --env every scope is listed; each row carries scope (production |\n  environment), environmentId, and the environment name. Two rows for the same\n  declared backend — one production, one environment-scoped — are expected, and\n  both may be 'default': the single-default rule is per scope.\n\n  'production' (or 'prod') is a valid --env on EVERY backend verb, read and\n  write alike, and selects the live business — the same scope you get by\n  omitting --env. It is not a preview environment: it has no environment id and\n  no branch, which is why 'farthershore env list' shows it with id: null. The\n  words production/prod/main are reserved and cannot name a real environment.\n\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.backend.tokens",
      "name": "farthershore backend tokens",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/backend",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore backend tokens [options] [command]\n\nManage runtime tokens (fsrt_) for BYO backends\n\nOptions:\n  -h, --help                                     display help for command\n\nCommands:\n  list [options] [businessIdOrSlug]              List runtime tokens for a business\n  create [options] [businessIdOrSlug]            Create a runtime token (returns FS_RUNTIME_TOKEN once)\n  rotate [options] [businessIdOrSlug] <tokenId>  Rotate a runtime token (returns a fresh FS_RUNTIME_TOKEN once)\n  revoke [options] [businessIdOrSlug] <tokenId>  Revoke a runtime token. Requires --yes.\n  help [command]                                 display help for command",
      "signature": "Usage: farthershore backend tokens [options] [command]\n\nManage runtime tokens (fsrt_) for BYO backends\n\nOptions:\n  -h, --help                                     display help for command\n\nCommands:\n  list [options] [businessIdOrSlug]              List runtime tokens for a business\n  create [options] [businessIdOrSlug]            Create a runtime token (returns FS_RUNTIME_TOKEN once)\n  rotate [options] [businessIdOrSlug] <tokenId>  Rotate a runtime token (returns a fresh FS_RUNTIME_TOKEN once)\n  revoke [options] [businessIdOrSlug] <tokenId>  Revoke a runtime token. Requires --yes.\n  help [command]                                 display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.backend.tokens.create",
      "name": "farthershore backend tokens create",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/backend",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore backend tokens create [options] [businessIdOrSlug]\n\nCreate a runtime token (returns FS_RUNTIME_TOKEN once)\n\nArguments:\n  businessIdOrSlug             The business id, or a slug (slug lookup requires\n                               business:read).\n\nOptions:\n  --env <environment>          Scope token to an environment name or id. Pass\n                               'production' (or omit) for the live business.\n  --backend <backendSlugOrId>  Bind token to a specific backend, by slug or id\n                               (resolved in --env, falling back to the\n                               production row)\n  --kind <kind>                live | test (defaults from env scope)\n  --operations <list>          Comma-separated operations: gateway_verification\n                               | metering | health | tunnel. Default: core's\n                               DEFAULT_OPERATIONS. Use tunnel for tunnel\n                               backends.\n  --meters <list>              Comma-separated allowed meters (default: all\n                               business meters)\n  --routes <list>              Comma-separated allowed routes\n  --idempotency-key <key>      Required for this mutation. Generate it once and\n                               reuse the exact value on retry.\n  -h, --help                   display help for command",
      "signature": "Usage: farthershore backend tokens create [options] [businessIdOrSlug]\n\nCreate a runtime token (returns FS_RUNTIME_TOKEN once)\n\nArguments:\n  businessIdOrSlug             The business id, or a slug (slug lookup requires\n                               business:read).\n\nOptions:\n  --env <environment>          Scope token to an environment name or id. Pass\n                               'production' (or omit) for the live business.\n  --backend <backendSlugOrId>  Bind token to a specific backend, by slug or id\n                               (resolved in --env, falling back to the\n                               production row)\n  --kind <kind>                live | test (defaults from env scope)\n  --operations <list>          Comma-separated operations: gateway_verification\n                               | metering | health | tunnel. Default: core's\n                               DEFAULT_OPERATIONS. Use tunnel for tunnel\n                               backends.\n  --meters <list>              Comma-separated allowed meters (default: all\n                               business meters)\n  --routes <list>              Comma-separated allowed routes\n  --idempotency-key <key>      Required for this mutation. Generate it once and\n                               reuse the exact value on retry.\n  -h, --help                   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.backend.tokens.list",
      "name": "farthershore backend tokens list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/backend",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore backend tokens list [options] [businessIdOrSlug]\n\nList runtime tokens for a business\n\nArguments:\n  businessIdOrSlug     The business id, or a slug (slug lookup requires\n                       business:read).\n\nOptions:\n  --env <environment>  Only rows in this environment (name or id). Pass\n                       'production' for the production scope; omit for every\n                       scope.\n  -h, --help           display help for command\n\nScope:\n  Backends and their runtime tokens are per-(business, environment) rows.\n  Without --env every scope is listed; each row carries scope (production |\n  environment), environmentId, and the environment name. Two rows for the same\n  declared backend — one production, one environment-scoped — are expected, and\n  both may be 'default': the single-default rule is per scope.\n\n  'production' (or 'prod') is a valid --env on EVERY backend verb, read and\n  write alike, and selects the live business — the same scope you get by\n  omitting --env. It is not a preview environment: it has no environment id and\n  no branch, which is why 'farthershore env list' shows it with id: null. The\n  words production/prod/main are reserved and cannot name a real environment.",
      "signature": "Usage: farthershore backend tokens list [options] [businessIdOrSlug]\n\nList runtime tokens for a business\n\nArguments:\n  businessIdOrSlug     The business id, or a slug (slug lookup requires\n                       business:read).\n\nOptions:\n  --env <environment>  Only rows in this environment (name or id). Pass\n                       'production' for the production scope; omit for every\n                       scope.\n  -h, --help           display help for command\n\nScope:\n  Backends and their runtime tokens are per-(business, environment) rows.\n  Without --env every scope is listed; each row carries scope (production |\n  environment), environmentId, and the environment name. Two rows for the same\n  declared backend — one production, one environment-scoped — are expected, and\n  both may be 'default': the single-default rule is per scope.\n\n  'production' (or 'prod') is a valid --env on EVERY backend verb, read and\n  write alike, and selects the live business — the same scope you get by\n  omitting --env. It is not a preview environment: it has no environment id and\n  no branch, which is why 'farthershore env list' shows it with id: null. The\n  words production/prod/main are reserved and cannot name a real environment.\n\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.backend.tokens.revoke",
      "name": "farthershore backend tokens revoke",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/backend",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore backend tokens revoke [options] [businessIdOrSlug] <tokenId>\n\nRevoke a runtime token. Requires --yes.\n\nArguments:\n  businessIdOrSlug  The business id, or a slug (slug lookup requires\n                    business:read).\n  tokenId\n\nOptions:\n  --yes             Skip confirmation; required for this destructive action\n  -h, --help        display help for command",
      "signature": "Usage: farthershore backend tokens revoke [options] [businessIdOrSlug] <tokenId>\n\nRevoke a runtime token. Requires --yes.\n\nArguments:\n  businessIdOrSlug  The business id, or a slug (slug lookup requires\n                    business:read).\n  tokenId\n\nOptions:\n  --yes             Skip confirmation; required for this destructive action\n  -h, --help        display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.backend.tokens.rotate",
      "name": "farthershore backend tokens rotate",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/backend",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore backend tokens rotate [options] [businessIdOrSlug] <tokenId>\n\nRotate a runtime token (returns a fresh FS_RUNTIME_TOKEN once)\n\nArguments:\n  businessIdOrSlug         The business id, or a slug (slug lookup requires\n                           business:read).\n  tokenId\n\nOptions:\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore backend tokens rotate [options] [businessIdOrSlug] <tokenId>\n\nRotate a runtime token (returns a fresh FS_RUNTIME_TOKEN once)\n\nArguments:\n  businessIdOrSlug         The business id, or a slug (slug lookup requires\n                           business:read).\n  tokenId\n\nOptions:\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.build",
      "name": "farthershore build",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/build",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore build [options]\n\nBuild the business/ program into a Manifest IR envelope\n\nOptions:\n  --entry <path>  Business-as-code folder or file to compile (default:\n                  business/)\n  --out <path>    Output path for the build output (default:\n                  business-build.json)\n  -h, --help      display help for command\n\nExamples:\n  farthershore build\n  farthershore build --entry business/ --out business-build.json\n  farthershore build --format json",
      "signature": "Usage: farthershore build [options]\n\nBuild the business/ program into a Manifest IR envelope\n\nOptions:\n  --entry <path>  Business-as-code folder or file to compile (default:\n                  business/)\n  --out <path>    Output path for the build output (default:\n                  business-build.json)\n  -h, --help      display help for command\n\nExamples:\n  farthershore build\n  farthershore build --entry business/ --out business-build.json\n  farthershore build --format json\n\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.bulletin",
      "name": "farthershore bulletin",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/bulletin",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore bulletin [options] [command]\n\nRead and hand off the operating agents' bulletin board\n\nOptions:\n  -h, --help                           display help for command\n\nCommands:\n  list [options] [businessIdOrSlug]    List the agents' bulletin feed (trends +\n                                       change requests)\n  show [businessIdOrSlug] [postId]     Show one bulletin post (full body + data\n                                       payload)\n  ack [businessIdOrSlug] [postId]      Acknowledge a post (the coding agent\n                                       picked it up)\n  resolve [businessIdOrSlug] [postId]  Resolve a post (the work landed)\n  help [command]                       display help for command",
      "signature": "Usage: farthershore bulletin [options] [command]\n\nRead and hand off the operating agents' bulletin board\n\nOptions:\n  -h, --help                           display help for command\n\nCommands:\n  list [options] [businessIdOrSlug]    List the agents' bulletin feed (trends +\n                                       change requests)\n  show [businessIdOrSlug] [postId]     Show one bulletin post (full body + data\n                                       payload)\n  ack [businessIdOrSlug] [postId]      Acknowledge a post (the coding agent\n                                       picked it up)\n  resolve [businessIdOrSlug] [postId]  Resolve a post (the work landed)\n  help [command]                       display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.bulletin.ack",
      "name": "farthershore bulletin ack",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/bulletin",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore bulletin ack [options] [businessIdOrSlug] <postId>\n\nAcknowledge a post (the coding agent picked it up)\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore bulletin ack [options] [businessIdOrSlug] <postId>\n\nAcknowledge a post (the coding agent picked it up)\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.bulletin.list",
      "name": "farthershore bulletin list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/bulletin",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore bulletin list [options] [businessIdOrSlug]\n\nList the agents' bulletin feed (trends + change requests)\n\nOptions:\n  --kind <kind>      Filter: trend | insight | change_request\n  --status <status>  Filter: open | acknowledged | resolved\n  --limit <n>        Max rows to return.\n  -h, --help         display help for command",
      "signature": "Usage: farthershore bulletin list [options] [businessIdOrSlug]\n\nList the agents' bulletin feed (trends + change requests)\n\nOptions:\n  --kind <kind>      Filter: trend | insight | change_request\n  --status <status>  Filter: open | acknowledged | resolved\n  --limit <n>        Max rows to return.\n  -h, --help         display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.bulletin.resolve",
      "name": "farthershore bulletin resolve",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/bulletin",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore bulletin resolve [options] [businessIdOrSlug] <postId>\n\nResolve a post (the work landed)\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore bulletin resolve [options] [businessIdOrSlug] <postId>\n\nResolve a post (the work landed)\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.bulletin.show",
      "name": "farthershore bulletin show",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/bulletin",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore bulletin show [options] [businessIdOrSlug] <postId>\n\nShow one bulletin post (full body + data payload)\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore bulletin show [options] [businessIdOrSlug] <postId>\n\nShow one bulletin post (full body + data payload)\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business",
      "name": "farthershore business",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business [options] [command]\n\nBusiness bootstrap, status, release, and presentation metadata\n\nOptions:\n  -h, --help                                                   display help for command\n\nCommands:\n  list [options]                                               List businesses in the current org\n  show [options] [businessIdOrName]                            Show a business\n  routes [options] [businessIdOrName]                          List a business's compiled routes\n  subdomain-check <slug>                                       Check whether a slug is free to use as a business subdomain before creating it\n  config-attempts [businessIdOrName]                           List rejected configuration attempts for a business\n  contract [options] [businessIdOrName]                        Show a business's accepted contract synopsis\n  status [options] [businessIdOrName]                          Show lifecycle, release, and exact edge-generation coherence for one environment.\n  rbac [options] [businessIdOrName]                            Show a business's Managed-RBAC state: the platform `rbacEnabled` flag.\n  create [options] <slug>                                      Create a new business and provision its managed GitHub repo\n  update [options] [businessIdOrName]                          Update business presentation metadata\n  publish [options] [businessIdOrName]                         Publish a draft business (make it live) and cut a versioned release with an auto-computed semver. Requires at least one plan, a bound backend, and a verified Stripe connection.\n  rollback [options] [businessIdOrName] [workflowExecutionId]  Roll back a prior business publish workflow\n  preview-env                                                  Configure automatic preview environment creation for a business\n  docs                                                         Enable or disable docs publishing for a business\n  help [command]                                               display help for command",
      "signature": "Usage: farthershore business [options] [command]\n\nBusiness bootstrap, status, release, and presentation metadata\n\nOptions:\n  -h, --help                                                   display help for command\n\nCommands:\n  list [options]                                               List businesses in the current org\n  show [options] [businessIdOrName]                            Show a business\n  routes [options] [businessIdOrName]                          List a business's compiled routes\n  subdomain-check <slug>                                       Check whether a slug is free to use as a business subdomain before creating it\n  config-attempts [businessIdOrName]                           List rejected configuration attempts for a business\n  contract [options] [businessIdOrName]                        Show a business's accepted contract synopsis\n  status [options] [businessIdOrName]                          Show lifecycle, release, and exact edge-generation coherence for one environment.\n  rbac [options] [businessIdOrName]                            Show a business's Managed-RBAC state: the platform `rbacEnabled` flag.\n  create [options] <slug>                                      Create a new business and provision its managed GitHub repo\n  update [options] [businessIdOrName]                          Update business presentation metadata\n  publish [options] [businessIdOrName]                         Publish a draft business (make it live) and cut a versioned release with an auto-computed semver. Requires at least one plan, a bound backend, and a verified Stripe connection.\n  rollback [options] [businessIdOrName] [workflowExecutionId]  Roll back a prior business publish workflow\n  preview-env                                                  Configure automatic preview environment creation for a business\n  docs                                                         Enable or disable docs publishing for a business\n  help [command]                                               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.config-attempts",
      "name": "farthershore business config-attempts",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business config-attempts [options] [businessIdOrName]\n\nList rejected configuration attempts for a business\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore business config-attempts [options] [businessIdOrName]\n\nList rejected configuration attempts for a business\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.contract",
      "name": "farthershore business contract",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business contract [options] [businessIdOrName]\n\nShow a business's accepted contract synopsis\n\nOptions:\n  --env <env>  Environment scope (preview branch name)\n  -h, --help   display help for command",
      "signature": "Usage: farthershore business contract [options] [businessIdOrName]\n\nShow a business's accepted contract synopsis\n\nOptions:\n  --env <env>  Environment scope (preview branch name)\n  -h, --help   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.create",
      "name": "farthershore business create",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business create [options] <slug>\n\nCreate a new business and provision its managed GitHub repo\n\nOptions:\n  --display-name <displayName>  Human-friendly business name\n  --description <description>\n  --docs                        Enable docs for this business (default when\n                                omitted).\n  --no-docs                     Opt out of docs for this business.\n  --idempotency-key <key>       Required for this mutation. Generate it once and\n                                reuse the exact value on retry.\n  -h, --help                    display help for command",
      "signature": "Usage: farthershore business create [options] <slug>\n\nCreate a new business and provision its managed GitHub repo\n\nOptions:\n  --display-name <displayName>  Human-friendly business name\n  --description <description>\n  --docs                        Enable docs for this business (default when\n                                omitted).\n  --no-docs                     Opt out of docs for this business.\n  --idempotency-key <key>       Required for this mutation. Generate it once and\n                                reuse the exact value on retry.\n  -h, --help                    display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.docs",
      "name": "farthershore business docs",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business docs [options] [command]\n\nEnable or disable docs publishing for a business\n\nOptions:\n  -h, --help                  display help for command\n\nCommands:\n  enable [businessIdOrName]   Enable docs for a business (publish/serve docs\n                              scaffold).\n  disable [businessIdOrName]  Disable docs for a business (stop\n                              publishing/serving docs; scaffold kept in the\n                              repo).\n  help [command]              display help for command",
      "signature": "Usage: farthershore business docs [options] [command]\n\nEnable or disable docs publishing for a business\n\nOptions:\n  -h, --help                  display help for command\n\nCommands:\n  enable [businessIdOrName]   Enable docs for a business (publish/serve docs\n                              scaffold).\n  disable [businessIdOrName]  Disable docs for a business (stop\n                              publishing/serving docs; scaffold kept in the\n                              repo).\n  help [command]              display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.docs.disable",
      "name": "farthershore business docs disable",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business docs disable [options] [businessIdOrName]\n\nDisable docs for a business (stop publishing/serving docs; scaffold kept in the\nrepo).\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore business docs disable [options] [businessIdOrName]\n\nDisable docs for a business (stop publishing/serving docs; scaffold kept in the\nrepo).\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.docs.enable",
      "name": "farthershore business docs enable",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business docs enable [options] [businessIdOrName]\n\nEnable docs for a business (publish/serve docs scaffold).\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore business docs enable [options] [businessIdOrName]\n\nEnable docs for a business (publish/serve docs scaffold).\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.list",
      "name": "farthershore business list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business list [options]\n\nList businesses in the current org\n\nOptions:\n  --filter <field=value>     Exact field filter; repeat for AND. Fields: id,\n                             name, displayName, subdomain, status. (default: [])\n  --sort <field[:asc|desc]>  Server-side sort (default asc). Fields: id, name,\n                             displayName, createdAt, updatedAt.\n  --search <text>            Server-side case-insensitive text search.\n  -h, --help                 display help for command",
      "signature": "Usage: farthershore business list [options]\n\nList businesses in the current org\n\nOptions:\n  --filter <field=value>     Exact field filter; repeat for AND. Fields: id,\n                             name, displayName, subdomain, status. (default: [])\n  --sort <field[:asc|desc]>  Server-side sort (default asc). Fields: id, name,\n                             displayName, createdAt, updatedAt.\n  --search <text>            Server-side case-insensitive text search.\n  -h, --help                 display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.preview-env",
      "name": "farthershore business preview-env",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business preview-env [options] [command]\n\nConfigure automatic preview environment creation for a business\n\nOptions:\n  -h, --help                        display help for command\n\nCommands:\n  set [options] [businessIdOrName]  Configure automatic preview-environment\n                                    creation for a business.\n  help [command]                    display help for command",
      "signature": "Usage: farthershore business preview-env [options] [command]\n\nConfigure automatic preview environment creation for a business\n\nOptions:\n  -h, --help                        display help for command\n\nCommands:\n  set [options] [businessIdOrName]  Configure automatic preview-environment\n                                    creation for a business.\n  help [command]                    display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.preview-env.set",
      "name": "farthershore business preview-env set",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business preview-env set [options] [businessIdOrName]\n\nConfigure automatic preview-environment creation for a business.\n\nOptions:\n  --trigger <branch-prefix|pull-request|disabled>  Auto-create previews from env branch prefixes, pull requests, or disable automatic creation.\n  --branch-prefix <prefix>                         Set the env branch prefix used by --trigger branch-prefix (1-50 characters).\n  --clear-branch-prefix                            Reset the env branch prefix to the platform default (env/).\n  -h, --help                                       display help for command",
      "signature": "Usage: farthershore business preview-env set [options] [businessIdOrName]\n\nConfigure automatic preview-environment creation for a business.\n\nOptions:\n  --trigger <branch-prefix|pull-request|disabled>  Auto-create previews from env branch prefixes, pull requests, or disable automatic creation.\n  --branch-prefix <prefix>                         Set the env branch prefix used by --trigger branch-prefix (1-50 characters).\n  --clear-branch-prefix                            Reset the env branch prefix to the platform default (env/).\n  -h, --help                                       display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.publish",
      "name": "farthershore business publish",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business publish [options] [businessIdOrName]\n\nPublish a draft business (make it live) and cut a versioned release with an\nauto-computed semver. Requires at least one plan, a bound backend, and a\nverified Stripe connection.\n\nOptions:\n  --bump <bump>            Force the semver bump (major|minor|patch). Omit to\n                           auto-derive from the change.\n  --version <version>      Pin the exact next release tag (vX.Y.Z), skipping\n                           derivation.\n  --accept-breaking        Consent to publish a breaking (blocking-risk) change\n                           as a major release.\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  --dry-run                Preview the change without applying it.\n  -h, --help               display help for command\n\nPublish auto-derives the semver bump from the change and cuts a vX.Y.Z release.\nUse --dry-run to preview the computed bump + reasons without cutting a tag.\nA blocking-risk (breaking) change is refused unless --accept-breaking is passed.",
      "signature": "Usage: farthershore business publish [options] [businessIdOrName]\n\nPublish a draft business (make it live) and cut a versioned release with an\nauto-computed semver. Requires at least one plan, a bound backend, and a\nverified Stripe connection.\n\nOptions:\n  --bump <bump>            Force the semver bump (major|minor|patch). Omit to\n                           auto-derive from the change.\n  --version <version>      Pin the exact next release tag (vX.Y.Z), skipping\n                           derivation.\n  --accept-breaking        Consent to publish a breaking (blocking-risk) change\n                           as a major release.\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  --dry-run                Preview the change without applying it.\n  -h, --help               display help for command\n\nPublish auto-derives the semver bump from the change and cuts a vX.Y.Z release.\nUse --dry-run to preview the computed bump + reasons without cutting a tag.\nA blocking-risk (breaking) change is refused unless --accept-breaking is passed.\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.rbac",
      "name": "farthershore business rbac",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business rbac [options] [command] [businessIdOrName]\n\nShow a business's Managed-RBAC state: the platform `rbacEnabled` flag.\n\nOptions:\n  --env <env>                 Environment scope (preview branch name)\n  -h, --help                  display help for command\n\nCommands:\n  enable [businessIdOrName]   Enable Managed RBAC for a business (platform-owned\n                              flag).\n  disable [businessIdOrName]  Disable Managed RBAC for a business\n                              (platform-owned flag).\n  subjects                    List a business's custom permission subjects.\n                              Subjects are repo-owned: declare a\n                              permission-carrying `fs.group(id, routes, {\n                              permission })` in business/ and run `farthershore\n                              validate` + push to change them",
      "signature": "Usage: farthershore business rbac [options] [command] [businessIdOrName]\n\nShow a business's Managed-RBAC state: the platform `rbacEnabled` flag.\n\nOptions:\n  --env <env>                 Environment scope (preview branch name)\n  -h, --help                  display help for command\n\nCommands:\n  enable [businessIdOrName]   Enable Managed RBAC for a business (platform-owned\n                              flag).\n  disable [businessIdOrName]  Disable Managed RBAC for a business\n                              (platform-owned flag).\n  subjects                    List a business's custom permission subjects.\n                              Subjects are repo-owned: declare a\n                              permission-carrying `fs.group(id, routes, {\n                              permission })` in business/ and run `farthershore\n                              validate` + push to change them\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.rbac.disable",
      "name": "farthershore business rbac disable",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business rbac disable [options] [businessIdOrName]\n\nDisable Managed RBAC for a business (platform-owned flag).\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore business rbac disable [options] [businessIdOrName]\n\nDisable Managed RBAC for a business (platform-owned flag).\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.rbac.enable",
      "name": "farthershore business rbac enable",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business rbac enable [options] [businessIdOrName]\n\nEnable Managed RBAC for a business (platform-owned flag).\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore business rbac enable [options] [businessIdOrName]\n\nEnable Managed RBAC for a business (platform-owned flag).\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.rbac.subjects",
      "name": "farthershore business rbac subjects",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business rbac subjects [options] [command]\n\nList a business's custom permission subjects. Subjects are repo-owned: declare a\npermission-carrying `fs.group(id, routes, { permission })` in business/ and run\n`farthershore validate` + push to change them\n\nOptions:\n  -h, --help               display help for command\n\nCommands:\n  list [businessIdOrName]  List the raw permission subjects subscriber\n                           organizations can assemble into their own roles\n                           (repo-owned: authored via fs.group permission config\n                           in business/).\n  help [command]           display help for command",
      "signature": "Usage: farthershore business rbac subjects [options] [command]\n\nList a business's custom permission subjects. Subjects are repo-owned: declare a\npermission-carrying `fs.group(id, routes, { permission })` in business/ and run\n`farthershore validate` + push to change them\n\nOptions:\n  -h, --help               display help for command\n\nCommands:\n  list [businessIdOrName]  List the raw permission subjects subscriber\n                           organizations can assemble into their own roles\n                           (repo-owned: authored via fs.group permission config\n                           in business/).\n  help [command]           display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.rbac.subjects.list",
      "name": "farthershore business rbac subjects list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business rbac subjects list [options] [businessIdOrName]\n\nList the raw permission subjects subscriber organizations can assemble into\ntheir own roles (repo-owned: authored via fs.group permission config in\nbusiness/).\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore business rbac subjects list [options] [businessIdOrName]\n\nList the raw permission subjects subscriber organizations can assemble into\ntheir own roles (repo-owned: authored via fs.group permission config in\nbusiness/).\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.rollback",
      "name": "farthershore business rollback",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business rollback [options] [businessIdOrName] <workflowExecutionId>\n\nRoll back a prior business publish workflow\n\nOptions:\n  --reason <reason>        Reason recorded with the rollback\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore business rollback [options] [businessIdOrName] <workflowExecutionId>\n\nRoll back a prior business publish workflow\n\nOptions:\n  --reason <reason>        Reason recorded with the rollback\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.routes",
      "name": "farthershore business routes",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business routes [options] [businessIdOrName]\n\nList a business's compiled routes\n\nOptions:\n  --env <env>  Environment scope (preview branch name)\n  -h, --help   display help for command",
      "signature": "Usage: farthershore business routes [options] [businessIdOrName]\n\nList a business's compiled routes\n\nOptions:\n  --env <env>  Environment scope (preview branch name)\n  -h, --help   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.show",
      "name": "farthershore business show",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business show [options] [businessIdOrName]\n\nShow a business\n\nOptions:\n  --env <env>  Environment scope (preview branch name)\n  -h, --help   display help for command",
      "signature": "Usage: farthershore business show [options] [businessIdOrName]\n\nShow a business\n\nOptions:\n  --env <env>  Environment scope (preview branch name)\n  -h, --help   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.status",
      "name": "farthershore business status",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business status [options] [businessIdOrName]\n\nShow lifecycle, release, and exact edge-generation coherence for one\nenvironment.\n\nOptions:\n  --env <env>  Environment scope (defaults to production)\n  -h, --help   display help for command",
      "signature": "Usage: farthershore business status [options] [businessIdOrName]\n\nShow lifecycle, release, and exact edge-generation coherence for one\nenvironment.\n\nOptions:\n  --env <env>  Environment scope (defaults to production)\n  -h, --help   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.subdomain-check",
      "name": "farthershore business subdomain-check",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business subdomain-check [options] <slug>\n\nCheck whether a slug is free to use as a business subdomain before creating it\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore business subdomain-check [options] <slug>\n\nCheck whether a slug is free to use as a business subdomain before creating it\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.business.update",
      "name": "farthershore business update",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/business",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore business update [options] [businessIdOrName]\n\nUpdate business presentation metadata\n\nOptions:\n  --display-name <displayName>\n  --description <description>\n  --icon-url <url>              Set the square icon/favicon URL\n  --icon-file <path>            Upload a local PNG, JPEG, or WEBP square icon\n  --clear-icon                  Remove the current icon asset\n  --logo-url <url>              Set the wordmark/logo URL\n  --logo-file <path>            Upload a local PNG, JPEG, or WEBP wordmark/logo\n  --clear-logo                  Remove the current logo asset\n  --key-prefix <prefix>         White-label prefix for subscriber API keys (fsk_\n                                → e.g. acme_). 2-12 lowercase letters/digits;\n                                fs/fsk/fsc/fsm reserved.\n  --clear-key-prefix            Reset the subscriber API key prefix to the\n                                default (fsk).\n  --list-on-org-page            Show this product on the organization's public\n                                page (/organization/<slug>). Products are listed\n                                by default.\n  --unlist-from-org-page        Hide this product from the organization's public\n                                page. Does not unpublish it.\n  --allowed-origins <origins>   Comma-separated browser origins allowed to call\n                                the gateway cross-origin (custom frontend\n                                domains), e.g. https://app.example.com. The\n                                tenant's own portal origin is always allowed.\n  --clear-allowed-origins       Remove all custom allowed origins.\n  -h, --help                    display help for command",
      "signature": "Usage: farthershore business update [options] [businessIdOrName]\n\nUpdate business presentation metadata\n\nOptions:\n  --display-name <displayName>\n  --description <description>\n  --icon-url <url>              Set the square icon/favicon URL\n  --icon-file <path>            Upload a local PNG, JPEG, or WEBP square icon\n  --clear-icon                  Remove the current icon asset\n  --logo-url <url>              Set the wordmark/logo URL\n  --logo-file <path>            Upload a local PNG, JPEG, or WEBP wordmark/logo\n  --clear-logo                  Remove the current logo asset\n  --key-prefix <prefix>         White-label prefix for subscriber API keys (fsk_\n                                → e.g. acme_). 2-12 lowercase letters/digits;\n                                fs/fsk/fsc/fsm reserved.\n  --clear-key-prefix            Reset the subscriber API key prefix to the\n                                default (fsk).\n  --list-on-org-page            Show this product on the organization's public\n                                page (/organization/<slug>). Products are listed\n                                by default.\n  --unlist-from-org-page        Hide this product from the organization's public\n                                page. Does not unpublish it.\n  --allowed-origins <origins>   Comma-separated browser origins allowed to call\n                                the gateway cross-origin (custom frontend\n                                domains), e.g. https://app.example.com. The\n                                tenant's own portal origin is always allowed.\n  --clear-allowed-origins       Remove all custom allowed origins.\n  -h, --help                    display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.commercial-release",
      "name": "farthershore commercial-release",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/commercial-release",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore commercial-release [options] [command]\n\nInspect immutable commercial release manifests\n\nOptions:\n  -h, --help        display help for command\n\nCommands:\n  diff <from> <to>  Compare two compiled CommercialReleaseVersion JSON files\n  help [command]    display help for command",
      "signature": "Usage: farthershore commercial-release [options] [command]\n\nInspect immutable commercial release manifests\n\nOptions:\n  -h, --help        display help for command\n\nCommands:\n  diff <from> <to>  Compare two compiled CommercialReleaseVersion JSON files\n  help [command]    display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.commercial-release.diff",
      "name": "farthershore commercial-release diff",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/commercial-release",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore commercial-release diff [options] <from> <to>\n\nCompare two compiled CommercialReleaseVersion JSON files\n\nArguments:\n  from        Earlier CommercialReleaseVersion JSON file\n  to          Later CommercialReleaseVersion JSON file\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore commercial-release diff [options] <from> <to>\n\nCompare two compiled CommercialReleaseVersion JSON files\n\nArguments:\n  from        Earlier CommercialReleaseVersion JSON file\n  to          Later CommercialReleaseVersion JSON file\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.consumer",
      "name": "farthershore consumer",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/consumer",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore consumer [options] [command]\n\nManage business users/consumers\n\nOptions:\n  -h, --help                                                  display help for command\n\nCommands:\n  list [options] [businessIdOrSlug]                           List users/consumers for a business\n  block [options] [businessIdOrSlug] [subscriberId]           Block a user and revoke their active API keys\n  keys                                                        List and revoke ONE consumer's API keys. Listing is metadata only — key material is never returned. `consumer block` revokes every key at once; this is the surgical version\n  migrate-latest [options] [businessIdOrSlug] [subscriberId]  Move one consumer to the active head of their plan lineage\n  remove [options] [businessIdOrSlug] [subscriberId]          Remove a user from live business access\n  rbac                                                        Builder-plane Managed RBAC for one subscriber: the per-subscriber enforcement flag, its roles, and member role assignment. Enforcement also requires the product flag (`farthershore business rbac enable`)\n  help [command]                                              display help for command",
      "signature": "Usage: farthershore consumer [options] [command]\n\nManage business users/consumers\n\nOptions:\n  -h, --help                                                  display help for command\n\nCommands:\n  list [options] [businessIdOrSlug]                           List users/consumers for a business\n  block [options] [businessIdOrSlug] [subscriberId]           Block a user and revoke their active API keys\n  keys                                                        List and revoke ONE consumer's API keys. Listing is metadata only — key material is never returned. `consumer block` revokes every key at once; this is the surgical version\n  migrate-latest [options] [businessIdOrSlug] [subscriberId]  Move one consumer to the active head of their plan lineage\n  remove [options] [businessIdOrSlug] [subscriberId]          Remove a user from live business access\n  rbac                                                        Builder-plane Managed RBAC for one subscriber: the per-subscriber enforcement flag, its roles, and member role assignment. Enforcement also requires the product flag (`farthershore business rbac enable`)\n  help [command]                                              display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.consumer.block",
      "name": "farthershore consumer block",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/consumer",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore consumer block [options] [businessIdOrSlug] <subscriberId>\n\nBlock a user and revoke their active API keys\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command",
      "signature": "Usage: farthershore consumer block [options] [businessIdOrSlug] <subscriberId>\n\nBlock a user and revoke their active API keys\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.consumer.keys",
      "name": "farthershore consumer keys",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/consumer",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore consumer keys [options] [command]\n\nList and revoke ONE consumer's API keys. Listing is metadata only — key material\nis never returned. `consumer block` revokes every key at once; this is the\nsurgical version\n\nOptions:\n  -h, --help                                                  display help for command\n\nCommands:\n  list [businessIdOrSlug] [subscriberId]                      List a consumer's API keys (metadata only)\n  revoke [options] [businessIdOrSlug] [subscriberId] [keyId]  Revoke ONE of a consumer's API keys\n  help [command]                                              display help for command",
      "signature": "Usage: farthershore consumer keys [options] [command]\n\nList and revoke ONE consumer's API keys. Listing is metadata only — key material\nis never returned. `consumer block` revokes every key at once; this is the\nsurgical version\n\nOptions:\n  -h, --help                                                  display help for command\n\nCommands:\n  list [businessIdOrSlug] [subscriberId]                      List a consumer's API keys (metadata only)\n  revoke [options] [businessIdOrSlug] [subscriberId] [keyId]  Revoke ONE of a consumer's API keys\n  help [command]                                              display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.consumer.keys.list",
      "name": "farthershore consumer keys list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/consumer",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore consumer keys list [options] [businessIdOrSlug] <subscriberId>\n\nList a consumer's API keys (metadata only)\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore consumer keys list [options] [businessIdOrSlug] <subscriberId>\n\nList a consumer's API keys (metadata only)\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.consumer.keys.revoke",
      "name": "farthershore consumer keys revoke",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/consumer",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore consumer keys revoke [options] [businessIdOrSlug] <subscriberId> <keyId>\n\nRevoke ONE of a consumer's API keys\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command",
      "signature": "Usage: farthershore consumer keys revoke [options] [businessIdOrSlug] <subscriberId> <keyId>\n\nRevoke ONE of a consumer's API keys\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.consumer.list",
      "name": "farthershore consumer list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/consumer",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore consumer list [options] [businessIdOrSlug]\n\nList users/consumers for a business\n\nOptions:\n  --env <env>  Environment name for preview-scoped consumers.\n  -h, --help   display help for command",
      "signature": "Usage: farthershore consumer list [options] [businessIdOrSlug]\n\nList users/consumers for a business\n\nOptions:\n  --env <env>  Environment name for preview-scoped consumers.\n  -h, --help   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.consumer.migrate-latest",
      "name": "farthershore consumer migrate-latest",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/consumer",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore consumer migrate-latest [options] [businessIdOrSlug] <subscriberId>\n\nMove one consumer to the active head of their plan lineage\n\nOptions:\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore consumer migrate-latest [options] [businessIdOrSlug] <subscriberId>\n\nMove one consumer to the active head of their plan lineage\n\nOptions:\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.consumer.rbac",
      "name": "farthershore consumer rbac",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/consumer",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore consumer rbac [options] [command]\n\nBuilder-plane Managed RBAC for one subscriber: the per-subscriber enforcement\nflag, its roles, and member role assignment. Enforcement also requires the\nproduct flag (`farthershore business rbac enable`)\n\nOptions:\n  -h, --help                                                           display help for command\n\nCommands:\n  assign [options] [businessIdOrSlug] [subscriberId] [userExternalId]  Replace a client-org member's Managed-RBAC business roles (builder support override)\n  enable [options] [businessIdOrSlug] [subscriberId]                   Turn Managed-RBAC enforcement on for one subscriber\n  disable [businessIdOrSlug] [subscriberId]                            Turn Managed-RBAC enforcement off for one subscriber\n  roles                                                                Create, read, update, and delete one subscriber's Managed-RBAC roles. The subscribing org manages the same rows from its portal (/settings/team)\n  help [command]                                                       display help for command",
      "signature": "Usage: farthershore consumer rbac [options] [command]\n\nBuilder-plane Managed RBAC for one subscriber: the per-subscriber enforcement\nflag, its roles, and member role assignment. Enforcement also requires the\nproduct flag (`farthershore business rbac enable`)\n\nOptions:\n  -h, --help                                                           display help for command\n\nCommands:\n  assign [options] [businessIdOrSlug] [subscriberId] [userExternalId]  Replace a client-org member's Managed-RBAC business roles (builder support override)\n  enable [options] [businessIdOrSlug] [subscriberId]                   Turn Managed-RBAC enforcement on for one subscriber\n  disable [businessIdOrSlug] [subscriberId]                            Turn Managed-RBAC enforcement off for one subscriber\n  roles                                                                Create, read, update, and delete one subscriber's Managed-RBAC roles. The subscribing org manages the same rows from its portal (/settings/team)\n  help [command]                                                       display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.consumer.rbac.assign",
      "name": "farthershore consumer rbac assign",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/consumer",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore consumer rbac assign [options] [businessIdOrSlug] <subscriberId> <userExternalId>\n\nReplace a client-org member's Managed-RBAC business roles (builder support\noverride)\n\nOptions:\n  --roles <roles>  Comma-separated business-role keys to set (replaces the\n                   current assignment; pass an empty string to clear).\n  -h, --help       display help for command",
      "signature": "Usage: farthershore consumer rbac assign [options] [businessIdOrSlug] <subscriberId> <userExternalId>\n\nReplace a client-org member's Managed-RBAC business roles (builder support\noverride)\n\nOptions:\n  --roles <roles>  Comma-separated business-role keys to set (replaces the\n                   current assignment; pass an empty string to clear).\n  -h, --help       display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.consumer.rbac.disable",
      "name": "farthershore consumer rbac disable",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/consumer",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore consumer rbac disable [options] [businessIdOrSlug] <subscriberId>\n\nTurn Managed-RBAC enforcement off for one subscriber\n\nOptions:\n  -h, --help  display help for command\n\nDisabling is an ACCESS EXPANSION: with enforcement off, credential permission resolution can return ['*']. Role definitions are preserved for re-enable.",
      "signature": "Usage: farthershore consumer rbac disable [options] [businessIdOrSlug] <subscriberId>\n\nTurn Managed-RBAC enforcement off for one subscriber\n\nOptions:\n  -h, --help  display help for command\n\nDisabling is an ACCESS EXPANSION: with enforcement off, credential permission resolution can return ['*']. Role definitions are preserved for re-enable.\n\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.consumer.rbac.enable",
      "name": "farthershore consumer rbac enable",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/consumer",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore consumer rbac enable [options] [businessIdOrSlug] <subscriberId>\n\nTurn Managed-RBAC enforcement on for one subscriber\n\nOptions:\n  --default-role <roleKey>  Role key new members fall back to when they have no\n                            explicit role. Omit to clear it.\n  -h, --help                display help for command\n\nEnforcement needs BOTH flags: the product flag (`farthershore business rbac enable`) and this per-subscriber flag. With the product flag off, core answers 400 RBAC_NOT_ENABLED_BY_PRODUCT. The subscribing org can flip the same flag itself at the portal's /settings/team page.",
      "signature": "Usage: farthershore consumer rbac enable [options] [businessIdOrSlug] <subscriberId>\n\nTurn Managed-RBAC enforcement on for one subscriber\n\nOptions:\n  --default-role <roleKey>  Role key new members fall back to when they have no\n                            explicit role. Omit to clear it.\n  -h, --help                display help for command\n\nEnforcement needs BOTH flags: the product flag (`farthershore business rbac enable`) and this per-subscriber flag. With the product flag off, core answers 400 RBAC_NOT_ENABLED_BY_PRODUCT. The subscribing org can flip the same flag itself at the portal's /settings/team page.\n\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.consumer.rbac.roles",
      "name": "farthershore consumer rbac roles",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/consumer",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore consumer rbac roles [options] [command]\n\nCreate, read, update, and delete one subscriber's Managed-RBAC roles. The\nsubscribing org manages the same rows from its portal (/settings/team)\n\nOptions:\n  -h, --help                                                    display help for command\n\nCommands:\n  list [businessIdOrSlug] [subscriberId]                        List one subscriber's Managed-RBAC roles\n  create [options] [businessIdOrSlug] [subscriberId] [roleKey]  Create a CUSTOM Managed-RBAC role for one subscriber\n  update [options] [businessIdOrSlug] [subscriberId] [roleKey]  Rename or re-permission one subscriber Managed-RBAC role\n  delete [options] [businessIdOrSlug] [subscriberId] [roleKey]  Delete one subscriber Managed-RBAC role\n  help [command]                                                display help for command",
      "signature": "Usage: farthershore consumer rbac roles [options] [command]\n\nCreate, read, update, and delete one subscriber's Managed-RBAC roles. The\nsubscribing org manages the same rows from its portal (/settings/team)\n\nOptions:\n  -h, --help                                                    display help for command\n\nCommands:\n  list [businessIdOrSlug] [subscriberId]                        List one subscriber's Managed-RBAC roles\n  create [options] [businessIdOrSlug] [subscriberId] [roleKey]  Create a CUSTOM Managed-RBAC role for one subscriber\n  update [options] [businessIdOrSlug] [subscriberId] [roleKey]  Rename or re-permission one subscriber Managed-RBAC role\n  delete [options] [businessIdOrSlug] [subscriberId] [roleKey]  Delete one subscriber Managed-RBAC role\n  help [command]                                                display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.consumer.rbac.roles.create",
      "name": "farthershore consumer rbac roles create",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/consumer",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore consumer rbac roles create [options] [businessIdOrSlug] <subscriberId> <roleKey>\n\nCreate a CUSTOM Managed-RBAC role for one subscriber\n\nOptions:\n  --name <name>                Human-readable role name.\n  --permissions <permissions>  Comma-separated permission keys from the\n                               business's derived catalog (e.g.\n                               `reports:read,reports:write`).\n  -h, --help                   display help for command",
      "signature": "Usage: farthershore consumer rbac roles create [options] [businessIdOrSlug] <subscriberId> <roleKey>\n\nCreate a CUSTOM Managed-RBAC role for one subscriber\n\nOptions:\n  --name <name>                Human-readable role name.\n  --permissions <permissions>  Comma-separated permission keys from the\n                               business's derived catalog (e.g.\n                               `reports:read,reports:write`).\n  -h, --help                   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.consumer.rbac.roles.delete",
      "name": "farthershore consumer rbac roles delete",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/consumer",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore consumer rbac roles delete [options] [businessIdOrSlug] <subscriberId> <roleKey>\n\nDelete one subscriber Managed-RBAC role\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command",
      "signature": "Usage: farthershore consumer rbac roles delete [options] [businessIdOrSlug] <subscriberId> <roleKey>\n\nDelete one subscriber Managed-RBAC role\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.consumer.rbac.roles.list",
      "name": "farthershore consumer rbac roles list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/consumer",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore consumer rbac roles list [options] [businessIdOrSlug] <subscriberId>\n\nList one subscriber's Managed-RBAC roles\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore consumer rbac roles list [options] [businessIdOrSlug] <subscriberId>\n\nList one subscriber's Managed-RBAC roles\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.consumer.rbac.roles.update",
      "name": "farthershore consumer rbac roles update",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/consumer",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore consumer rbac roles update [options] [businessIdOrSlug] <subscriberId> <roleKey>\n\nRename or re-permission one subscriber Managed-RBAC role\n\nOptions:\n  --name <name>                New human-readable role name.\n  --permissions <permissions>  Comma-separated permission keys from the\n                               business's derived catalog (e.g.\n                               `reports:read,reports:write`). Set-replace: the\n                               given list becomes the role's full grant.\n  -h, --help                   display help for command",
      "signature": "Usage: farthershore consumer rbac roles update [options] [businessIdOrSlug] <subscriberId> <roleKey>\n\nRename or re-permission one subscriber Managed-RBAC role\n\nOptions:\n  --name <name>                New human-readable role name.\n  --permissions <permissions>  Comma-separated permission keys from the\n                               business's derived catalog (e.g.\n                               `reports:read,reports:write`). Set-replace: the\n                               given list becomes the role's full grant.\n  -h, --help                   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.consumer.remove",
      "name": "farthershore consumer remove",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/consumer",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore consumer remove [options] [businessIdOrSlug] <subscriberId>\n\nRemove a user from live business access\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command",
      "signature": "Usage: farthershore consumer remove [options] [businessIdOrSlug] <subscriberId>\n\nRemove a user from live business access\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.create",
      "name": "farthershore create",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/create",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore create [options] [command]\n\nCreate local FartherShore project components\n\nOptions:\n  -h, --help      display help for command\n\nCommands:\n  api [options]   Scaffold a starter backend from a public template tarball\n  help [command]  display help for command",
      "signature": "Usage: farthershore create [options] [command]\n\nCreate local FartherShore project components\n\nOptions:\n  -h, --help      display help for command\n\nCommands:\n  api [options]   Scaffold a starter backend from a public template tarball\n  help [command]  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.create.api",
      "name": "farthershore create api",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/create",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore create api [options]\n\nScaffold a starter backend from a public template tarball\n\nOptions:\n  --node                 Node (TypeScript + Express) template (default)\n  --path <dir>           Managed builder repo root (default: current directory)\n  --force                Overwrite an existing api/ directory if present\n  --ref <branch-or-tag>  Template tag or branch to download instead of main\n                         (tags are tried first)\n  -h, --help             display help for command\n\nLanguages:\n  --node    Node (TypeScript + Express) (default)\n\nMore languages are coming.",
      "signature": "Usage: farthershore create api [options]\n\nScaffold a starter backend from a public template tarball\n\nOptions:\n  --node                 Node (TypeScript + Express) template (default)\n  --path <dir>           Managed builder repo root (default: current directory)\n  --force                Overwrite an existing api/ directory if present\n  --ref <branch-or-tag>  Template tag or branch to download instead of main\n                         (tags are tried first)\n  -h, --help             display help for command\n\nLanguages:\n  --node    Node (TypeScript + Express) (default)\n\nMore languages are coming.\n\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.denial",
      "name": "farthershore denial",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/denial",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore denial [options] [command]\n\nExplain gateway denial decisions\n\nOptions:\n  -h, --help                           display help for command\n\nCommands:\n  show [businessIdOrName] [requestId]  Explain a denied request\n  help [command]                       display help for command",
      "signature": "Usage: farthershore denial [options] [command]\n\nExplain gateway denial decisions\n\nOptions:\n  -h, --help                           display help for command\n\nCommands:\n  show [businessIdOrName] [requestId]  Explain a denied request\n  help [command]                       display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.denial.show",
      "name": "farthershore denial show",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/denial",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore denial show [options] [businessIdOrName] <requestId>\n\nExplain a denied request\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore denial show [options] [businessIdOrName] <requestId>\n\nExplain a denied request\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.dependents",
      "name": "farthershore dependents",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/dependents",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore dependents [options] [command]\n\nInspect active business route dependents\n\nOptions:\n  -h, --help                         display help for command\n\nCommands:\n  list [options] [businessIdOrName]  List active dependents for a business route\n  help [command]                     display help for command",
      "signature": "Usage: farthershore dependents [options] [command]\n\nInspect active business route dependents\n\nOptions:\n  -h, --help                         display help for command\n\nCommands:\n  list [options] [businessIdOrName]  List active dependents for a business route\n  help [command]                     display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.dependents.list",
      "name": "farthershore dependents list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/dependents",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore dependents list [options] [businessIdOrName]\n\nList active dependents for a business route\n\nOptions:\n  --route <route>\n  --since <iso-date>\n  --environment <id>\n  -h, --help          display help for command",
      "signature": "Usage: farthershore dependents list [options] [businessIdOrName]\n\nList active dependents for a business route\n\nOptions:\n  --route <route>\n  --since <iso-date>\n  --environment <id>\n  -h, --help          display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.docs",
      "name": "farthershore docs",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/docs",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore docs [options] [command]\n\nBrowse public platform documentation as a read-only filesystem (no login)\n\nOptions:\n  --stage                           Read stage docs instead of production\n                                    (independent of --api-url)\n  -h, --help                        display help for command\n\nCommands:\n  ls|list [path]                    List collections, a section directory, or\n                                    the headings in a page\n  tree [path]                       Expand a collection or directory recursively\n                                    into its sections and pages\n  read|get [options] <path-or-url>  Read a complete page by virtual path,\n                                    canonical slug or official docs URL\n  search [options] <query>          Search literal text; results include\n                                    traversal paths and section links\n  collection <id>                   Read the entire collection corpus, without\n                                    truncation\n  help [command]                    display help for command",
      "signature": "Usage: farthershore docs [options] [command]\n\nBrowse public platform documentation as a read-only filesystem (no login)\n\nOptions:\n  --stage                           Read stage docs instead of production\n                                    (independent of --api-url)\n  -h, --help                        display help for command\n\nCommands:\n  ls|list [path]                    List collections, a section directory, or\n                                    the headings in a page\n  tree [path]                       Expand a collection or directory recursively\n                                    into its sections and pages\n  read|get [options] <path-or-url>  Read a complete page by virtual path,\n                                    canonical slug or official docs URL\n  search [options] <query>          Search literal text; results include\n                                    traversal paths and section links\n  collection <id>                   Read the entire collection corpus, without\n                                    truncation\n  help [command]                    display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.docs.collection",
      "name": "farthershore docs collection",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/docs",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore docs collection [options] <id>\n\nRead the entire collection corpus, without truncation\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore docs collection [options] <id>\n\nRead the entire collection corpus, without truncation\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.docs.ls",
      "name": "farthershore docs ls",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/docs",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore docs ls|list [options] [path]\n\nList collections, a section directory, or the headings in a page\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore docs ls|list [options] [path]\n\nList collections, a section directory, or the headings in a page\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.docs.read",
      "name": "farthershore docs read",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/docs",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore docs read|get [options] <path-or-url>\n\nRead a complete page by virtual path, canonical slug or official docs URL\n\nOptions:\n  --section <heading-or-anchor>  Read this heading and all its child sections;\n                                 no truncation\n  -h, --help                     display help for command",
      "signature": "Usage: farthershore docs read|get [options] <path-or-url>\n\nRead a complete page by virtual path, canonical slug or official docs URL\n\nOptions:\n  --section <heading-or-anchor>  Read this heading and all its child sections;\n                                 no truncation\n  -h, --help                     display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.docs.search",
      "name": "farthershore docs search",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/docs",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore docs search [options] <query>\n\nSearch literal text; results include traversal paths and section links\n\nOptions:\n  --collection <id>  Search only this collection\n  --limit <count>    Maximum results (1–100) (default: \"20\")\n  -h, --help         display help for command",
      "signature": "Usage: farthershore docs search [options] <query>\n\nSearch literal text; results include traversal paths and section links\n\nOptions:\n  --collection <id>  Search only this collection\n  --limit <count>    Maximum results (1–100) (default: \"20\")\n  -h, --help         display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.docs.tree",
      "name": "farthershore docs tree",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/docs",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore docs tree [options] [path]\n\nExpand a collection or directory recursively into its sections and pages\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore docs tree [options] [path]\n\nExpand a collection or directory recursively into its sections and pages\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.env",
      "name": "farthershore env",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/env",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore env [options] [command]\n\nManage business environments (preview branches, prod)\n\nOptions:\n  -h, --help                                     display help for command\n\nCommands:\n  list [options] [businessIdOrName]              List environments for a business\n  create [options] [businessIdOrName]            Create a preview environment bound to a git branch\n  delete [options] [businessIdOrName] [envName]  Delete an environment by name. Requires --yes.\n  help [command]                                 display help for command",
      "signature": "Usage: farthershore env [options] [command]\n\nManage business environments (preview branches, prod)\n\nOptions:\n  -h, --help                                     display help for command\n\nCommands:\n  list [options] [businessIdOrName]              List environments for a business\n  create [options] [businessIdOrName]            Create a preview environment bound to a git branch\n  delete [options] [businessIdOrName] [envName]  Delete an environment by name. Requires --yes.\n  help [command]                                 display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.env.create",
      "name": "farthershore env create",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/env",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore env create [options] [businessIdOrName]\n\nCreate a preview environment bound to a git branch\n\nOptions:\n  --name <name>      Environment name (e.g. preview, staging)\n  --branch <branch>  Git branch to track (e.g. env/preview)\n  -h, --help         display help for command",
      "signature": "Usage: farthershore env create [options] [businessIdOrName]\n\nCreate a preview environment bound to a git branch\n\nOptions:\n  --name <name>      Environment name (e.g. preview, staging)\n  --branch <branch>  Git branch to track (e.g. env/preview)\n  -h, --help         display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.env.delete",
      "name": "farthershore env delete",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/env",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore env delete [options] [businessIdOrName] <envName>\n\nDelete an environment by name. Requires --yes.\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command",
      "signature": "Usage: farthershore env delete [options] [businessIdOrName] <envName>\n\nDelete an environment by name. Requires --yes.\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.env.list",
      "name": "farthershore env list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/env",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore env list [options] [businessIdOrName]\n\nList environments for a business\n\nOptions:\n  --filter <field=value>     Exact field filter; repeat for AND. Fields: id,\n                             name, branch. (default: [])\n  --sort <field[:asc|desc]>  Server-side sort (default asc). Fields: name,\n                             createdAt, id.\n  --search <text>            Server-side case-insensitive text search.\n  -h, --help                 display help for command",
      "signature": "Usage: farthershore env list [options] [businessIdOrName]\n\nList environments for a business\n\nOptions:\n  --filter <field=value>     Exact field filter; repeat for AND. Fields: id,\n                             name, branch. (default: [])\n  --sort <field[:asc|desc]>  Server-side sort (default asc). Fields: name,\n                             createdAt, id.\n  --search <text>            Server-side case-insensitive text search.\n  -h, --help                 display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.farthershore-manifest-build",
      "name": "farthershore-manifest-build",
      "kind": "cli",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/src/bin.ts",
      "description": "Compile the business folder to deterministic Manifest IR and diagnostics.",
      "signature": "Usage: farthershore-manifest-build [--entry business] [--out business-build.json] [--diagnostics-out manifest-diagnostics.json]\n  --entry defaults to the business/ folder (all modules imported; exactly one default fs.business() export is compiled).\n  Pass a folder to discover it, or a single file to load only that file.\n",
      "guide": "define/build-output"
    },
    {
      "id": "cli.frontend",
      "name": "farthershore frontend",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/frontend",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore frontend [options] [command]\n\nManaged Frontend Hosting: status/rollback/local preview (deploys are\nGit-triggered)\n\nOptions:\n  -h, --help                             display help for command\n\nCommands:\n  status [options] [businessIdOrSlug]    Show the current frontend release, recent releases, and recent builds (incl. failure reasons)\n  rollback [options] [businessIdOrSlug]  Roll the business frontend back to a prior release (re-activate its releaseId)\n  dev [options]                          Run the frontend's HOT-RELOADING `vite` dev server with an injected window.__FS_CONFIG__ shim (mock mode by default) — for active editing.\n  preview [options]                      Build the frontend and serve the BUSINESSION bundle via `vite preview` with the same shim (mock mode by default) — final as-shipped inspection.\n  help [command]                         display help for command",
      "signature": "Usage: farthershore frontend [options] [command]\n\nManaged Frontend Hosting: status/rollback/local preview (deploys are\nGit-triggered)\n\nOptions:\n  -h, --help                             display help for command\n\nCommands:\n  status [options] [businessIdOrSlug]    Show the current frontend release, recent releases, and recent builds (incl. failure reasons)\n  rollback [options] [businessIdOrSlug]  Roll the business frontend back to a prior release (re-activate its releaseId)\n  dev [options]                          Run the frontend's HOT-RELOADING `vite` dev server with an injected window.__FS_CONFIG__ shim (mock mode by default) — for active editing.\n  preview [options]                      Build the frontend and serve the BUSINESSION bundle via `vite preview` with the same shim (mock mode by default) — final as-shipped inspection.\n  help [command]                         display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.frontend.dev",
      "name": "farthershore frontend dev",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/frontend",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore frontend dev [options]\n\nRun the frontend's HOT-RELOADING `vite` dev server with an injected\nwindow.__FS_CONFIG__ shim (mock mode by default) — for active editing.\n\nOptions:\n  --dir <path>                       Frontend project directory (default:\n                                     ./frontend)\n  --mock                             Force mock mode (this is already the\n                                     default when no Core/Clerk config is given)\n  --live                             Preview against the real platform\n                                     (production Core URL) instead of mock mode\n  --business <id-or-slug>            Business for a local persona preview\n  --env <id-or-name>                 Test environment for a local persona\n                                     preview\n  --persona <id-or-name>             Existing test persona for a local live\n                                     preview\n  --core-url <url>                   Platform Core base URL to shim (default:\n                                     VITE_FS_CORE_URL)\n  --clerk-publishable-key <key>      Clerk publishable key for clerk-strategy\n                                     envs (default: VITE_CLERK_PUBLISHABLE_KEY)\n  --clerk-sign-in-url <url>          Clerk hosted sign-in URL (default:\n                                     VITE_CLERK_SIGN_IN_URL)\n  --clerk-satellite-domain <domain>  Clerk satellite domain (default:\n                                     VITE_CLERK_SATELLITE_DOMAIN)\n  --port <port>                      Public local proxy port (Vite uses a\n                                     private random loopback port for persona\n                                     previews)\n  -h, --help                         display help for command\n\nExamples:\n  farthershore frontend dev                           # HOT-RELOADING dev server, mock mode (default)\n  farthershore frontend preview                       # production build served as-is, mock mode\n  farthershore frontend dev --live                # against the real production platform\n  farthershore frontend dev --live --business acme --env preview --persona persona_123\n  farthershore frontend dev --core-url http://localhost:8787\n  farthershore frontend dev --dir ./frontend --port 4321\n\nMock mode (the default with no Core/Clerk config):\n  Injects { mock: true } — every page renders with placeholder data and\n  bypassed auth for local inspection. Point at a real platform with\n  --live, --core-url, or VITE_FS_CORE_URL.",
      "signature": "Usage: farthershore frontend dev [options]\n\nRun the frontend's HOT-RELOADING `vite` dev server with an injected\nwindow.__FS_CONFIG__ shim (mock mode by default) — for active editing.\n\nOptions:\n  --dir <path>                       Frontend project directory (default:\n                                     ./frontend)\n  --mock                             Force mock mode (this is already the\n                                     default when no Core/Clerk config is given)\n  --live                             Preview against the real platform\n                                     (production Core URL) instead of mock mode\n  --business <id-or-slug>            Business for a local persona preview\n  --env <id-or-name>                 Test environment for a local persona\n                                     preview\n  --persona <id-or-name>             Existing test persona for a local live\n                                     preview\n  --core-url <url>                   Platform Core base URL to shim (default:\n                                     VITE_FS_CORE_URL)\n  --clerk-publishable-key <key>      Clerk publishable key for clerk-strategy\n                                     envs (default: VITE_CLERK_PUBLISHABLE_KEY)\n  --clerk-sign-in-url <url>          Clerk hosted sign-in URL (default:\n                                     VITE_CLERK_SIGN_IN_URL)\n  --clerk-satellite-domain <domain>  Clerk satellite domain (default:\n                                     VITE_CLERK_SATELLITE_DOMAIN)\n  --port <port>                      Public local proxy port (Vite uses a\n                                     private random loopback port for persona\n                                     previews)\n  -h, --help                         display help for command\n\nExamples:\n  farthershore frontend dev                           # HOT-RELOADING dev server, mock mode (default)\n  farthershore frontend preview                       # production build served as-is, mock mode\n  farthershore frontend dev --live                # against the real production platform\n  farthershore frontend dev --live --business acme --env preview --persona persona_123\n  farthershore frontend dev --core-url http://localhost:8787\n  farthershore frontend dev --dir ./frontend --port 4321\n\nMock mode (the default with no Core/Clerk config):\n  Injects { mock: true } — every page renders with placeholder data and\n  bypassed auth for local inspection. Point at a real platform with\n  --live, --core-url, or VITE_FS_CORE_URL.\n\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.frontend.preview",
      "name": "farthershore frontend preview",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/frontend",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore frontend preview [options]\n\nBuild the frontend and serve the BUSINESSION bundle via `vite preview` with the\nsame shim (mock mode by default) — final as-shipped inspection.\n\nOptions:\n  --dir <path>                       Frontend project directory (default:\n                                     ./frontend)\n  --mock                             Force mock mode (this is already the\n                                     default when no Core/Clerk config is given)\n  --live                             Preview against the real platform\n                                     (production Core URL) instead of mock mode\n  --business <id-or-slug>            Business for a local persona preview\n  --env <id-or-name>                 Test environment for a local persona\n                                     preview\n  --persona <id-or-name>             Existing test persona for a local live\n                                     preview\n  --core-url <url>                   Platform Core base URL to shim (default:\n                                     VITE_FS_CORE_URL)\n  --clerk-publishable-key <key>      Clerk publishable key for clerk-strategy\n                                     envs (default: VITE_CLERK_PUBLISHABLE_KEY)\n  --clerk-sign-in-url <url>          Clerk hosted sign-in URL (default:\n                                     VITE_CLERK_SIGN_IN_URL)\n  --clerk-satellite-domain <domain>  Clerk satellite domain (default:\n                                     VITE_CLERK_SATELLITE_DOMAIN)\n  --port <port>                      Public local proxy port (Vite uses a\n                                     private random loopback port for persona\n                                     previews)\n  -h, --help                         display help for command\n\nExamples:\n  farthershore frontend dev                           # HOT-RELOADING dev server, mock mode (default)\n  farthershore frontend preview                       # production build served as-is, mock mode\n  farthershore frontend preview --live                # against the real production platform\n  farthershore frontend preview --live --business acme --env preview --persona persona_123\n  farthershore frontend preview --core-url http://localhost:8787\n  farthershore frontend preview --dir ./frontend --port 4321\n\nMock mode (the default with no Core/Clerk config):\n  Injects { mock: true } — every page renders with placeholder data and\n  bypassed auth for local inspection. Point at a real platform with\n  --live, --core-url, or VITE_FS_CORE_URL.",
      "signature": "Usage: farthershore frontend preview [options]\n\nBuild the frontend and serve the BUSINESSION bundle via `vite preview` with the\nsame shim (mock mode by default) — final as-shipped inspection.\n\nOptions:\n  --dir <path>                       Frontend project directory (default:\n                                     ./frontend)\n  --mock                             Force mock mode (this is already the\n                                     default when no Core/Clerk config is given)\n  --live                             Preview against the real platform\n                                     (production Core URL) instead of mock mode\n  --business <id-or-slug>            Business for a local persona preview\n  --env <id-or-name>                 Test environment for a local persona\n                                     preview\n  --persona <id-or-name>             Existing test persona for a local live\n                                     preview\n  --core-url <url>                   Platform Core base URL to shim (default:\n                                     VITE_FS_CORE_URL)\n  --clerk-publishable-key <key>      Clerk publishable key for clerk-strategy\n                                     envs (default: VITE_CLERK_PUBLISHABLE_KEY)\n  --clerk-sign-in-url <url>          Clerk hosted sign-in URL (default:\n                                     VITE_CLERK_SIGN_IN_URL)\n  --clerk-satellite-domain <domain>  Clerk satellite domain (default:\n                                     VITE_CLERK_SATELLITE_DOMAIN)\n  --port <port>                      Public local proxy port (Vite uses a\n                                     private random loopback port for persona\n                                     previews)\n  -h, --help                         display help for command\n\nExamples:\n  farthershore frontend dev                           # HOT-RELOADING dev server, mock mode (default)\n  farthershore frontend preview                       # production build served as-is, mock mode\n  farthershore frontend preview --live                # against the real production platform\n  farthershore frontend preview --live --business acme --env preview --persona persona_123\n  farthershore frontend preview --core-url http://localhost:8787\n  farthershore frontend preview --dir ./frontend --port 4321\n\nMock mode (the default with no Core/Clerk config):\n  Injects { mock: true } — every page renders with placeholder data and\n  bypassed auth for local inspection. Point at a real platform with\n  --live, --core-url, or VITE_FS_CORE_URL.\n\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.frontend.rollback",
      "name": "farthershore frontend rollback",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/frontend",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore frontend rollback [options] [businessIdOrSlug]\n\nRoll the business frontend back to a prior release (re-activate its releaseId)\n\nOptions:\n  --release-id <releaseId>  The prior release id (manifest hash) to re-activate\n                            — see `frontend status`.\n  --env <environment>       Scope to a preview environment name or id (omit for\n                            production).\n  --dry-run                 Preview the change without applying it.\n  -h, --help                display help for command",
      "signature": "Usage: farthershore frontend rollback [options] [businessIdOrSlug]\n\nRoll the business frontend back to a prior release (re-activate its releaseId)\n\nOptions:\n  --release-id <releaseId>  The prior release id (manifest hash) to re-activate\n                            — see `frontend status`.\n  --env <environment>       Scope to a preview environment name or id (omit for\n                            production).\n  --dry-run                 Preview the change without applying it.\n  -h, --help                display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.frontend.status",
      "name": "farthershore frontend status",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/frontend",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore frontend status [options] [businessIdOrSlug]\n\nShow the current frontend release, recent releases, and recent builds (incl.\nfailure reasons)\n\nOptions:\n  --env <environment>  Scope to a preview environment name or id (omit for\n                       production).\n  --wait               Wait for a build that appears after this command starts;\n                       exit non-zero if it fails. Pair with --ref after a Git\n                       push or release for exact source proof.\n  --ref <commitSha>    Match builds for this immutable Git commit SHA; use with\n                       --wait to observe the latest known build for that source\n                       revision.\n  --timeout <seconds>  How long --wait waits before giving up (default 600).\n  -h, --help           display help for command",
      "signature": "Usage: farthershore frontend status [options] [businessIdOrSlug]\n\nShow the current frontend release, recent releases, and recent builds (incl.\nfailure reasons)\n\nOptions:\n  --env <environment>  Scope to a preview environment name or id (omit for\n                       production).\n  --wait               Wait for a build that appears after this command starts;\n                       exit non-zero if it fails. Pair with --ref after a Git\n                       push or release for exact source proof.\n  --ref <commitSha>    Match builds for this immutable Git commit SHA; use with\n                       --wait to observe the latest known build for that source\n                       revision.\n  --timeout <seconds>  How long --wait waits before giving up (default 600).\n  -h, --help           display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.import",
      "name": "farthershore import",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/import",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore import [options] [command]\n\nImport external definitions into FartherShore authoring\n\nOptions:\n  -h, --help                display help for command\n\nCommands:\n  openapi [options] <spec>  Scaffold a path-first Business SDK route module from\n                            an OpenAPI spec\n  help [command]            display help for command",
      "signature": "Usage: farthershore import [options] [command]\n\nImport external definitions into FartherShore authoring\n\nOptions:\n  -h, --help                display help for command\n\nCommands:\n  openapi [options] <spec>  Scaffold a path-first Business SDK route module from\n                            an OpenAPI spec\n  help [command]            display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.import.openapi",
      "name": "farthershore import openapi",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/import",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore import openapi [options] <spec>\n\nScaffold a path-first Business SDK route module from an OpenAPI spec\n\nArguments:\n  spec          Path to an OpenAPI 3.x JSON document\n\nOptions:\n  --out <file>  Write the generated module to this file (default: print to\n                stdout)\n  -h, --help    display help for command",
      "signature": "Usage: farthershore import openapi [options] <spec>\n\nScaffold a path-first Business SDK route module from an OpenAPI spec\n\nArguments:\n  spec          Path to an OpenAPI 3.x JSON document\n\nOptions:\n  --out <file>  Write the generated module to this file (default: print to\n                stdout)\n  -h, --help    display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.knowledge",
      "name": "farthershore knowledge",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/knowledge",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore knowledge [options] [command]\n\nList platform and business knowledge resources\n\nOptions:\n  -h, --help                                  display help for command\n\nCommands:\n  list [options]                              List platform guide resources\n  business-list [options] [businessIdOrName]  List one business's knowledge resources\n  help [command]                              display help for command",
      "signature": "Usage: farthershore knowledge [options] [command]\n\nList platform and business knowledge resources\n\nOptions:\n  -h, --help                                  display help for command\n\nCommands:\n  list [options]                              List platform guide resources\n  business-list [options] [businessIdOrName]  List one business's knowledge resources\n  help [command]                              display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.knowledge.business-list",
      "name": "farthershore knowledge business-list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/knowledge",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore knowledge business-list [options] [businessIdOrName]\n\nList one business's knowledge resources\n\nOptions:\n  --cursor <cursor>\n  -h, --help         display help for command",
      "signature": "Usage: farthershore knowledge business-list [options] [businessIdOrName]\n\nList one business's knowledge resources\n\nOptions:\n  --cursor <cursor>\n  -h, --help         display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.knowledge.list",
      "name": "farthershore knowledge list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/knowledge",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore knowledge list [options]\n\nList platform guide resources\n\nOptions:\n  --cursor <cursor>\n  -h, --help         display help for command",
      "signature": "Usage: farthershore knowledge list [options]\n\nList platform guide resources\n\nOptions:\n  --cursor <cursor>\n  -h, --help         display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.limit",
      "name": "farthershore limit",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/limit",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore limit [options] [command]\n\nManage subscriber-owned usage limits with a portal consumer session\n\nOptions:\n  -h, --help                               display help for command\n\nCommands:\n  list [options] <businessId>\n  set [options] <businessId>\n  remove [options] <businessId> <limitId>\n  help [command]                           display help for command",
      "signature": "Usage: farthershore limit [options] [command]\n\nManage subscriber-owned usage limits with a portal consumer session\n\nOptions:\n  -h, --help                               display help for command\n\nCommands:\n  list [options] <businessId>\n  set [options] <businessId>\n  remove [options] <businessId> <limitId>\n  help [command]                           display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.limit.list",
      "name": "farthershore limit list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/limit",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore limit list [options] <businessId>\n\nOptions:\n  --limit <count>                   Maximum rows (1-100; default 100)\n  --offset <count>                  Rows to skip (default 0)\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command",
      "signature": "Usage: farthershore limit list [options] <businessId>\n\nOptions:\n  --limit <count>                   Maximum rows (1-100; default 100)\n  --offset <count>                  Rows to skip (default 0)\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.limit.remove",
      "name": "farthershore limit remove",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/limit",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore limit remove [options] <businessId> <limitId>\n\nOptions:\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command",
      "signature": "Usage: farthershore limit remove [options] <businessId> <limitId>\n\nOptions:\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.limit.set",
      "name": "farthershore limit set",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/limit",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore limit set [options] <businessId>\n\nOptions:\n  --quantity <key>                  Meter quantity key\n  --mode <mode>                     BLOCK or NOTIFY (required on create)\n  --limit-id <id>                   Existing limit id to update\n  --scope <scope>                   ORG, MEMBER, or SERVICE_ACCOUNT (default:\n                                    \"ORG\")\n  --subject-id <id>                 Membership or service-account id\n  --units <count>                   Unit capacity\n  --cents <count>                   Spend capacity in cents\n  --notify-at <fraction>            Notification threshold fraction\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command",
      "signature": "Usage: farthershore limit set [options] <businessId>\n\nOptions:\n  --quantity <key>                  Meter quantity key\n  --mode <mode>                     BLOCK or NOTIFY (required on create)\n  --limit-id <id>                   Existing limit id to update\n  --scope <scope>                   ORG, MEMBER, or SERVICE_ACCOUNT (default:\n                                    \"ORG\")\n  --subject-id <id>                 Membership or service-account id\n  --units <count>                   Unit capacity\n  --cents <count>                   Spend capacity in cents\n  --notify-at <fraction>            Notification threshold fraction\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.link",
      "name": "farthershore link",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/link",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore link [options] [business]\n\nTarget this directory at a business so later commands can omit it (like `railway\nlink`). Omit the argument to show what is currently targeted.\n\nArguments:\n  business             Business id, name, or hostname slug. Omit to show the\n                       current link.\n\nOptions:\n  --env <environment>  Also target an environment, so --env can be omitted too.\n                       Stored by NAME (a recreated preview env re-resolves; a\n                       stale id would not).\n  -h, --help           display help for command",
      "signature": "Usage: farthershore link [options] [business]\n\nTarget this directory at a business so later commands can omit it (like `railway\nlink`). Omit the argument to show what is currently targeted.\n\nArguments:\n  business             Business id, name, or hostname slug. Omit to show the\n                       current link.\n\nOptions:\n  --env <environment>  Also target an environment, so --env can be omitted too.\n                       Stored by NAME (a recreated preview env re-resolves; a\n                       stale id would not).\n  -h, --help           display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.login",
      "name": "farthershore login",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/login",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore login [options]\n\nAuthenticate the CLI without placing credentials in argv\n\nOptions:\n  --token-stdin  Read an organization-scoped MakerToken from piped stdin\n  --headless     Print the verification URL and user code without opening a\n                 browser\n  -h, --help     display help for command",
      "signature": "Usage: farthershore login [options]\n\nAuthenticate the CLI without placing credentials in argv\n\nOptions:\n  --token-stdin  Read an organization-scoped MakerToken from piped stdin\n  --headless     Print the verification URL and user code without opening a\n                 browser\n  -h, --help     display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.logout",
      "name": "farthershore logout",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/logout",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore logout [options]\n\nRevoke the current CLI session and clear stored credentials\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore logout [options]\n\nRevoke the current CLI session and clear stored credentials\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.notifications",
      "name": "farthershore notifications",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/notifications",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore notifications [options] [command]\n\nRead notifications and manage delivery preferences\n\nOptions:\n  -h, --help                                       display help for command\n\nCommands:\n  preferences [businessIdOrSlug]                   Get notification (email) opt-out preferences\n  preferences-update [options] [businessIdOrSlug]  Patch notification (email) opt-out preferences\n  help [command]                                   display help for command",
      "signature": "Usage: farthershore notifications [options] [command]\n\nRead notifications and manage delivery preferences\n\nOptions:\n  -h, --help                                       display help for command\n\nCommands:\n  preferences [businessIdOrSlug]                   Get notification (email) opt-out preferences\n  preferences-update [options] [businessIdOrSlug]  Patch notification (email) opt-out preferences\n  help [command]                                   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.notifications.preferences",
      "name": "farthershore notifications preferences",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/notifications",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore notifications preferences [options] [businessIdOrSlug]\n\nGet notification (email) opt-out preferences\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore notifications preferences [options] [businessIdOrSlug]\n\nGet notification (email) opt-out preferences\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.notifications.preferences-update",
      "name": "farthershore notifications preferences-update",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/notifications",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore notifications preferences-update [options] [businessIdOrSlug]\n\nPatch notification (email) opt-out preferences\n\nOptions:\n  --patch <json>  JSON patch, e.g. {\"master\":true} or\n                  {\"categories\":{\"deployments\":true}} (true = opted out of\n                  email)\n  -h, --help      display help for command",
      "signature": "Usage: farthershore notifications preferences-update [options] [businessIdOrSlug]\n\nPatch notification (email) opt-out preferences\n\nOptions:\n  --patch <json>  JSON patch, e.g. {\"master\":true} or\n                  {\"categories\":{\"deployments\":true}} (true = opted out of\n                  email)\n  -h, --help      display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.operations",
      "name": "farthershore operations",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/operations",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore operations [options] [command]\n\nMachine-readable catalog of repository-owned and platform-operated actions\n\nOptions:\n  -h, --help      display help for command\n\nCommands:\n  list            Print the agent operation boundary catalog\n  help [command]  display help for command",
      "signature": "Usage: farthershore operations [options] [command]\n\nMachine-readable catalog of repository-owned and platform-operated actions\n\nOptions:\n  -h, --help      display help for command\n\nCommands:\n  list            Print the agent operation boundary catalog\n  help [command]  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.operations.list",
      "name": "farthershore operations list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/operations",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore operations list [options]\n\nPrint the agent operation boundary catalog\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore operations list [options]\n\nPrint the agent operation boundary catalog\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization",
      "name": "farthershore organization",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization [options] [command]\n\nManage builder organizations and team membership\n\nOptions:\n  -h, --help                                                      display help for command\n\nCommands:\n  list                                                            List builder organizations available to the caller\n  create [options] <name>                                         Create a team or company organization\n  role\n  members [options] <organizationId>                              List organization members\n  invite [options] <organizationId> <email>                       Invite a member to an organization\n  invitation-list                                                 List the caller's pending organization invitations\n  invitation-list-sent <organizationId>                           List an organization's outstanding sent invitations\n  invitation-revoke [options] <organizationId> <invitationId>     Revoke a pending organization invitation\n  invitation-accept [options] <invitationId>                      Accept an organization invitation\n  member-role [options] <organizationId> <memberUserId>           Change an organization member's role\n  member-remove [options] <organizationId> <memberUserId>         Remove a member from an organization\n  ownership-transfer [options] <organizationId> <newOwnerUserId>  Transfer primary ownership of a team or company organization to another member\n  delete [options] <organizationId>                               Delete an organization and its managed state\n  overview <organizationId>                                       Read the organization overview shown on the dashboard\n  bulletin [options] <organizationId>                             List the consolidated bulletin across the organization\n  help [command]                                                  display help for command",
      "signature": "Usage: farthershore organization [options] [command]\n\nManage builder organizations and team membership\n\nOptions:\n  -h, --help                                                      display help for command\n\nCommands:\n  list                                                            List builder organizations available to the caller\n  create [options] <name>                                         Create a team or company organization\n  role\n  members [options] <organizationId>                              List organization members\n  invite [options] <organizationId> <email>                       Invite a member to an organization\n  invitation-list                                                 List the caller's pending organization invitations\n  invitation-list-sent <organizationId>                           List an organization's outstanding sent invitations\n  invitation-revoke [options] <organizationId> <invitationId>     Revoke a pending organization invitation\n  invitation-accept [options] <invitationId>                      Accept an organization invitation\n  member-role [options] <organizationId> <memberUserId>           Change an organization member's role\n  member-remove [options] <organizationId> <memberUserId>         Remove a member from an organization\n  ownership-transfer [options] <organizationId> <newOwnerUserId>  Transfer primary ownership of a team or company organization to another member\n  delete [options] <organizationId>                               Delete an organization and its managed state\n  overview <organizationId>                                       Read the organization overview shown on the dashboard\n  bulletin [options] <organizationId>                             List the consolidated bulletin across the organization\n  help [command]                                                  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.bulletin",
      "name": "farthershore organization bulletin",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization bulletin [options] <organizationId>\n\nList the consolidated bulletin across the organization\n\nOptions:\n  --kind <kind>\n  --status <status>\n  --cursor <cursor>\n  --limit <count>\n  -h, --help         display help for command",
      "signature": "Usage: farthershore organization bulletin [options] <organizationId>\n\nList the consolidated bulletin across the organization\n\nOptions:\n  --kind <kind>\n  --status <status>\n  --cursor <cursor>\n  --limit <count>\n  -h, --help         display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.create",
      "name": "farthershore organization create",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization create [options] <name>\n\nCreate a team or company organization\n\nOptions:\n  --type <type>            Organization type: team | company (default: \"team\")\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore organization create [options] <name>\n\nCreate a team or company organization\n\nOptions:\n  --type <type>            Organization type: team | company (default: \"team\")\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.delete",
      "name": "farthershore organization delete",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization delete [options] <organizationId>\n\nDelete an organization and its managed state\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command",
      "signature": "Usage: farthershore organization delete [options] <organizationId>\n\nDelete an organization and its managed state\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.invitation-accept",
      "name": "farthershore organization invitation-accept",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization invitation-accept [options] <invitationId>\n\nAccept an organization invitation\n\nOptions:\n  --invitation-token <token>  One-time token from the invitation email, when\n                              required.\n  -h, --help                  display help for command",
      "signature": "Usage: farthershore organization invitation-accept [options] <invitationId>\n\nAccept an organization invitation\n\nOptions:\n  --invitation-token <token>  One-time token from the invitation email, when\n                              required.\n  -h, --help                  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.invitation-list",
      "name": "farthershore organization invitation-list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization invitation-list [options]\n\nList the caller's pending organization invitations\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore organization invitation-list [options]\n\nList the caller's pending organization invitations\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.invitation-list-sent",
      "name": "farthershore organization invitation-list-sent",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization invitation-list-sent [options] <organizationId>\n\nList an organization's outstanding sent invitations\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore organization invitation-list-sent [options] <organizationId>\n\nList an organization's outstanding sent invitations\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.invitation-revoke",
      "name": "farthershore organization invitation-revoke",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization invitation-revoke [options] <organizationId> <invitationId>\n\nRevoke a pending organization invitation\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command",
      "signature": "Usage: farthershore organization invitation-revoke [options] <organizationId> <invitationId>\n\nRevoke a pending organization invitation\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.invite",
      "name": "farthershore organization invite",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization invite [options] <organizationId> <email>\n\nInvite a member to an organization\n\nOptions:\n  --role <role>            Organization role key (see `organization role list`).\n                           (default: \"member\")\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore organization invite [options] <organizationId> <email>\n\nInvite a member to an organization\n\nOptions:\n  --role <role>            Organization role key (see `organization role list`).\n                           (default: \"member\")\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.list",
      "name": "farthershore organization list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization list [options]\n\nList builder organizations available to the caller\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore organization list [options]\n\nList builder organizations available to the caller\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.member-remove",
      "name": "farthershore organization member-remove",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization member-remove [options] <organizationId> <memberUserId>\n\nRemove a member from an organization\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command",
      "signature": "Usage: farthershore organization member-remove [options] <organizationId> <memberUserId>\n\nRemove a member from an organization\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.member-role",
      "name": "farthershore organization member-role",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization member-role [options] <organizationId> <memberUserId>\n\nChange an organization member's role\n\nOptions:\n  --role <role>  New organization role key (see `organization role list`).\n  -h, --help     display help for command",
      "signature": "Usage: farthershore organization member-role [options] <organizationId> <memberUserId>\n\nChange an organization member's role\n\nOptions:\n  --role <role>  New organization role key (see `organization role list`).\n  -h, --help     display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.members",
      "name": "farthershore organization members",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization members [options] <organizationId>\n\nList organization members\n\nOptions:\n  --filter <field=value>     Exact field filter; repeat for AND. Fields: userId,\n                             email, roleKey. (default: [])\n  --sort <field[:asc|desc]>  Server-side sort (default asc). Fields: userId,\n                             email, roleKey, createdAt, updatedAt.\n  --search <text>            Server-side case-insensitive text search.\n  -h, --help                 display help for command",
      "signature": "Usage: farthershore organization members [options] <organizationId>\n\nList organization members\n\nOptions:\n  --filter <field=value>     Exact field filter; repeat for AND. Fields: userId,\n                             email, roleKey. (default: [])\n  --sort <field[:asc|desc]>  Server-side sort (default asc). Fields: userId,\n                             email, roleKey, createdAt, updatedAt.\n  --search <text>            Server-side case-insensitive text search.\n  -h, --help                 display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.overview",
      "name": "farthershore organization overview",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization overview [options] <organizationId>\n\nRead the organization overview shown on the dashboard\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore organization overview [options] <organizationId>\n\nRead the organization overview shown on the dashboard\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.ownership-transfer",
      "name": "farthershore organization ownership-transfer",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization ownership-transfer [options] <organizationId> <newOwnerUserId>\n\nTransfer primary ownership of a team or company organization to another member\n\nOptions:\n  --yes                    Skip confirmation; required for this destructive\n                           action\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore organization ownership-transfer [options] <organizationId> <newOwnerUserId>\n\nTransfer primary ownership of a team or company organization to another member\n\nOptions:\n  --yes                    Skip confirmation; required for this destructive\n                           action\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.role",
      "name": "farthershore organization role",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization role [options] [command]\n\nOptions:\n  -h, --help                                   display help for command\n\nCommands:\n  list [options] <organizationId>              List the roles available in an organization\n  show <organizationId> <roleKey>              Show one organization role and its exact permissions\n  create [options] <organizationId> <roleKey>  Create a custom organization role\n  update [options] <organizationId> <roleKey>  Update a built-in or custom organization role\n  delete [options] <organizationId> <roleKey>  Delete an unused custom organization role\n  help [command]                               display help for command",
      "signature": "Usage: farthershore organization role [options] [command]\n\nOptions:\n  -h, --help                                   display help for command\n\nCommands:\n  list [options] <organizationId>              List the roles available in an organization\n  show <organizationId> <roleKey>              Show one organization role and its exact permissions\n  create [options] <organizationId> <roleKey>  Create a custom organization role\n  update [options] <organizationId> <roleKey>  Update a built-in or custom organization role\n  delete [options] <organizationId> <roleKey>  Delete an unused custom organization role\n  help [command]                               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.role.create",
      "name": "farthershore organization role create",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization role create [options] <organizationId> <roleKey>\n\nCreate a custom organization role\n\nOptions:\n  --name <name>\n  --description <description>\n  --permissions <json>         Exact permission snapshot as JSON, for example\n                               [\"business:read\"]. Use [] for no permissions.\n  --idempotency-key <key>      Required for this mutation. Generate it once and\n                               reuse the exact value on retry.\n  -h, --help                   display help for command",
      "signature": "Usage: farthershore organization role create [options] <organizationId> <roleKey>\n\nCreate a custom organization role\n\nOptions:\n  --name <name>\n  --description <description>\n  --permissions <json>         Exact permission snapshot as JSON, for example\n                               [\"business:read\"]. Use [] for no permissions.\n  --idempotency-key <key>      Required for this mutation. Generate it once and\n                               reuse the exact value on retry.\n  -h, --help                   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.role.delete",
      "name": "farthershore organization role delete",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization role delete [options] <organizationId> <roleKey>\n\nDelete an unused custom organization role\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command",
      "signature": "Usage: farthershore organization role delete [options] <organizationId> <roleKey>\n\nDelete an unused custom organization role\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.role.list",
      "name": "farthershore organization role list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization role list [options] <organizationId>\n\nList the roles available in an organization\n\nOptions:\n  --filter <field=value>     Exact field filter; repeat for AND. Fields: key,\n                             name, builtIn. (default: [])\n  --sort <field[:asc|desc]>  Server-side sort (default asc). Fields: key, name,\n                             createdAt, id.\n  --search <text>            Server-side case-insensitive text search.\n  -h, --help                 display help for command",
      "signature": "Usage: farthershore organization role list [options] <organizationId>\n\nList the roles available in an organization\n\nOptions:\n  --filter <field=value>     Exact field filter; repeat for AND. Fields: key,\n                             name, builtIn. (default: [])\n  --sort <field[:asc|desc]>  Server-side sort (default asc). Fields: key, name,\n                             createdAt, id.\n  --search <text>            Server-side case-insensitive text search.\n  -h, --help                 display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.role.show",
      "name": "farthershore organization role show",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization role show [options] <organizationId> <roleKey>\n\nShow one organization role and its exact permissions\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore organization role show [options] <organizationId> <roleKey>\n\nShow one organization role and its exact permissions\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.organization.role.update",
      "name": "farthershore organization role update",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/organization",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore organization role update [options] <organizationId> <roleKey>\n\nUpdate a built-in or custom organization role\n\nOptions:\n  --name <name>\n  --description <description>\n  --clear-description          Clear the role description.\n  --permissions <json>         Exact permission snapshot as JSON, for example\n                               [\"business:read\"]. Use [] for no permissions.\n  -h, --help                   display help for command",
      "signature": "Usage: farthershore organization role update [options] <organizationId> <roleKey>\n\nUpdate a built-in or custom organization role\n\nOptions:\n  --name <name>\n  --description <description>\n  --clear-description          Clear the role description.\n  --permissions <json>         Exact permission snapshot as JSON, for example\n                               [\"business:read\"]. Use [] for no permissions.\n  -h, --help                   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.persona",
      "name": "farthershore persona",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/persona",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore persona [options] [command]\n\nMint and manage test-env personas (test API keys)\n\nOptions:\n  -h, --help                                       display help for command\n\nCommands:\n  bootstrap [options] [businessIdOrName]           Issue a fresh fsk_test_ API key in a test environment\n  list [options] [businessIdOrName]                List personas for a test environment\n  login [options] [businessIdOrName] [personaId]   Open a browser signed in as a test persona\n  rotate [options] [businessIdOrName] [personaId]  Rotate a persona's test API key and return the new key once\n  delete [options] [businessIdOrName] [personaId]  Delete a temporary persona and its test-owned identity state\n  help [command]                                   display help for command",
      "signature": "Usage: farthershore persona [options] [command]\n\nMint and manage test-env personas (test API keys)\n\nOptions:\n  -h, --help                                       display help for command\n\nCommands:\n  bootstrap [options] [businessIdOrName]           Issue a fresh fsk_test_ API key in a test environment\n  list [options] [businessIdOrName]                List personas for a test environment\n  login [options] [businessIdOrName] [personaId]   Open a browser signed in as a test persona\n  rotate [options] [businessIdOrName] [personaId]  Rotate a persona's test API key and return the new key once\n  delete [options] [businessIdOrName] [personaId]  Delete a temporary persona and its test-owned identity state\n  help [command]                                   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.persona.bootstrap",
      "name": "farthershore persona bootstrap",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/persona",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore persona bootstrap [options] [businessIdOrName]\n\nIssue a fresh fsk_test_ API key in a test environment\n\nOptions:\n  --env <env>              Environment name (must be test-strategy)\n  --plan <planKey>         Plan key to assign (required when creating a\n                           subscriber; e.g. starter)\n  --display-name <name>    Persona display name\n  --subscriber-id <id>     Join an existing persona test subscriber; omit to\n                           create a new subscriber owned by this persona\n  --account-role <role>    Subscriber-organization account role: owner, admin,\n                           or member — the canonical lowercase vocabulary\n                           (stored as Membership.role OWNER/ADMIN/VIEWER, where\n                           member ⇢ VIEWER). Default: owner for a new\n                           subscriber, member when joining\n  --role <role...>         Subscriber-owned product role key(s); omit to use the\n                           subscriber's configured default role\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore persona bootstrap [options] [businessIdOrName]\n\nIssue a fresh fsk_test_ API key in a test environment\n\nOptions:\n  --env <env>              Environment name (must be test-strategy)\n  --plan <planKey>         Plan key to assign (required when creating a\n                           subscriber; e.g. starter)\n  --display-name <name>    Persona display name\n  --subscriber-id <id>     Join an existing persona test subscriber; omit to\n                           create a new subscriber owned by this persona\n  --account-role <role>    Subscriber-organization account role: owner, admin,\n                           or member — the canonical lowercase vocabulary\n                           (stored as Membership.role OWNER/ADMIN/VIEWER, where\n                           member ⇢ VIEWER). Default: owner for a new\n                           subscriber, member when joining\n  --role <role...>         Subscriber-owned product role key(s); omit to use the\n                           subscriber's configured default role\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.persona.delete",
      "name": "farthershore persona delete",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/persona",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore persona delete [options] [businessIdOrName] <personaId>\n\nDelete a temporary persona and its test-owned identity state\n\nOptions:\n  --env <env>  Environment name\n  -h, --help   display help for command",
      "signature": "Usage: farthershore persona delete [options] [businessIdOrName] <personaId>\n\nDelete a temporary persona and its test-owned identity state\n\nOptions:\n  --env <env>  Environment name\n  -h, --help   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.persona.list",
      "name": "farthershore persona list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/persona",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore persona list [options] [businessIdOrName]\n\nList personas for a test environment\n\nOptions:\n  --env <env>  Environment name\n  -h, --help   display help for command",
      "signature": "Usage: farthershore persona list [options] [businessIdOrName]\n\nList personas for a test environment\n\nOptions:\n  --env <env>  Environment name\n  -h, --help   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.persona.login",
      "name": "farthershore persona login",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/persona",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore persona login [options] [businessIdOrName] <personaId>\n\nOpen a browser signed in as a test persona\n\nOptions:\n  --env <env>  Environment name\n  -h, --help   display help for command",
      "signature": "Usage: farthershore persona login [options] [businessIdOrName] <personaId>\n\nOpen a browser signed in as a test persona\n\nOptions:\n  --env <env>  Environment name\n  -h, --help   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.persona.rotate",
      "name": "farthershore persona rotate",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/persona",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore persona rotate [options] [businessIdOrName] <personaId>\n\nRotate a persona's test API key and return the new key once\n\nOptions:\n  --env <env>              Environment name\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore persona rotate [options] [businessIdOrName] <personaId>\n\nRotate a persona's test API key and return the new key once\n\nOptions:\n  --env <env>              Environment name\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.plan",
      "name": "farthershore plan",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/plan",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore plan [options] [command]\n\nPlan operations: list code-managed plans and migrate subscribers\n\nOptions:\n  -h, --help                         display help for command\n\nCommands:\n  list [options] [businessIdOrName]  List plans for a business\n  help [command]                     display help for command",
      "signature": "Usage: farthershore plan [options] [command]\n\nPlan operations: list code-managed plans and migrate subscribers\n\nOptions:\n  -h, --help                         display help for command\n\nCommands:\n  list [options] [businessIdOrName]  List plans for a business\n  help [command]                     display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.plan.list",
      "name": "farthershore plan list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/plan",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore plan list [options] [businessIdOrName]\n\nList plans for a business\n\nOptions:\n  --env <environment>  List the plans this environment serves (name or id). Omit\n                       for production.\n  -h, --help           display help for command\n\nScope:\n  Without --env this lists the PRODUCTION plans. A preview environment serves\n  its own compiled program, so pass --env <name|id> to see what that\n  environment actually serves.\n\nOutput:\n  --format json  — stable agent-friendly JSON envelope (default for non-TTY)\n  --format table — human-readable summary table (default for TTY)",
      "signature": "Usage: farthershore plan list [options] [businessIdOrName]\n\nList plans for a business\n\nOptions:\n  --env <environment>  List the plans this environment serves (name or id). Omit\n                       for production.\n  -h, --help           display help for command\n\nScope:\n  Without --env this lists the PRODUCTION plans. A preview environment serves\n  its own compiled program, so pass --env <name|id> to see what that\n  environment actually serves.\n\nOutput:\n  --format json  — stable agent-friendly JSON envelope (default for non-TTY)\n  --format table — human-readable summary table (default for TTY)\n\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.promo-code",
      "name": "farthershore promo-code",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/promo-code",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore promo-code [options] [command]\n\nManage API-controlled checkout promo codes\n\nOptions:\n  -h, --help                                         display help for command\n\nCommands:\n  list [businessIdOrSlug]                            List API-managed promo codes for checkout\n  create [options] [businessIdOrSlug]                Create an API-managed checkout promo code\n  update [options] [businessIdOrSlug] [promoCodeId]  Update an API-managed checkout promo code\n  archive [businessIdOrSlug] [promoCodeId]           Archive a checkout promo code\n  reactivate [businessIdOrSlug] [promoCodeId]        Reactivate an archived checkout promo code\n  help [command]                                     display help for command",
      "signature": "Usage: farthershore promo-code [options] [command]\n\nManage API-controlled checkout promo codes\n\nOptions:\n  -h, --help                                         display help for command\n\nCommands:\n  list [businessIdOrSlug]                            List API-managed promo codes for checkout\n  create [options] [businessIdOrSlug]                Create an API-managed checkout promo code\n  update [options] [businessIdOrSlug] [promoCodeId]  Update an API-managed checkout promo code\n  archive [businessIdOrSlug] [promoCodeId]           Archive a checkout promo code\n  reactivate [businessIdOrSlug] [promoCodeId]        Reactivate an archived checkout promo code\n  help [command]                                     display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.promo-code.archive",
      "name": "farthershore promo-code archive",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/promo-code",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore promo-code archive [options] [businessIdOrSlug] <promoCodeId>\n\nArchive a checkout promo code\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore promo-code archive [options] [businessIdOrSlug] <promoCodeId>\n\nArchive a checkout promo code\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.promo-code.create",
      "name": "farthershore promo-code create",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/promo-code",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore promo-code create [options] [businessIdOrSlug]\n\nCreate an API-managed checkout promo code\n\nOptions:\n  --code <code>            Customer-entered promo code.\n  --kind <kind>            percent_off, amount_off, or free_months.\n  --percent <n>            Percent discount for percent_off promos.\n  --amount-cents <cents>   Fixed discount in cents for amount_off promos.\n  --duration-months <n>    Discount duration in months.\n  --max-redemptions <n>    Optional maximum redemption count.\n  --active-from <iso>      Optional ISO-8601 activation timestamp.\n  --active-until <iso>     Optional ISO-8601 expiration timestamp.\n  --plan <planId>          Limit to a plan id. Repeatable. Omit for all launch\n                           plans; use --all-plans on update to clear scoped\n                           plans. (default: [])\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore promo-code create [options] [businessIdOrSlug]\n\nCreate an API-managed checkout promo code\n\nOptions:\n  --code <code>            Customer-entered promo code.\n  --kind <kind>            percent_off, amount_off, or free_months.\n  --percent <n>            Percent discount for percent_off promos.\n  --amount-cents <cents>   Fixed discount in cents for amount_off promos.\n  --duration-months <n>    Discount duration in months.\n  --max-redemptions <n>    Optional maximum redemption count.\n  --active-from <iso>      Optional ISO-8601 activation timestamp.\n  --active-until <iso>     Optional ISO-8601 expiration timestamp.\n  --plan <planId>          Limit to a plan id. Repeatable. Omit for all launch\n                           plans; use --all-plans on update to clear scoped\n                           plans. (default: [])\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.promo-code.list",
      "name": "farthershore promo-code list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/promo-code",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore promo-code list [options] [businessIdOrSlug]\n\nList API-managed promo codes for checkout\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore promo-code list [options] [businessIdOrSlug]\n\nList API-managed promo codes for checkout\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.promo-code.reactivate",
      "name": "farthershore promo-code reactivate",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/promo-code",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore promo-code reactivate [options] [businessIdOrSlug] <promoCodeId>\n\nReactivate an archived checkout promo code\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore promo-code reactivate [options] [businessIdOrSlug] <promoCodeId>\n\nReactivate an archived checkout promo code\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.promo-code.update",
      "name": "farthershore promo-code update",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/promo-code",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore promo-code update [options] [businessIdOrSlug] <promoCodeId>\n\nUpdate an API-managed checkout promo code\n\nOptions:\n  --code <code>            Replacement customer-entered promo code.\n  --kind <kind>            percent_off, amount_off, or free_months.\n  --percent <n>            Percent discount for percent_off promos.\n  --amount-cents <cents>   Fixed discount in cents for amount_off promos.\n  --duration-months <n>    Discount duration in months.\n  --max-redemptions <n>    Set maximum redemption count.\n  --clear-max-redemptions  Clear the maximum redemption count.\n  --active-from <iso>      Set ISO-8601 activation timestamp.\n  --clear-active-from      Clear activation timestamp.\n  --active-until <iso>     Set ISO-8601 expiration timestamp.\n  --clear-active-until     Clear expiration timestamp.\n  --plan <planId>          Limit to a plan id. Repeatable. Omit for all launch\n                           plans; use --all-plans on update to clear scoped\n                           plans. (default: [])\n  --all-plans              Clear plan scoping so the promo applies to all launch\n                           plans.\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore promo-code update [options] [businessIdOrSlug] <promoCodeId>\n\nUpdate an API-managed checkout promo code\n\nOptions:\n  --code <code>            Replacement customer-entered promo code.\n  --kind <kind>            percent_off, amount_off, or free_months.\n  --percent <n>            Percent discount for percent_off promos.\n  --amount-cents <cents>   Fixed discount in cents for amount_off promos.\n  --duration-months <n>    Discount duration in months.\n  --max-redemptions <n>    Set maximum redemption count.\n  --clear-max-redemptions  Clear the maximum redemption count.\n  --active-from <iso>      Set ISO-8601 activation timestamp.\n  --clear-active-from      Clear activation timestamp.\n  --active-until <iso>     Set ISO-8601 expiration timestamp.\n  --clear-active-until     Clear expiration timestamp.\n  --plan <planId>          Limit to a plan id. Repeatable. Omit for all launch\n                           plans; use --all-plans on update to clear scoped\n                           plans. (default: [])\n  --all-plans              Clear plan scoping so the promo applies to all launch\n                           plans.\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.proposal",
      "name": "farthershore proposal",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/proposal",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore proposal [options] [command]\n\nOptions:\n  -h, --help                                                         display help for command\n\nCommands:\n  create [options] [businessIdOrSlug] [subscriberId]                 Propose a governed ChangeSet against a subscriber (agent/builder proposer; a human approves + applies in the portal)\n  preview [options] [businessIdOrSlug] [subscriberId] [changeSetId]  Simulate + store a preview on a proposed ChangeSet (rides the propose authority)\n  list [options] [businessIdOrSlug] [subscriberId]                   List governed ChangeSets proposed against a subscriber\n  get [options] [businessIdOrSlug] [subscriberId] [changeSetId]      Read one governed ChangeSet proposed against a subscriber\n  help [command]                                                     display help for command",
      "signature": "Usage: farthershore proposal [options] [command]\n\nOptions:\n  -h, --help                                                         display help for command\n\nCommands:\n  create [options] [businessIdOrSlug] [subscriberId]                 Propose a governed ChangeSet against a subscriber (agent/builder proposer; a human approves + applies in the portal)\n  preview [options] [businessIdOrSlug] [subscriberId] [changeSetId]  Simulate + store a preview on a proposed ChangeSet (rides the propose authority)\n  list [options] [businessIdOrSlug] [subscriberId]                   List governed ChangeSets proposed against a subscriber\n  get [options] [businessIdOrSlug] [subscriberId] [changeSetId]      Read one governed ChangeSet proposed against a subscriber\n  help [command]                                                     display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.proposal.create",
      "name": "farthershore proposal create",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/proposal",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore proposal create [options] [businessIdOrSlug] <subscriberId>\n\nPropose a governed ChangeSet against a subscriber (agent/builder proposer; a\nhuman approves + applies in the portal)\n\nOptions:\n  --intent <intent>        Human-readable description of the proposed change.\n  --operations <json>      JSON array of governed operations (e.g.\n                           update_role_permissions).\n  --env <env>              Environment name/id to scope the proposal to.\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  --dry-run                Preview the change without applying it.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore proposal create [options] [businessIdOrSlug] <subscriberId>\n\nPropose a governed ChangeSet against a subscriber (agent/builder proposer; a\nhuman approves + applies in the portal)\n\nOptions:\n  --intent <intent>        Human-readable description of the proposed change.\n  --operations <json>      JSON array of governed operations (e.g.\n                           update_role_permissions).\n  --env <env>              Environment name/id to scope the proposal to.\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  --dry-run                Preview the change without applying it.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.proposal.get",
      "name": "farthershore proposal get",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/proposal",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore proposal get [options] [businessIdOrSlug] <subscriberId> <changeSetId>\n\nRead one governed ChangeSet proposed against a subscriber\n\nOptions:\n  --env <env>  Environment name/id to scope the proposal to.\n  -h, --help   display help for command",
      "signature": "Usage: farthershore proposal get [options] [businessIdOrSlug] <subscriberId> <changeSetId>\n\nRead one governed ChangeSet proposed against a subscriber\n\nOptions:\n  --env <env>  Environment name/id to scope the proposal to.\n  -h, --help   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.proposal.list",
      "name": "farthershore proposal list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/proposal",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore proposal list [options] [businessIdOrSlug] <subscriberId>\n\nList governed ChangeSets proposed against a subscriber\n\nOptions:\n  --status <status>  Filter by status (e.g. draft, approval_required).\n  --env <env>        Environment name/id to scope the proposal to.\n  -h, --help         display help for command",
      "signature": "Usage: farthershore proposal list [options] [businessIdOrSlug] <subscriberId>\n\nList governed ChangeSets proposed against a subscriber\n\nOptions:\n  --status <status>  Filter by status (e.g. draft, approval_required).\n  --env <env>        Environment name/id to scope the proposal to.\n  -h, --help         display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.proposal.preview",
      "name": "farthershore proposal preview",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/proposal",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore proposal preview [options] [businessIdOrSlug] <subscriberId> <changeSetId>\n\nSimulate + store a preview on a proposed ChangeSet (rides the propose authority)\n\nOptions:\n  --env <env>  Environment name/id to scope the proposal to.\n  -h, --help   display help for command",
      "signature": "Usage: farthershore proposal preview [options] [businessIdOrSlug] <subscriberId> <changeSetId>\n\nSimulate + store a preview on a proposed ChangeSet (rides the propose authority)\n\nOptions:\n  --env <env>  Environment name/id to scope the proposal to.\n  -h, --help   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.resource-count",
      "name": "farthershore resource-count",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/resource-count",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore resource-count [options] [command]\n\nReport subscription resource counts\n\nOptions:\n  -h, --help                                      display help for command\n\nCommands:\n  report [options] [businessIdOrName] [resource]  Report a subscription resource count\n  help [command]                                  display help for command",
      "signature": "Usage: farthershore resource-count [options] [command]\n\nReport subscription resource counts\n\nOptions:\n  -h, --help                                      display help for command\n\nCommands:\n  report [options] [businessIdOrName] [resource]  Report a subscription resource count\n  help [command]                                  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.resource-count.report",
      "name": "farthershore resource-count report",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/resource-count",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore resource-count report [options] [businessIdOrName] <resource>\n\nReport a subscription resource count\n\nOptions:\n  --subscription <id>\n  --count <count>\n  --environment <id>\n  -h, --help           display help for command",
      "signature": "Usage: farthershore resource-count report [options] [businessIdOrName] <resource>\n\nReport a subscription resource count\n\nOptions:\n  --subscription <id>\n  --count <count>\n  --environment <id>\n  -h, --help           display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.service-account",
      "name": "farthershore service-account",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/service-account",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore service-account [options] [command]\n\nManage subscriber-owned service accounts using an ephemeral portal consumer\nsession\n\nOptions:\n  -h, --help                                        display help for command\n\nCommands:\n  list [options] <businessId>                       List managed service accounts and pending changes\n  create [options] <businessId> <name>              Create or request approval for a managed service account\n  update [options] <businessId> <serviceAccountId>  Replace a service account's grants or request approval for the change\n  approvals [options] <businessId>                  List pending managed service-account approval requests\n  approve [options] <businessId> <approvalId>       Approve a service-account request, optionally trimming its grants\n  deny [options] <businessId> <approvalId>          Deny a managed service-account approval request\n  rotate [options] <businessId> <serviceAccountId>  Rotate a service account and reveal its replacement key once\n  revoke [options] <businessId> <serviceAccountId>  Permanently revoke a service account and all active keys\n  help [command]                                    display help for command",
      "signature": "Usage: farthershore service-account [options] [command]\n\nManage subscriber-owned service accounts using an ephemeral portal consumer\nsession\n\nOptions:\n  -h, --help                                        display help for command\n\nCommands:\n  list [options] <businessId>                       List managed service accounts and pending changes\n  create [options] <businessId> <name>              Create or request approval for a managed service account\n  update [options] <businessId> <serviceAccountId>  Replace a service account's grants or request approval for the change\n  approvals [options] <businessId>                  List pending managed service-account approval requests\n  approve [options] <businessId> <approvalId>       Approve a service-account request, optionally trimming its grants\n  deny [options] <businessId> <approvalId>          Deny a managed service-account approval request\n  rotate [options] <businessId> <serviceAccountId>  Rotate a service account and reveal its replacement key once\n  revoke [options] <businessId> <serviceAccountId>  Permanently revoke a service account and all active keys\n  help [command]                                    display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.service-account.approvals",
      "name": "farthershore service-account approvals",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/service-account",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore service-account approvals [options] <businessId>\n\nList pending managed service-account approval requests\n\nOptions:\n  --limit <count>                   Maximum rows (1-100; default 100)\n  --offset <count>                  Rows to skip (default 0)\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command",
      "signature": "Usage: farthershore service-account approvals [options] <businessId>\n\nList pending managed service-account approval requests\n\nOptions:\n  --limit <count>                   Maximum rows (1-100; default 100)\n  --offset <count>                  Rows to skip (default 0)\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.service-account.approve",
      "name": "farthershore service-account approve",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/service-account",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore service-account approve [options] <businessId> <approvalId>\n\nApprove a service-account request, optionally trimming its grants\n\nOptions:\n  --permissions <json>              Optional approved subset. Omit to approve\n                                    the complete request.\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command",
      "signature": "Usage: farthershore service-account approve [options] <businessId> <approvalId>\n\nApprove a service-account request, optionally trimming its grants\n\nOptions:\n  --permissions <json>              Optional approved subset. Omit to approve\n                                    the complete request.\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.service-account.create",
      "name": "farthershore service-account create",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/service-account",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore service-account create [options] <businessId> <name>\n\nCreate or request approval for a managed service account\n\nOptions:\n  --permissions <json>              Exact permission set, for example\n                                    [\"route:read\"].\n  --scopes <json>                   Optional exact scope strings as a JSON\n                                    array.\n  --idempotency-key <key>           Stable replay key. Reuse the same value when\n                                    retrying this provisioning request.\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command",
      "signature": "Usage: farthershore service-account create [options] <businessId> <name>\n\nCreate or request approval for a managed service account\n\nOptions:\n  --permissions <json>              Exact permission set, for example\n                                    [\"route:read\"].\n  --scopes <json>                   Optional exact scope strings as a JSON\n                                    array.\n  --idempotency-key <key>           Stable replay key. Reuse the same value when\n                                    retrying this provisioning request.\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.service-account.deny",
      "name": "farthershore service-account deny",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/service-account",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore service-account deny [options] <businessId> <approvalId>\n\nDeny a managed service-account approval request\n\nOptions:\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command",
      "signature": "Usage: farthershore service-account deny [options] <businessId> <approvalId>\n\nDeny a managed service-account approval request\n\nOptions:\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.service-account.list",
      "name": "farthershore service-account list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/service-account",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore service-account list [options] <businessId>\n\nList managed service accounts and pending changes\n\nOptions:\n  --limit <count>                   Maximum rows (1-100; default 100)\n  --offset <count>                  Rows to skip (default 0)\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command",
      "signature": "Usage: farthershore service-account list [options] <businessId>\n\nList managed service accounts and pending changes\n\nOptions:\n  --limit <count>                   Maximum rows (1-100; default 100)\n  --offset <count>                  Rows to skip (default 0)\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.service-account.revoke",
      "name": "farthershore service-account revoke",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/service-account",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore service-account revoke [options] <businessId> <serviceAccountId>\n\nPermanently revoke a service account and all active keys\n\nOptions:\n  --yes                             Confirm the destructive revocation\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command",
      "signature": "Usage: farthershore service-account revoke [options] <businessId> <serviceAccountId>\n\nPermanently revoke a service account and all active keys\n\nOptions:\n  --yes                             Confirm the destructive revocation\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.service-account.rotate",
      "name": "farthershore service-account rotate",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/service-account",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore service-account rotate [options] <businessId> <serviceAccountId>\n\nRotate a service account and reveal its replacement key once\n\nOptions:\n  --idempotency-key <key>           Required live-attempt key. Reuse the exact\n                                    value on retry.\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command",
      "signature": "Usage: farthershore service-account rotate [options] <businessId> <serviceAccountId>\n\nRotate a service account and reveal its replacement key once\n\nOptions:\n  --idempotency-key <key>           Required live-attempt key. Reuse the exact\n                                    value on retry.\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.service-account.update",
      "name": "farthershore service-account update",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/service-account",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore service-account update [options] <businessId> <serviceAccountId>\n\nReplace a service account's grants or request approval for the change\n\nOptions:\n  --permissions <json>              Exact replacement permission set.\n  --idempotency-key <key>           Stable replay key. Reuse the same value when\n                                    retrying this provisioning request.\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command",
      "signature": "Usage: farthershore service-account update [options] <businessId> <serviceAccountId>\n\nReplace a service account's grants or request approval for the change\n\nOptions:\n  --permissions <json>              Exact replacement permission set.\n  --idempotency-key <key>           Stable replay key. Reuse the same value when\n                                    retrying this provisioning request.\n  --environment-id <uuid>           Portal environment UUID (or\n                                    FARTHERSHORE_ENVIRONMENT_ID).\n  --subscriber-organization <uuid>  Subscriber organization UUID (or\n                                    FARTHERSHORE_SUBSCRIBER_ORGANIZATION_ID).\n  -h, --help                        display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.skills",
      "name": "farthershore skills",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/skills",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore skills [options] [command]\n\nManage the platform-verified Farther Shore agent skills\n\nOptions:\n  -h, --help      display help for command\n\nCommands:\n  install         Install the platform-pinned, SHA-512-verified skills release\n  help [command]  display help for command",
      "signature": "Usage: farthershore skills [options] [command]\n\nManage the platform-verified Farther Shore agent skills\n\nOptions:\n  -h, --help      display help for command\n\nCommands:\n  install         Install the platform-pinned, SHA-512-verified skills release\n  help [command]  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.skills.install",
      "name": "farthershore skills install",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/skills",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore skills install [options]\n\nInstall the platform-pinned, SHA-512-verified skills release\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore skills install [options]\n\nInstall the platform-pinned, SHA-512-verified skills release\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.stripe",
      "name": "farthershore stripe",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/stripe",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore stripe [options] [command]\n\nRead a business's Stripe connection and remove a per-business override\n(connecting is browser-only)\n\nOptions:\n  -h, --help                               display help for command\n\nCommands:\n  status [businessIdOrName]                Show the Stripe connection a business bills through (business override or org default)\n  disconnect [options] [businessIdOrName]  Remove a business's per-business Stripe override so it bills through the org default again\n  help [command]                           display help for command",
      "signature": "Usage: farthershore stripe [options] [command]\n\nRead a business's Stripe connection and remove a per-business override\n(connecting is browser-only)\n\nOptions:\n  -h, --help                               display help for command\n\nCommands:\n  status [businessIdOrName]                Show the Stripe connection a business bills through (business override or org default)\n  disconnect [options] [businessIdOrName]  Remove a business's per-business Stripe override so it bills through the org default again\n  help [command]                           display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.stripe.disconnect",
      "name": "farthershore stripe disconnect",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/stripe",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore stripe disconnect [options] [businessIdOrName]\n\nRemove a business's per-business Stripe override so it bills through the org\ndefault again\n\nOptions:\n  --delete-account  Also delete the platform-created Express account at Stripe\n                    (only when it was created for this business).\n  --yes             Skip confirmation; required for this destructive action\n  -h, --help        display help for command",
      "signature": "Usage: farthershore stripe disconnect [options] [businessIdOrName]\n\nRemove a business's per-business Stripe override so it bills through the org\ndefault again\n\nOptions:\n  --delete-account  Also delete the platform-created Express account at Stripe\n                    (only when it was created for this business).\n  --yes             Skip confirmation; required for this destructive action\n  -h, --help        display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.stripe.status",
      "name": "farthershore stripe status",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/stripe",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore stripe status [options] [businessIdOrName]\n\nShow the Stripe connection a business bills through (business override or org\ndefault)\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore stripe status [options] [businessIdOrName]\n\nShow the Stripe connection a business bills through (business override or org\ndefault)\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.tax-settings",
      "name": "farthershore tax-settings",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/tax-settings",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore tax-settings [options] [command]\n\nRead and update Stripe Tax settings for a business\n\nOptions:\n  -h, --help                           display help for command\n\nCommands:\n  show [businessIdOrName]              Show a business's Stripe Tax settings\n  update [options] [businessIdOrName]  Update a business's Stripe Tax settings\n  help [command]                       display help for command",
      "signature": "Usage: farthershore tax-settings [options] [command]\n\nRead and update Stripe Tax settings for a business\n\nOptions:\n  -h, --help                           display help for command\n\nCommands:\n  show [businessIdOrName]              Show a business's Stripe Tax settings\n  update [options] [businessIdOrName]  Update a business's Stripe Tax settings\n  help [command]                       display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.tax-settings.show",
      "name": "farthershore tax-settings show",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/tax-settings",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore tax-settings show [options] [businessIdOrName]\n\nShow a business's Stripe Tax settings\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore tax-settings show [options] [businessIdOrName]\n\nShow a business's Stripe Tax settings\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.tax-settings.update",
      "name": "farthershore tax-settings update",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/tax-settings",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore tax-settings update [options] [businessIdOrName]\n\nUpdate a business's Stripe Tax settings\n\nOptions:\n  --body <json>  Closed request body as a JSON object\n  -h, --help     display help for command",
      "signature": "Usage: farthershore tax-settings update [options] [businessIdOrName]\n\nUpdate a business's Stripe Tax settings\n\nOptions:\n  --body <json>  Closed request body as a JSON object\n  -h, --help     display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.token",
      "name": "farthershore token",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/token",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore token [options] [command]\n\nManage organization-owned MakerTokens (signed-in user CLI sessions only)\n\nOptions:\n  -h, --help                      display help for command\n\nCommands:\n  permission-catalog [options]    List the exact permissions a human may\n                                  delegate to an org MakerToken\n  list [options]                  List organization-owned MakerTokens\n  create [options] <name>         Create or request approval for an\n                                  organization-owned MakerToken\n  update [options] <tokenId>      Replace an org MakerToken's grants or request\n                                  approval for the change\n  approvals [options]             List pending org MakerToken approval requests\n  approve [options] <approvalId>  Approve an org MakerToken request, optionally\n                                  trimming its grants\n  deny [options] <approvalId>     Deny an org MakerToken approval request\n  rotate [options] <tokenId>      Rotate an org MakerToken and reveal its\n                                  replacement once\n  revoke [options] <tokenId>      Permanently revoke an org MakerToken\n  help [command]                  display help for command",
      "signature": "Usage: farthershore token [options] [command]\n\nManage organization-owned MakerTokens (signed-in user CLI sessions only)\n\nOptions:\n  -h, --help                      display help for command\n\nCommands:\n  permission-catalog [options]    List the exact permissions a human may\n                                  delegate to an org MakerToken\n  list [options]                  List organization-owned MakerTokens\n  create [options] <name>         Create or request approval for an\n                                  organization-owned MakerToken\n  update [options] <tokenId>      Replace an org MakerToken's grants or request\n                                  approval for the change\n  approvals [options]             List pending org MakerToken approval requests\n  approve [options] <approvalId>  Approve an org MakerToken request, optionally\n                                  trimming its grants\n  deny [options] <approvalId>     Deny an org MakerToken approval request\n  rotate [options] <tokenId>      Rotate an org MakerToken and reveal its\n                                  replacement once\n  revoke [options] <tokenId>      Permanently revoke an org MakerToken\n  help [command]                  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.token.approvals",
      "name": "farthershore token approvals",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/token",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore token approvals [options]\n\nList pending org MakerToken approval requests\n\nOptions:\n  --org       Administer an organization-owned MakerToken (requires a signed-in\n              user CLI session).\n  -h, --help  display help for command",
      "signature": "Usage: farthershore token approvals [options]\n\nList pending org MakerToken approval requests\n\nOptions:\n  --org       Administer an organization-owned MakerToken (requires a signed-in\n              user CLI session).\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.token.approve",
      "name": "farthershore token approve",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/token",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore token approve [options] <approvalId>\n\nApprove an org MakerToken request, optionally trimming its grants\n\nOptions:\n  --org                    Administer an organization-owned MakerToken (requires\n                           a signed-in user CLI session).\n  --permissions <json>     Exact platform permission set as JSON, for example\n                           [\"business:read\"].\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore token approve [options] <approvalId>\n\nApprove an org MakerToken request, optionally trimming its grants\n\nOptions:\n  --org                    Administer an organization-owned MakerToken (requires\n                           a signed-in user CLI session).\n  --permissions <json>     Exact platform permission set as JSON, for example\n                           [\"business:read\"].\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.token.create",
      "name": "farthershore token create",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/token",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore token create [options] <name>\n\nCreate or request approval for an organization-owned MakerToken\n\nOptions:\n  --org                    Administer an organization-owned MakerToken (requires\n                           a signed-in user CLI session).\n  --permissions <json>     Exact platform permission set as JSON, for example\n                           [\"business:read\"].\n  --idempotency-key <key>  Stable replay key. Reuse the same value when retrying\n                           this provisioning request.\n  --businesses <ids>       Comma-separated business ids. Omit to authorize all\n                           current and future businesses.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore token create [options] <name>\n\nCreate or request approval for an organization-owned MakerToken\n\nOptions:\n  --org                    Administer an organization-owned MakerToken (requires\n                           a signed-in user CLI session).\n  --permissions <json>     Exact platform permission set as JSON, for example\n                           [\"business:read\"].\n  --idempotency-key <key>  Stable replay key. Reuse the same value when retrying\n                           this provisioning request.\n  --businesses <ids>       Comma-separated business ids. Omit to authorize all\n                           current and future businesses.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.token.deny",
      "name": "farthershore token deny",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/token",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore token deny [options] <approvalId>\n\nDeny an org MakerToken approval request\n\nOptions:\n  --org       Administer an organization-owned MakerToken (requires a signed-in\n              user CLI session).\n  -h, --help  display help for command",
      "signature": "Usage: farthershore token deny [options] <approvalId>\n\nDeny an org MakerToken approval request\n\nOptions:\n  --org       Administer an organization-owned MakerToken (requires a signed-in\n              user CLI session).\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.token.list",
      "name": "farthershore token list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/token",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore token list [options]\n\nList organization-owned MakerTokens\n\nOptions:\n  --org             Administer an organization-owned MakerToken (requires a\n                    signed-in user CLI session).\n  --limit <count>   Page size (1-100; default 20).\n  --offset <count>  Row offset for paging (default 0).\n  -h, --help        display help for command",
      "signature": "Usage: farthershore token list [options]\n\nList organization-owned MakerTokens\n\nOptions:\n  --org             Administer an organization-owned MakerToken (requires a\n                    signed-in user CLI session).\n  --limit <count>   Page size (1-100; default 20).\n  --offset <count>  Row offset for paging (default 0).\n  -h, --help        display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.token.permission-catalog",
      "name": "farthershore token permission-catalog",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/token",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore token permission-catalog [options]\n\nList the exact permissions a human may delegate to an org MakerToken\n\nOptions:\n  --org       Administer an organization-owned MakerToken (requires a signed-in\n              user CLI session).\n  -h, --help  display help for command",
      "signature": "Usage: farthershore token permission-catalog [options]\n\nList the exact permissions a human may delegate to an org MakerToken\n\nOptions:\n  --org       Administer an organization-owned MakerToken (requires a signed-in\n              user CLI session).\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.token.revoke",
      "name": "farthershore token revoke",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/token",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore token revoke [options] <tokenId>\n\nPermanently revoke an org MakerToken\n\nOptions:\n  --org       Administer an organization-owned MakerToken (requires a signed-in\n              user CLI session).\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command",
      "signature": "Usage: farthershore token revoke [options] <tokenId>\n\nPermanently revoke an org MakerToken\n\nOptions:\n  --org       Administer an organization-owned MakerToken (requires a signed-in\n              user CLI session).\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.token.rotate",
      "name": "farthershore token rotate",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/token",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore token rotate [options] <tokenId>\n\nRotate an org MakerToken and reveal its replacement once\n\nOptions:\n  --org                    Administer an organization-owned MakerToken (requires\n                           a signed-in user CLI session).\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore token rotate [options] <tokenId>\n\nRotate an org MakerToken and reveal its replacement once\n\nOptions:\n  --org                    Administer an organization-owned MakerToken (requires\n                           a signed-in user CLI session).\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.token.update",
      "name": "farthershore token update",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/token",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore token update [options] <tokenId>\n\nReplace an org MakerToken's grants or request approval for the change\n\nOptions:\n  --org                    Administer an organization-owned MakerToken (requires\n                           a signed-in user CLI session).\n  --permissions <json>     Exact platform permission set as JSON, for example\n                           [\"business:read\"].\n  --idempotency-key <key>  Stable replay key. Reuse the same value when retrying\n                           this provisioning request.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore token update [options] <tokenId>\n\nReplace an org MakerToken's grants or request approval for the change\n\nOptions:\n  --org                    Administer an organization-owned MakerToken (requires\n                           a signed-in user CLI session).\n  --permissions <json>     Exact platform permission set as JSON, for example\n                           [\"business:read\"].\n  --idempotency-key <key>  Stable replay key. Reuse the same value when retrying\n                           this provisioning request.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.unlink",
      "name": "farthershore unlink",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/unlink",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore unlink [options]\n\nStop targeting a business from this directory.\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore unlink [options]\n\nStop targeting a business from this directory.\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.usage",
      "name": "farthershore usage",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/usage",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore usage [options] [command]\n\nUsage observability for a business\n\nOptions:\n  -h, --help                            display help for command\n\nCommands:\n  summary [options] [businessIdOrName]  Show usage summary for the last 30 days\n  help [command]                        display help for command",
      "signature": "Usage: farthershore usage [options] [command]\n\nUsage observability for a business\n\nOptions:\n  -h, --help                            display help for command\n\nCommands:\n  summary [options] [businessIdOrName]  Show usage summary for the last 30 days\n  help [command]                        display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.usage.summary",
      "name": "farthershore usage summary",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/usage",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore usage summary [options] [businessIdOrName]\n\nShow usage summary for the last 30 days\n\nOptions:\n  --env <environment>  Narrow the summary to one environment (name or id). Omit\n                       for the product-wide rollup.\n  -h, --help           display help for command\n\nScope:\n  Without --env this rolls up usage across EVERY environment, so a preview\n  environment's traffic is mixed into the totals. Pass --env <name|id> to see\n  only that environment's requests and per-member slice.",
      "signature": "Usage: farthershore usage summary [options] [businessIdOrName]\n\nShow usage summary for the last 30 days\n\nOptions:\n  --env <environment>  Narrow the summary to one environment (name or id). Omit\n                       for the product-wide rollup.\n  -h, --help           display help for command\n\nScope:\n  Without --env this rolls up usage across EVERY environment, so a preview\n  environment's traffic is mixed into the totals. Pass --env <name|id> to see\n  only that environment's requests and per-member slice.\n\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.validate",
      "name": "farthershore validate",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/validate",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore validate [options]\n\nValidate the business/ program the way the PR check does, before pushing\n\nOptions:\n  --entry <path>           Business-as-code folder or file to validate (default:\n                           business/)\n  --business <id-or-name>  Business id or name — runs the server dry-run\n                           validate for the full verdict (diff + economic\n                           change)\n  --env <name>             Environment for the server validate\n  --local-only             Build + determinism only; skip the server dry-run\n                           validate\n  -h, --help               display help for command\n\nExamples:\n  farthershore validate                       # local build + determinism\n  farthershore validate --business weather-api # + server verdict\n  farthershore validate --local-only --format json",
      "signature": "Usage: farthershore validate [options]\n\nValidate the business/ program the way the PR check does, before pushing\n\nOptions:\n  --entry <path>           Business-as-code folder or file to validate (default:\n                           business/)\n  --business <id-or-name>  Business id or name — runs the server dry-run\n                           validate for the full verdict (diff + economic\n                           change)\n  --env <name>             Environment for the server validate\n  --local-only             Build + determinism only; skip the server dry-run\n                           validate\n  -h, --help               display help for command\n\nExamples:\n  farthershore validate                       # local build + determinism\n  farthershore validate --business weather-api # + server verdict\n  farthershore validate --local-only --format json\n\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.variables",
      "name": "farthershore variables",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/variables",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore variables [options] [command]\n\nManage FS_PUBLIC_ bundle variables and write-only secrets (the name is the\nclass: FS_PUBLIC_ = public, everything else = secret)\n\nOptions:\n  -h, --help                                  display help for command\n\nCommands:\n  list [options] [businessIdOrSlug]           List variables: FS_PUBLIC_* values, secret metadata only\n  set [options] [businessIdOrSlug] [name]     Create a variable from stdin (secret unless named FS_PUBLIC_*)\n  rotate [options] [businessIdOrSlug] [name]  Rotate a variable from stdin (the name, and so the class, is unchanged)\n  revoke [options] [businessIdOrSlug] [name]  Revoke runtime access to a secret. Requires --yes.\n  rm [options] [businessIdOrSlug] [name]      Destroy a revoked secret in Main or preview. Requires --yes.\n  status [businessIdOrSlug] [operationId]     Read a durable secret mutation operation\n  help [command]                              display help for command",
      "signature": "Usage: farthershore variables [options] [command]\n\nManage FS_PUBLIC_ bundle variables and write-only secrets (the name is the\nclass: FS_PUBLIC_ = public, everything else = secret)\n\nOptions:\n  -h, --help                                  display help for command\n\nCommands:\n  list [options] [businessIdOrSlug]           List variables: FS_PUBLIC_* values, secret metadata only\n  set [options] [businessIdOrSlug] [name]     Create a variable from stdin (secret unless named FS_PUBLIC_*)\n  rotate [options] [businessIdOrSlug] [name]  Rotate a variable from stdin (the name, and so the class, is unchanged)\n  revoke [options] [businessIdOrSlug] [name]  Revoke runtime access to a secret. Requires --yes.\n  rm [options] [businessIdOrSlug] [name]      Destroy a revoked secret in Main or preview. Requires --yes.\n  status [businessIdOrSlug] [operationId]     Read a durable secret mutation operation\n  help [command]                              display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.variables.list",
      "name": "farthershore variables list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/variables",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore variables list [options] [businessIdOrSlug]\n\nList variables: FS_PUBLIC_* values, secret metadata only\n\nOptions:\n  --env <slug>  Preview environment slug or id (omit for Main).\n  -h, --help    display help for command",
      "signature": "Usage: farthershore variables list [options] [businessIdOrSlug]\n\nList variables: FS_PUBLIC_* values, secret metadata only\n\nOptions:\n  --env <slug>  Preview environment slug or id (omit for Main).\n  -h, --help    display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.variables.revoke",
      "name": "farthershore variables revoke",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/variables",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore variables revoke [options] [businessIdOrSlug] <name>\n\nRevoke runtime access to a secret. Requires --yes.\n\nOptions:\n  --env <slug>             Preview environment slug or id (omit for Main).\n  --yes                    Skip confirmation; required for this destructive\n                           action\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore variables revoke [options] [businessIdOrSlug] <name>\n\nRevoke runtime access to a secret. Requires --yes.\n\nOptions:\n  --env <slug>             Preview environment slug or id (omit for Main).\n  --yes                    Skip confirmation; required for this destructive\n                           action\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.variables.rm",
      "name": "farthershore variables rm",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/variables",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore variables rm [options] [businessIdOrSlug] <name>\n\nDestroy a revoked secret in Main or preview. Requires --yes.\n\nOptions:\n  --env <slug>             Preview environment slug or id (omit for Main).\n  --yes                    Skip confirmation; required for this destructive\n                           action\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore variables rm [options] [businessIdOrSlug] <name>\n\nDestroy a revoked secret in Main or preview. Requires --yes.\n\nOptions:\n  --env <slug>             Preview environment slug or id (omit for Main).\n  --yes                    Skip confirmation; required for this destructive\n                           action\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.variables.rotate",
      "name": "farthershore variables rotate",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/variables",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore variables rotate [options] [businessIdOrSlug] <name>\n\nRotate a variable from stdin (the name, and so the class, is unchanged)\n\nOptions:\n  --env <slug>             Preview environment slug or id (omit for Main).\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n\nExample:\n  printf %s \"$VALUE\" | farthershore variables rotate my-biz POSTHOG_TOKEN",
      "signature": "Usage: farthershore variables rotate [options] [businessIdOrSlug] <name>\n\nRotate a variable from stdin (the name, and so the class, is unchanged)\n\nOptions:\n  --env <slug>             Preview environment slug or id (omit for Main).\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n\nExample:\n  printf %s \"$VALUE\" | farthershore variables rotate my-biz POSTHOG_TOKEN\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.variables.set",
      "name": "farthershore variables set",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/variables",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore variables set [options] [businessIdOrSlug] <name>\n\nCreate a variable from stdin (secret unless named FS_PUBLIC_*)\n\nOptions:\n  --env <slug>             Preview environment slug or id (omit for Main).\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n\nExample:\n  printf %s \"$VALUE\" | farthershore variables set my-biz POSTHOG_TOKEN",
      "signature": "Usage: farthershore variables set [options] [businessIdOrSlug] <name>\n\nCreate a variable from stdin (secret unless named FS_PUBLIC_*)\n\nOptions:\n  --env <slug>             Preview environment slug or id (omit for Main).\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n\nExample:\n  printf %s \"$VALUE\" | farthershore variables set my-biz POSTHOG_TOKEN\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.variables.status",
      "name": "farthershore variables status",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/variables",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore variables status [options] [businessIdOrSlug] <operationId>\n\nRead a durable secret mutation operation\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore variables status [options] [businessIdOrSlug] <operationId>\n\nRead a durable secret mutation operation\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.webhook",
      "name": "farthershore webhook",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/webhook",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore webhook [options] [command]\n\nManage outbound webhook endpoints\n\nOptions:\n  -h, --help                                           display help for command\n\nCommands:\n  list [options] [businessIdOrSlug]                    List API-managed webhook endpoints\n  create [options] [businessIdOrSlug]                  Create an API-managed webhook endpoint\n  update [options] [businessIdOrSlug] [webhookId]      Update a webhook endpoint's URL, events, environment or enabled state\n  delete [options] [businessIdOrSlug] [webhookId]      Delete an API-managed webhook endpoint. Requires --yes.\n  test [options] [businessIdOrSlug] [webhookId]        Send a signed test event to a webhook endpoint\n  trigger [options] [businessIdOrSlug] [webhookId]     Send a signed sample of a specific event (e.g. payment.failed) to a webhook endpoint\n  listen [options] [businessIdOrSlug]                  Tunnel platform webhooks to a local receiver and tail deliveries until Ctrl-C\n  rotate [options] [businessIdOrSlug] [webhookId]      Issue a new signing secret (returned once); the old one keeps verifying for 24h\n  event-types [businessIdOrSlug]                       List the event names a webhook endpoint can subscribe to\n  deliveries [options] [businessIdOrSlug] [webhookId]  List recent delivery attempts for a webhook endpoint\n  help [command]                                       display help for command",
      "signature": "Usage: farthershore webhook [options] [command]\n\nManage outbound webhook endpoints\n\nOptions:\n  -h, --help                                           display help for command\n\nCommands:\n  list [options] [businessIdOrSlug]                    List API-managed webhook endpoints\n  create [options] [businessIdOrSlug]                  Create an API-managed webhook endpoint\n  update [options] [businessIdOrSlug] [webhookId]      Update a webhook endpoint's URL, events, environment or enabled state\n  delete [options] [businessIdOrSlug] [webhookId]      Delete an API-managed webhook endpoint. Requires --yes.\n  test [options] [businessIdOrSlug] [webhookId]        Send a signed test event to a webhook endpoint\n  trigger [options] [businessIdOrSlug] [webhookId]     Send a signed sample of a specific event (e.g. payment.failed) to a webhook endpoint\n  listen [options] [businessIdOrSlug]                  Tunnel platform webhooks to a local receiver and tail deliveries until Ctrl-C\n  rotate [options] [businessIdOrSlug] [webhookId]      Issue a new signing secret (returned once); the old one keeps verifying for 24h\n  event-types [businessIdOrSlug]                       List the event names a webhook endpoint can subscribe to\n  deliveries [options] [businessIdOrSlug] [webhookId]  List recent delivery attempts for a webhook endpoint\n  help [command]                                       display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.webhook.create",
      "name": "farthershore webhook create",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/webhook",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore webhook create [options] [businessIdOrSlug]\n\nCreate an API-managed webhook endpoint\n\nOptions:\n  --url <url>              HTTPS receiver URL.\n  --events <events>        Comma-separated event names, e.g.\n                           subscription.created,payment.failed\n  --env <environmentId>    Only deliver events from this environment (default:\n                           every environment).\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore webhook create [options] [businessIdOrSlug]\n\nCreate an API-managed webhook endpoint\n\nOptions:\n  --url <url>              HTTPS receiver URL.\n  --events <events>        Comma-separated event names, e.g.\n                           subscription.created,payment.failed\n  --env <environmentId>    Only deliver events from this environment (default:\n                           every environment).\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.webhook.delete",
      "name": "farthershore webhook delete",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/webhook",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore webhook delete [options] [businessIdOrSlug] <webhookId>\n\nDelete an API-managed webhook endpoint. Requires --yes.\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command",
      "signature": "Usage: farthershore webhook delete [options] [businessIdOrSlug] <webhookId>\n\nDelete an API-managed webhook endpoint. Requires --yes.\n\nOptions:\n  --yes       Skip confirmation; required for this destructive action\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.webhook.deliveries",
      "name": "farthershore webhook deliveries",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/webhook",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore webhook deliveries [options] [businessIdOrSlug] <webhookId>\n\nList recent delivery attempts for a webhook endpoint\n\nOptions:\n  --limit <n>  Max rows to return.\n  -h, --help   display help for command",
      "signature": "Usage: farthershore webhook deliveries [options] [businessIdOrSlug] <webhookId>\n\nList recent delivery attempts for a webhook endpoint\n\nOptions:\n  --limit <n>  Max rows to return.\n  -h, --help   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.webhook.event-types",
      "name": "farthershore webhook event-types",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/webhook",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore webhook event-types [options] [businessIdOrSlug]\n\nList the event names a webhook endpoint can subscribe to\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore webhook event-types [options] [businessIdOrSlug]\n\nList the event names a webhook endpoint can subscribe to\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.webhook.list",
      "name": "farthershore webhook list",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/webhook",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore webhook list [options] [businessIdOrSlug]\n\nList API-managed webhook endpoints\n\nOptions:\n  --limit <n>  Max rows to return.\n  -h, --help   display help for command",
      "signature": "Usage: farthershore webhook list [options] [businessIdOrSlug]\n\nList API-managed webhook endpoints\n\nOptions:\n  --limit <n>  Max rows to return.\n  -h, --help   display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.webhook.listen",
      "name": "farthershore webhook listen",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/webhook",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore webhook listen [options] [businessIdOrSlug]\n\nTunnel platform webhooks to a local receiver and tail deliveries until Ctrl-C\n\nOptions:\n  --forward-to <localUrl>  Local receiver URL, e.g.\n                           http://localhost:3000/webhooks/farthershore\n  --events <events>        Comma-separated event names to subscribe (default:\n                           every catalog event)\n  --print-secret           Print the temporary endpoint's FS_WEBHOOK_SECRET so\n                           the local receiver can verify signatures\n  --trigger <event>        Fire a signed sample of this event as soon as the\n                           tunnel is up\n  -h, --help               display help for command\n\nRequires cloudflared: bundled via the @farthershore/cloudflared-<platform>\noptional dependency, or a `cloudflared` on PATH. Ctrl-C deletes the\ntemporary endpoint; a killed listener leaves a *.trycloudflare.com endpoint\nthat `farthershore webhook delete <business> <webhookId> --yes` removes.\n\nExamples:\n  farthershore webhook listen acme --forward-to http://localhost:3000/webhooks --print-secret\n  farthershore webhook listen acme --forward-to localhost:3000/webhooks --events payment.failed --trigger payment.failed",
      "signature": "Usage: farthershore webhook listen [options] [businessIdOrSlug]\n\nTunnel platform webhooks to a local receiver and tail deliveries until Ctrl-C\n\nOptions:\n  --forward-to <localUrl>  Local receiver URL, e.g.\n                           http://localhost:3000/webhooks/farthershore\n  --events <events>        Comma-separated event names to subscribe (default:\n                           every catalog event)\n  --print-secret           Print the temporary endpoint's FS_WEBHOOK_SECRET so\n                           the local receiver can verify signatures\n  --trigger <event>        Fire a signed sample of this event as soon as the\n                           tunnel is up\n  -h, --help               display help for command\n\nRequires cloudflared: bundled via the @farthershore/cloudflared-<platform>\noptional dependency, or a `cloudflared` on PATH. Ctrl-C deletes the\ntemporary endpoint; a killed listener leaves a *.trycloudflare.com endpoint\nthat `farthershore webhook delete <business> <webhookId> --yes` removes.\n\nExamples:\n  farthershore webhook listen acme --forward-to http://localhost:3000/webhooks --print-secret\n  farthershore webhook listen acme --forward-to localhost:3000/webhooks --events payment.failed --trigger payment.failed\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.webhook.rotate",
      "name": "farthershore webhook rotate",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/webhook",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore webhook rotate [options] [businessIdOrSlug] <webhookId>\n\nIssue a new signing secret (returned once); the old one keeps verifying for 24h\n\nOptions:\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore webhook rotate [options] [businessIdOrSlug] <webhookId>\n\nIssue a new signing secret (returned once); the old one keeps verifying for 24h\n\nOptions:\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.webhook.test",
      "name": "farthershore webhook test",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/webhook",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore webhook test [options] [businessIdOrSlug] <webhookId>\n\nSend a signed test event to a webhook endpoint\n\nOptions:\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore webhook test [options] [businessIdOrSlug] <webhookId>\n\nSend a signed test event to a webhook endpoint\n\nOptions:\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.webhook.trigger",
      "name": "farthershore webhook trigger",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/webhook",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore webhook trigger [options] [businessIdOrSlug] <webhookId>\n\nSend a signed sample of a specific event (e.g. payment.failed) to a webhook\nendpoint\n\nOptions:\n  --type <event>           Envelope type to send: one of subscription.created,\n                           subscription.updated, subscription.canceled,\n                           payment.succeeded, payment.failed,\n                           entitlement.changed, usage.threshold_reached,\n                           webhook.test. A catalog event is delivered with a\n                           realistic sample payload.\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command",
      "signature": "Usage: farthershore webhook trigger [options] [businessIdOrSlug] <webhookId>\n\nSend a signed sample of a specific event (e.g. payment.failed) to a webhook\nendpoint\n\nOptions:\n  --type <event>           Envelope type to send: one of subscription.created,\n                           subscription.updated, subscription.canceled,\n                           payment.succeeded, payment.failed,\n                           entitlement.changed, usage.threshold_reached,\n                           webhook.test. A catalog event is delivered with a\n                           realistic sample payload.\n  --idempotency-key <key>  Required for this mutation. Generate it once and\n                           reuse the exact value on retry.\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.webhook.update",
      "name": "farthershore webhook update",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/webhook",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore webhook update [options] [businessIdOrSlug] <webhookId>\n\nUpdate a webhook endpoint's URL, events, environment or enabled state\n\nOptions:\n  --url <url>            Replacement HTTPS receiver URL.\n  --events <events>      Comma-separated event names, e.g.\n                         subscription.created,payment.failed\n  --env <environmentId>  Only deliver events from this environment.\n  --all-envs             Clear the environment scope: deliver events from every\n                         environment again.\n  --enable               Enable delivery for this endpoint.\n  --disable              Disable delivery for this endpoint.\n  -h, --help             display help for command",
      "signature": "Usage: farthershore webhook update [options] [businessIdOrSlug] <webhookId>\n\nUpdate a webhook endpoint's URL, events, environment or enabled state\n\nOptions:\n  --url <url>            Replacement HTTPS receiver URL.\n  --events <events>      Comma-separated event names, e.g.\n                         subscription.created,payment.failed\n  --env <environmentId>  Only deliver events from this environment.\n  --all-envs             Clear the environment scope: deliver events from every\n                         environment again.\n  --enable               Enable delivery for this endpoint.\n  --disable              Disable delivery for this endpoint.\n  -h, --help             display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.workflow-control",
      "name": "farthershore workflow-control",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/workflow-control",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore workflow-control [options] [command]\n\nPreview replay and config rollback operations\n\nOptions:\n  -h, --help                                         display help for command\n\nCommands:\n  replay [options] [businessIdOrName]                Preview a historical billing replay\n  rollback-to-config [businessIdOrName] [commitSha]  Preview restoring a business config commit\n  help [command]                                     display help for command",
      "signature": "Usage: farthershore workflow-control [options] [command]\n\nPreview replay and config rollback operations\n\nOptions:\n  -h, --help                                         display help for command\n\nCommands:\n  replay [options] [businessIdOrName]                Preview a historical billing replay\n  rollback-to-config [businessIdOrName] [commitSha]  Preview restoring a business config commit\n  help [command]                                     display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.workflow-control.replay",
      "name": "farthershore workflow-control replay",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/workflow-control",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore workflow-control replay [options] [businessIdOrName]\n\nPreview a historical billing replay\n\nOptions:\n  --period-start <iso-date>\n  --period-end <iso-date>\n  -h, --help                 display help for command",
      "signature": "Usage: farthershore workflow-control replay [options] [businessIdOrName]\n\nPreview a historical billing replay\n\nOptions:\n  --period-start <iso-date>\n  --period-end <iso-date>\n  -h, --help                 display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.workflow-control.rollback-to-config",
      "name": "farthershore workflow-control rollback-to-config",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/workflow-control",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore workflow-control rollback-to-config [options] [businessIdOrName] <commitSha>\n\nPreview restoring a business config commit\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore workflow-control rollback-to-config [options] [businessIdOrName] <commitSha>\n\nPreview restoring a business config commit\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.workflows",
      "name": "farthershore workflows",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/workflows",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore workflows [options] [command]\n\nInspect durable lifecycle workflow executions (list / show)\n\nOptions:\n  -h, --help                  display help for command\n\nCommands:\n  ls [options]                List workflow executions as a table\n  show <workflowExecutionId>  Show a single workflow execution: header, steps,\n                              events, convergence panel\n  help [command]              display help for command",
      "signature": "Usage: farthershore workflows [options] [command]\n\nInspect durable lifecycle workflow executions (list / show)\n\nOptions:\n  -h, --help                  display help for command\n\nCommands:\n  ls [options]                List workflow executions as a table\n  show <workflowExecutionId>  Show a single workflow execution: header, steps,\n                              events, convergence panel\n  help [command]              display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.workflows.ls",
      "name": "farthershore workflows ls",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/workflows",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore workflows ls [options]\n\nList workflow executions as a table\n\nOptions:\n  --status <status>        Filter by status (one of: RUNNING, COMPLETED, FAILED,\n                           ROLLED_BACK, STALLED, REQUIRES_HUMAN_INTERVENTION,\n                           WAITING_FOR_APPROVAL, CANCELLED)\n  --type <type>            Filter by workflow type (e.g. BusinessApplyWorkflow,\n                           RollbackWorkflow, StripeSyncWorkflow,\n                           WebhookDispatchWorkflow)\n  --business <businessId>  Filter by businessId\n  --limit <N>              Maximum number of rows to return (default 50)\n  -h, --help               display help for command",
      "signature": "Usage: farthershore workflows ls [options]\n\nList workflow executions as a table\n\nOptions:\n  --status <status>        Filter by status (one of: RUNNING, COMPLETED, FAILED,\n                           ROLLED_BACK, STALLED, REQUIRES_HUMAN_INTERVENTION,\n                           WAITING_FOR_APPROVAL, CANCELLED)\n  --type <type>            Filter by workflow type (e.g. BusinessApplyWorkflow,\n                           RollbackWorkflow, StripeSyncWorkflow,\n                           WebhookDispatchWorkflow)\n  --business <businessId>  Filter by businessId\n  --limit <N>              Maximum number of rows to return (default 50)\n  -h, --help               display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "cli.workflows.show",
      "name": "farthershore workflows show",
      "kind": "cli",
      "collection": "cli",
      "page": "generated/cli/workflows",
      "source": "apps/cli/src/index.ts",
      "description": "Usage: farthershore workflows show [options] <workflowExecutionId>\n\nShow a single workflow execution: header, steps, events, convergence panel\n\nOptions:\n  -h, --help  display help for command",
      "signature": "Usage: farthershore workflows show [options] <workflowExecutionId>\n\nShow a single workflow execution: header, steps, events, convergence panel\n\nOptions:\n  -h, --help  display help for command\n",
      "guide": "cli/overview"
    },
    {
      "id": "deny.admission_bound_exceeded",
      "name": "admission_bound_exceeded",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 422; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    422\n  ],\n  \"source\": \"constraint\",\n  \"retryAfter\": false,\n  \"verifiedAt\": [\n    \"engine/pipeline/commercial-admission.ts:382\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.admission_descriptor_no_admissible_tuple",
      "name": "admission_descriptor_no_admissible_tuple",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 503; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    503\n  ],\n  \"source\": \"constraint\",\n  \"retryAfter\": true,\n  \"verifiedAt\": [\n    \"engine/pipeline/commercial-admission.ts:257\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.admission_descriptor_unavailable",
      "name": "admission_descriptor_unavailable",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 503; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    503\n  ],\n  \"source\": \"constraint\",\n  \"retryAfter\": true,\n  \"verifiedAt\": [\n    \"engine/pipeline/commercial-admission.ts:196\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.commercial_release_unprovable",
      "name": "commercial_release_unprovable",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 503; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    503\n  ],\n  \"source\": \"constraint\",\n  \"retryAfter\": true,\n  \"verifiedAt\": [\n    \"engine/pipeline/commercial-admission.ts:165\",\n    \"engine/enforcement/batcher.ts:182\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.concurrency_context_unavailable",
      "name": "concurrency_context_unavailable",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 503; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    503\n  ],\n  \"source\": \"constraint\",\n  \"retryAfter\": true,\n  \"verifiedAt\": [\n    \"engine/enforcement/constraints/concurrency.ts:291\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.concurrency_coordinator_unavailable",
      "name": "concurrency_coordinator_unavailable",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 503; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    503\n  ],\n  \"source\": \"constraint\",\n  \"retryAfter\": true,\n  \"verifiedAt\": [\n    \"engine/enforcement/constraints/concurrency.ts:305\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.concurrency_limit_exceeded",
      "name": "concurrency_limit_exceeded",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 429; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    429\n  ],\n  \"source\": \"constraint\",\n  \"retryAfter\": true,\n  \"verifiedAt\": [\n    \"engine/enforcement/constraints/concurrency.ts\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.credential_env_reset",
      "name": "credential_env_reset",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 401; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    401\n  ],\n  \"source\": \"runtime-inline\",\n  \"retryAfter\": false,\n  \"verifiedAt\": [\n    \"engine/pipeline/resolve-tenant.ts\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.credential_resolver_miss_rate_limited",
      "name": "credential_resolver_miss_rate_limited",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 429; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    429\n  ],\n  \"source\": \"gateway-error\",\n  \"retryAfter\": true,\n  \"verifiedAt\": [\n    \"engine/errors.ts:89\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.credential_revoked",
      "name": "credential_revoked",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 401; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    401\n  ],\n  \"source\": \"runtime-inline\",\n  \"retryAfter\": false,\n  \"verifiedAt\": [\n    \"engine/pipeline/resolve-tenant.ts\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.credential_rotated",
      "name": "credential_rotated",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 401; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    401\n  ],\n  \"source\": \"runtime-inline\",\n  \"retryAfter\": false,\n  \"verifiedAt\": [\n    \"engine/pipeline/resolve-tenant.ts\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.credit_exhausted",
      "name": "credit_exhausted",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 402; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    402\n  ],\n  \"source\": \"batcher-enum\",\n  \"retryAfter\": true,\n  \"verifiedAt\": [\n    \"engine/enforcement/batcher.ts\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.credit_state_unavailable",
      "name": "credit_state_unavailable",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 503; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    503\n  ],\n  \"source\": \"batcher-enum\",\n  \"retryAfter\": true,\n  \"verifiedAt\": [\n    \"engine/enforcement/batcher.ts\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.enforcement_denied",
      "name": "enforcement_denied",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 402; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    402\n  ],\n  \"source\": \"batcher-enum\",\n  \"retryAfter\": true,\n  \"verifiedAt\": [\n    \"engine/enforcement/batcher.ts:335\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.enforcement_dependency_unavailable",
      "name": "enforcement_dependency_unavailable",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 503; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    503\n  ],\n  \"source\": \"runtime-inline\",\n  \"retryAfter\": false,\n  \"verifiedAt\": [\n    \"engine/enforcement/runtime.ts:427\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.enforcement_error",
      "name": "enforcement_error",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 500; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    500\n  ],\n  \"source\": \"runtime-inline\",\n  \"retryAfter\": false,\n  \"verifiedAt\": [\n    \"engine/enforcement/runtime.ts:342\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.geo_blocked",
      "name": "geo_blocked",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 403; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    403\n  ],\n  \"source\": \"constraint\",\n  \"retryAfter\": false,\n  \"verifiedAt\": [\n    \"engine/enforcement/constraints/geo-restriction.ts:51\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.geo_context_unavailable",
      "name": "geo_context_unavailable",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 503; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    503\n  ],\n  \"source\": \"constraint\",\n  \"retryAfter\": true,\n  \"verifiedAt\": [\n    \"engine/enforcement/constraints/geo-restriction.ts:44\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.geo_not_allowed",
      "name": "geo_not_allowed",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 403; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    403\n  ],\n  \"source\": \"constraint\",\n  \"retryAfter\": false,\n  \"verifiedAt\": [\n    \"engine/enforcement/constraints/geo-restriction.ts:58\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.invalid_admission_knob",
      "name": "invalid_admission_knob",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 422; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    422\n  ],\n  \"source\": \"constraint\",\n  \"retryAfter\": false,\n  \"verifiedAt\": [\n    \"engine/pipeline/commercial-admission.ts:392\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.invalid_entitlement_shape",
      "name": "invalid_entitlement_shape",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 503; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    503\n  ],\n  \"source\": \"runtime-inline\",\n  \"retryAfter\": true,\n  \"verifiedAt\": [\n    \"engine/enforcement/runtime.ts:144\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.key_expired",
      "name": "key_expired",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 401; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    401\n  ],\n  \"source\": \"constraint\",\n  \"retryAfter\": false,\n  \"verifiedAt\": [\n    \"engine/enforcement/constraints/credential-validity.ts:33\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.limit_allocator_unavailable",
      "name": "limit_allocator_unavailable",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 503; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    503\n  ],\n  \"source\": \"batcher-enum\",\n  \"retryAfter\": true,\n  \"verifiedAt\": [\n    \"engine/enforcement/runtime.ts:471\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.limit_exceeded",
      "name": "limit_exceeded",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 402; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    402\n  ],\n  \"source\": \"batcher-enum\",\n  \"retryAfter\": true,\n  \"verifiedAt\": [\n    \"engine/enforcement/batcher.ts:326\",\n    \"engine/enforcement/constraints/quota.ts:69\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.permission_denied",
      "name": "permission_denied",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 403; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    403\n  ],\n  \"source\": \"constraint\",\n  \"retryAfter\": false,\n  \"verifiedAt\": [\n    \"engine/enforcement/constraints/permission.ts:63\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.permission_unresolved",
      "name": "permission_unresolved",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 403; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    403\n  ],\n  \"source\": \"constraint\",\n  \"retryAfter\": false,\n  \"verifiedAt\": [\n    \"engine/enforcement/constraints/permission.ts\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.post_stream_overspend",
      "name": "post_stream_overspend",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 402; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    402\n  ],\n  \"source\": \"constraint\",\n  \"retryAfter\": true,\n  \"verifiedAt\": [\n    \"engine/enforcement/constraints/lifecycle-block.ts\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.provider_throttled",
      "name": "provider_throttled",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 503; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    503\n  ],\n  \"source\": \"gateway-error\",\n  \"retryAfter\": true,\n  \"verifiedAt\": [\n    \"engine/pipeline/provider-adapter.ts\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.rate_limited",
      "name": "rate_limited",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 429; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    429\n  ],\n  \"source\": \"batcher-enum\",\n  \"retryAfter\": true,\n  \"verifiedAt\": [\n    \"engine/enforcement/batcher.ts:328\",\n    \"engine/enforcement/constraints/rate-limit.ts:74\",\n    \"engine/pipeline/rate-limit.ts:83\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.request_too_large",
      "name": "request_too_large",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 413; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    413\n  ],\n  \"source\": \"constraint\",\n  \"retryAfter\": false,\n  \"verifiedAt\": [\n    \"engine/enforcement/constraints/capacity.ts\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.resolver_rate_limited",
      "name": "resolver_rate_limited",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 503; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    503\n  ],\n  \"source\": \"gateway-error\",\n  \"retryAfter\": true,\n  \"verifiedAt\": [\n    \"engine/errors.ts:55\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.resolver_unavailable",
      "name": "resolver_unavailable",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 503; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    503\n  ],\n  \"source\": \"gateway-error\",\n  \"retryAfter\": true,\n  \"verifiedAt\": [\n    \"engine/errors.ts:73\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.resource_count_limit_exceeded",
      "name": "resource_count_limit_exceeded",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 402; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    402\n  ],\n  \"source\": \"gateway-error\",\n  \"retryAfter\": false,\n  \"verifiedAt\": [\n    \"apps/core:routes/internal/gateway-resources.ts:144\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.route_not_enabled",
      "name": "route_not_enabled",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 403; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    403\n  ],\n  \"source\": \"runtime-inline\",\n  \"retryAfter\": false,\n  \"verifiedAt\": [\n    \"engine/pipeline/pre-vec-costs.ts\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "deny.unsupported_constraint_schema",
      "name": "unsupported_constraint_schema",
      "kind": "schema",
      "collection": "gateway",
      "page": "reference/response-codes",
      "source": "packages/contracts/src/gateway-deny.ts",
      "description": "Gateway denial at HTTP 503; inspect the response code and any Retry-After before choosing recovery.",
      "signature": "{\n  \"statuses\": [\n    503\n  ],\n  \"source\": \"runtime-inline\",\n  \"retryAfter\": false,\n  \"verifiedAt\": [\n    \"engine/enforcement/runtime.ts:154\"\n  ]\n}\n",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "event.entitlement.changed",
      "name": "entitlement.changed",
      "kind": "schema",
      "collection": "operations",
      "page": "generated/operations/events",
      "source": "packages/contracts/src/events/catalog.ts",
      "description": "A compiled entitlement/plan was (re)published.",
      "guide": "define/webhooks"
    },
    {
      "id": "event.payment.failed",
      "name": "payment.failed",
      "kind": "schema",
      "collection": "operations",
      "page": "generated/operations/events",
      "source": "packages/contracts/src/events/catalog.ts",
      "description": "A Stripe payment failed for a subscription.",
      "guide": "define/webhooks"
    },
    {
      "id": "event.payment.succeeded",
      "name": "payment.succeeded",
      "kind": "schema",
      "collection": "operations",
      "page": "generated/operations/events",
      "source": "packages/contracts/src/events/catalog.ts",
      "description": "A Stripe payment succeeded for a subscription.",
      "guide": "define/webhooks"
    },
    {
      "id": "event.subscription.canceled",
      "name": "subscription.canceled",
      "kind": "schema",
      "collection": "operations",
      "page": "generated/operations/events",
      "source": "packages/contracts/src/events/catalog.ts",
      "description": "A subscriber subscription was canceled.",
      "guide": "define/webhooks"
    },
    {
      "id": "event.subscription.created",
      "name": "subscription.created",
      "kind": "schema",
      "collection": "operations",
      "page": "generated/operations/events",
      "source": "packages/contracts/src/events/catalog.ts",
      "description": "A subscriber subscription was created.",
      "guide": "define/webhooks"
    },
    {
      "id": "event.subscription.updated",
      "name": "subscription.updated",
      "kind": "schema",
      "collection": "operations",
      "page": "generated/operations/events",
      "source": "packages/contracts/src/events/catalog.ts",
      "description": "A subscriber subscription changed (plan, status, trial).",
      "guide": "define/webhooks"
    },
    {
      "id": "event.usage.threshold_reached",
      "name": "usage.threshold_reached",
      "kind": "schema",
      "collection": "operations",
      "page": "generated/operations/events",
      "source": "packages/contracts/src/events/catalog.ts",
      "description": "A metered-usage threshold was crossed. Gateway producers use a deterministic event id keyed by subscription, limit, window, threshold, and actor scope so at-least-once delivery is dedupable.",
      "guide": "define/webhooks"
    },
    {
      "id": "mcp.fs_agents_disable",
      "name": "fs_agents_disable",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Turn the Operator off: the dispatcher stops scheduling runs and agent-work billing stops accruing. Re-enable at any time.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_agents_enable",
      "name": "fs_agents_enable",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Turn the business's Operator agent on (created on first enable). It runs autonomously on its cadence; agent-work billing accrues while enabled.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_agents_list",
      "name": "fs_agents_list",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "The agent roster for a business: the enabled/disabled Operator plus any roles that can still be enabled. Read-only.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_agents_run_show",
      "name": "fs_agents_run_show",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "One run's full audit view: the orchestrator's trace summary (composed launches, verify flags, catalog changes), the per-launch performance ledger, and every platform-action receipt. Read-only.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"runId\": {\n      \"type\": \"string\",\n      \"description\": \"The agent run id.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"runId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_agents_status",
      "name": "fs_agents_status",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "The Operator's activation state, recent run history (newest-first), and lifetime usage totals (LLM tokens + actions). Read-only.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_agreement_list",
      "name": "fs_agreement_list",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "List a business's economic agreements (subject-scoped usage-pricing bindings and their append-only contract pricing versions).",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"subjectId\": {\n      \"description\": \"Filter by subject id.\",\n      \"type\": \"string\"\n    },\n    \"environmentId\": {\n      \"description\": \"Preview environment slug or id (omit for production).\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_agreement_show",
      "name": "fs_agreement_show",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Fetch one economic agreement with every contract pricing version.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"agreementId\": {\n      \"type\": \"string\",\n      \"description\": \"The agreement id.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"agreementId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_analytics_latency",
      "name": "fs_analytics_latency",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Gateway request latency at p50/p95/p99 for one business. NOTE: this is the WHOLE request including the builder's own backend, so a high number is not necessarily platform overhead. Read-only.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"pattern\": \"^[^/?#\\\\s]+$\",\n      \"description\": \"The business whose archive to query.\"\n    },\n    \"range\": {\n      \"default\": \"24h\",\n      \"description\": \"Relative window.\",\n      \"type\": \"string\",\n      \"enum\": [\n        \"1h\",\n        \"24h\",\n        \"7d\",\n        \"30d\"\n      ]\n    },\n    \"environmentId\": {\n      \"description\": \"Environment id to scope to. Omit for production. Never returns all environments summed.\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"range\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_analytics_log",
      "name": "fs_analytics_log",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "The most recent archived events for one business, newest first. Each row's `payload` carries the request detail (path, statusCode, latencyMs, orgId). Read-only.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"pattern\": \"^[^/?#\\\\s]+$\",\n      \"description\": \"The business whose archive to query.\"\n    },\n    \"range\": {\n      \"default\": \"24h\",\n      \"description\": \"Relative window.\",\n      \"type\": \"string\",\n      \"enum\": [\n        \"1h\",\n        \"24h\",\n        \"7d\",\n        \"30d\"\n      ]\n    },\n    \"environmentId\": {\n      \"description\": \"Environment id to scope to. Omit for production. Never returns all environments summed.\",\n      \"type\": \"string\"\n    },\n    \"domain\": {\n      \"default\": \"usage\",\n      \"type\": \"string\",\n      \"enum\": [\n        \"usage\",\n        \"telemetry\",\n        \"denials\",\n        \"lifecycle\",\n        \"consumer_activity\",\n        \"audit\"\n      ]\n    },\n    \"limit\": {\n      \"default\": 25,\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 100\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"range\",\n    \"domain\",\n    \"limit\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_analytics_timeseries",
      "name": "fs_analytics_timeseries",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Event volume bucketed over time for one business, from the event archive. Read-only. Scoped to production unless environmentId is given.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"pattern\": \"^[^/?#\\\\s]+$\",\n      \"description\": \"The business whose archive to query.\"\n    },\n    \"range\": {\n      \"default\": \"24h\",\n      \"description\": \"Relative window.\",\n      \"type\": \"string\",\n      \"enum\": [\n        \"1h\",\n        \"24h\",\n        \"7d\",\n        \"30d\"\n      ]\n    },\n    \"environmentId\": {\n      \"description\": \"Environment id to scope to. Omit for production. Never returns all environments summed.\",\n      \"type\": \"string\"\n    },\n    \"domain\": {\n      \"default\": \"usage\",\n      \"type\": \"string\",\n      \"enum\": [\n        \"usage\",\n        \"telemetry\",\n        \"denials\",\n        \"lifecycle\",\n        \"consumer_activity\",\n        \"audit\"\n      ]\n    },\n    \"interval\": {\n      \"default\": \"hour\",\n      \"type\": \"string\",\n      \"enum\": [\n        \"hour\",\n        \"day\"\n      ]\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"range\",\n    \"domain\",\n    \"interval\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_analytics_top",
      "name": "fs_analytics_top",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Ranked breakdown of archive events by caller, event type, or environment. Read-only.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"pattern\": \"^[^/?#\\\\s]+$\",\n      \"description\": \"The business whose archive to query.\"\n    },\n    \"range\": {\n      \"default\": \"24h\",\n      \"description\": \"Relative window.\",\n      \"type\": \"string\",\n      \"enum\": [\n        \"1h\",\n        \"24h\",\n        \"7d\",\n        \"30d\"\n      ]\n    },\n    \"environmentId\": {\n      \"description\": \"Environment id to scope to. Omit for production. Never returns all environments summed.\",\n      \"type\": \"string\"\n    },\n    \"by\": {\n      \"default\": \"actor_id\",\n      \"type\": \"string\",\n      \"enum\": [\n        \"actor_id\",\n        \"type\",\n        \"environment_id\"\n      ]\n    },\n    \"domain\": {\n      \"default\": \"usage\",\n      \"type\": \"string\",\n      \"enum\": [\n        \"usage\",\n        \"telemetry\",\n        \"denials\",\n        \"lifecycle\",\n        \"consumer_activity\",\n        \"audit\"\n      ]\n    },\n    \"k\": {\n      \"default\": 10,\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 50\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"range\",\n    \"by\",\n    \"domain\",\n    \"k\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_backend_bind",
      "name": "fs_backend_bind",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Bind a logical backend id to a concrete direct upstream URL in one environment. Previews inherit the production backend until a concrete override is bound. Omit environmentId for production.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id.\"\n    },\n    \"backend\": {\n      \"type\": \"string\",\n      \"description\": \"Logical backend slug.\"\n    },\n    \"environmentId\": {\n      \"description\": \"Preview environment id; omit for production.\",\n      \"type\": \"string\"\n    },\n    \"originUrl\": {\n      \"type\": \"string\",\n      \"format\": \"uri\",\n      \"description\": \"Concrete direct upstream URL.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"backend\",\n    \"originUrl\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_backend_create",
      "name": "fs_backend_create",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Create a backend (origin) for a business. Pick a transport mode: direct (public HTTPS URL, secured by Ed25519 request signing) or tunnel (private outbound-only cloudflared, secure bring-your-own-backend). Mark it default to route traffic to it.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id to create the backend in.\"\n    },\n    \"name\": {\n      \"type\": \"string\",\n      \"description\": \"Backend name (e.g. 'prod-origin').\"\n    },\n    \"slug\": {\n      \"description\": \"URL-safe slug; derived from name if omitted.\",\n      \"type\": \"string\"\n    },\n    \"transportMode\": {\n      \"description\": \"How the gateway reaches the origin; defaults to direct.\",\n      \"type\": \"string\",\n      \"enum\": [\n        \"direct\",\n        \"tunnel\"\n      ]\n    },\n    \"originUrl\": {\n      \"description\": \"The origin URL (for direct mode).\",\n      \"type\": \"string\"\n    },\n    \"isDefault\": {\n      \"description\": \"Route traffic to this backend by default.\",\n      \"type\": \"boolean\"\n    },\n    \"idempotencyKey\": {\n      \"description\": \"One caller-persisted key for this exact live intent. Reuse it only when retrying the same request; a replay is historical and must be followed by the operation's reconcile read when current state matters.\",\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 200\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"name\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_backend_delete",
      "name": "fs_backend_delete",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Delete a backend (origin). Traffic routed to it stops; re-create to restore.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id.\"\n    },\n    \"backendId\": {\n      \"type\": \"string\",\n      \"description\": \"The backend id to delete.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"backendId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_backend_list",
      "name": "fs_backend_list",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "List a business's backends (origins) — id, scope (production|environment), environmentId, name, slug, transport (direct|tunnel), default flag, and derived status. Backends are per-(business, environment) rows, so the same declared backend can legitimately appear once per scope and be default in each. Read-only.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id whose backends to list.\"\n    },\n    \"environmentId\": {\n      \"description\": \"Only backends in this environment id, or 'production' for the production scope. Omit for every scope.\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_brand_update",
      "name": "fs_brand_update",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Update a business's brand and presentation — display name, description, icon, logo (wordmark), key prefix, and organization-page visibility. Plans, pricing, routes, and backend origins are managed through their dedicated surfaces. Only the fields you pass are changed.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug to update.\"\n    },\n    \"displayName\": {\n      \"description\": \"Display name.\",\n      \"type\": \"string\"\n    },\n    \"description\": {\n      \"description\": \"Short business description.\",\n      \"type\": \"string\"\n    },\n    \"iconUrl\": {\n      \"description\": \"Square icon/favicon URL, or null to clear it.\",\n      \"anyOf\": [\n        {\n          \"type\": \"string\"\n        },\n        {\n          \"type\": \"null\"\n        }\n      ]\n    },\n    \"logoUrl\": {\n      \"description\": \"Wordmark/logo URL, or null to clear it.\",\n      \"anyOf\": [\n        {\n          \"type\": \"string\"\n        },\n        {\n          \"type\": \"null\"\n        }\n      ]\n    },\n    \"keyPrefix\": {\n      \"description\": \"White-label prefix for subscriber API keys (fsk_ → e.g. acme_). 2-12 lowercase letters/digits; fs/fsk/fsc/fsm reserved. Null clears to the default fsk.\",\n      \"anyOf\": [\n        {\n          \"type\": \"string\"\n        },\n        {\n          \"type\": \"null\"\n        }\n      ]\n    },\n    \"listedOnOrganizationPage\": {\n      \"description\": \"Show (true) or hide (false) this product on the organization's public page at /organization/<slug>. Listed by default.\",\n      \"type\": \"boolean\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_bulletin_ack",
      "name": "fs_bulletin_ack",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Mark a bulletin post acknowledged — the hand-off signal that the coding agent (or builder) has picked the item up. Forward-only; idempotent on an already-acknowledged post.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"postId\": {\n      \"type\": \"string\",\n      \"description\": \"The bulletin post id.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"postId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_bulletin_list",
      "name": "fs_bulletin_list",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "The agents' bulletin feed for a business: trend/insight posts (aggregated data + deltas) and change_request posts (the coding agent's backlog — filter --kind change_request --status open). Read-only.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"kind\": {\n      \"description\": \"Filter by post kind.\",\n      \"type\": \"string\",\n      \"enum\": [\n        \"trend\",\n        \"insight\",\n        \"change_request\"\n      ]\n    },\n    \"status\": {\n      \"description\": \"Filter by post status.\",\n      \"type\": \"string\",\n      \"enum\": [\n        \"open\",\n        \"acknowledged\",\n        \"resolved\"\n      ]\n    },\n    \"limit\": {\n      \"description\": \"Max rows to return.\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_bulletin_resolve",
      "name": "fs_bulletin_resolve",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Mark a bulletin post resolved — the referenced work landed (or the trend was addressed). Terminal state.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"postId\": {\n      \"type\": \"string\",\n      \"description\": \"The bulletin post id.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"postId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_bulletin_show",
      "name": "fs_bulletin_show",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "One bulletin post in full: markdown body, the dataJson payload backing the claim, and for change requests the referenced ChangeSet id + proposal. Read-only.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"postId\": {\n      \"type\": \"string\",\n      \"description\": \"The bulletin post id.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"postId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_business_docs_disable",
      "name": "fs_business_docs_disable",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Disable docs for a business — closes the publish/sync gate so docs are no longer served and `boot.docsEnabled=false` is emitted to the portal. The docs scaffold stays in the repo; re-enabling is a pure flag flip. Idempotent if docs are already disabled.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug to disable docs on.\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_business_docs_enable",
      "name": "fs_business_docs_enable",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Enable docs for a business — opens the publish/sync gate so docs are served from R2 and `boot.docsEnabled=true` is emitted to the portal. Idempotent if docs are already enabled.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug to enable docs on.\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_business_list",
      "name": "fs_business_list",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "List every business in the authenticated FartherShore workspace (id, name, status). Read-only; use this to discover business ids for the other tools.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {},\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_business_preview_env_set",
      "name": "fs_business_preview_env_set",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Configure automatic preview environment creation for a business. Modes: BRANCH_PREFIX creates previews from matching env branches, PULL_REQUEST creates previews for PRs against the default branch, and DISABLED stops automatic creation while explicit `farthershore env create` continues to work. Pass envBranchPrefix to customize the branch-prefix mode, or null to reset to env/.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug to update.\"\n    },\n    \"previewEnvTrigger\": {\n      \"description\": \"Automatic preview mode: BRANCH_PREFIX, PULL_REQUEST, or DISABLED.\",\n      \"type\": \"string\",\n      \"enum\": [\n        \"BRANCH_PREFIX\",\n        \"PULL_REQUEST\",\n        \"DISABLED\"\n      ]\n    },\n    \"envBranchPrefix\": {\n      \"description\": \"Branch prefix for BRANCH_PREFIX mode, or null for env/.\",\n      \"anyOf\": [\n        {\n          \"type\": \"string\",\n          \"minLength\": 1,\n          \"maxLength\": 50\n        },\n        {\n          \"type\": \"null\"\n        }\n      ]\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_business_publish",
      "name": "fs_business_publish",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Publish a business — validate its current spec and queue a versioned release with an auto-computed semver. Use business status to prove it is live.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id to publish.\"\n    },\n    \"bump\": {\n      \"description\": \"Force the semver bump. Omit to auto-derive from the change.\",\n      \"type\": \"string\",\n      \"enum\": [\n        \"major\",\n        \"minor\",\n        \"patch\"\n      ]\n    },\n    \"version\": {\n      \"description\": \"Pin the exact next release tag (vX.Y.Z).\",\n      \"type\": \"string\"\n    },\n    \"acceptBreaking\": {\n      \"description\": \"Consent to publish a breaking (blocking-risk) change as major.\",\n      \"type\": \"boolean\"\n    },\n    \"dryRun\": {\n      \"description\": \"Preview the change (computed semver + reasons) without cutting a release.\",\n      \"type\": \"boolean\"\n    },\n    \"idempotencyKey\": {\n      \"description\": \"One caller-persisted key for this exact live intent. Reuse it only when retrying the same request; a replay is historical and must be followed by the operation's reconcile read when current state matters.\",\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 200\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_business_rbac_disable",
      "name": "fs_business_rbac_disable",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Disable Managed RBAC for a business — flips the platform-owned flag back off via PUT /businesses/:id/rbac. Subscriber role/assignment state is kept server-side; re-enabling is a pure flag flip. Idempotent if RBAC is already disabled.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug to disable Managed RBAC on.\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_business_rbac_enable",
      "name": "fs_business_rbac_enable",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Enable Managed RBAC for a business — a platform-owned flag (like docsEnabled) toggled via PUT /businesses/:id/rbac. Subscriber orgs can then manage roles in their portal. Idempotent if RBAC is already enabled.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug to enable Managed RBAC on.\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_business_rbac_subjects_list",
      "name": "fs_business_rbac_subjects_list",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "List a business's raw permission vocabulary (subject, verbs, escalatory verbs, description). The SDK/compiler do not create roles: each subscribing organization assembles this catalog into its own CUSTOM roles, default, and assignments. Subjects are declared via permission-carrying `fs.group(id, routes, { permission })` in the business/ repo; run `farthershore validate` and push to change them. Read-only.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug to list subjects for.\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_business_status",
      "name": "fs_business_status",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Verify lifecycle, release, and the complete environment edge generation by id or slug. Reports Core G, published G, observed G, the expected/observed manifest digests, and whether they cohere. Read-only.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug to check.\"\n    },\n    \"env\": {\n      \"description\": \"Environment name; omit for production.\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_business_subdomain_check",
      "name": "fs_business_subdomain_check",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Check whether a candidate slug is free to use as a business subdomain (normalized, blocked-word and collision checked). Read-only; run before fs_business_create.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"slug\": {\n      \"type\": \"string\",\n      \"description\": \"Candidate business slug (normalized to the subdomain).\"\n    }\n  },\n  \"required\": [\n    \"slug\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_consumer_block",
      "name": "fs_consumer_block",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Block a user/consumer for a business and revoke their active API keys. Destructive live-state operation; it does not edit repo-authored business behavior.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"subscriberId\": {\n      \"type\": \"string\",\n      \"description\": \"The subscriber id from `consumer list`.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"subscriberId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_consumer_keys_list",
      "name": "fs_consumer_keys_list",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "List one consumer's API keys for a business. Read-only and metadata only — the response never contains key material. Use it to discover the keyId needed to revoke a single key.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"subscriberId\": {\n      \"type\": \"string\",\n      \"description\": \"The subscriber id from `consumer list`.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"subscriberId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_consumer_keys_revoke",
      "name": "fs_consumer_keys_revoke",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Revoke ONE of a consumer's API keys for a business. The surgical alternative to blocking the whole consumer (which revokes every key). Irreversible: the credential stops working at the edge and cannot be un-revoked — mint a new key instead. Destructive live-state operation; it does not edit repo-authored business behavior.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"subscriberId\": {\n      \"type\": \"string\",\n      \"description\": \"The subscriber id from `consumer list`.\"\n    },\n    \"keyId\": {\n      \"type\": \"string\",\n      \"description\": \"The API key id from `consumer keys list`.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"subscriberId\",\n    \"keyId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_consumer_list",
      "name": "fs_consumer_list",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "List users/consumers for a business. Read-only; use this to discover subscriber ids before blocking or removing a user.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"env\": {\n      \"description\": \"Environment name for preview-scoped consumers.\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_consumer_migrate_latest",
      "name": "fs_consumer_migrate_latest",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Move one consumer onto the current head of their plan lineage immediately. Operates on live subscription state.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"subscriberId\": {\n      \"type\": \"string\",\n      \"description\": \"The subscriber id from `consumer list`.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"subscriberId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_consumer_rbac_assign",
      "name": "fs_consumer_rbac_assign",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Support override: replace a client-org member's Managed-RBAC business-role assignment on a business (set-replace — the given list becomes the member's full assignment; an empty list clears it). Role keys must exist in the org's role set. Live-state operation; it does not edit repo-authored business behavior.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"subscriberId\": {\n      \"type\": \"string\",\n      \"description\": \"The subscriber id from `consumer list`.\"\n    },\n    \"userExternalId\": {\n      \"type\": \"string\",\n      \"description\": \"The member's external identity id (Clerk userId) within the client org.\"\n    },\n    \"roles\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Business-role keys to set (replaces the current assignment; [] clears it).\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"subscriberId\",\n    \"userExternalId\",\n    \"roles\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_consumer_rbac_disable",
      "name": "fs_consumer_rbac_disable",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Turn Managed-RBAC enforcement OFF for ONE subscriber. This is an access EXPANSION — with enforcement off, credential permission resolution can return ['*']. Role definitions are preserved for re-enable. Returns 409 GOVERNED_BY_CHANGE_SET when the subscriber org has mandatory change control on. Live-state operation; it does not edit repo-authored business behavior.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"subscriberId\": {\n      \"type\": \"string\",\n      \"description\": \"The subscriber id from `consumer list`.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"subscriberId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_consumer_rbac_enable",
      "name": "fs_consumer_rbac_enable",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Turn Managed-RBAC enforcement ON for ONE subscriber, and optionally set the org's default role. Enforcement requires BOTH this flag and the product flag (fs_business_rbac_enable); with the product flag off this returns 400 RBAC_NOT_ENABLED_BY_PRODUCT. Returns 409 GOVERNED_BY_CHANGE_SET when the subscriber org has mandatory change control on — that org must approve a governed ChangeSet instead. Live-state operation; it does not edit repo-authored business behavior.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"subscriberId\": {\n      \"type\": \"string\",\n      \"description\": \"The subscriber id from `consumer list`.\"\n    },\n    \"defaultRoleKey\": {\n      \"description\": \"Role key new members fall back to when they have no explicit role. Omit to clear it.\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"subscriberId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_consumer_rbac_roles_create",
      "name": "fs_consumer_rbac_roles_create",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Create a CUSTOM Managed-RBAC role for ONE subscriber from the business's derived permission catalog. An unknown permission is rejected with 400 UNKNOWN_PERMISSION; the reserved key `owner` is rejected with 409 OWNER_ROLE_IMMUTABLE (owners always hold every permission); a duplicate key is a 409. Live-state operation; it does not edit repo-authored business behavior.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"subscriberId\": {\n      \"type\": \"string\",\n      \"description\": \"The subscriber id from `consumer list`.\"\n    },\n    \"roleKey\": {\n      \"type\": \"string\",\n      \"description\": \"The subscriber-owned role key (lowercase slug). `owner` is reserved and immutable.\"\n    },\n    \"name\": {\n      \"type\": \"string\",\n      \"description\": \"Human-readable role name.\"\n    },\n    \"permissions\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Permission keys from the business's derived catalog. Grant-by-exact-name; a custom subject's `<subject>:*` is never grantable.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"subscriberId\",\n    \"roleKey\",\n    \"name\",\n    \"permissions\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_consumer_rbac_roles_delete",
      "name": "fs_consumer_rbac_roles_delete",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Delete ONE subscriber Managed-RBAC role. Atomic and convergent: the key is stripped from every member and credential that holds it and cleared as the org default. The reserved key `owner` is rejected with 409 OWNER_ROLE_IMMUTABLE. Destructive live-state operation; it does not edit repo-authored business behavior.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"subscriberId\": {\n      \"type\": \"string\",\n      \"description\": \"The subscriber id from `consumer list`.\"\n    },\n    \"roleKey\": {\n      \"type\": \"string\",\n      \"description\": \"The subscriber-owned role key (lowercase slug). `owner` is reserved and immutable.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"subscriberId\",\n    \"roleKey\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_consumer_rbac_roles_list",
      "name": "fs_consumer_rbac_roles_list",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "List ONE subscriber's Managed-RBAC role rows (ACCOUNT and CUSTOM), with each role's permission keys. Read-only; use it to discover role keys before creating, updating, deleting, or assigning them. Returns 400 RBAC_NOT_ENABLED_BY_PRODUCT when the product's RBAC flag is off.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"subscriberId\": {\n      \"type\": \"string\",\n      \"description\": \"The subscriber id from `consumer list`.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"subscriberId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_consumer_rbac_roles_update",
      "name": "fs_consumer_rbac_roles_update",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Rename and/or re-permission ONE subscriber Managed-RBAC role. `permissions` is set-replace — the given list becomes the role's full grant. Provide name and/or permissions. An unknown permission is rejected with 400 UNKNOWN_PERMISSION; the reserved key `owner` is rejected with 409 OWNER_ROLE_IMMUTABLE. Role edits republish live-bound key claims asynchronously, so retest EXISTING credentials after the change reaches the edge.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"subscriberId\": {\n      \"type\": \"string\",\n      \"description\": \"The subscriber id from `consumer list`.\"\n    },\n    \"roleKey\": {\n      \"type\": \"string\",\n      \"description\": \"The subscriber-owned role key (lowercase slug). `owner` is reserved and immutable.\"\n    },\n    \"name\": {\n      \"description\": \"New human-readable role name.\",\n      \"type\": \"string\"\n    },\n    \"permissions\": {\n      \"description\": \"Replacement permission keys (set-replace, from the derived catalog).\",\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"subscriberId\",\n    \"roleKey\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_consumer_remove",
      "name": "fs_consumer_remove",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Remove a user/consumer from live business access: cancel subscriptions, revoke credentials, purge related live state, and archive the subscriber while retaining billing/audit history. Destructive and convergent on retry; it does not edit repo-authored business behavior.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"subscriberId\": {\n      \"type\": \"string\",\n      \"description\": \"The subscriber id from `consumer list`.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"subscriberId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_env_create",
      "name": "fs_env_create",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Create a preview environment bound to a git branch. Provide a name and the git branch it tracks.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id to create the environment in.\"\n    },\n    \"name\": {\n      \"type\": \"string\",\n      \"description\": \"Environment name (e.g. 'staging', 'preview-pr-42').\"\n    },\n    \"branch\": {\n      \"type\": \"string\",\n      \"description\": \"The git branch this environment tracks.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"name\",\n    \"branch\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_env_list",
      "name": "fs_env_list",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "List a business's environments (name, branch, hostnames). The first row is always the `production` scope, which has `id: null` and no branch — it is the live business, not a preview environment row, and `--env production` addresses it on every verb that takes `--env`. Read-only.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id whose environments to list.\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_frontend_rollback",
      "name": "fs_frontend_rollback",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Roll a business's frontend back to a prior release by its releaseId (manifest hash, from fs_frontend_status). Flips the live pointer back and pins it. The releaseId must belong to this target's build history.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"releaseId\": {\n      \"type\": \"string\",\n      \"description\": \"The prior release id (manifest hash) to re-activate.\"\n    },\n    \"environmentId\": {\n      \"description\": \"Scope to a preview environment (omit for production).\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"releaseId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_frontend_status",
      "name": "fs_frontend_status",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Read a business's current frontend serve state (uiMode, active release hash + producing build, pin flag), the recent SUCCEEDED releases (rollback targets), and the recent builds — a FAILED build's `error` explains why a deploy didn't go live. Read-only.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"environmentId\": {\n      \"description\": \"Scope to a preview environment (omit for production).\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_organization_ownership_transfer",
      "name": "fs_organization_ownership_transfer",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Transfer primary ownership of a team or company organization to another existing member. Destructive and irreversible for the caller; requires the signed-in owner's session.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"organizationId\": {\n      \"type\": \"string\",\n      \"description\": \"Builder organization id.\"\n    },\n    \"newOwnerUserId\": {\n      \"type\": \"string\",\n      \"description\": \"User id of the existing member who becomes primary owner.\"\n    },\n    \"idempotencyKey\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"description\": \"Required live-attempt key. Reuse this exact value only when retrying the same uncertain ownership transfer.\"\n    }\n  },\n  \"required\": [\n    \"organizationId\",\n    \"newOwnerUserId\",\n    \"idempotencyKey\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_persona_bootstrap",
      "name": "fs_persona_bootstrap",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Issue a one-time test bootstrap key for a business environment — use it to provision a test persona. Returns the key ONCE; store it now.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id.\"\n    },\n    \"environmentId\": {\n      \"type\": \"string\",\n      \"description\": \"The environment id to scope the persona to.\"\n    },\n    \"idempotencyKey\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"description\": \"Required live-attempt key. Reuse this exact value only when retrying the same uncertain persona bootstrap.\"\n    },\n    \"subscriberId\": {\n      \"type\": \"string\",\n      \"minLength\": 1\n    },\n    \"planKey\": {\n      \"description\": \"Plan key to assign. Required when creating a new subscriber; omit only when subscriberId joins an existing subscriber.\",\n      \"type\": \"string\",\n      \"minLength\": 1\n    },\n    \"accountRole\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"owner\",\n        \"admin\",\n        \"member\"\n      ]\n    },\n    \"roleKeys\": {\n      \"description\": \"Subscriber-owned product role keys. Omit to use its configured default role.\",\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\",\n        \"minLength\": 1\n      }\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"environmentId\",\n    \"idempotencyKey\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_persona_delete",
      "name": "fs_persona_delete",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Delete a temporary test persona, including its credential, browser access, and test-owned identity state.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id.\"\n    },\n    \"environmentId\": {\n      \"type\": \"string\",\n      \"description\": \"The environment id.\"\n    },\n    \"personaId\": {\n      \"type\": \"string\",\n      \"description\": \"The persona id to delete.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"environmentId\",\n    \"personaId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_persona_list",
      "name": "fs_persona_list",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "List a business environment's test personas (id, label, status). Read-only.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id.\"\n    },\n    \"environmentId\": {\n      \"type\": \"string\",\n      \"description\": \"The environment id whose personas to list.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"environmentId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_persona_rotate",
      "name": "fs_persona_rotate",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Rotate a test persona's API key. Returns the replacement key once.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id.\"\n    },\n    \"environmentId\": {\n      \"type\": \"string\",\n      \"description\": \"The environment id.\"\n    },\n    \"personaId\": {\n      \"type\": \"string\",\n      \"description\": \"The persona id to rotate.\"\n    },\n    \"idempotencyKey\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"description\": \"Required live-attempt key. Reuse this exact value only when retrying the same uncertain persona rotation.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"environmentId\",\n    \"personaId\",\n    \"idempotencyKey\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_plan_list",
      "name": "fs_plan_list",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "List a business's pricing plans (read-only). Plans are managed as code in the business's GitHub repo — to add/change/remove a plan, edit business/ and push; this tool only reads the current state. Without environmentId the PRODUCTION plans are returned; pass environmentId to see what a preview environment serves. Pass the business id from fs_business_list.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id whose plans to list.\"\n    },\n    \"environmentId\": {\n      \"description\": \"Return the plans this environment serves; omit for production.\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "contract",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_promo_code_archive",
      "name": "fs_promo_code_archive",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Archive an API-managed checkout promo code.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"promoCodeId\": {\n      \"type\": \"string\",\n      \"description\": \"The promo code id.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"promoCodeId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_promo_code_create",
      "name": "fs_promo_code_create",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Create an API-managed checkout promo code. Use percent for percent_off, amountCents for amount_off, and no amount for free_months.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"code\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 64\n    },\n    \"kind\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"percent_off\",\n        \"amount_off\",\n        \"free_months\"\n      ]\n    },\n    \"percent\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 100\n    },\n    \"amountCents\": {\n      \"type\": \"integer\",\n      \"exclusiveMinimum\": 0,\n      \"maximum\": 9007199254740991\n    },\n    \"durationMonths\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 24\n    },\n    \"maxRedemptions\": {\n      \"type\": \"integer\",\n      \"exclusiveMinimum\": 0,\n      \"maximum\": 9007199254740991\n    },\n    \"activeFrom\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\",\n      \"pattern\": \"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$\"\n    },\n    \"activeUntil\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\",\n      \"pattern\": \"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$\"\n    },\n    \"applicablePlanIds\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"idempotencyKey\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"description\": \"Required live-attempt key. Reuse this exact value only when retrying the same uncertain promo-code creation.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"code\",\n    \"kind\",\n    \"durationMonths\",\n    \"idempotencyKey\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_promo_code_list",
      "name": "fs_promo_code_list",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "List API-managed promo codes for a business. Promo codes are checkout operational state, not repo-authored Business SDK state.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_promo_code_reactivate",
      "name": "fs_promo_code_reactivate",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Reactivate an archived API-managed checkout promo code.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"promoCodeId\": {\n      \"type\": \"string\",\n      \"description\": \"The promo code id.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"promoCodeId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_promo_code_update",
      "name": "fs_promo_code_update",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Update an API-managed checkout promo code. Spec changes rotate the Stripe coupon/promotion code behind the scenes.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"promoCodeId\": {\n      \"type\": \"string\",\n      \"description\": \"The promo code id.\"\n    },\n    \"code\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 64\n    },\n    \"kind\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"percent_off\",\n        \"amount_off\",\n        \"free_months\"\n      ]\n    },\n    \"percent\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 100\n    },\n    \"amountCents\": {\n      \"type\": \"integer\",\n      \"exclusiveMinimum\": 0,\n      \"maximum\": 9007199254740991\n    },\n    \"durationMonths\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 24\n    },\n    \"maxRedemptions\": {\n      \"anyOf\": [\n        {\n          \"type\": \"integer\",\n          \"exclusiveMinimum\": 0,\n          \"maximum\": 9007199254740991\n        },\n        {\n          \"type\": \"null\"\n        }\n      ]\n    },\n    \"activeFrom\": {\n      \"anyOf\": [\n        {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"pattern\": \"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$\"\n        },\n        {\n          \"type\": \"null\"\n        }\n      ]\n    },\n    \"activeUntil\": {\n      \"anyOf\": [\n        {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"pattern\": \"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$\"\n        },\n        {\n          \"type\": \"null\"\n        }\n      ]\n    },\n    \"applicablePlanIds\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"promoCodeId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_proposal_create",
      "name": "fs_proposal_create",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Propose a governed ChangeSet against a subscriber's live RBAC state (Agent Proposal Flow). Creates a DRAFT proposal that a HUMAN in the subscriber org must preview, approve, and apply in the portal — an agent can propose but never self-approve or apply. Operate-class live-state action; does not edit repo-authored business behavior.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"subscriberId\": {\n      \"type\": \"string\",\n      \"description\": \"The subscriber (client org) id — from `consumer list`.\"\n    },\n    \"intent\": {\n      \"type\": \"string\",\n      \"description\": \"Human-readable description of the proposed change.\"\n    },\n    \"operations\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"propertyNames\": {\n          \"type\": \"string\"\n        },\n        \"additionalProperties\": {}\n      },\n      \"description\": \"Governed operations, e.g. [{ type: 'update_role_permissions', schemaVersion: 1, target: { resourceType: 'subscriber_business_role', resourceId: '<roleKey>' }, payload: { permissions: [...] } }].\"\n    },\n    \"env\": {\n      \"description\": \"Environment name/id to scope the proposal to.\",\n      \"type\": \"string\"\n    },\n    \"idempotencyKey\": {\n      \"description\": \"Replay-safe idempotency key for the proposal.\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"subscriberId\",\n    \"intent\",\n    \"operations\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_proposal_get",
      "name": "fs_proposal_get",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Read one governed ChangeSet proposed against a subscriber (Agent Proposal Flow) — its operations, risk, simulation, approvals, and status. Read-only.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"subscriberId\": {\n      \"type\": \"string\",\n      \"description\": \"The subscriber (client org) id — from `consumer list`.\"\n    },\n    \"changeSetId\": {\n      \"type\": \"string\",\n      \"description\": \"The governed ChangeSet id.\"\n    },\n    \"env\": {\n      \"description\": \"Environment name/id.\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"subscriberId\",\n    \"changeSetId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_proposal_list",
      "name": "fs_proposal_list",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "List governed ChangeSets proposed against a subscriber (Agent Proposal Flow). Read-only; use it to discover proposal ids + their status before previewing.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"subscriberId\": {\n      \"type\": \"string\",\n      \"description\": \"The subscriber (client org) id — from `consumer list`.\"\n    },\n    \"status\": {\n      \"description\": \"Filter by status (e.g. draft, approval_required).\",\n      \"type\": \"string\"\n    },\n    \"env\": {\n      \"description\": \"Environment name/id.\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"subscriberId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_proposal_preview",
      "name": "fs_proposal_preview",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Simulate the impact of a proposed ChangeSet and store the preview (Agent Proposal Flow). Enforced by the same authority as propose — there is no separate preview permission. Read-shaped but writes the stored simulation; does not apply the change.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"subscriberId\": {\n      \"type\": \"string\",\n      \"description\": \"The subscriber (client org) id — from `consumer list`.\"\n    },\n    \"changeSetId\": {\n      \"type\": \"string\",\n      \"description\": \"The governed ChangeSet id.\"\n    },\n    \"env\": {\n      \"description\": \"Environment name/id.\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"subscriberId\",\n    \"changeSetId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_runtime_token_list",
      "name": "fs_runtime_token_list",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "List a business's runtime tokens (fsrt_) — id, last-four, operations, status, and env scope. Read-only; secrets are never shown.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id.\"\n    },\n    \"environmentId\": {\n      \"description\": \"Only tokens scoped to this environment id, or 'production' for the production scope. Omit for every scope.\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_runtime_token_mint",
      "name": "fs_runtime_token_mint",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Mint a new runtime token (fsrt_) for a backend. Returns the plaintext token ONCE — store it now (e.g. as FS_RUNTIME_TOKEN). Operations default to the backend's needs (gateway_verification, metering, health).",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id.\"\n    },\n    \"backendId\": {\n      \"description\": \"Bind the token to this backend, by slug or id. Resolved in the selected environment, falling back to the production row.\",\n      \"type\": \"string\"\n    },\n    \"environmentId\": {\n      \"description\": \"Scope to a preview environment (omit for production).\",\n      \"type\": \"string\"\n    },\n    \"kind\": {\n      \"description\": \"Token kind; defaults from the env scope.\",\n      \"type\": \"string\",\n      \"enum\": [\n        \"live\",\n        \"test\"\n      ]\n    },\n    \"operations\": {\n      \"description\": \"Operations (gateway_verification, metering, health, tunnel).\",\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"idempotencyKey\": {\n      \"description\": \"One caller-persisted key for this exact live intent. Reuse it only when retrying the same request; a replay is historical and must be followed by the operation's reconcile read when current state matters.\",\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 200\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_runtime_token_revoke",
      "name": "fs_runtime_token_revoke",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Revoke a runtime token. The backend using it stops verifying.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id.\"\n    },\n    \"tokenId\": {\n      \"type\": \"string\",\n      \"description\": \"The runtime token id to revoke.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"tokenId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_runtime_token_rotate",
      "name": "fs_runtime_token_rotate",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Rotate a runtime token: mint a fresh secret carrying the same scope and revoke the old one. Returns the new plaintext token ONCE.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id.\"\n    },\n    \"tokenId\": {\n      \"type\": \"string\",\n      \"description\": \"The runtime token id to rotate.\"\n    },\n    \"idempotencyKey\": {\n      \"description\": \"One caller-persisted key for this exact live intent. Reuse it only when retrying the same request; a replay is historical and must be followed by the operation's reconcile read when current state matters.\",\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 200\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"tokenId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_stripe_disconnect",
      "name": "fs_stripe_disconnect",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Remove a business's per-business Stripe Connect override so it bills through the organization default again. Refused while any subscription is still money-bearing. Destructive live-state operation; it does not edit repo-authored business behavior.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"deleteAccount\": {\n      \"description\": \"Also delete the platform-created Express account at Stripe.\",\n      \"type\": \"boolean\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_stripe_status",
      "name": "fs_stripe_status",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Read the Stripe Connect account a business bills through — a per-business override when present, otherwise the organization default — including onboarding and tax-enrollment state. Read-only. Connecting Stripe is browser-only and has no tool.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_usage_read",
      "name": "fs_usage_read",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Read a business's usage summary — metered request counts and tier utilization. Without environmentId this rolls up EVERY environment. Read-only.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id whose usage to read.\"\n    },\n    \"environmentId\": {\n      \"description\": \"Narrow the summary to this environment; omit for the product-wide rollup.\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_variable_list",
      "name": "fs_variable_list",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Lists variables. Returns readable FS_PUBLIC_* values; every other variable is a write-only secret and only its lifecycle metadata is returned.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"environmentId\": {\n      \"description\": \"Preview environment slug or id (omit for Main).\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_variable_operation_get",
      "name": "fs_variable_operation_get",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Reads publication status and frozen impact metadata.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\"\n    },\n    \"operationId\": {\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"operationId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_variable_revoke",
      "name": "fs_variable_revoke",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Revokes runtime access after explicit confirmation and returns a durable operation.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\"\n    },\n    \"name\": {\n      \"type\": \"string\"\n    },\n    \"environmentId\": {\n      \"type\": \"string\"\n    },\n    \"confirmation\": {\n      \"type\": \"string\",\n      \"const\": \"REVOKE\"\n    },\n    \"idempotencyKey\": {\n      \"description\": \"One caller-persisted key for this exact live intent. Reuse it only when retrying the same request; a replay is historical and must be followed by the operation's reconcile read when current state matters.\",\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 200\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"name\",\n    \"confirmation\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_variable_rm",
      "name": "fs_variable_rm",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Permanently destroys ciphertext after acknowledged revocation. Main and preview use the same contract.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\"\n    },\n    \"name\": {\n      \"type\": \"string\"\n    },\n    \"environmentId\": {\n      \"type\": \"string\"\n    },\n    \"confirmation\": {\n      \"type\": \"string\",\n      \"const\": \"DELETE\"\n    },\n    \"idempotencyKey\": {\n      \"description\": \"One caller-persisted key for this exact live intent. Reuse it only when retrying the same request; a replay is historical and must be followed by the operation's reconcile read when current state matters.\",\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 200\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"name\",\n    \"confirmation\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_variable_rotate",
      "name": "fs_variable_rotate",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Creates an immutable variable generation. An FS_PUBLIC_-prefixed name is public (inlined into the frontend bundle); any other name is a write-only secret whose plaintext is accepted once and never returned.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"name\": {\n      \"type\": \"string\",\n      \"description\": \"Variable name, e.g. POSTHOG_TOKEN. The name is the class: an FS_PUBLIC_ prefix makes it public (inlined into the frontend bundle, readable by every visitor); any other name is a write-only secret.\"\n    },\n    \"value\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"description\": \"The value.\"\n    },\n    \"environmentId\": {\n      \"description\": \"Preview environment slug or id (omit for Main).\",\n      \"type\": \"string\"\n    },\n    \"idempotencyKey\": {\n      \"description\": \"One caller-persisted key for this exact live intent. Reuse it only when retrying the same request; a replay is historical and must be followed by the operation's reconcile read when current state matters.\",\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 200\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"name\",\n    \"value\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_variable_set",
      "name": "fs_variable_set",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Creates an immutable variable generation. An FS_PUBLIC_-prefixed name is public (inlined into the frontend bundle); any other name is a write-only secret whose plaintext is accepted once and never returned.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"name\": {\n      \"type\": \"string\",\n      \"description\": \"Variable name, e.g. POSTHOG_TOKEN. The name is the class: an FS_PUBLIC_ prefix makes it public (inlined into the frontend bundle, readable by every visitor); any other name is a write-only secret.\"\n    },\n    \"value\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"description\": \"The value.\"\n    },\n    \"environmentId\": {\n      \"description\": \"Preview environment slug or id (omit for Main).\",\n      \"type\": \"string\"\n    },\n    \"idempotencyKey\": {\n      \"description\": \"One caller-persisted key for this exact live intent. Reuse it only when retrying the same request; a replay is historical and must be followed by the operation's reconcile read when current state matters.\",\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 200\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"name\",\n    \"value\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_webhook_create",
      "name": "fs_webhook_create",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Create an outbound webhook endpoint for a business. Returns the signing secret once.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"url\": {\n      \"type\": \"string\",\n      \"format\": \"uri\",\n      \"description\": \"HTTPS receiver URL.\"\n    },\n    \"events\": {\n      \"minItems\": 1,\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Webhook event names to subscribe to.\"\n    },\n    \"environmentId\": {\n      \"description\": \"Only deliver events from this environment (default: every environment).\",\n      \"type\": \"string\"\n    },\n    \"idempotencyKey\": {\n      \"description\": \"One caller-persisted key for this exact live intent. Reuse it only when retrying the same request; a replay is historical and must be followed by the operation's reconcile read when current state matters.\",\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 200\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"url\",\n    \"events\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_webhook_delete",
      "name": "fs_webhook_delete",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Delete an outbound webhook endpoint.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"webhookId\": {\n      \"type\": \"string\",\n      \"description\": \"The webhook endpoint id.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"webhookId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_webhook_deliveries",
      "name": "fs_webhook_deliveries",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "List recent delivery attempts for a webhook endpoint. Payload and response body are intentionally omitted by Core.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"webhookId\": {\n      \"type\": \"string\",\n      \"description\": \"The webhook endpoint id.\"\n    },\n    \"limit\": {\n      \"description\": \"Max rows to return.\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"webhookId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_webhook_event_types",
      "name": "fs_webhook_event_types",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "List the event names a webhook endpoint can subscribe to, with descriptions.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_webhook_list",
      "name": "fs_webhook_list",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "List API-managed outbound webhook endpoints for a business. Read-only; signing secrets are never returned.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"limit\": {\n      \"description\": \"Max rows to return.\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_webhook_rotate_secret",
      "name": "fs_webhook_rotate_secret",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Issue a replacement signing secret for a webhook endpoint. Returns the new secret once; deliveries carry both signatures for 24 hours so the receiver can roll over without a gap.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"webhookId\": {\n      \"type\": \"string\",\n      \"description\": \"The webhook endpoint id.\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"webhookId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_webhook_test",
      "name": "fs_webhook_test",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Send a signed test event to an API-managed webhook endpoint and persist the delivery result.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"webhookId\": {\n      \"type\": \"string\",\n      \"description\": \"The webhook endpoint id.\"\n    },\n    \"type\": {\n      \"description\": \"Envelope type to send: one of subscription.created, subscription.updated, subscription.canceled, payment.succeeded, payment.failed, entitlement.changed, usage.threshold_reached, webhook.test. A catalog event is delivered with a realistic sample payload. Defaults to webhook.test.\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"webhookId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "mcp.fs_webhook_update",
      "name": "fs_webhook_update",
      "kind": "mcp",
      "collection": "cli",
      "page": "generated/cli/mcp",
      "source": "apps/cli/src/operations/registry.ts",
      "description": "Update an API-managed webhook endpoint's URL, event list, environment scope and/or enabled state. Use fs_webhook_rotate_secret for a new signing secret.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"businessId\": {\n      \"type\": \"string\",\n      \"description\": \"The business id or slug.\"\n    },\n    \"webhookId\": {\n      \"type\": \"string\",\n      \"description\": \"The webhook endpoint id.\"\n    },\n    \"url\": {\n      \"description\": \"Replacement HTTPS receiver URL.\",\n      \"type\": \"string\",\n      \"format\": \"uri\"\n    },\n    \"events\": {\n      \"description\": \"Replacement webhook event list.\",\n      \"minItems\": 1,\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"environmentId\": {\n      \"description\": \"Only deliver events from this environment; null clears the scope (every environment).\",\n      \"anyOf\": [\n        {\n          \"type\": \"string\"\n        },\n        {\n          \"type\": \"null\"\n        }\n      ]\n    },\n    \"enabled\": {\n      \"description\": \"Enable or disable delivery.\",\n      \"type\": \"boolean\"\n    }\n  },\n  \"required\": [\n    \"businessId\",\n    \"webhookId\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "operationClass": "operate",
      "guide": "cli/overview"
    },
    {
      "id": "operation.agents.disable",
      "name": "agents.disable",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write agents through farthershore agents disable.",
      "operationClass": "operate",
      "permission": "agent:configure",
      "unavailableReason": null,
      "guide": "agents/platform-agent"
    },
    {
      "id": "operation.agents.enable",
      "name": "agents.enable",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write agents through farthershore agents enable.",
      "operationClass": "operate",
      "permission": "agent:configure",
      "unavailableReason": null,
      "guide": "agents/platform-agent"
    },
    {
      "id": "operation.agents.list",
      "name": "agents.list",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read agents through farthershore agents list.",
      "operationClass": "operate",
      "permission": "agent:read",
      "unavailableReason": null,
      "guide": "agents/platform-agent"
    },
    {
      "id": "operation.agents.runs.show",
      "name": "agents.runs.show",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read agents through farthershore agents runs-show.",
      "operationClass": "operate",
      "permission": "agent:read",
      "unavailableReason": null,
      "guide": "agents/platform-agent"
    },
    {
      "id": "operation.agents.status",
      "name": "agents.status",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read agents through farthershore agents status.",
      "operationClass": "operate",
      "permission": "agent:read",
      "unavailableReason": null,
      "guide": "agents/platform-agent"
    },
    {
      "id": "operation.agreement.amend",
      "name": "agreement.amend",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write agreements through farthershore agreements amend.",
      "operationClass": "operate",
      "permission": "agreement:amend",
      "unavailableReason": null,
      "guide": "reference/economic-agreements"
    },
    {
      "id": "operation.agreement.create",
      "name": "agreement.create",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write agreements through farthershore agreements create.",
      "operationClass": "operate",
      "permission": "agreement:create",
      "unavailableReason": null,
      "guide": "reference/economic-agreements"
    },
    {
      "id": "operation.agreement.read",
      "name": "agreement.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read agreements through farthershore agreements list.",
      "operationClass": "operate",
      "permission": "agreement:read",
      "unavailableReason": null,
      "guide": "reference/economic-agreements"
    },
    {
      "id": "operation.analytics.latency",
      "name": "analytics.latency",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read analytics through farthershore analytics latency.",
      "operationClass": "operate",
      "permission": "analytics:read",
      "unavailableReason": null,
      "guide": "operate/observability-and-troubleshooting"
    },
    {
      "id": "operation.analytics.log",
      "name": "analytics.log",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read analytics through farthershore analytics log.",
      "operationClass": "operate",
      "permission": "analytics:read",
      "unavailableReason": null,
      "guide": "operate/observability-and-troubleshooting"
    },
    {
      "id": "operation.analytics.timeseries",
      "name": "analytics.timeseries",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read analytics through farthershore analytics timeseries.",
      "operationClass": "operate",
      "permission": "analytics:read",
      "unavailableReason": null,
      "guide": "operate/observability-and-troubleshooting"
    },
    {
      "id": "operation.analytics.top",
      "name": "analytics.top",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read analytics through farthershore analytics top.",
      "operationClass": "operate",
      "permission": "analytics:read",
      "unavailableReason": null,
      "guide": "operate/observability-and-troubleshooting"
    },
    {
      "id": "operation.apply_timeline.list",
      "name": "apply_timeline.list",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read change-sets through farthershore apply-timeline list.",
      "operationClass": "operate",
      "permission": "apply_timeline:read",
      "unavailableReason": null,
      "guide": "operate/apply-timeline"
    },
    {
      "id": "operation.apply_timeline.read",
      "name": "apply_timeline.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read change-sets through farthershore apply-timeline inspect.",
      "operationClass": "operate",
      "permission": "apply_timeline:read",
      "unavailableReason": null,
      "guide": "operate/apply-timeline"
    },
    {
      "id": "operation.audit_log.business.export",
      "name": "audit_log.business.export",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read audit-logs through farthershore audit-log business-export.",
      "operationClass": "operate",
      "permission": "audit_log:export",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.audit_log.business.read",
      "name": "audit_log.business.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read audit-logs through farthershore audit-log business-list.",
      "operationClass": "operate",
      "permission": "audit_log:read",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.audit_log.export",
      "name": "audit_log.export",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read audit-logs through farthershore audit-log export.",
      "operationClass": "operate",
      "permission": "audit_log:export",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.audit_log.read",
      "name": "audit_log.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read audit-logs through farthershore audit-log list.",
      "operationClass": "operate",
      "permission": "audit_log:read",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.auth_strategy.update",
      "name": "auth_strategy.update",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "Declare the auth strategy on `fs.business()` in the business repo's business/ folder and push — the platform applies it.",
      "operationClass": "contract",
      "permission": "local_repository:write",
      "unavailableReason": "repo_authored",
      "guide": "define/tenancy"
    },
    {
      "id": "operation.auth.context.issue",
      "name": "auth.context.issue",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write authentication through farthershore auth context-token.",
      "operationClass": "operate",
      "permission": "auth_context:issue",
      "unavailableReason": null,
      "guide": "agents/overview"
    },
    {
      "id": "operation.auth.context.read",
      "name": "auth.context.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "Use `farthershore auth whoami`.",
      "operationClass": "operate",
      "permission": "auth_context:read",
      "unavailableReason": "served_by_other_command",
      "guide": "agents/overview"
    },
    {
      "id": "operation.automation_rule.create",
      "name": "automation_rule.create",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write automation through farthershore automation create.",
      "operationClass": "operate",
      "permission": "automation_rule:create",
      "unavailableReason": null,
      "guide": "agents/automation"
    },
    {
      "id": "operation.automation_rule.delete",
      "name": "automation_rule.delete",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write automation through farthershore automation delete.",
      "operationClass": "operate",
      "permission": "automation_rule:delete",
      "unavailableReason": null,
      "guide": "agents/automation"
    },
    {
      "id": "operation.automation_rule.read",
      "name": "automation_rule.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read automation through farthershore automation list.",
      "operationClass": "operate",
      "permission": "automation_rule:read",
      "unavailableReason": null,
      "guide": "agents/automation"
    },
    {
      "id": "operation.automation_rule.update",
      "name": "automation_rule.update",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write automation through farthershore automation update.",
      "operationClass": "operate",
      "permission": "automation_rule:update",
      "unavailableReason": null,
      "guide": "agents/automation"
    },
    {
      "id": "operation.backend.bind",
      "name": "backend.bind",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write backends through farthershore backend bind.",
      "operationClass": "operate",
      "permission": "backend:bind",
      "unavailableReason": null,
      "guide": "backend/transport-modes"
    },
    {
      "id": "operation.backend.create",
      "name": "backend.create",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write backends through farthershore backend create.",
      "operationClass": "operate",
      "permission": "backend:create",
      "unavailableReason": null,
      "guide": "backend/transport-modes"
    },
    {
      "id": "operation.backend.define",
      "name": "backend.define",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "Declare the backend with `fs.backend()` in the business repo's business/ folder and push — the platform applies it.",
      "operationClass": "contract",
      "permission": "local_repository:write",
      "unavailableReason": "repo_authored",
      "guide": "backend/transport-modes"
    },
    {
      "id": "operation.backend.delete",
      "name": "backend.delete",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write backends through farthershore backend delete.",
      "operationClass": "operate",
      "permission": "backend:delete",
      "unavailableReason": null,
      "guide": "backend/transport-modes"
    },
    {
      "id": "operation.backend.read",
      "name": "backend.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read backends through farthershore backend list.",
      "operationClass": "operate",
      "permission": "backend:read",
      "unavailableReason": null,
      "guide": "backend/transport-modes"
    },
    {
      "id": "operation.backend.status.read",
      "name": "backend.status.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "`farthershore backend list` (backend.read) already returns each backend's derived status — there is no separate status command.",
      "operationClass": "operate",
      "permission": "backend:read",
      "unavailableReason": "served_by_other_command",
      "guide": "backend/transport-modes"
    },
    {
      "id": "operation.brand.update",
      "name": "brand.update",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write branding through farthershore business update.",
      "operationClass": "operate",
      "permission": "brand:update",
      "unavailableReason": null,
      "guide": "operations/overview"
    },
    {
      "id": "operation.bulletin.ack",
      "name": "bulletin.ack",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write agents through farthershore bulletin ack.",
      "operationClass": "operate",
      "permission": "bulletin:ack",
      "unavailableReason": null,
      "guide": "agents/platform-agent"
    },
    {
      "id": "operation.bulletin.list",
      "name": "bulletin.list",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read agents through farthershore bulletin list.",
      "operationClass": "operate",
      "permission": "bulletin:read",
      "unavailableReason": null,
      "guide": "agents/platform-agent"
    },
    {
      "id": "operation.bulletin.read",
      "name": "bulletin.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read agents through farthershore bulletin show.",
      "operationClass": "operate",
      "permission": "bulletin:read",
      "unavailableReason": null,
      "guide": "agents/platform-agent"
    },
    {
      "id": "operation.bulletin.resolve",
      "name": "bulletin.resolve",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write agents through farthershore bulletin resolve.",
      "operationClass": "operate",
      "permission": "bulletin:resolve",
      "unavailableReason": null,
      "guide": "agents/platform-agent"
    },
    {
      "id": "operation.business_dependents.read",
      "name": "business_dependents.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read businesses through farthershore dependents list.",
      "operationClass": "operate",
      "permission": "business_dependents:read",
      "unavailableReason": null,
      "guide": "operations/overview"
    },
    {
      "id": "operation.business_variable.create",
      "name": "business_variable.create",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write variables through farthershore variables set.",
      "operationClass": "operate",
      "permission": "business_variable:create",
      "unavailableReason": null,
      "guide": "frontend/variables"
    },
    {
      "id": "operation.business_variable.delete",
      "name": "business_variable.delete",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write variables through farthershore variables rm.",
      "operationClass": "operate",
      "permission": "business_variable:delete",
      "unavailableReason": null,
      "guide": "frontend/variables"
    },
    {
      "id": "operation.business_variable.operation.read",
      "name": "business_variable.operation.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read variables through farthershore variables status.",
      "operationClass": "operate",
      "permission": "business_variable:operation_read",
      "unavailableReason": null,
      "guide": "frontend/variables"
    },
    {
      "id": "operation.business_variable.read",
      "name": "business_variable.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read variables through farthershore variables list.",
      "operationClass": "operate",
      "permission": "business_variable:read",
      "unavailableReason": null,
      "guide": "frontend/variables"
    },
    {
      "id": "operation.business_variable.revoke",
      "name": "business_variable.revoke",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write variables through farthershore variables revoke.",
      "operationClass": "operate",
      "permission": "business_variable:revoke",
      "unavailableReason": null,
      "guide": "frontend/variables"
    },
    {
      "id": "operation.business_variable.rotate",
      "name": "business_variable.rotate",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write variables through farthershore variables rotate.",
      "operationClass": "operate",
      "permission": "business_variable:rotate",
      "unavailableReason": null,
      "guide": "frontend/variables"
    },
    {
      "id": "operation.business.compile",
      "name": "business.compile",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read businesses through farthershore validate.",
      "operationClass": "operate",
      "permission": "business:compile",
      "unavailableReason": null,
      "guide": "get-started/quickstart"
    },
    {
      "id": "operation.business.config_attempts.read",
      "name": "business.config_attempts.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read businesses through farthershore business config-attempts.",
      "operationClass": "operate",
      "permission": "business:read",
      "unavailableReason": null,
      "guide": "get-started/quickstart"
    },
    {
      "id": "operation.business.contract_field.update",
      "name": "business.contract_field.update",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "Declare the field (name / meters / subscriberChangePolicy) on `fs.business()` in the business repo's business/ folder and push — the platform applies it.",
      "operationClass": "contract",
      "permission": "local_repository:write",
      "unavailableReason": "repo_authored",
      "guide": "get-started/quickstart"
    },
    {
      "id": "operation.business.contract.read",
      "name": "business.contract.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read businesses through farthershore business contract.",
      "operationClass": "contract",
      "permission": "business:read",
      "unavailableReason": null,
      "guide": "get-started/quickstart"
    },
    {
      "id": "operation.business.cors.update",
      "name": "business.cors.update",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "Run `farthershore business update <business-id> --allowed-origins <origins>` (or `--clear-allowed-origins`). That shared metadata command is registered under `brand.update`.",
      "operationClass": "operate",
      "permission": "business:cors_update",
      "unavailableReason": "served_by_other_command",
      "guide": "get-started/quickstart"
    },
    {
      "id": "operation.business.create",
      "name": "business.create",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write businesses through farthershore business create.",
      "operationClass": "operate",
      "permission": "business:create",
      "unavailableReason": null,
      "guide": "get-started/quickstart"
    },
    {
      "id": "operation.business.delete",
      "name": "business.delete",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write businesses through farthershore business delete.",
      "operationClass": "operate",
      "permission": "business:delete",
      "unavailableReason": null,
      "guide": "get-started/quickstart"
    },
    {
      "id": "operation.business.docs.disable",
      "name": "business.docs.disable",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write businesses through farthershore business docs disable.",
      "operationClass": "operate",
      "permission": "business:docs_update",
      "unavailableReason": null,
      "guide": "get-started/quickstart"
    },
    {
      "id": "operation.business.docs.enable",
      "name": "business.docs.enable",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write businesses through farthershore business docs enable.",
      "operationClass": "operate",
      "permission": "business:docs_update",
      "unavailableReason": null,
      "guide": "get-started/quickstart"
    },
    {
      "id": "operation.business.list",
      "name": "business.list",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read businesses through farthershore business list.",
      "operationClass": "operate",
      "permission": "business:read",
      "unavailableReason": null,
      "guide": "get-started/quickstart"
    },
    {
      "id": "operation.business.preview_env.set",
      "name": "business.preview_env.set",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write businesses through farthershore business preview-env set.",
      "operationClass": "operate",
      "permission": "business:preview_env_update",
      "unavailableReason": null,
      "guide": "get-started/quickstart"
    },
    {
      "id": "operation.business.publish",
      "name": "business.publish",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write lifecycle through farthershore business publish.",
      "operationClass": "operate",
      "permission": "business:publish",
      "unavailableReason": null,
      "guide": "get-started/quickstart"
    },
    {
      "id": "operation.business.read",
      "name": "business.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read businesses through farthershore business show.",
      "operationClass": "operate",
      "permission": "business:read",
      "unavailableReason": null,
      "guide": "get-started/quickstart"
    },
    {
      "id": "operation.business.rollback",
      "name": "business.rollback",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write lifecycle through farthershore business rollback.",
      "operationClass": "operate",
      "permission": "business:rollback",
      "unavailableReason": null,
      "guide": "get-started/quickstart"
    },
    {
      "id": "operation.business.routes.read",
      "name": "business.routes.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read businesses through farthershore business routes.",
      "operationClass": "contract",
      "permission": "business:read",
      "unavailableReason": null,
      "guide": "get-started/quickstart"
    },
    {
      "id": "operation.business.status",
      "name": "business.status",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read businesses through farthershore business status.",
      "operationClass": "operate",
      "permission": "business:read",
      "unavailableReason": null,
      "guide": "get-started/quickstart"
    },
    {
      "id": "operation.business.subdomain_availability.read",
      "name": "business.subdomain_availability.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read businesses through farthershore business subdomain-check.",
      "operationClass": "operate",
      "permission": "business:read",
      "unavailableReason": null,
      "guide": "get-started/quickstart"
    },
    {
      "id": "operation.change_set.preview",
      "name": "change_set.preview",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write change-sets through farthershore proposal preview.",
      "operationClass": "operate",
      "permission": "change_set:propose",
      "unavailableReason": null,
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.change_set.proposal_list",
      "name": "change_set.proposal_list",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read change-sets through farthershore proposal list.",
      "operationClass": "operate",
      "permission": "change_set:read",
      "unavailableReason": null,
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.change_set.proposal_read",
      "name": "change_set.proposal_read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read change-sets through farthershore proposal get.",
      "operationClass": "operate",
      "permission": "change_set:read",
      "unavailableReason": null,
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.change_set.propose",
      "name": "change_set.propose",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write change-sets through farthershore proposal create.",
      "operationClass": "operate",
      "permission": "change_set:propose",
      "unavailableReason": null,
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.consumer.block",
      "name": "consumer.block",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write consumers through farthershore consumer block.",
      "operationClass": "operate",
      "permission": "consumer:block",
      "unavailableReason": null,
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.consumer.migrate_latest",
      "name": "consumer.migrate_latest",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write consumers through farthershore consumer migrate-latest.",
      "operationClass": "operate",
      "permission": "consumer:migrate_latest",
      "unavailableReason": null,
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.consumer.read",
      "name": "consumer.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read consumers through farthershore consumer list.",
      "operationClass": "operate",
      "permission": "consumer:read",
      "unavailableReason": null,
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.consumer.remove",
      "name": "consumer.remove",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write consumers through farthershore consumer remove.",
      "operationClass": "operate",
      "permission": "consumer:remove",
      "unavailableReason": null,
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.consumer.roles.assign",
      "name": "consumer.roles.assign",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write consumers through farthershore consumer rbac assign.",
      "operationClass": "operate",
      "permission": "consumer:roles_assign",
      "unavailableReason": null,
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.denial.read",
      "name": "denial.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read observability through farthershore denial show.",
      "operationClass": "operate",
      "permission": "denial:read",
      "unavailableReason": null,
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "operation.environment.create",
      "name": "environment.create",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write environments through farthershore env create.",
      "operationClass": "operate",
      "permission": "environment:create",
      "unavailableReason": null,
      "guide": "operate/environments"
    },
    {
      "id": "operation.environment.delete",
      "name": "environment.delete",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write environments through farthershore env delete.",
      "operationClass": "operate",
      "permission": "environment:delete",
      "unavailableReason": null,
      "guide": "operate/environments"
    },
    {
      "id": "operation.environment.read",
      "name": "environment.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read environments through farthershore env list.",
      "operationClass": "operate",
      "permission": "environment:read",
      "unavailableReason": null,
      "guide": "operate/environments"
    },
    {
      "id": "operation.frontend.rollback",
      "name": "frontend.rollback",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write frontend through farthershore frontend rollback.",
      "operationClass": "operate",
      "permission": "frontend:rollback",
      "unavailableReason": null,
      "guide": "operate/releases"
    },
    {
      "id": "operation.frontend.status",
      "name": "frontend.status",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read frontend through farthershore frontend status.",
      "operationClass": "operate",
      "permission": "frontend:read",
      "unavailableReason": null,
      "guide": "operate/releases"
    },
    {
      "id": "operation.funding.top_up.purchase",
      "name": "funding.top_up.purchase",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "POST /portal/businesses/:businessId/me/balance-top-up — a signed-in subscriber with invoice:pay starts Stripe Checkout from its own portal. Use the public Frontend SDK fs.core() handoff documented in /cookbook/prepaid-credits; builder CLI and MCP credentials cannot act as the subscriber.",
      "operationClass": "operate",
      "unavailableReason": "subscriber_portal",
      "guide": "cookbook/prepaid-credits"
    },
    {
      "id": "operation.gateway.config",
      "name": "gateway.config",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "Declare the gateway block on `fs.business()` in the business repo's business/ folder and push — the platform applies it.",
      "operationClass": "contract",
      "permission": "local_repository:write",
      "unavailableReason": "repo_authored",
      "guide": "gateway/overview"
    },
    {
      "id": "operation.knowledge.business.read",
      "name": "knowledge.business.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read knowledge through farthershore knowledge business-list.",
      "operationClass": "operate",
      "permission": "knowledge:read",
      "unavailableReason": null,
      "guide": "agents/navigation"
    },
    {
      "id": "operation.knowledge.guide.read",
      "name": "knowledge.guide.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read knowledge through farthershore knowledge list.",
      "operationClass": "operate",
      "permission": "knowledge:read",
      "unavailableReason": null,
      "guide": "agents/navigation"
    },
    {
      "id": "operation.manifest.apply",
      "name": "manifest.apply",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "The repo pipeline applies the compiled IR on a push/release through the same neutral apply service. `farthershore validate` runs the identical verdict locally WITHOUT applying; `farthershore apply-timeline list` shows what the platform applied.",
      "operationClass": "contract",
      "permission": "local_repository:write",
      "unavailableReason": "git_triggered",
      "guide": "define/build-output"
    },
    {
      "id": "operation.meter.define",
      "name": "meter.define",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "Declare the meter with `fs.meter()` in the business repo's business/ folder and push — the platform applies it.",
      "operationClass": "contract",
      "permission": "local_repository:write",
      "unavailableReason": "repo_authored",
      "guide": "define/meters"
    },
    {
      "id": "operation.notification.preferences.read",
      "name": "notification.preferences.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read notifications through farthershore notifications preferences.",
      "operationClass": "operate",
      "permission": "notification:preferences_read",
      "unavailableReason": null,
      "guide": "operate/notifications"
    },
    {
      "id": "operation.notification.preferences.update",
      "name": "notification.preferences.update",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write notifications through farthershore notifications preferences-update.",
      "operationClass": "operate",
      "permission": "notification:preferences_update",
      "unavailableReason": null,
      "guide": "operate/notifications"
    },
    {
      "id": "operation.org_maker_token.approval_list",
      "name": "org_maker_token.approval_list",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read authentication through farthershore token approvals.",
      "operationClass": "operate",
      "permission": "maker_token:create_org",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.org_maker_token.approve",
      "name": "org_maker_token.approve",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write authentication through farthershore token approve.",
      "operationClass": "operate",
      "permission": "maker_token:create_org",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.org_maker_token.create",
      "name": "org_maker_token.create",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write authentication through farthershore token create.",
      "operationClass": "operate",
      "permission": "maker_token:create_org",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.org_maker_token.deny",
      "name": "org_maker_token.deny",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write authentication through farthershore token deny.",
      "operationClass": "operate",
      "permission": "maker_token:create_org",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.org_maker_token.list",
      "name": "org_maker_token.list",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read authentication through farthershore token list.",
      "operationClass": "operate",
      "permission": "maker_token:read",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.org_maker_token.permission_catalog.read",
      "name": "org_maker_token.permission_catalog.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read authentication through farthershore token permission-catalog.",
      "operationClass": "operate",
      "permission": "maker_token:read",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.org_maker_token.revoke",
      "name": "org_maker_token.revoke",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write authentication through farthershore token revoke.",
      "operationClass": "operate",
      "permission": "maker_token:create_org",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.org_maker_token.rotate",
      "name": "org_maker_token.rotate",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write authentication through farthershore token rotate.",
      "operationClass": "operate",
      "permission": "maker_token:create_org",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.org_maker_token.update",
      "name": "org_maker_token.update",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write authentication through farthershore token update.",
      "operationClass": "operate",
      "permission": "maker_token:create_org",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.active.select",
      "name": "organization.active.select",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "Run `farthershore auth organization use <id-or-slug>` to change the stored default organization, or pass `--org <id>` on any command for a one-off selection. The dashboard's active-organization cookie is browser-local and is not emulated.",
      "operationClass": "operate",
      "permission": "organization:read",
      "unavailableReason": "served_by_other_command",
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.bulletin.read",
      "name": "organization.bulletin.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read organizations through farthershore organization bulletin.",
      "operationClass": "operate",
      "permission": "organization_bulletin:read",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.create",
      "name": "organization.create",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write organizations through farthershore organization create.",
      "operationClass": "operate",
      "permission": "organization:create",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.delete",
      "name": "organization.delete",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write organizations through farthershore organization delete.",
      "operationClass": "operate",
      "permission": "organization:delete",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.invitation.accept",
      "name": "organization.invitation.accept",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write organizations through farthershore organization invitation-accept.",
      "operationClass": "operate",
      "permission": "organization_invitation:accept",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.invitation.create",
      "name": "organization.invitation.create",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write organizations through farthershore organization invite.",
      "operationClass": "operate",
      "permission": "organization_invitation:create",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.invitation.list",
      "name": "organization.invitation.list",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read organizations through farthershore organization invitation-list.",
      "operationClass": "operate",
      "permission": "organization_invitation:list",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.invitation.list_sent",
      "name": "organization.invitation.list_sent",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read organizations through farthershore organization invitation-list-sent.",
      "operationClass": "operate",
      "permission": "organization_invitation:list",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.invitation.revoke",
      "name": "organization.invitation.revoke",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write organizations through farthershore organization invitation-revoke.",
      "operationClass": "operate",
      "permission": "organization_invitation:revoke",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.list",
      "name": "organization.list",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read organizations through farthershore organization list.",
      "operationClass": "operate",
      "permission": "organization:read",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.member.list",
      "name": "organization.member.list",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read organizations through farthershore organization members.",
      "operationClass": "operate",
      "permission": "organization_member:list",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.member.remove",
      "name": "organization.member.remove",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write organizations through farthershore organization member-remove.",
      "operationClass": "operate",
      "permission": "organization_member:remove",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.member.update",
      "name": "organization.member.update",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write organizations through farthershore organization member-role.",
      "operationClass": "operate",
      "permission": "organization_member:update",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.overview.read",
      "name": "organization.overview.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read organizations through farthershore organization overview.",
      "operationClass": "operate",
      "permission": "organization:read",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.ownership.transfer",
      "name": "organization.ownership.transfer",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write organizations through farthershore organization ownership-transfer.",
      "operationClass": "operate",
      "permission": "organization:ownership_transfer",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.role.create",
      "name": "organization.role.create",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write organizations through farthershore organization role create.",
      "operationClass": "operate",
      "permission": "organization_role:create",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.role.delete",
      "name": "organization.role.delete",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write organizations through farthershore organization role delete.",
      "operationClass": "operate",
      "permission": "organization_role:delete",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.role.list",
      "name": "organization.role.list",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read organizations through farthershore organization role list.",
      "operationClass": "operate",
      "permission": "organization_role:read",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.role.show",
      "name": "organization.role.show",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read organizations through farthershore organization role show.",
      "operationClass": "operate",
      "permission": "organization_role:read",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.organization.role.update",
      "name": "organization.role.update",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write organizations through farthershore organization role update.",
      "operationClass": "operate",
      "permission": "organization_role:update",
      "unavailableReason": null,
      "guide": "operate/platform-access"
    },
    {
      "id": "operation.persona.bootstrap",
      "name": "persona.bootstrap",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write personas through farthershore persona bootstrap.",
      "operationClass": "operate",
      "permission": "persona:issue",
      "unavailableReason": null,
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.persona.delete",
      "name": "persona.delete",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write personas through farthershore persona delete.",
      "operationClass": "operate",
      "permission": "persona:revoke",
      "unavailableReason": null,
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.persona.local_preview.issue",
      "name": "persona.local_preview.issue",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "Sign a persona in with `farthershore persona login` (hosted portal). This lease is CLI-process-only machinery for the localhost preview that `farthershore frontend dev|preview --live --business --env --persona` drives automatically; never call it by hand.",
      "operationClass": "operate",
      "permission": "persona:issue",
      "unavailableReason": "served_by_other_command",
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.persona.local_preview.renew",
      "name": "persona.local_preview.renew",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "Renewed automatically by the running `farthershore frontend dev|preview --live --persona` process (CLI local-preview proxy); there is no standalone command and nothing to call by hand. Use `farthershore persona login` for hosted sign-in.",
      "operationClass": "operate",
      "permission": "persona:issue",
      "unavailableReason": "served_by_other_command",
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.persona.local_preview.revoke",
      "name": "persona.local_preview.revoke",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "Revoked automatically when the `farthershore frontend dev|preview --live --persona` process exits; a lease otherwise expires within five minutes. Nothing to call by hand.",
      "operationClass": "operate",
      "permission": "persona:issue",
      "unavailableReason": "served_by_other_command",
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.persona.login",
      "name": "persona.login",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write personas through farthershore persona login.",
      "operationClass": "operate",
      "permission": "persona:issue",
      "unavailableReason": null,
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.persona.read",
      "name": "persona.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read personas through farthershore persona list.",
      "operationClass": "operate",
      "permission": "persona:read",
      "unavailableReason": null,
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.persona.rotate",
      "name": "persona.rotate",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write personas through farthershore persona rotate.",
      "operationClass": "operate",
      "permission": "persona:rotate",
      "unavailableReason": null,
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.plan.create",
      "name": "plan.create",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "Declare the plan with `fs.plan()` in the business repo's business/ folder and push — the platform applies it.",
      "operationClass": "contract",
      "permission": "local_repository:write",
      "unavailableReason": "repo_authored",
      "guide": "monetize/plan-changes"
    },
    {
      "id": "operation.plan.delete",
      "name": "plan.delete",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "Declare the removal (delete the `fs.plan()` call) in the business repo's business/ folder and push — the platform applies it.",
      "operationClass": "contract",
      "permission": "local_repository:write",
      "unavailableReason": "repo_authored",
      "guide": "monetize/plan-changes"
    },
    {
      "id": "operation.plan.promote",
      "name": "plan.promote",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "Declare the promoted plan version in the business repo's business/ folder and push — the platform applies it.",
      "operationClass": "contract",
      "permission": "local_repository:write",
      "unavailableReason": "repo_authored",
      "guide": "monetize/plan-changes"
    },
    {
      "id": "operation.plan.read",
      "name": "plan.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read plans through farthershore plan list.",
      "operationClass": "contract",
      "permission": "plan:read",
      "unavailableReason": null,
      "guide": "monetize/plan-changes"
    },
    {
      "id": "operation.plan.rollback",
      "name": "plan.rollback",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "Declare the prior plan shape (revert the commit) in the business repo's business/ folder and push — the platform applies it.",
      "operationClass": "contract",
      "permission": "local_repository:write",
      "unavailableReason": "repo_authored",
      "guide": "monetize/plan-changes"
    },
    {
      "id": "operation.plan.update",
      "name": "plan.update",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "Declare the plan's new shape with `fs.plan()` in the business repo's business/ folder and push — the platform applies it.",
      "operationClass": "contract",
      "permission": "local_repository:write",
      "unavailableReason": "repo_authored",
      "guide": "monetize/plan-changes"
    },
    {
      "id": "operation.plan.variant.create",
      "name": "plan.variant.create",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "Declare the plan variant with `fs.plan()` in the business repo's business/ folder and push — the platform applies it.",
      "operationClass": "contract",
      "permission": "local_repository:write",
      "unavailableReason": "repo_authored",
      "guide": "monetize/plan-changes"
    },
    {
      "id": "operation.promo_code.archive",
      "name": "promo_code.archive",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write promo-codes through farthershore promo-code archive.",
      "operationClass": "operate",
      "permission": "promo_code:archive",
      "unavailableReason": null,
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.promo_code.create",
      "name": "promo_code.create",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write promo-codes through farthershore promo-code create.",
      "operationClass": "operate",
      "permission": "promo_code:create",
      "unavailableReason": null,
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.promo_code.reactivate",
      "name": "promo_code.reactivate",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write promo-codes through farthershore promo-code reactivate.",
      "operationClass": "operate",
      "permission": "promo_code:reactivate",
      "unavailableReason": null,
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.promo_code.read",
      "name": "promo_code.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read promo-codes through farthershore promo-code list.",
      "operationClass": "operate",
      "permission": "promo_code:read",
      "unavailableReason": null,
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.promo_code.update",
      "name": "promo_code.update",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write promo-codes through farthershore promo-code update.",
      "operationClass": "operate",
      "permission": "promo_code:update",
      "unavailableReason": null,
      "guide": "operate/customer-operations"
    },
    {
      "id": "operation.rate_limit.update",
      "name": "rate_limit.update",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "Declare the limits on the plan or route in the business repo's business/ folder and push — the platform applies it.",
      "operationClass": "contract",
      "permission": "local_repository:write",
      "unavailableReason": "repo_authored",
      "guide": "operate/limits"
    },
    {
      "id": "operation.rbac.disable",
      "name": "rbac.disable",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write businesses through farthershore business rbac disable.",
      "operationClass": "operate",
      "permission": "business:rbac_update",
      "unavailableReason": null,
      "guide": "define/team-rbac"
    },
    {
      "id": "operation.rbac.enable",
      "name": "rbac.enable",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write businesses through farthershore business rbac enable.",
      "operationClass": "operate",
      "permission": "business:rbac_update",
      "unavailableReason": null,
      "guide": "define/team-rbac"
    },
    {
      "id": "operation.rbac.read",
      "name": "rbac.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read products through farthershore business rbac.",
      "operationClass": "contract",
      "permission": "rbac:read",
      "unavailableReason": null,
      "guide": "define/team-rbac"
    },
    {
      "id": "operation.rbac.subjects.read",
      "name": "rbac.subjects.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read businesses through farthershore business rbac subjects list.",
      "operationClass": "operate",
      "permission": "rbac:read",
      "unavailableReason": null,
      "guide": "define/team-rbac"
    },
    {
      "id": "operation.resource_count.report",
      "name": "resource_count.report",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write resources through farthershore resource-count report.",
      "operationClass": "operate",
      "permission": "resource_count:report",
      "unavailableReason": null,
      "guide": "define/resources"
    },
    {
      "id": "operation.route.define",
      "name": "route.define",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "Declare the route with `fs.route()` in the business repo's business/ folder and push — the platform applies it.",
      "operationClass": "contract",
      "permission": "local_repository:write",
      "unavailableReason": "repo_authored",
      "guide": "define/routes"
    },
    {
      "id": "operation.runtime_token.mint",
      "name": "runtime_token.mint",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write runtime-tokens through farthershore backend tokens create.",
      "operationClass": "operate",
      "permission": "runtime_token:mint",
      "unavailableReason": null,
      "guide": "backend/runtime-tokens"
    },
    {
      "id": "operation.runtime_token.read",
      "name": "runtime_token.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read runtime-tokens through farthershore backend tokens list.",
      "operationClass": "operate",
      "permission": "runtime_token:read",
      "unavailableReason": null,
      "guide": "backend/runtime-tokens"
    },
    {
      "id": "operation.runtime_token.revoke",
      "name": "runtime_token.revoke",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write runtime-tokens through farthershore backend tokens revoke.",
      "operationClass": "operate",
      "permission": "runtime_token:revoke",
      "unavailableReason": null,
      "guide": "backend/runtime-tokens"
    },
    {
      "id": "operation.runtime_token.rotate",
      "name": "runtime_token.rotate",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write runtime-tokens through farthershore backend tokens rotate.",
      "operationClass": "operate",
      "permission": "runtime_token:rotate",
      "unavailableReason": null,
      "guide": "backend/runtime-tokens"
    },
    {
      "id": "operation.stripe_connection.delete",
      "name": "stripe_connection.delete",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write billing through farthershore stripe disconnect.",
      "operationClass": "operate",
      "permission": "stripe_connection:delete",
      "unavailableReason": null,
      "guide": "monetize/stripe"
    },
    {
      "id": "operation.stripe_connection.read",
      "name": "stripe_connection.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read billing through farthershore stripe status.",
      "operationClass": "operate",
      "permission": "stripe_connection:read",
      "unavailableReason": null,
      "guide": "monetize/stripe"
    },
    {
      "id": "operation.tax_settings.read",
      "name": "tax_settings.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read billing through farthershore tax-settings show.",
      "operationClass": "operate",
      "permission": "tax_settings:read",
      "unavailableReason": null,
      "guide": "monetize/stripe"
    },
    {
      "id": "operation.tax_settings.update",
      "name": "tax_settings.update",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write billing through farthershore tax-settings update.",
      "operationClass": "operate",
      "permission": "tax_settings:update",
      "unavailableReason": null,
      "guide": "monetize/stripe"
    },
    {
      "id": "operation.usage.read",
      "name": "usage.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read usage through farthershore usage summary.",
      "operationClass": "operate",
      "permission": "usage:read",
      "unavailableReason": null,
      "guide": "operate/usage-billing-policy"
    },
    {
      "id": "operation.webhook.create",
      "name": "webhook.create",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write webhooks through farthershore webhook create.",
      "operationClass": "operate",
      "permission": "webhook:create",
      "unavailableReason": null,
      "guide": "define/webhooks"
    },
    {
      "id": "operation.webhook.delete",
      "name": "webhook.delete",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write webhooks through farthershore webhook delete.",
      "operationClass": "operate",
      "permission": "webhook:delete",
      "unavailableReason": null,
      "guide": "define/webhooks"
    },
    {
      "id": "operation.webhook.delivery.read",
      "name": "webhook.delivery.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read webhooks through farthershore webhook deliveries.",
      "operationClass": "operate",
      "permission": "webhook:delivery_read",
      "unavailableReason": null,
      "guide": "define/webhooks"
    },
    {
      "id": "operation.webhook.event_type.read",
      "name": "webhook.event_type.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read webhooks through farthershore webhook event-types.",
      "operationClass": "operate",
      "permission": "webhook:read",
      "unavailableReason": null,
      "guide": "define/webhooks"
    },
    {
      "id": "operation.webhook.listen",
      "name": "webhook.listen",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write webhooks through farthershore webhook listen.",
      "operationClass": "operate",
      "permission": "webhook:create",
      "unavailableReason": null,
      "guide": "define/webhooks"
    },
    {
      "id": "operation.webhook.read",
      "name": "webhook.read",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read webhooks through farthershore webhook list.",
      "operationClass": "operate",
      "permission": "webhook:read",
      "unavailableReason": null,
      "guide": "define/webhooks"
    },
    {
      "id": "operation.webhook.rotate_secret",
      "name": "webhook.rotate_secret",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write webhooks through farthershore webhook rotate.",
      "operationClass": "operate",
      "permission": "webhook:update",
      "unavailableReason": null,
      "guide": "define/webhooks"
    },
    {
      "id": "operation.webhook.test",
      "name": "webhook.test",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write webhooks through farthershore webhook test.",
      "operationClass": "operate",
      "permission": "webhook:test",
      "unavailableReason": null,
      "guide": "define/webhooks"
    },
    {
      "id": "operation.webhook.trigger",
      "name": "webhook.trigger",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write webhooks through farthershore webhook trigger.",
      "operationClass": "operate",
      "permission": "webhook:test",
      "unavailableReason": null,
      "guide": "define/webhooks"
    },
    {
      "id": "operation.webhook.update",
      "name": "webhook.update",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "write webhooks through farthershore webhook update.",
      "operationClass": "operate",
      "permission": "webhook:update",
      "unavailableReason": null,
      "guide": "define/webhooks"
    },
    {
      "id": "operation.workflow.replay",
      "name": "workflow.replay",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read workflows through farthershore workflow-control replay.",
      "operationClass": "operate",
      "permission": "workflow:replay",
      "unavailableReason": null,
      "guide": "operate/apply-timeline"
    },
    {
      "id": "operation.workflow.rollback",
      "name": "workflow.rollback",
      "kind": "operation",
      "collection": "cli",
      "page": "generated/cli/operation-catalog",
      "source": "packages/contracts/src/operation-class.ts",
      "description": "read workflows through farthershore workflow-control rollback-to-config.",
      "operationClass": "operate",
      "permission": "workflow:rollback",
      "unavailableReason": null,
      "guide": "operate/apply-timeline"
    },
    {
      "id": "rest.cancelPortalConsumerSubscription",
      "name": "POST /portal/businesses/{businessId}/me/cancel",
      "kind": "rest",
      "collection": "commerce",
      "page": "generated/commerce/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1cancel/post",
      "description": "Cancel the signed-in consumer's subscription",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"cancelPortalConsumerSubscription\",\n    \"summary\": \"Cancel the signed-in consumer's subscription\",\n    \"tags\": [\n      \"portal-customer\"\n    ],\n    \"security\": [\n      {\n        \"consumerBearerAuth\": []\n      },\n      {\n        \"siteShellServiceJwt\": [],\n        \"personaSessionCookie\": []\n      }\n    ],\n    \"parameters\": [\n      {\n        \"name\": \"businessId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Business identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      }\n    ],\n    \"responses\": {\n      \"200\": {\n        \"description\": \"Cancellation result\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": true\n            }\n          }\n        }\n      },\n      \"400\": {\n        \"description\": \"Bad request\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"403\": {\n        \"description\": \"Forbidden\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"sdk\": {\n      \"usage\": \"client.billing.cancelSubscription(...)\",\n      \"signature\": \"cancelSubscription(input?: {\\n        reason?: string;\\n    }): Promise<CancelSubscriptionResult>;\",\n      \"source\": \"packages/farthershore-js/dist/resources/billing.d.ts#L13\",\n      \"declarationName\": \"BillingResource\",\n      \"page\": \"generated/frontend-sdk/root\",\n      \"typeReferences\": [\n        {\n          \"name\": \"BillPreview\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1284\"\n        },\n        {\n          \"name\": \"CancelSubscriptionResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1122\"\n        },\n        {\n          \"name\": \"ChangePlanResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1144\"\n        },\n        {\n          \"name\": \"RestoreSubscriptionResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1134\"\n        },\n        {\n          \"name\": \"SpendCapResult\",\n          \"source\": \"packages/farthershore-js/dist/resources/billing.d.ts#L5\"\n        },\n        {\n          \"name\": \"Subscription\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L739\"\n        }\n      ]\n    },\n    \"requestValidator\": {\n      \"name\": \"cancelSchema\",\n      \"source\": \"apps/core/src/validation/portal-schemas.ts#L58\",\n      \"declaration\": \"export const cancelSchema = z\\n  .object({\\n    organizationId: z.string().uuid().optional(),\\n    reason: z.string().optional(),\\n    returnUrl: z.string().url().optional(),\\n  })\\n  // .strict() to match the sibling portal schemas (onboarding /\\n  // checkoutSession / restore / changePlan). Unknown keys are rejected\\n  // so a future mass-assignment regression can't sneak in.\\n  .strict();\"\n    }\n  }\n}\n",
      "guide": "commerce/overview"
    },
    {
      "id": "rest.changePortalConsumerPlan",
      "name": "POST /portal/businesses/{businessId}/me/change-plan",
      "kind": "rest",
      "collection": "commerce",
      "page": "generated/commerce/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1change-plan/post",
      "description": "Upgrade or downgrade the signed-in consumer's plan",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"changePortalConsumerPlan\",\n    \"summary\": \"Upgrade or downgrade the signed-in consumer's plan\",\n    \"tags\": [\n      \"portal-customer\"\n    ],\n    \"security\": [\n      {\n        \"consumerBearerAuth\": []\n      },\n      {\n        \"siteShellServiceJwt\": [],\n        \"personaSessionCookie\": []\n      }\n    ],\n    \"parameters\": [\n      {\n        \"name\": \"businessId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Business identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      }\n    ],\n    \"requestBody\": {\n      \"required\": true,\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": true\n          }\n        }\n      }\n    },\n    \"responses\": {\n      \"200\": {\n        \"description\": \"Plan change result\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": true\n            }\n          }\n        }\n      },\n      \"400\": {\n        \"description\": \"Bad request\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"403\": {\n        \"description\": \"Forbidden\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"404\": {\n        \"description\": \"Not found\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"sdk\": {\n      \"usage\": \"client.billing.changePlan(...)\",\n      \"signature\": \"changePlan(input: {\\n        compiledPlanId: string;\\n    }): Promise<ChangePlanResult>;\",\n      \"source\": \"packages/farthershore-js/dist/resources/billing.d.ts#L13\",\n      \"declarationName\": \"BillingResource\",\n      \"page\": \"generated/frontend-sdk/root\",\n      \"typeReferences\": [\n        {\n          \"name\": \"BillPreview\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1284\"\n        },\n        {\n          \"name\": \"CancelSubscriptionResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1122\"\n        },\n        {\n          \"name\": \"ChangePlanResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1144\"\n        },\n        {\n          \"name\": \"RestoreSubscriptionResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1134\"\n        },\n        {\n          \"name\": \"SpendCapResult\",\n          \"source\": \"packages/farthershore-js/dist/resources/billing.d.ts#L5\"\n        },\n        {\n          \"name\": \"Subscription\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L739\"\n        }\n      ]\n    },\n    \"requestValidator\": {\n      \"name\": \"changePlanSchema\",\n      \"source\": \"apps/core/src/validation/portal-schemas.ts#L87\",\n      \"declaration\": \"export const changePlanSchema = z\\n  .object({\\n    compiledPlanId: z.string().min(1, \\\"compiledPlanId is required\\\"),\\n    organizationId: z.string().uuid().optional(),\\n  })\\n  .strict();\"\n    },\n    \"note\": \"SDK/Core mismatch: the SDK advertises successUrl and cancelUrl, but Core's strict validator does not accept those keys. Omit them. The validator below is authoritative for HTTP input; SDK result types describe normalized output, not the exact wire envelope.\"\n  }\n}\n",
      "guide": "commerce/overview"
    },
    {
      "id": "rest.createContextToken",
      "name": "POST /management/businesses/{businessId}/auth/context-token",
      "kind": "rest",
      "collection": "gateway",
      "page": "generated/gateway/http",
      "source": "apps/core/openapi.json#/paths/~1management~1businesses~1{businessId}~1auth~1context-token/post",
      "description": "Create a signed context token (fsc_) for gateway auth",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"createContextToken\",\n    \"summary\": \"Create a signed context token (fsc_) for gateway auth\",\n    \"tags\": [\n      \"Management Billing\"\n    ],\n    \"security\": [\n      {\n        \"browserBearerAuth\": []\n      },\n      {\n        \"cliUserSessionBearerAuth\": []\n      },\n      {\n        \"makerTokenAccessBearerAuth\": []\n      }\n    ],\n    \"x-farthershore-agent-operations\": [\n      \"auth.context.issue\"\n    ],\n    \"x-farthershore-agent-target\": {\n      \"kind\": \"path\",\n      \"targetKind\": \"business\",\n      \"parameter\": \"businessId\"\n    },\n    \"x-farthershore-agent-retry\": [\n      {\n        \"operationKey\": \"auth.context.issue\",\n        \"kind\": \"no_automatic_retry\",\n        \"keyRequired\": false,\n        \"enforcement\": \"reconcile_before_repeat\",\n        \"responseSemantics\": \"outcome_may_be_unknown\"\n      }\n    ],\n    \"requestBody\": {\n      \"required\": true,\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": true\n          }\n        }\n      }\n    },\n    \"responses\": {\n      \"200\": {\n        \"description\": \"Signed context token\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": true\n            }\n          }\n        }\n      },\n      \"400\": {\n        \"description\": \"Bad request\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"403\": {\n        \"description\": \"Forbidden\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"404\": {\n        \"description\": \"Not found\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"requestValidator\": {\n      \"name\": \"contextTokenSchema\",\n      \"source\": \"apps/core/src/validation/management-billing-schemas.ts#L93\",\n      \"declaration\": \"export const contextTokenSchema = z.object({\\n  externalOrgId: z.string().min(1).max(255),\\n  actorType: z.enum([\\\"org\\\", \\\"user\\\"]).optional(),\\n  actorId: z.string().optional(),\\n  ttlSeconds: z.number().int().min(60).max(86400).default(3600),\\n});\"\n    },\n    \"responseEvidence\": {\n      \"name\": \"MintContextTokenSuccess\",\n      \"source\": \"apps/core/src/services/management/mint-context-token.ts#L31\",\n      \"declaration\": \"type MintContextTokenSuccess = {\\n  ok: true;\\n  data: { token: string; expiresAt: string };\\n};\"\n    },\n    \"note\": \"No public SDK method. Use the management credential context in the owning gateway guide. HTTP success is { data: { token, expiresAt } }; ok:true is an internal service discriminator and is not part of the HTTP body.\"\n  }\n}\n",
      "guide": "backend/consume"
    },
    {
      "id": "rest.createPortalBillingPortalSession",
      "name": "POST /portal/businesses/{businessId}/me/billing-portal-session",
      "kind": "rest",
      "collection": "commerce",
      "page": "generated/commerce/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1billing-portal-session/post",
      "description": "Create a Stripe billing portal session for subscription management",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"createPortalBillingPortalSession\",\n    \"summary\": \"Create a Stripe billing portal session for subscription management\",\n    \"tags\": [\n      \"portal-customer\"\n    ],\n    \"security\": [\n      {\n        \"consumerBearerAuth\": []\n      },\n      {\n        \"siteShellServiceJwt\": [],\n        \"personaSessionCookie\": []\n      }\n    ],\n    \"parameters\": [\n      {\n        \"name\": \"businessId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Business identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      }\n    ],\n    \"requestBody\": {\n      \"required\": true,\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": true\n          }\n        }\n      }\n    },\n    \"responses\": {\n      \"200\": {\n        \"description\": \"Billing portal session created\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": true\n            }\n          }\n        }\n      },\n      \"400\": {\n        \"description\": \"Bad request\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"403\": {\n        \"description\": \"Forbidden\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"404\": {\n        \"description\": \"Not found\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"sdk\": {\n      \"usage\": \"client.billing.openBillingPortal(...)\",\n      \"signature\": \"openBillingPortal(input?: {\\n        returnUrl?: string;\\n    }): Promise<{\\n        url: string;\\n    }>;\",\n      \"source\": \"packages/farthershore-js/dist/resources/billing.d.ts#L13\",\n      \"declarationName\": \"BillingResource\",\n      \"page\": \"generated/frontend-sdk/root\",\n      \"typeReferences\": [\n        {\n          \"name\": \"BillPreview\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1284\"\n        },\n        {\n          \"name\": \"CancelSubscriptionResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1122\"\n        },\n        {\n          \"name\": \"ChangePlanResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1144\"\n        },\n        {\n          \"name\": \"RestoreSubscriptionResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1134\"\n        },\n        {\n          \"name\": \"SpendCapResult\",\n          \"source\": \"packages/farthershore-js/dist/resources/billing.d.ts#L5\"\n        },\n        {\n          \"name\": \"Subscription\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L739\"\n        }\n      ]\n    },\n    \"requestValidator\": {\n      \"name\": \"billingPortalSessionSchema\",\n      \"source\": \"apps/core/src/validation/portal-subscription-schemas.ts#L4\",\n      \"declaration\": \"export const billingPortalSessionSchema = z.object({\\n  returnUrl: z.string().url().optional(),\\n});\"\n    }\n  }\n}\n",
      "guide": "commerce/overview"
    },
    {
      "id": "rest.createPortalCheckoutSession",
      "name": "POST /portal/businesses/{businessId}/me/checkout-session",
      "kind": "rest",
      "collection": "commerce",
      "page": "generated/commerce/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1checkout-session/post",
      "description": "Create a Stripe Checkout session for the signed-in consumer",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"createPortalCheckoutSession\",\n    \"summary\": \"Create a Stripe Checkout session for the signed-in consumer\",\n    \"tags\": [\n      \"portal-customer\"\n    ],\n    \"security\": [\n      {\n        \"consumerBearerAuth\": []\n      },\n      {\n        \"siteShellServiceJwt\": [],\n        \"personaSessionCookie\": []\n      }\n    ],\n    \"parameters\": [\n      {\n        \"name\": \"businessId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Business identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      }\n    ],\n    \"requestBody\": {\n      \"required\": true,\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": true\n          }\n        }\n      }\n    },\n    \"responses\": {\n      \"200\": {\n        \"description\": \"Checkout session created. Repeated calls with the same plan return the same `checkoutAttemptId` and provider URL.\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"oneOf\": [\n                {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"url\",\n                    \"checkoutAttemptId\"\n                  ],\n                  \"properties\": {\n                    \"url\": {\n                      \"type\": \"string\",\n                      \"format\": \"uri\",\n                      \"description\": \"Stripe Checkout session URL\"\n                    },\n                    \"checkoutAttemptId\": {\n                      \"type\": \"string\",\n                      \"description\": \"Stable id of the CheckoutAttempt row\"\n                    }\n                  }\n                },\n                {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"subscriber\",\n                    \"subscription\",\n                    \"checkoutAttemptId\"\n                  ],\n                  \"properties\": {\n                    \"subscriber\": {\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"id\",\n                        \"businessId\",\n                        \"status\"\n                      ],\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"businessId\": {\n                          \"type\": \"string\"\n                        },\n                        \"status\": {\n                          \"type\": \"string\"\n                        }\n                      }\n                    },\n                    \"subscription\": {\n                      \"type\": [\n                        \"object\",\n                        \"null\"\n                      ],\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"compiledPlanId\": {\n                          \"type\": \"string\"\n                        },\n                        \"lifecycle\": {\n                          \"type\": \"string\"\n                        }\n                      }\n                    },\n                    \"checkoutAttemptId\": {\n                      \"type\": \"string\"\n                    },\n                    \"autoApiKey\": {\n                      \"type\": \"object\"\n                    },\n                    \"autoApiKeyError\": {\n                      \"type\": \"string\"\n                    }\n                  }\n                }\n              ],\n              \"description\": \"Discriminated by `url` (paid) vs `subscriber` (free plan). Both shapes carry `checkoutAttemptId`.\"\n            }\n          }\n        }\n      },\n      \"400\": {\n        \"description\": \"Bad request\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"403\": {\n        \"description\": \"Forbidden\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"409\": {\n        \"description\": \"Conflict\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"503\": {\n        \"description\": \"Billing provider unavailable\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"sdk\": {\n      \"usage\": \"client.plans.subscribe(...)\",\n      \"signature\": \"subscribe(input: SubscribeInput): Promise<SubscribeResult>;\",\n      \"source\": \"packages/farthershore-js/dist/resources/plans.d.ts#L61\",\n      \"declarationName\": \"PlansResource\",\n      \"page\": \"generated/frontend-sdk/root\",\n      \"typeReferences\": [\n        {\n          \"name\": \"OnboardingResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1104\"\n        },\n        {\n          \"name\": \"Plan\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L127\"\n        },\n        {\n          \"name\": \"PlanOffer__5ab47cb32b7d\",\n          \"source\": \"packages/farthershore-js/dist/resources/plans.d.ts#L31\"\n        },\n        {\n          \"name\": \"StartOnboardingInput\",\n          \"source\": \"packages/farthershore-js/dist/resources/plans.d.ts#L27\"\n        },\n        {\n          \"name\": \"SubscribeInput\",\n          \"source\": \"packages/farthershore-js/dist/resources/plans.d.ts#L5\"\n        },\n        {\n          \"name\": \"SubscribeResult\",\n          \"source\": \"packages/farthershore-js/dist/resources/plans.d.ts#L44\"\n        }\n      ]\n    },\n    \"requestValidator\": {\n      \"name\": \"checkoutSessionSchema\",\n      \"source\": \"apps/core/src/validation/portal-schemas.ts#L35\",\n      \"declaration\": \"export const checkoutSessionSchema = z\\n  .object({\\n    compiledPlanId: z.string().min(1, \\\"compiledPlanId is required\\\"),\\n    organizationId: z.string().uuid().optional(),\\n    successUrl: z.string().url().optional(),\\n    cancelUrl: z.string().url().optional(),\\n    // E2 (Managed Stripe Price Integrity) — OPTIONAL price-consent echo: the\\n    // `offerFingerprint` from GET /me/plan-offers. When present and stale\\n    // (target plan's economics changed) the route 409s PLAN_OFFER_CHANGED\\n    // before any provider session is created. Absent -> legacy behavior.\\n    offerFingerprint: z.string().min(1).optional(),\\n  })\\n  .strict();\"\n    }\n  }\n}\n",
      "guide": "commerce/overview"
    },
    {
      "id": "rest.createPortalConsumerApiKey",
      "name": "POST /portal/businesses/{businessId}/me/api-keys",
      "kind": "rest",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1api-keys/post",
      "description": "Create a consumer-scoped API key for the signed-in user on a product portal",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"createPortalConsumerApiKey\",\n    \"summary\": \"Create a consumer-scoped API key for the signed-in user on a product portal\",\n    \"tags\": [\n      \"portal-customer\"\n    ],\n    \"security\": [\n      {\n        \"consumerBearerAuth\": []\n      },\n      {\n        \"siteShellServiceJwt\": [],\n        \"personaSessionCookie\": []\n      }\n    ],\n    \"parameters\": [\n      {\n        \"name\": \"businessId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Business identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      }\n    ],\n    \"requestBody\": {\n      \"required\": true,\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": true\n          }\n        }\n      }\n    },\n    \"responses\": {\n      \"201\": {\n        \"description\": \"Customer API key created\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": true\n            }\n          }\n        }\n      },\n      \"400\": {\n        \"description\": \"Bad request\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"403\": {\n        \"description\": \"Forbidden\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"404\": {\n        \"description\": \"Not found\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"sdk\": {\n      \"usage\": \"client.keys.create(...)\",\n      \"signature\": \"create(input?: {\\n        label?: string;\\n        scopes?: string[];\\n        roleKeys?: string[];\\n        restrictedPermissions?: string[];\\n        kind?: \\\"PERSONAL\\\";\\n        /** PERSONAL — mint FOR this member (their `Membership.id`); admin-gated. */\\n        memberId?: string;\\n    }): Promise<CreatedApiKey>;\",\n      \"source\": \"packages/farthershore-js/dist/resources/keys.d.ts#L3\",\n      \"declarationName\": \"KeysResource\",\n      \"page\": \"generated/frontend-sdk/root\",\n      \"typeReferences\": [\n        {\n          \"name\": \"ApiKey\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L347\"\n        },\n        {\n          \"name\": \"CreatedApiKey\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L375\"\n        },\n        {\n          \"name\": \"ServiceAccountsResource\",\n          \"source\": \"packages/farthershore-js/dist/resources/keys.d.ts#L53\"\n        }\n      ]\n    },\n    \"requestValidator\": {\n      \"name\": \"createConsumerApiKeySchema\",\n      \"source\": \"apps/core/src/validation/portal-schemas.ts#L129\",\n      \"declaration\": \"export const createConsumerApiKeySchema = z.object({\\n  label: z.string().max(100, \\\"Label must be at most 100 characters\\\").optional(),\\n  environment: z.enum([\\\"production\\\", \\\"sandbox\\\"]).optional(),\\n  organizationId: z.string().uuid().optional(),\\n  /**\\n   * Phase 3 RBAC: optional scope strings restricting what the gateway will\\n   * permit on this key. Empty / missing array = god-mode (the historical\\n   * behaviour of every existing key). Each entry is validated against the\\n   * `<verb>:<resourcePattern>` grammar in the route handler before persist\\n   * — see `services/scope-matcher.ts`.\\n   */\\n  scopes: z.array(z.string()).max(50, \\\"At most 50 scopes per key\\\").optional(),\\n  /** UA-5 — live role bindings (SubscriberBusinessRole.roleKey refs). The\\n   *  key's effective permission claim tracks the CURRENT role rows; role\\n   *  edits reach the key without reprovisioning. */\\n  roleKeys: z\\n    .array(z.string().min(1).max(80))\\n    .max(20, \\\"At most 20 role bindings per key\\\")\\n    .optional(),\\n  /** UA-5 — optional Stripe-style narrowing of the bound roles' union. */\\n  restrictedPermissions: z\\n    .array(z.string().min(1).max(160))\\n    .max(100, \\\"At most 100 restricted permissions per key\\\")\\n    .optional(),\\n  /**\\n   * Consumer-principal (D2). Which subject the key credentials:\\n   *  - `PERSONAL` (default) — a member key. Self-mint binds it to the caller;\\n   *    passing `memberId` mints it FOR another member (admin-gated, D2a).\\n   *  - `SERVICE` — an org-owned service key (admin-gated). Attach to an\\n   *    existing account via `serviceAccountId`, or name a new one with\\n   *    `serviceAccountName`.\\n   */\\n  kind: z.enum([\\\"PERSONAL\\\", \\\"SERVICE\\\"]).optional(),\\n  /** PERSONAL — the target member's stable Membership.id to bind the key to\\n   *  (admin-gated when it isn't the caller's own). Omit for self-mint. */\\n  memberId: z.string().uuid().optional(),\\n  /** SERVICE — an existing ServiceAccount.id to attach the key to. */\\n  serviceAccountId: z.string().uuid().optional(),\\n  /** SERVICE — name for a new ServiceAccount when `serviceAccountId` is\\n   *  omitted. */\\n  serviceAccountName: z\\n    .string()\\n    .max(100, \\\"Service account name must be at most 100 characters\\\")\\n    .optional(),\\n});\"\n    },\n    \"note\": \"Use the SDK PERSONAL-key surface. Managed service credentials use the separate serviceAccounts lifecycle; the validator alone does not authorize every key kind.\"\n  }\n}\n",
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "rest.createPortalConsumerBalanceTopUp",
      "name": "POST /portal/businesses/{businessId}/me/balance-top-up",
      "kind": "rest",
      "collection": "commerce",
      "page": "generated/commerce/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1balance-top-up/post",
      "description": "Create a Stripe Checkout session that adds funds to the signed-in consumer's usage balance",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"createPortalConsumerBalanceTopUp\",\n    \"summary\": \"Create a Stripe Checkout session that adds funds to the signed-in consumer's usage balance\",\n    \"tags\": [\n      \"portal-customer\"\n    ],\n    \"security\": [\n      {\n        \"consumerBearerAuth\": []\n      },\n      {\n        \"siteShellServiceJwt\": [],\n        \"personaSessionCookie\": []\n      }\n    ],\n    \"parameters\": [\n      {\n        \"name\": \"businessId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Business identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      }\n    ],\n    \"requestBody\": {\n      \"required\": true,\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": true\n          }\n        }\n      }\n    },\n    \"responses\": {\n      \"200\": {\n        \"description\": \"Balance checkout created\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": true\n            }\n          }\n        }\n      },\n      \"400\": {\n        \"description\": \"Bad request\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"403\": {\n        \"description\": \"Forbidden\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"409\": {\n        \"description\": \"Conflict\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"502\": {\n        \"description\": \"Billing provider rejected checkout creation\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"requestValidator\": {\n      \"name\": \"prepaidTopUpSchema\",\n      \"source\": \"apps/core/src/validation/portal-schemas.ts#L108\",\n      \"declaration\": \"export const prepaidTopUpSchema = z\\n  .object({\\n    amountCents: z.number().int().min(100).max(100_000),\\n    requestId: z.string().uuid(),\\n    successUrl: z.string().url().optional(),\\n    cancelUrl: z.string().url().optional(),\\n  })\\n  .strict();\"\n    },\n    \"responseEvidence\": {\n      \"name\": \"CreatePrepaidTopUpResult\",\n      \"source\": \"apps/core/src/services/stripe/prepaid-top-up-checkout.ts#L17\",\n      \"declaration\": \"export type CreatePrepaidTopUpResult =\\n  | Readonly<{ ok: true; checkoutUrl: string }>\\n  | Readonly<{\\n      ok: false;\\n      reason:\\n        | \\\"amount_out_of_range\\\"\\n        | \\\"subscription_or_billing_missing\\\"\\n        | \\\"top_up_not_enabled\\\"\\n        | \\\"policy_unresolvable\\\"\\n        | \\\"stripe_error\\\";\\n      message?: string;\\n    }>;\"\n    },\n    \"note\": \"No typed resource method. A signed-in subscriber calls POST /portal/businesses/:businessId/me/balance-top-up through the public Frontend SDK fs.core() escape hatch, which supplies authentication and portal scope. POST the validator's exact JSON fields. Success is the ok:true branch with checkoutUrl; the other result branches become HTTP errors in apps/core/src/services/portal-customer/create-prepaid-top-up.ts.\"\n  }\n}\n",
      "guide": "commerce/overview"
    },
    {
      "id": "rest.createPortalConsumerGatewayToken",
      "name": "POST /portal/businesses/{businessId}/me/gateway-token",
      "kind": "rest",
      "collection": "gateway",
      "page": "generated/gateway/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1gateway-token/post",
      "description": "Create a short-lived gateway context token for the signed-in consumer",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"createPortalConsumerGatewayToken\",\n    \"summary\": \"Create a short-lived gateway context token for the signed-in consumer\",\n    \"tags\": [\n      \"portal-customer\"\n    ],\n    \"security\": [\n      {\n        \"consumerBearerAuth\": []\n      },\n      {\n        \"siteShellServiceJwt\": [],\n        \"personaSessionCookie\": []\n      }\n    ],\n    \"parameters\": [\n      {\n        \"name\": \"businessId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Business identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      }\n    ],\n    \"requestBody\": {\n      \"required\": true,\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": true\n          }\n        }\n      }\n    },\n    \"responses\": {\n      \"200\": {\n        \"description\": \"Signed gateway context token\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": true\n            }\n          }\n        }\n      },\n      \"400\": {\n        \"description\": \"Bad request\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"403\": {\n        \"description\": \"Forbidden\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"404\": {\n        \"description\": \"Not found\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"409\": {\n        \"description\": \"Conflict\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"requestValidator\": {\n      \"name\": \"gatewayTokenSchema\",\n      \"source\": \"apps/core/src/validation/portal-schemas.ts#L124\",\n      \"declaration\": \"export const gatewayTokenSchema = z.object({}).strict().default({});\"\n    },\n    \"responseEvidence\": {\n      \"name\": \"GatewayContextToken\",\n      \"source\": \"packages/farthershore-js/src/types.ts#L886\",\n      \"declaration\": \"export interface GatewayContextToken {\\n  /** Short-lived `fsc_` bearer accepted by the Gateway for this subscriber. */\\n  token: string;\\n  /** ISO timestamp when the token expires. */\\n  expiresAt: string;\\n}\"\n    },\n    \"note\": \"The hosted SDK's client.route methods mint and cache this token automatically; there is no public manual mint method. The HTTP request body is empty and the response is { data: GatewayContextToken }. Identity comes from the authenticated session and organization context.\"\n  }\n}\n",
      "guide": "backend/consume"
    },
    {
      "id": "rest.createPortalServiceAccount",
      "name": "POST /portal/businesses/{businessId}/me/service-accounts",
      "kind": "rest",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1service-accounts/post",
      "description": "Create or request approval for a managed service account",
      "signature": "{\n  \"operationId\": \"createPortalServiceAccount\",\n  \"summary\": \"Create or request approval for a managed service account\",\n  \"tags\": [\n    \"portal-customer\"\n  ],\n  \"security\": [\n    {\n      \"consumerBearerAuth\": []\n    },\n    {\n      \"siteShellServiceJwt\": [],\n      \"personaSessionCookie\": []\n    }\n  ],\n  \"parameters\": [\n    {\n      \"name\": \"businessId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"description\": \"Business identifier\",\n      \"schema\": {\n        \"type\": \"string\"\n      }\n    },\n    {\n      \"name\": \"Idempotency-Key\",\n      \"in\": \"header\",\n      \"required\": false,\n      \"description\": \"Stable replay key for this provisioning request.\",\n      \"schema\": {\n        \"type\": \"string\",\n        \"minLength\": 1\n      }\n    }\n  ],\n  \"requestBody\": {\n    \"required\": true,\n    \"content\": {\n      \"application/json\": {\n        \"schema\": {\n          \"type\": \"object\",\n          \"additionalProperties\": false,\n          \"required\": [\n            \"name\",\n            \"requestedPermissions\"\n          ],\n          \"properties\": {\n            \"name\": {\n              \"type\": \"string\",\n              \"minLength\": 1,\n              \"maxLength\": 100\n            },\n            \"requestedPermissions\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"type\": \"string\"\n              },\n              \"minItems\": 1,\n              \"maxItems\": 100\n            },\n            \"scopes\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"type\": \"string\",\n                \"minLength\": 1\n              },\n              \"maxItems\": 50\n            },\n            \"usageLimit\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"quantity\",\n                \"mode\"\n              ],\n              \"properties\": {\n                \"quantity\": {\n                  \"type\": \"string\",\n                  \"pattern\": \"^[a-z0-9_]{1,64}$\"\n                },\n                \"mode\": {\n                  \"type\": \"string\",\n                  \"enum\": [\n                    \"BLOCK\",\n                    \"NOTIFY\"\n                  ]\n                },\n                \"notifyAtPct\": {\n                  \"type\": \"number\",\n                  \"minimum\": 0.01,\n                  \"maximum\": 1,\n                  \"description\": \"Required for NOTIFY usage limits and forbidden for BLOCK.\"\n                },\n                \"limitUnits\": {\n                  \"type\": \"integer\",\n                  \"minimum\": 0,\n                  \"maximum\": 2147483647\n                },\n                \"limitCents\": {\n                  \"type\": \"integer\",\n                  \"minimum\": 0,\n                  \"maximum\": 2147483647\n                }\n              },\n              \"oneOf\": [\n                {\n                  \"required\": [\n                    \"quantity\",\n                    \"limitCents\"\n                  ],\n                  \"properties\": {\n                    \"quantity\": {\n                      \"type\": \"string\",\n                      \"const\": \"spend\"\n                    }\n                  },\n                  \"not\": {\n                    \"required\": [\n                      \"limitUnits\"\n                    ]\n                  }\n                },\n                {\n                  \"required\": [\n                    \"quantity\",\n                    \"limitUnits\"\n                  ],\n                  \"properties\": {\n                    \"quantity\": {\n                      \"type\": \"string\",\n                      \"not\": {\n                        \"const\": \"spend\"\n                      }\n                    }\n                  },\n                  \"not\": {\n                    \"required\": [\n                      \"limitCents\"\n                    ]\n                  }\n                }\n              ],\n              \"allOf\": [\n                {\n                  \"if\": {\n                    \"required\": [\n                      \"mode\"\n                    ],\n                    \"properties\": {\n                      \"mode\": {\n                        \"const\": \"NOTIFY\"\n                      }\n                    }\n                  },\n                  \"then\": {\n                    \"required\": [\n                      \"notifyAtPct\"\n                    ]\n                  }\n                },\n                {\n                  \"if\": {\n                    \"required\": [\n                      \"mode\"\n                    ],\n                    \"properties\": {\n                      \"mode\": {\n                        \"const\": \"BLOCK\"\n                      }\n                    }\n                  },\n                  \"then\": {\n                    \"not\": {\n                      \"required\": [\n                        \"notifyAtPct\"\n                      ]\n                    }\n                  }\n                },\n                {\n                  \"if\": {\n                    \"anyOf\": [\n                      {\n                        \"required\": [\n                          \"limitUnits\"\n                        ],\n                        \"properties\": {\n                          \"limitUnits\": {\n                            \"const\": 0\n                          }\n                        }\n                      },\n                      {\n                        \"required\": [\n                          \"limitCents\"\n                        ],\n                        \"properties\": {\n                          \"limitCents\": {\n                            \"const\": 0\n                          }\n                        }\n                      }\n                    ]\n                  },\n                  \"then\": {\n                    \"properties\": {\n                      \"mode\": {\n                        \"const\": \"BLOCK\"\n                      }\n                    }\n                  }\n                }\n              ]\n            }\n          }\n        }\n      }\n    }\n  },\n  \"responses\": {\n    \"201\": {\n      \"description\": \"Service account created; secret returned once\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"status\",\n              \"serviceAccountId\",\n              \"apiKeyId\",\n              \"keyPrefix\",\n              \"plaintext\",\n              \"requestedPermissions\",\n              \"grantedPermissions\"\n            ],\n            \"properties\": {\n              \"status\": {\n                \"type\": \"string\",\n                \"const\": \"ACTIVE\"\n              },\n              \"serviceAccountId\": {\n                \"type\": \"string\",\n                \"format\": \"uuid\"\n              },\n              \"grantedPermissions\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"string\"\n                },\n                \"minItems\": 1,\n                \"maxItems\": 100\n              },\n              \"apiKeyId\": {\n                \"type\": \"string\",\n                \"format\": \"uuid\"\n              },\n              \"keyPrefix\": {\n                \"type\": \"string\"\n              },\n              \"plaintext\": {\n                \"type\": \"string\",\n                \"writeOnly\": true\n              },\n              \"requestedPermissions\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"string\"\n                },\n                \"minItems\": 1,\n                \"maxItems\": 100\n              }\n            }\n          }\n        }\n      }\n    },\n    \"202\": {\n      \"description\": \"Service-account request pending approval; no secret exists\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"status\",\n              \"serviceAccountId\",\n              \"approvalId\",\n              \"requestedPermissions\",\n              \"grantedPermissions\",\n              \"excessPermissions\",\n              \"eligibleApproverIds\"\n            ],\n            \"properties\": {\n              \"status\": {\n                \"type\": \"string\",\n                \"const\": \"PENDING\"\n              },\n              \"serviceAccountId\": {\n                \"type\": \"string\",\n                \"format\": \"uuid\"\n              },\n              \"approvalId\": {\n                \"type\": \"string\",\n                \"format\": \"uuid\"\n              },\n              \"requestedPermissions\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"string\"\n                },\n                \"minItems\": 1,\n                \"maxItems\": 100\n              },\n              \"grantedPermissions\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"string\"\n                },\n                \"maxItems\": 0\n              },\n              \"excessPermissions\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"string\"\n                }\n              },\n              \"eligibleApproverIds\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"string\"\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"400\": {\n      \"description\": \"Bad request\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"401\": {\n      \"description\": \"Unauthorized\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"403\": {\n      \"description\": \"Forbidden\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"404\": {\n      \"description\": \"Not found\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"409\": {\n      \"description\": \"Conflict\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"422\": {\n      \"description\": \"Idempotency key was reused with a different request\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n",
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "rest.createPortalUsageLimit",
      "name": "POST /portal/businesses/{businessId}/me/usage-limits",
      "kind": "rest",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1usage-limits/post",
      "description": "Create a subscriber-owned usage limit",
      "signature": "{\n  \"operationId\": \"createPortalUsageLimit\",\n  \"summary\": \"Create a subscriber-owned usage limit\",\n  \"tags\": [\n    \"portal-customer\"\n  ],\n  \"security\": [\n    {\n      \"consumerBearerAuth\": []\n    },\n    {\n      \"siteShellServiceJwt\": [],\n      \"personaSessionCookie\": []\n    }\n  ],\n  \"parameters\": [\n    {\n      \"name\": \"businessId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"description\": \"Business identifier\",\n      \"schema\": {\n        \"type\": \"string\"\n      }\n    }\n  ],\n  \"requestBody\": {\n    \"required\": true,\n    \"content\": {\n      \"application/json\": {\n        \"schema\": {\n          \"type\": \"object\",\n          \"additionalProperties\": false,\n          \"required\": [\n            \"quantity\",\n            \"mode\",\n            \"scope\"\n          ],\n          \"properties\": {\n            \"quantity\": {\n              \"type\": \"string\",\n              \"pattern\": \"^[a-z0-9_]{1,64}$\"\n            },\n            \"mode\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"BLOCK\",\n                \"NOTIFY\"\n              ]\n            },\n            \"notifyAtPct\": {\n              \"type\": \"number\",\n              \"minimum\": 0.01,\n              \"maximum\": 1,\n              \"description\": \"Required for NOTIFY usage limits and forbidden for BLOCK.\"\n            },\n            \"limitUnits\": {\n              \"type\": \"integer\",\n              \"minimum\": 0,\n              \"maximum\": 2147483647\n            },\n            \"limitCents\": {\n              \"type\": \"integer\",\n              \"minimum\": 0,\n              \"maximum\": 2147483647\n            },\n            \"scope\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"ORG\",\n                \"MEMBER\",\n                \"SERVICE_ACCOUNT\"\n              ]\n            },\n            \"subjectId\": {\n              \"type\": \"string\",\n              \"minLength\": 1,\n              \"maxLength\": 128\n            }\n          },\n          \"allOf\": [\n            {\n              \"oneOf\": [\n                {\n                  \"required\": [\n                    \"quantity\",\n                    \"limitCents\"\n                  ],\n                  \"properties\": {\n                    \"quantity\": {\n                      \"type\": \"string\",\n                      \"const\": \"spend\"\n                    }\n                  },\n                  \"not\": {\n                    \"required\": [\n                      \"limitUnits\"\n                    ]\n                  }\n                },\n                {\n                  \"required\": [\n                    \"quantity\",\n                    \"limitUnits\"\n                  ],\n                  \"properties\": {\n                    \"quantity\": {\n                      \"type\": \"string\",\n                      \"not\": {\n                        \"const\": \"spend\"\n                      }\n                    }\n                  },\n                  \"not\": {\n                    \"required\": [\n                      \"limitCents\"\n                    ]\n                  }\n                }\n              ]\n            },\n            {\n              \"oneOf\": [\n                {\n                  \"required\": [\n                    \"scope\"\n                  ],\n                  \"properties\": {\n                    \"scope\": {\n                      \"type\": \"string\",\n                      \"const\": \"ORG\"\n                    }\n                  },\n                  \"not\": {\n                    \"required\": [\n                      \"subjectId\"\n                    ]\n                  }\n                },\n                {\n                  \"required\": [\n                    \"scope\",\n                    \"subjectId\"\n                  ],\n                  \"properties\": {\n                    \"scope\": {\n                      \"type\": \"string\",\n                      \"const\": \"MEMBER\"\n                    }\n                  }\n                },\n                {\n                  \"required\": [\n                    \"scope\",\n                    \"subjectId\"\n                  ],\n                  \"properties\": {\n                    \"scope\": {\n                      \"type\": \"string\",\n                      \"const\": \"SERVICE_ACCOUNT\"\n                    }\n                  }\n                }\n              ]\n            },\n            {\n              \"if\": {\n                \"required\": [\n                  \"mode\"\n                ],\n                \"properties\": {\n                  \"mode\": {\n                    \"const\": \"NOTIFY\"\n                  }\n                }\n              },\n              \"then\": {\n                \"required\": [\n                  \"notifyAtPct\"\n                ]\n              }\n            },\n            {\n              \"if\": {\n                \"required\": [\n                  \"mode\"\n                ],\n                \"properties\": {\n                  \"mode\": {\n                    \"const\": \"BLOCK\"\n                  }\n                }\n              },\n              \"then\": {\n                \"not\": {\n                  \"required\": [\n                    \"notifyAtPct\"\n                  ]\n                }\n              }\n            },\n            {\n              \"if\": {\n                \"anyOf\": [\n                  {\n                    \"required\": [\n                      \"limitUnits\"\n                    ],\n                    \"properties\": {\n                      \"limitUnits\": {\n                        \"const\": 0\n                      }\n                    }\n                  },\n                  {\n                    \"required\": [\n                      \"limitCents\"\n                    ],\n                    \"properties\": {\n                      \"limitCents\": {\n                        \"const\": 0\n                      }\n                    }\n                  }\n                ]\n              },\n              \"then\": {\n                \"properties\": {\n                  \"mode\": {\n                    \"const\": \"BLOCK\"\n                  }\n                }\n              }\n            }\n          ]\n        }\n      }\n    }\n  },\n  \"responses\": {\n    \"201\": {\n      \"description\": \"Usage limit created\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"id\",\n              \"quantity\",\n              \"mode\",\n              \"period\",\n              \"createdBy\",\n              \"createdAt\",\n              \"updatedAt\",\n              \"scope\"\n            ],\n            \"properties\": {\n              \"id\": {\n                \"type\": \"string\",\n                \"format\": \"uuid\"\n              },\n              \"quantity\": {\n                \"type\": \"string\",\n                \"pattern\": \"^[a-z0-9_]{1,64}$\"\n              },\n              \"mode\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"BLOCK\",\n                  \"NOTIFY\"\n                ]\n              },\n              \"notifyAtPct\": {\n                \"type\": \"number\",\n                \"minimum\": 0.01,\n                \"maximum\": 1,\n                \"description\": \"Required for NOTIFY usage limits and forbidden for BLOCK.\"\n              },\n              \"limitUnits\": {\n                \"type\": \"integer\",\n                \"minimum\": 0,\n                \"maximum\": 2147483647\n              },\n              \"limitCents\": {\n                \"type\": \"integer\",\n                \"minimum\": 0,\n                \"maximum\": 2147483647\n              },\n              \"scope\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"ORG\",\n                  \"MEMBER\",\n                  \"SERVICE_ACCOUNT\"\n                ]\n              },\n              \"subjectId\": {\n                \"type\": \"string\",\n                \"minLength\": 1,\n                \"maxLength\": 128\n              },\n              \"period\": {\n                \"type\": \"string\",\n                \"const\": \"BILLING_PERIOD\"\n              },\n              \"ceiling\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"limitUnits\": {\n                    \"type\": \"integer\",\n                    \"minimum\": 0\n                  },\n                  \"limitCents\": {\n                    \"type\": \"integer\",\n                    \"minimum\": 0\n                  }\n                },\n                \"description\": \"The builder's own per-billing-period ceiling on this quantity, when the plan declares one. Read-only.\"\n              },\n              \"effectiveWindow\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"strategy\",\n                  \"periodSeconds\"\n                ],\n                \"properties\": {\n                  \"strategy\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"fixed_window\",\n                      \"sliding_window\"\n                    ]\n                  },\n                  \"periodSeconds\": {\n                    \"type\": \"integer\",\n                    \"minimum\": 1\n                  }\n                },\n                \"description\": \"Read-only: how the limit is accounted at the edge. `sliding_window` means the ceiling is a rolling horizon of `periodSeconds` rather than one that resets at the billing-period boundary. Builder-owned; not writable.\"\n              },\n              \"createdBy\": {\n                \"anyOf\": [\n                  {\n                    \"type\": \"string\"\n                  },\n                  {\n                    \"type\": \"null\"\n                  }\n                ]\n              },\n              \"createdAt\": {\n                \"type\": \"string\",\n                \"format\": \"date-time\"\n              },\n              \"updatedAt\": {\n                \"type\": \"string\",\n                \"format\": \"date-time\"\n              }\n            },\n            \"allOf\": [\n              {\n                \"oneOf\": [\n                  {\n                    \"required\": [\n                      \"quantity\",\n                      \"limitCents\"\n                    ],\n                    \"properties\": {\n                      \"quantity\": {\n                        \"type\": \"string\",\n                        \"const\": \"spend\"\n                      }\n                    },\n                    \"not\": {\n                      \"required\": [\n                        \"limitUnits\"\n                      ]\n                    }\n                  },\n                  {\n                    \"required\": [\n                      \"quantity\",\n                      \"limitUnits\"\n                    ],\n                    \"properties\": {\n                      \"quantity\": {\n                        \"type\": \"string\",\n                        \"not\": {\n                          \"const\": \"spend\"\n                        }\n                      }\n                    },\n                    \"not\": {\n                      \"required\": [\n                        \"limitCents\"\n                      ]\n                    }\n                  }\n                ]\n              },\n              {\n                \"oneOf\": [\n                  {\n                    \"required\": [\n                      \"scope\"\n                    ],\n                    \"properties\": {\n                      \"scope\": {\n                        \"type\": \"string\",\n                        \"const\": \"ORG\"\n                      }\n                    },\n                    \"not\": {\n                      \"required\": [\n                        \"subjectId\"\n                      ]\n                    }\n                  },\n                  {\n                    \"required\": [\n                      \"scope\",\n                      \"subjectId\"\n                    ],\n                    \"properties\": {\n                      \"scope\": {\n                        \"type\": \"string\",\n                        \"const\": \"MEMBER\"\n                      }\n                    }\n                  },\n                  {\n                    \"required\": [\n                      \"scope\",\n                      \"subjectId\"\n                    ],\n                    \"properties\": {\n                      \"scope\": {\n                        \"type\": \"string\",\n                        \"const\": \"SERVICE_ACCOUNT\"\n                      }\n                    }\n                  }\n                ]\n              },\n              {\n                \"if\": {\n                  \"required\": [\n                    \"mode\"\n                  ],\n                  \"properties\": {\n                    \"mode\": {\n                      \"const\": \"NOTIFY\"\n                    }\n                  }\n                },\n                \"then\": {\n                  \"required\": [\n                    \"notifyAtPct\"\n                  ]\n                }\n              },\n              {\n                \"if\": {\n                  \"required\": [\n                    \"mode\"\n                  ],\n                  \"properties\": {\n                    \"mode\": {\n                      \"const\": \"BLOCK\"\n                    }\n                  }\n                },\n                \"then\": {\n                  \"not\": {\n                    \"required\": [\n                      \"notifyAtPct\"\n                    ]\n                  }\n                }\n              },\n              {\n                \"if\": {\n                  \"anyOf\": [\n                    {\n                      \"required\": [\n                        \"limitUnits\"\n                      ],\n                      \"properties\": {\n                        \"limitUnits\": {\n                          \"const\": 0\n                        }\n                      }\n                    },\n                    {\n                      \"required\": [\n                        \"limitCents\"\n                      ],\n                      \"properties\": {\n                        \"limitCents\": {\n                          \"const\": 0\n                        }\n                      }\n                    }\n                  ]\n                },\n                \"then\": {\n                  \"properties\": {\n                    \"mode\": {\n                      \"const\": \"BLOCK\"\n                    }\n                  }\n                }\n              }\n            ]\n          }\n        }\n      }\n    },\n    \"400\": {\n      \"description\": \"Bad request\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"401\": {\n      \"description\": \"Unauthorized\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"403\": {\n      \"description\": \"Forbidden\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"404\": {\n      \"description\": \"Not found\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"409\": {\n      \"description\": \"Conflict\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n",
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "rest.deletePortalUsageLimit",
      "name": "DELETE /portal/businesses/{businessId}/me/usage-limits/{limitId}",
      "kind": "rest",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1usage-limits~1{limitId}/delete",
      "description": "Delete a subscriber-owned usage limit",
      "signature": "{\n  \"operationId\": \"deletePortalUsageLimit\",\n  \"summary\": \"Delete a subscriber-owned usage limit\",\n  \"description\": \"Deletes a usage-limit row across the subscription. This is an all-mutation operation and requires subscription-wide usage_limit:delete authority, not just own-row read authority.\",\n  \"tags\": [\n    \"portal-customer\"\n  ],\n  \"security\": [\n    {\n      \"consumerBearerAuth\": []\n    },\n    {\n      \"siteShellServiceJwt\": [],\n      \"personaSessionCookie\": []\n    }\n  ],\n  \"parameters\": [\n    {\n      \"name\": \"businessId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"description\": \"Business identifier\",\n      \"schema\": {\n        \"type\": \"string\"\n      }\n    },\n    {\n      \"name\": \"limitId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"description\": \"Usage-limit identifier\",\n      \"schema\": {\n        \"type\": \"string\"\n      }\n    }\n  ],\n  \"responses\": {\n    \"200\": {\n      \"description\": \"Usage limit deleted\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"id\",\n              \"deleted\"\n            ],\n            \"properties\": {\n              \"id\": {\n                \"type\": \"string\",\n                \"format\": \"uuid\"\n              },\n              \"deleted\": {\n                \"type\": \"boolean\",\n                \"const\": true\n              }\n            }\n          }\n        }\n      }\n    },\n    \"401\": {\n      \"description\": \"Unauthorized\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"403\": {\n      \"description\": \"Forbidden\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"404\": {\n      \"description\": \"Not found\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n",
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "rest.getPortalConsumerBillPreview",
      "name": "GET /portal/businesses/{businessId}/me/bill-preview",
      "kind": "rest",
      "collection": "commerce",
      "page": "generated/commerce/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1bill-preview/get",
      "description": "Return the signed-in consumer's current-window bill preview, computed through the same rating engine and ledger state as invoicing",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"getPortalConsumerBillPreview\",\n    \"summary\": \"Return the signed-in consumer's current-window bill preview, computed through the same rating engine and ledger state as invoicing\",\n    \"description\": \"Requires `invoice:read` — the preview carries the plan fee and every rating window, so it is gated exactly like the invoice surface it previews. A caller with no subscription receives the constant empty preview (200), never a 403, so the status code does not disclose whether the organization has a subscription.\",\n    \"tags\": [\n      \"portal-customer\"\n    ],\n    \"security\": [\n      {\n        \"consumerBearerAuth\": []\n      },\n      {\n        \"siteShellServiceJwt\": [],\n        \"personaSessionCookie\": []\n      }\n    ],\n    \"parameters\": [\n      {\n        \"name\": \"businessId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Business identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      }\n    ],\n    \"responses\": {\n      \"200\": {\n        \"description\": \"Bill preview. `disclosure: \\\"transparent\\\"` → `{ currency, disclosure, recurringFeeCents, windows: [{ windowId, windowStart, windowEnd, chargeCount, ratedNanos }], totals: { ratedNanos, fundedNanos, receivableNanos }, allowances: [{ kind, state, remainingNanos, heldNanos, consumedNanos, expiresAt }], usageRating: { pendingEventCount, unratableEventCount, oldestUnratedServedAt } }`. `totals` sums POSTED charges only, so `usageRating` states the served usage those totals CANNOT include — usage still awaiting rating (`pendingEventCount`, drains on its own) that reached a TERMINAL quarantine and will never be priced (`unratableEventCount`; bookkeeping-only quarantine families such as a retry repair are excluded, so this is the same number the builder-plane `usage summary` reports for the same traffic). All-zero counts mean the totals are the whole bill; a client must not present a `$0` total as final while either count is non-zero. `disclosure: \\\"opaque\\\"` (authored opaque, or the served release's policy cannot be resolved — disclosure fails closed) → `{ currency, disclosure, recurringFeeCents, allowances: [{ kind, state, expiresAt, display }] }` where `display` is the plan-authored `{ kind: \\\"multiplier\\\", allowanceUnits, remainingUnits, consumedUnits }` or `{ kind: \\\"fraction\\\", consumedBasisPoints, remainingBasisPoints }` — never windows, totals, or nanodollar amounts.\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": true\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"403\": {\n        \"description\": \"Forbidden\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"404\": {\n        \"description\": \"Not found\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"sdk\": {\n      \"usage\": \"client.billing.getBillPreview(...)\",\n      \"signature\": \"getBillPreview(opts?: {\\n        signal?: AbortSignal;\\n    }): Promise<BillPreview>;\",\n      \"source\": \"packages/farthershore-js/dist/resources/billing.d.ts#L13\",\n      \"declarationName\": \"BillingResource\",\n      \"page\": \"generated/frontend-sdk/root\",\n      \"typeReferences\": [\n        {\n          \"name\": \"BillPreview\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1284\"\n        },\n        {\n          \"name\": \"CancelSubscriptionResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1122\"\n        },\n        {\n          \"name\": \"ChangePlanResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1144\"\n        },\n        {\n          \"name\": \"RestoreSubscriptionResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1134\"\n        },\n        {\n          \"name\": \"SpendCapResult\",\n          \"source\": \"packages/farthershore-js/dist/resources/billing.d.ts#L5\"\n        },\n        {\n          \"name\": \"Subscription\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L739\"\n        }\n      ]\n    }\n  }\n}\n",
      "guide": "commerce/overview"
    },
    {
      "id": "rest.getPortalConsumerContext",
      "name": "GET /portal/businesses/{businessId}/me",
      "kind": "rest",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me/get",
      "description": "Return the signed-in consumer context for a product portal",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"getPortalConsumerContext\",\n    \"summary\": \"Return the signed-in consumer context for a product portal\",\n    \"tags\": [\n      \"portal-customer\"\n    ],\n    \"security\": [\n      {\n        \"consumerBearerAuth\": []\n      },\n      {\n        \"siteShellServiceJwt\": [],\n        \"personaSessionCookie\": []\n      }\n    ],\n    \"parameters\": [\n      {\n        \"name\": \"businessId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Business identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      }\n    ],\n    \"responses\": {\n      \"200\": {\n        \"description\": \"Consumer portal context. authSession is null except for a trusted site-shell cookie-authenticated test-persona session, where it contains only kind, personaId, userId, organizationId, displayName, and expiresAt (never a token, JWT ID, or raw claims).\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"allOf\": [\n                {\n                  \"type\": \"object\",\n                  \"additionalProperties\": true\n                },\n                {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"authSession\"\n                  ],\n                  \"properties\": {\n                    \"authSession\": {\n                      \"oneOf\": [\n                        {\n                          \"type\": \"null\"\n                        },\n                        {\n                          \"type\": \"object\",\n                          \"additionalProperties\": false,\n                          \"required\": [\n                            \"kind\",\n                            \"personaId\",\n                            \"userId\",\n                            \"organizationId\",\n                            \"displayName\",\n                            \"expiresAt\"\n                          ],\n                          \"properties\": {\n                            \"kind\": {\n                              \"const\": \"test-persona\"\n                            },\n                            \"personaId\": {\n                              \"type\": \"string\"\n                            },\n                            \"userId\": {\n                              \"type\": \"string\"\n                            },\n                            \"organizationId\": {\n                              \"type\": [\n                                \"string\",\n                                \"null\"\n                              ]\n                            },\n                            \"displayName\": {\n                              \"type\": [\n                                \"string\",\n                                \"null\"\n                              ]\n                            },\n                            \"expiresAt\": {\n                              \"type\": \"string\",\n                              \"format\": \"date-time\"\n                            }\n                          }\n                        }\n                      ]\n                    }\n                  }\n                }\n              ]\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"403\": {\n        \"description\": \"Forbidden\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"404\": {\n        \"description\": \"Not found\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"sdk\": {\n      \"usage\": \"client.me(...)\",\n      \"signature\": \"me(opts?: {\\n        signal?: AbortSignal;\\n        /** `null` omits the organization header without changing the shared\\n         * client selection; `undefined` uses that selection. */\\n        organizationId?: string | null;\\n    }): Promise<SubscriberContext | null>;\",\n      \"source\": \"packages/farthershore-js/dist/client.d.ts#L36\",\n      \"declarationName\": \"FartherShoreClient\",\n      \"page\": \"generated/frontend-sdk/root\",\n      \"typeReferences\": [\n        {\n          \"name\": \"AuditLogsResource\",\n          \"source\": \"packages/farthershore-js/dist/resources/account.d.ts#L142\"\n        },\n        {\n          \"name\": \"AuthResource\",\n          \"source\": \"packages/farthershore-js/dist/resources/auth.d.ts#L3\"\n        },\n        {\n          \"name\": \"BillingResource\",\n          \"source\": \"packages/farthershore-js/dist/resources/billing.d.ts#L13\"\n        },\n        {\n          \"name\": \"Bootstrap\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L294\"\n        },\n        {\n          \"name\": \"BusinessResource\",\n          \"source\": \"packages/farthershore-js/dist/resources/business.d.ts#L2\"\n        },\n        {\n          \"name\": \"ClientContext__d9dbf3313290\",\n          \"source\": \"packages/farthershore-js/dist/config.d.ts#L183\"\n        },\n        {\n          \"name\": \"CoreRequest\",\n          \"source\": \"packages/farthershore-js/dist/http.d.ts#L3\"\n        },\n        {\n          \"name\": \"EntitlementsResource\",\n          \"source\": \"packages/farthershore-js/dist/resources/entitlements.d.ts#L16\"\n        },\n        {\n          \"name\": \"FartherShoreApiError\",\n          \"source\": \"packages/farthershore-js/dist/errors/index.d.ts#L49\"\n        },\n        {\n          \"name\": \"KeysResource\",\n          \"source\": \"packages/farthershore-js/dist/resources/keys.d.ts#L3\"\n        },\n        {\n          \"name\": \"LegalAcceptance__cc2291cc0442\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L80\"\n        },\n        {\n          \"name\": \"ManagedIntegration\",\n          \"source\": \"packages/farthershore-js/dist/integrations.d.ts#L6\"\n        },\n        {\n          \"name\": \"NotificationsResource\",\n          \"source\": \"packages/farthershore-js/dist/resources/account.d.ts#L169\"\n        },\n        {\n          \"name\": \"ObservedLimitDeny__ff379deca309\",\n          \"source\": \"packages/farthershore-js/dist/errors/index.d.ts#L580\"\n        },\n        {\n          \"name\": \"OrganizationsResource\",\n          \"source\": \"packages/farthershore-js/dist/resources/account.d.ts#L3\"\n        },\n        {\n          \"name\": \"PlansResource\",\n          \"source\": \"packages/farthershore-js/dist/resources/plans.d.ts#L61\"\n        },\n        {\n          \"name\": \"PrefetchSurface__2b22bd2b6c45\",\n          \"source\": \"packages/farthershore-js/dist/client.d.ts#L24\"\n        },\n        {\n          \"name\": \"RateLimitSnapshot__934527ed940b\",\n          \"source\": \"packages/farthershore-js/dist/errors/index.d.ts#L8\"\n        },\n        {\n          \"name\": \"RbacResource\",\n          \"source\": \"packages/farthershore-js/dist/resources/account.d.ts#L65\"\n        },\n        {\n          \"name\": \"ResourcesResource\",\n          \"source\": \"packages/farthershore-js/dist/resources/resources.d.ts#L25\"\n        },\n        {\n          \"name\": \"RouteResource\",\n          \"source\": \"packages/farthershore-js/dist/resources/route.d.ts#L15\"\n        },\n        {\n          \"name\": \"SubscriberContext\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L897\"\n        },\n        {\n          \"name\": \"TeamResource\",\n          \"source\": \"packages/farthershore-js/dist/resources/account.d.ts#L13\"\n        },\n        {\n          \"name\": \"UsageLimitsResource\",\n          \"source\": \"packages/farthershore-js/dist/resources/usage-limits.d.ts#L3\"\n        },\n        {\n          \"name\": \"UsageResource\",\n          \"source\": \"packages/farthershore-js/dist/resources/usage.d.ts#L7\"\n        }\n      ]\n    }\n  }\n}\n",
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "rest.getPortalConsumerResourceCount",
      "name": "GET /portal/businesses/{businessId}/me/resources/{resource}/count",
      "kind": "rest",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1resources~1{resource}~1count/get",
      "description": "Return the authoritative { count, cap } for one declared counted resource on the signed-in consumer's subscription",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"getPortalConsumerResourceCount\",\n    \"summary\": \"Return the authoritative { count, cap } for one declared counted resource on the signed-in consumer's subscription\",\n    \"tags\": [\n      \"portal-customer\"\n    ],\n    \"security\": [\n      {\n        \"consumerBearerAuth\": []\n      },\n      {\n        \"siteShellServiceJwt\": [],\n        \"personaSessionCookie\": []\n      }\n    ],\n    \"parameters\": [\n      {\n        \"name\": \"businessId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Business identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      },\n      {\n        \"name\": \"resource\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"The declared counted-resource name.\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      },\n      {\n        \"name\": \"subjectId\",\n        \"in\": \"query\",\n        \"required\": false,\n        \"description\": \"For subject-scoped resources: the subject id the count keys on.\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      }\n    ],\n    \"responses\": {\n      \"200\": {\n        \"description\": \"Authoritative resource usage — `{ count, cap }`; `cap` is null when uncapped. Empty subscription → `{ count: 0, cap: null }`.\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": true\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"404\": {\n        \"description\": \"Not found\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"responseEvidence\": {\n      \"name\": \"ResourceUsage\",\n      \"source\": \"apps/core/src/services/resource-counts/resource-usage-service.ts#L35\",\n      \"declaration\": \"export type ResourceUsage = { count: number; cap: number | null };\"\n    },\n    \"note\": \"No typed SDK method for this HTTP read. Use the documented GET path and subjectId query parameter; there is no request body. ResourceUsage is the response body.\"\n  }\n}\n",
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "rest.getPortalConsumerResourceLimitUsage",
      "name": "GET /portal/businesses/{businessId}/me/resource-limit-usage",
      "kind": "rest",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1resource-limit-usage/get",
      "description": "Return per-resource { limit, current } usage for the signed-in consumer's pinned plan",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"getPortalConsumerResourceLimitUsage\",\n    \"summary\": \"Return per-resource { limit, current } usage for the signed-in consumer's pinned plan\",\n    \"tags\": [\n      \"portal-customer\"\n    ],\n    \"security\": [\n      {\n        \"consumerBearerAuth\": []\n      },\n      {\n        \"siteShellServiceJwt\": [],\n        \"personaSessionCookie\": []\n      }\n    ],\n    \"parameters\": [\n      {\n        \"name\": \"businessId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Business identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      }\n    ],\n    \"responses\": {\n      \"200\": {\n        \"description\": \"Per-resource limit usage map — `{ [resourceKey]: { limit, current } }`; resources the plan doesn't declare are absent (= unlimited)\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": true\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"404\": {\n        \"description\": \"Not found\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"sdk\": {\n      \"usage\": \"client.entitlements.resourceLimitUsage(...)\",\n      \"signature\": \"resourceLimitUsage(): Promise<ResourceLimitUsageMap>;\",\n      \"source\": \"packages/farthershore-js/dist/resources/entitlements.d.ts#L16\",\n      \"declarationName\": \"EntitlementsResource\",\n      \"page\": \"generated/frontend-sdk/root\",\n      \"typeReferences\": [\n        {\n          \"name\": \"EntitlementSnapshot\",\n          \"source\": \"packages/farthershore-js/dist/resources/entitlements.d.ts#L3\"\n        },\n        {\n          \"name\": \"ResourceLimitUsageMap\",\n          \"source\": \"packages/farthershore-js/dist/resources/entitlements.d.ts#L15\"\n        }\n      ]\n    }\n  }\n}\n",
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "rest.getPortalConsumerSubscription",
      "name": "GET /portal/businesses/{businessId}/me/subscription",
      "kind": "rest",
      "collection": "commerce",
      "page": "generated/commerce/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1subscription/get",
      "description": "Get subscription details for the signed-in consumer",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"getPortalConsumerSubscription\",\n    \"summary\": \"Get subscription details for the signed-in consumer\",\n    \"tags\": [\n      \"portal-customer\"\n    ],\n    \"security\": [\n      {\n        \"consumerBearerAuth\": []\n      },\n      {\n        \"siteShellServiceJwt\": [],\n        \"personaSessionCookie\": []\n      }\n    ],\n    \"parameters\": [\n      {\n        \"name\": \"businessId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Business identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      }\n    ],\n    \"responses\": {\n      \"200\": {\n        \"description\": \"Subscription details\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": true\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"404\": {\n        \"description\": \"Not found\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"sdk\": {\n      \"usage\": \"client.billing.subscription(...)\",\n      \"signature\": \"subscription(opts?: {\\n        signal?: AbortSignal;\\n    }): Promise<Subscription | null>;\",\n      \"source\": \"packages/farthershore-js/dist/resources/billing.d.ts#L13\",\n      \"declarationName\": \"BillingResource\",\n      \"page\": \"generated/frontend-sdk/root\",\n      \"typeReferences\": [\n        {\n          \"name\": \"BillPreview\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1284\"\n        },\n        {\n          \"name\": \"CancelSubscriptionResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1122\"\n        },\n        {\n          \"name\": \"ChangePlanResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1144\"\n        },\n        {\n          \"name\": \"RestoreSubscriptionResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1134\"\n        },\n        {\n          \"name\": \"SpendCapResult\",\n          \"source\": \"packages/farthershore-js/dist/resources/billing.d.ts#L5\"\n        },\n        {\n          \"name\": \"Subscription\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L739\"\n        }\n      ]\n    }\n  }\n}\n",
      "guide": "commerce/overview"
    },
    {
      "id": "rest.getPortalConsumerUsage",
      "name": "GET /portal/businesses/{businessId}/me/usage",
      "kind": "rest",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1usage/get",
      "description": "Return usage for the signed-in consumer on a product portal",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"getPortalConsumerUsage\",\n    \"summary\": \"Return usage for the signed-in consumer on a product portal\",\n    \"tags\": [\n      \"portal-customer\"\n    ],\n    \"security\": [\n      {\n        \"consumerBearerAuth\": []\n      },\n      {\n        \"siteShellServiceJwt\": [],\n        \"personaSessionCookie\": []\n      }\n    ],\n    \"parameters\": [\n      {\n        \"name\": \"businessId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Business identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      }\n    ],\n    \"responses\": {\n      \"200\": {\n        \"description\": \"Customer usage summary\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": true\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"404\": {\n        \"description\": \"Not found\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"sdk\": {\n      \"usage\": \"client.usage.snapshot(...)\",\n      \"signature\": \"snapshot(range?: UsageRange, opts?: {\\n        signal?: AbortSignal;\\n        includeEvents?: boolean;\\n    }): Promise<UsageSnapshot>;\",\n      \"source\": \"packages/farthershore-js/dist/resources/usage.d.ts#L7\",\n      \"declarationName\": \"UsageResource\",\n      \"page\": \"generated/frontend-sdk/root\",\n      \"typeReferences\": [\n        {\n          \"name\": \"UsageEvent\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L679\"\n        },\n        {\n          \"name\": \"UsageRange\",\n          \"source\": \"packages/farthershore-js/dist/resources/usage.d.ts#L3\"\n        },\n        {\n          \"name\": \"UsageSnapshot\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L701\"\n        },\n        {\n          \"name\": \"UsageSummary\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L645\"\n        }\n      ]\n    }\n  }\n}\n",
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "rest.getPortalUsageLimit",
      "name": "GET /portal/businesses/{businessId}/me/usage-limits/{limitId}",
      "kind": "rest",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1usage-limits~1{limitId}/get",
      "description": "Get one subscriber-owned usage limit",
      "signature": "{\n  \"operationId\": \"getPortalUsageLimit\",\n  \"summary\": \"Get one subscriber-owned usage limit\",\n  \"description\": \"Requires usage_limit:read. Without subscription-wide mutation authority, members can fetch organization limits and their own member limit rows only; other members' rows return 404.\",\n  \"tags\": [\n    \"portal-customer\"\n  ],\n  \"security\": [\n    {\n      \"consumerBearerAuth\": []\n    },\n    {\n      \"siteShellServiceJwt\": [],\n      \"personaSessionCookie\": []\n    }\n  ],\n  \"parameters\": [\n    {\n      \"name\": \"businessId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"description\": \"Business identifier\",\n      \"schema\": {\n        \"type\": \"string\"\n      }\n    },\n    {\n      \"name\": \"limitId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"description\": \"Usage-limit identifier\",\n      \"schema\": {\n        \"type\": \"string\"\n      }\n    }\n  ],\n  \"responses\": {\n    \"200\": {\n      \"description\": \"Usage limit\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"id\",\n              \"quantity\",\n              \"mode\",\n              \"period\",\n              \"createdBy\",\n              \"createdAt\",\n              \"updatedAt\",\n              \"scope\"\n            ],\n            \"properties\": {\n              \"id\": {\n                \"type\": \"string\",\n                \"format\": \"uuid\"\n              },\n              \"quantity\": {\n                \"type\": \"string\",\n                \"pattern\": \"^[a-z0-9_]{1,64}$\"\n              },\n              \"mode\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"BLOCK\",\n                  \"NOTIFY\"\n                ]\n              },\n              \"notifyAtPct\": {\n                \"type\": \"number\",\n                \"minimum\": 0.01,\n                \"maximum\": 1,\n                \"description\": \"Required for NOTIFY usage limits and forbidden for BLOCK.\"\n              },\n              \"limitUnits\": {\n                \"type\": \"integer\",\n                \"minimum\": 0,\n                \"maximum\": 2147483647\n              },\n              \"limitCents\": {\n                \"type\": \"integer\",\n                \"minimum\": 0,\n                \"maximum\": 2147483647\n              },\n              \"scope\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"ORG\",\n                  \"MEMBER\",\n                  \"SERVICE_ACCOUNT\"\n                ]\n              },\n              \"subjectId\": {\n                \"type\": \"string\",\n                \"minLength\": 1,\n                \"maxLength\": 128\n              },\n              \"period\": {\n                \"type\": \"string\",\n                \"const\": \"BILLING_PERIOD\"\n              },\n              \"ceiling\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"limitUnits\": {\n                    \"type\": \"integer\",\n                    \"minimum\": 0\n                  },\n                  \"limitCents\": {\n                    \"type\": \"integer\",\n                    \"minimum\": 0\n                  }\n                },\n                \"description\": \"The builder's own per-billing-period ceiling on this quantity, when the plan declares one. Read-only.\"\n              },\n              \"effectiveWindow\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"strategy\",\n                  \"periodSeconds\"\n                ],\n                \"properties\": {\n                  \"strategy\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"fixed_window\",\n                      \"sliding_window\"\n                    ]\n                  },\n                  \"periodSeconds\": {\n                    \"type\": \"integer\",\n                    \"minimum\": 1\n                  }\n                },\n                \"description\": \"Read-only: how the limit is accounted at the edge. `sliding_window` means the ceiling is a rolling horizon of `periodSeconds` rather than one that resets at the billing-period boundary. Builder-owned; not writable.\"\n              },\n              \"createdBy\": {\n                \"anyOf\": [\n                  {\n                    \"type\": \"string\"\n                  },\n                  {\n                    \"type\": \"null\"\n                  }\n                ]\n              },\n              \"createdAt\": {\n                \"type\": \"string\",\n                \"format\": \"date-time\"\n              },\n              \"updatedAt\": {\n                \"type\": \"string\",\n                \"format\": \"date-time\"\n              }\n            },\n            \"allOf\": [\n              {\n                \"oneOf\": [\n                  {\n                    \"required\": [\n                      \"quantity\",\n                      \"limitCents\"\n                    ],\n                    \"properties\": {\n                      \"quantity\": {\n                        \"type\": \"string\",\n                        \"const\": \"spend\"\n                      }\n                    },\n                    \"not\": {\n                      \"required\": [\n                        \"limitUnits\"\n                      ]\n                    }\n                  },\n                  {\n                    \"required\": [\n                      \"quantity\",\n                      \"limitUnits\"\n                    ],\n                    \"properties\": {\n                      \"quantity\": {\n                        \"type\": \"string\",\n                        \"not\": {\n                          \"const\": \"spend\"\n                        }\n                      }\n                    },\n                    \"not\": {\n                      \"required\": [\n                        \"limitCents\"\n                      ]\n                    }\n                  }\n                ]\n              },\n              {\n                \"oneOf\": [\n                  {\n                    \"required\": [\n                      \"scope\"\n                    ],\n                    \"properties\": {\n                      \"scope\": {\n                        \"type\": \"string\",\n                        \"const\": \"ORG\"\n                      }\n                    },\n                    \"not\": {\n                      \"required\": [\n                        \"subjectId\"\n                      ]\n                    }\n                  },\n                  {\n                    \"required\": [\n                      \"scope\",\n                      \"subjectId\"\n                    ],\n                    \"properties\": {\n                      \"scope\": {\n                        \"type\": \"string\",\n                        \"const\": \"MEMBER\"\n                      }\n                    }\n                  },\n                  {\n                    \"required\": [\n                      \"scope\",\n                      \"subjectId\"\n                    ],\n                    \"properties\": {\n                      \"scope\": {\n                        \"type\": \"string\",\n                        \"const\": \"SERVICE_ACCOUNT\"\n                      }\n                    }\n                  }\n                ]\n              },\n              {\n                \"if\": {\n                  \"required\": [\n                    \"mode\"\n                  ],\n                  \"properties\": {\n                    \"mode\": {\n                      \"const\": \"NOTIFY\"\n                    }\n                  }\n                },\n                \"then\": {\n                  \"required\": [\n                    \"notifyAtPct\"\n                  ]\n                }\n              },\n              {\n                \"if\": {\n                  \"required\": [\n                    \"mode\"\n                  ],\n                  \"properties\": {\n                    \"mode\": {\n                      \"const\": \"BLOCK\"\n                    }\n                  }\n                },\n                \"then\": {\n                  \"not\": {\n                    \"required\": [\n                      \"notifyAtPct\"\n                    ]\n                  }\n                }\n              },\n              {\n                \"if\": {\n                  \"anyOf\": [\n                    {\n                      \"required\": [\n                        \"limitUnits\"\n                      ],\n                      \"properties\": {\n                        \"limitUnits\": {\n                          \"const\": 0\n                        }\n                      }\n                    },\n                    {\n                      \"required\": [\n                        \"limitCents\"\n                      ],\n                      \"properties\": {\n                        \"limitCents\": {\n                          \"const\": 0\n                        }\n                      }\n                    }\n                  ]\n                },\n                \"then\": {\n                  \"properties\": {\n                    \"mode\": {\n                      \"const\": \"BLOCK\"\n                    }\n                  }\n                }\n              }\n            ]\n          }\n        }\n      }\n    },\n    \"401\": {\n      \"description\": \"Unauthorized\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"403\": {\n      \"description\": \"Forbidden\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"404\": {\n      \"description\": \"Not found\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n",
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "rest.listPortalConsumerApiKeys",
      "name": "GET /portal/businesses/{businessId}/me/api-keys",
      "kind": "rest",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1api-keys/get",
      "description": "List consumer-scoped API keys for the signed-in user on a product portal",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"listPortalConsumerApiKeys\",\n    \"summary\": \"List consumer-scoped API keys for the signed-in user on a product portal\",\n    \"tags\": [\n      \"portal-customer\"\n    ],\n    \"security\": [\n      {\n        \"consumerBearerAuth\": []\n      },\n      {\n        \"siteShellServiceJwt\": [],\n        \"personaSessionCookie\": []\n      }\n    ],\n    \"parameters\": [\n      {\n        \"name\": \"businessId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Business identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      }\n    ],\n    \"responses\": {\n      \"200\": {\n        \"description\": \"Customer API keys\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"type\": \"object\",\n                \"additionalProperties\": true\n              }\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"404\": {\n        \"description\": \"Not found\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"sdk\": {\n      \"usage\": \"client.keys.list(...)\",\n      \"signature\": \"list(opts?: {\\n        signal?: AbortSignal;\\n    }): Promise<ApiKey[]>;\",\n      \"source\": \"packages/farthershore-js/dist/resources/keys.d.ts#L3\",\n      \"declarationName\": \"KeysResource\",\n      \"page\": \"generated/frontend-sdk/root\",\n      \"typeReferences\": [\n        {\n          \"name\": \"ApiKey\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L347\"\n        },\n        {\n          \"name\": \"CreatedApiKey\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L375\"\n        },\n        {\n          \"name\": \"ServiceAccountsResource\",\n          \"source\": \"packages/farthershore-js/dist/resources/keys.d.ts#L53\"\n        }\n      ]\n    }\n  }\n}\n",
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "rest.listPortalConsumerPlanOffers",
      "name": "GET /portal/businesses/{businessId}/me/plan-offers",
      "kind": "rest",
      "collection": "commerce",
      "page": "generated/commerce/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1plan-offers/get",
      "description": "List the purchasable plan offers (plan + offerFingerprint) for the signed-in consumer, including the current pinned plan version",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"listPortalConsumerPlanOffers\",\n    \"summary\": \"List the purchasable plan offers (plan + offerFingerprint) for the signed-in consumer, including the current pinned plan version\",\n    \"tags\": [\n      \"portal-customer\"\n    ],\n    \"security\": [\n      {\n        \"consumerBearerAuth\": []\n      },\n      {\n        \"siteShellServiceJwt\": [],\n        \"personaSessionCookie\": []\n      }\n    ],\n    \"parameters\": [\n      {\n        \"name\": \"businessId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Business identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      }\n    ],\n    \"responses\": {\n      \"200\": {\n        \"description\": \"Plan offers — `[{ compiledPlanId, plan, offerFingerprint }]`. `offerFingerprint` is the billing fingerprint of that CompiledPlan version; echo it back as `offerFingerprint` on checkout/onboarding to get a 409 PLAN_OFFER_CHANGED if the plan's economics changed since render.\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"type\": \"object\",\n                \"additionalProperties\": true\n              }\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"404\": {\n        \"description\": \"Not found\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"sdk\": {\n      \"usage\": \"client.plans.getPlanOffers(...)\",\n      \"signature\": \"getPlanOffers(): Promise<PlanOffer__5ab47cb32b7d[]>;\",\n      \"source\": \"packages/farthershore-js/dist/resources/plans.d.ts#L61\",\n      \"declarationName\": \"PlansResource\",\n      \"page\": \"generated/frontend-sdk/root\",\n      \"typeReferences\": [\n        {\n          \"name\": \"OnboardingResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1104\"\n        },\n        {\n          \"name\": \"Plan\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L127\"\n        },\n        {\n          \"name\": \"PlanOffer__5ab47cb32b7d\",\n          \"source\": \"packages/farthershore-js/dist/resources/plans.d.ts#L31\"\n        },\n        {\n          \"name\": \"StartOnboardingInput\",\n          \"source\": \"packages/farthershore-js/dist/resources/plans.d.ts#L27\"\n        },\n        {\n          \"name\": \"SubscribeInput\",\n          \"source\": \"packages/farthershore-js/dist/resources/plans.d.ts#L5\"\n        },\n        {\n          \"name\": \"SubscribeResult\",\n          \"source\": \"packages/farthershore-js/dist/resources/plans.d.ts#L44\"\n        }\n      ]\n    }\n  }\n}\n",
      "guide": "commerce/overview"
    },
    {
      "id": "rest.listPortalServiceAccounts",
      "name": "GET /portal/businesses/{businessId}/me/service-accounts",
      "kind": "rest",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1service-accounts/get",
      "description": "List managed service accounts and their pending requests",
      "signature": "{\n  \"operationId\": \"listPortalServiceAccounts\",\n  \"summary\": \"List managed service accounts and their pending requests\",\n  \"tags\": [\n    \"portal-customer\"\n  ],\n  \"security\": [\n    {\n      \"consumerBearerAuth\": []\n    },\n    {\n      \"siteShellServiceJwt\": [],\n      \"personaSessionCookie\": []\n    }\n  ],\n  \"parameters\": [\n    {\n      \"name\": \"businessId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"description\": \"Business identifier\",\n      \"schema\": {\n        \"type\": \"string\"\n      }\n    },\n    {\n      \"name\": \"limit\",\n      \"in\": \"query\",\n      \"required\": false,\n      \"description\": \"Maximum number of service accounts to return.\",\n      \"schema\": {\n        \"type\": \"integer\",\n        \"minimum\": 1,\n        \"maximum\": 100,\n        \"default\": 100\n      }\n    },\n    {\n      \"name\": \"offset\",\n      \"in\": \"query\",\n      \"required\": false,\n      \"description\": \"Number of service accounts to skip.\",\n      \"schema\": {\n        \"type\": \"integer\",\n        \"minimum\": 0,\n        \"default\": 0\n      }\n    }\n  ],\n  \"responses\": {\n    \"200\": {\n      \"description\": \"Managed service accounts\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"data\",\n              \"pagination\"\n            ],\n            \"properties\": {\n              \"data\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"id\",\n                    \"name\",\n                    \"state\",\n                    \"requestedPermissions\",\n                    \"grantedPermissions\",\n                    \"createdBy\",\n                    \"approvedBy\",\n                    \"createdAt\",\n                    \"activatedAt\",\n                    \"revokedAt\",\n                    \"credentialApprovals\"\n                  ],\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"format\": \"uuid\"\n                    },\n                    \"name\": {\n                      \"type\": \"string\"\n                    },\n                    \"state\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"PENDING\",\n                        \"ACTIVE\"\n                      ]\n                    },\n                    \"requestedPermissions\": {\n                      \"type\": \"array\",\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"minItems\": 1,\n                      \"maxItems\": 100\n                    },\n                    \"grantedPermissions\": {\n                      \"type\": \"array\",\n                      \"items\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"createdBy\": {\n                      \"type\": [\n                        \"string\",\n                        \"null\"\n                      ]\n                    },\n                    \"approvedBy\": {\n                      \"type\": [\n                        \"string\",\n                        \"null\"\n                      ]\n                    },\n                    \"createdAt\": {\n                      \"type\": \"string\",\n                      \"format\": \"date-time\"\n                    },\n                    \"activatedAt\": {\n                      \"type\": [\n                        \"string\",\n                        \"null\"\n                      ],\n                      \"format\": \"date-time\"\n                    },\n                    \"revokedAt\": {\n                      \"type\": [\n                        \"string\",\n                        \"null\"\n                      ],\n                      \"format\": \"date-time\"\n                    },\n                    \"credentialApprovals\": {\n                      \"type\": \"array\",\n                      \"items\": {\n                        \"type\": \"object\",\n                        \"additionalProperties\": false,\n                        \"required\": [\n                          \"id\",\n                          \"operation\",\n                          \"requestedBy\",\n                          \"requestedPermissions\",\n                          \"excessPermissions\",\n                          \"createdAt\"\n                        ],\n                        \"properties\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"format\": \"uuid\"\n                          },\n                          \"operation\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"CREATE\",\n                              \"UPDATE\"\n                            ]\n                          },\n                          \"requestedBy\": {\n                            \"type\": \"string\"\n                          },\n                          \"requestedPermissions\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"minItems\": 1,\n                            \"maxItems\": 100\n                          },\n                          \"excessPermissions\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"createdAt\": {\n                            \"type\": \"string\",\n                            \"format\": \"date-time\"\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              },\n              \"pagination\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"limit\",\n                  \"offset\",\n                  \"hasMore\"\n                ],\n                \"properties\": {\n                  \"limit\": {\n                    \"type\": \"integer\",\n                    \"minimum\": 1,\n                    \"maximum\": 100\n                  },\n                  \"offset\": {\n                    \"type\": \"integer\",\n                    \"minimum\": 0\n                  },\n                  \"hasMore\": {\n                    \"type\": \"boolean\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"400\": {\n      \"description\": \"Bad request\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"401\": {\n      \"description\": \"Unauthorized\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"403\": {\n      \"description\": \"Forbidden\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"404\": {\n      \"description\": \"Not found\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n",
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "rest.listPortalUsageLimits",
      "name": "GET /portal/businesses/{businessId}/me/usage-limits",
      "kind": "rest",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1usage-limits/get",
      "description": "List subscriber-owned usage limits for the signed-in consumer",
      "signature": "{\n  \"operationId\": \"listPortalUsageLimits\",\n  \"summary\": \"List subscriber-owned usage limits for the signed-in consumer\",\n  \"tags\": [\n    \"portal-customer\"\n  ],\n  \"security\": [\n    {\n      \"consumerBearerAuth\": []\n    },\n    {\n      \"siteShellServiceJwt\": [],\n      \"personaSessionCookie\": []\n    }\n  ],\n  \"parameters\": [\n    {\n      \"name\": \"businessId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"description\": \"Business identifier\",\n      \"schema\": {\n        \"type\": \"string\"\n      }\n    },\n    {\n      \"name\": \"limit\",\n      \"in\": \"query\",\n      \"required\": false,\n      \"description\": \"Maximum number of usage limits to return.\",\n      \"schema\": {\n        \"type\": \"integer\",\n        \"minimum\": 1,\n        \"maximum\": 100,\n        \"default\": 100\n      }\n    },\n    {\n      \"name\": \"offset\",\n      \"in\": \"query\",\n      \"required\": false,\n      \"description\": \"Number of usage limits to skip.\",\n      \"schema\": {\n        \"type\": \"integer\",\n        \"minimum\": 0,\n        \"default\": 0\n      }\n    }\n  ],\n  \"responses\": {\n    \"200\": {\n      \"description\": \"Usage limits\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"data\",\n              \"pagination\"\n            ],\n            \"properties\": {\n              \"data\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"id\",\n                    \"quantity\",\n                    \"mode\",\n                    \"period\",\n                    \"createdBy\",\n                    \"createdAt\",\n                    \"updatedAt\",\n                    \"scope\"\n                  ],\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"format\": \"uuid\"\n                    },\n                    \"quantity\": {\n                      \"type\": \"string\",\n                      \"pattern\": \"^[a-z0-9_]{1,64}$\"\n                    },\n                    \"mode\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"BLOCK\",\n                        \"NOTIFY\"\n                      ]\n                    },\n                    \"notifyAtPct\": {\n                      \"type\": \"number\",\n                      \"minimum\": 0.01,\n                      \"maximum\": 1,\n                      \"description\": \"Required for NOTIFY usage limits and forbidden for BLOCK.\"\n                    },\n                    \"limitUnits\": {\n                      \"type\": \"integer\",\n                      \"minimum\": 0,\n                      \"maximum\": 2147483647\n                    },\n                    \"limitCents\": {\n                      \"type\": \"integer\",\n                      \"minimum\": 0,\n                      \"maximum\": 2147483647\n                    },\n                    \"scope\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"ORG\",\n                        \"MEMBER\",\n                        \"SERVICE_ACCOUNT\"\n                      ]\n                    },\n                    \"subjectId\": {\n                      \"type\": \"string\",\n                      \"minLength\": 1,\n                      \"maxLength\": 128\n                    },\n                    \"period\": {\n                      \"type\": \"string\",\n                      \"const\": \"BILLING_PERIOD\"\n                    },\n                    \"ceiling\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": false,\n                      \"properties\": {\n                        \"limitUnits\": {\n                          \"type\": \"integer\",\n                          \"minimum\": 0\n                        },\n                        \"limitCents\": {\n                          \"type\": \"integer\",\n                          \"minimum\": 0\n                        }\n                      },\n                      \"description\": \"The builder's own per-billing-period ceiling on this quantity, when the plan declares one. Read-only.\"\n                    },\n                    \"effectiveWindow\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": false,\n                      \"required\": [\n                        \"strategy\",\n                        \"periodSeconds\"\n                      ],\n                      \"properties\": {\n                        \"strategy\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"fixed_window\",\n                            \"sliding_window\"\n                          ]\n                        },\n                        \"periodSeconds\": {\n                          \"type\": \"integer\",\n                          \"minimum\": 1\n                        }\n                      },\n                      \"description\": \"Read-only: how the limit is accounted at the edge. `sliding_window` means the ceiling is a rolling horizon of `periodSeconds` rather than one that resets at the billing-period boundary. Builder-owned; not writable.\"\n                    },\n                    \"createdBy\": {\n                      \"anyOf\": [\n                        {\n                          \"type\": \"string\"\n                        },\n                        {\n                          \"type\": \"null\"\n                        }\n                      ]\n                    },\n                    \"createdAt\": {\n                      \"type\": \"string\",\n                      \"format\": \"date-time\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"string\",\n                      \"format\": \"date-time\"\n                    }\n                  },\n                  \"allOf\": [\n                    {\n                      \"oneOf\": [\n                        {\n                          \"required\": [\n                            \"quantity\",\n                            \"limitCents\"\n                          ],\n                          \"properties\": {\n                            \"quantity\": {\n                              \"type\": \"string\",\n                              \"const\": \"spend\"\n                            }\n                          },\n                          \"not\": {\n                            \"required\": [\n                              \"limitUnits\"\n                            ]\n                          }\n                        },\n                        {\n                          \"required\": [\n                            \"quantity\",\n                            \"limitUnits\"\n                          ],\n                          \"properties\": {\n                            \"quantity\": {\n                              \"type\": \"string\",\n                              \"not\": {\n                                \"const\": \"spend\"\n                              }\n                            }\n                          },\n                          \"not\": {\n                            \"required\": [\n                              \"limitCents\"\n                            ]\n                          }\n                        }\n                      ]\n                    },\n                    {\n                      \"oneOf\": [\n                        {\n                          \"required\": [\n                            \"scope\"\n                          ],\n                          \"properties\": {\n                            \"scope\": {\n                              \"type\": \"string\",\n                              \"const\": \"ORG\"\n                            }\n                          },\n                          \"not\": {\n                            \"required\": [\n                              \"subjectId\"\n                            ]\n                          }\n                        },\n                        {\n                          \"required\": [\n                            \"scope\",\n                            \"subjectId\"\n                          ],\n                          \"properties\": {\n                            \"scope\": {\n                              \"type\": \"string\",\n                              \"const\": \"MEMBER\"\n                            }\n                          }\n                        },\n                        {\n                          \"required\": [\n                            \"scope\",\n                            \"subjectId\"\n                          ],\n                          \"properties\": {\n                            \"scope\": {\n                              \"type\": \"string\",\n                              \"const\": \"SERVICE_ACCOUNT\"\n                            }\n                          }\n                        }\n                      ]\n                    },\n                    {\n                      \"if\": {\n                        \"required\": [\n                          \"mode\"\n                        ],\n                        \"properties\": {\n                          \"mode\": {\n                            \"const\": \"NOTIFY\"\n                          }\n                        }\n                      },\n                      \"then\": {\n                        \"required\": [\n                          \"notifyAtPct\"\n                        ]\n                      }\n                    },\n                    {\n                      \"if\": {\n                        \"required\": [\n                          \"mode\"\n                        ],\n                        \"properties\": {\n                          \"mode\": {\n                            \"const\": \"BLOCK\"\n                          }\n                        }\n                      },\n                      \"then\": {\n                        \"not\": {\n                          \"required\": [\n                            \"notifyAtPct\"\n                          ]\n                        }\n                      }\n                    },\n                    {\n                      \"if\": {\n                        \"anyOf\": [\n                          {\n                            \"required\": [\n                              \"limitUnits\"\n                            ],\n                            \"properties\": {\n                              \"limitUnits\": {\n                                \"const\": 0\n                              }\n                            }\n                          },\n                          {\n                            \"required\": [\n                              \"limitCents\"\n                            ],\n                            \"properties\": {\n                              \"limitCents\": {\n                                \"const\": 0\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"then\": {\n                        \"properties\": {\n                          \"mode\": {\n                            \"const\": \"BLOCK\"\n                          }\n                        }\n                      }\n                    }\n                  ]\n                }\n              },\n              \"pagination\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"limit\",\n                  \"offset\",\n                  \"hasMore\"\n                ],\n                \"properties\": {\n                  \"limit\": {\n                    \"type\": \"integer\",\n                    \"minimum\": 1,\n                    \"maximum\": 100\n                  },\n                  \"offset\": {\n                    \"type\": \"integer\",\n                    \"minimum\": 0\n                  },\n                  \"hasMore\": {\n                    \"type\": \"boolean\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"400\": {\n      \"description\": \"Bad request\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"401\": {\n      \"description\": \"Unauthorized\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"403\": {\n      \"description\": \"Forbidden\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"404\": {\n      \"description\": \"Not found\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n",
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "rest.reportManagedBusinessResourceCount",
      "name": "PUT /management/businesses/{businessId}/resources/{resource}/count",
      "kind": "rest",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/http",
      "source": "apps/core/openapi.json#/paths/~1management~1businesses~1{businessId}~1resources~1{resource}~1count/put",
      "description": "Record a managed product resource count",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"reportManagedBusinessResourceCount\",\n    \"summary\": \"Record a managed product resource count\",\n    \"tags\": [\n      \"Management\"\n    ],\n    \"security\": [\n      {\n        \"cliUserSessionBearerAuth\": []\n      },\n      {\n        \"makerTokenAccessBearerAuth\": []\n      }\n    ],\n    \"x-farthershore-agent-operations\": [\n      \"resource_count.report\"\n    ],\n    \"x-farthershore-agent-target\": {\n      \"kind\": \"path\",\n      \"targetKind\": \"business\",\n      \"parameter\": \"businessId\"\n    },\n    \"x-farthershore-agent-retry\": [\n      {\n        \"operationKey\": \"resource_count.report\",\n        \"kind\": \"convergent_write\",\n        \"keyRequired\": false,\n        \"enforcement\": \"resource_identity\",\n        \"responseSemantics\": \"point_in_time_write_result\"\n      }\n    ],\n    \"parameters\": [\n      {\n        \"name\": \"businessId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Business identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      },\n      {\n        \"name\": \"resource\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Resource identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      }\n    ],\n    \"requestBody\": {\n      \"required\": true,\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"required\": [\n              \"subscriptionId\",\n              \"count\"\n            ],\n            \"properties\": {\n              \"subscriptionId\": {\n                \"type\": \"string\",\n                \"description\": \"Subscriber identifier\"\n              },\n              \"environmentId\": {\n                \"type\": \"string\",\n                \"nullable\": true,\n                \"description\": \"Environment id for preview environments, or null/omitted for production\"\n              },\n              \"count\": {\n                \"type\": \"integer\",\n                \"minimum\": 0\n              },\n              \"subjectType\": {\n                \"type\": \"string\",\n                \"maxLength\": 64\n              },\n              \"subjectId\": {\n                \"type\": \"string\",\n                \"maxLength\": 160\n              }\n            },\n            \"additionalProperties\": false\n          }\n        }\n      }\n    },\n    \"responses\": {\n      \"200\": {\n        \"description\": \"Recorded resource count\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": true\n            }\n          }\n        }\n      },\n      \"400\": {\n        \"description\": \"Bad request\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"403\": {\n        \"description\": \"Forbidden\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"requestValidator\": {\n      \"name\": \"resourceCountBodySchema\",\n      \"source\": \"apps/core/src/routes/management/resource-counts.ts#L27\",\n      \"declaration\": \"const resourceCountBodySchema = z.object({\\n  subscriptionId: z.string().min(1),\\n  environmentId: z.string().min(1).nullable().optional(),\\n  count: z.number().int().nonnegative(),\\n  subjectType: z.string().min(1).max(64).optional(),\\n  subjectId: z.string().min(1).max(160).optional(),\\n});\"\n    },\n    \"note\": \"No public SDK method for this management operation. PUT the validator's JSON fields using the documented management credential context. Success returns { resourceCount: row }; OpenAPI does not specify the row shape, so a complete response schema is still unavailable. Do not infer fields from GenericObject.\"\n  }\n}\n",
      "guide": "define/resources"
    },
    {
      "id": "rest.restorePortalConsumerSubscription",
      "name": "POST /portal/businesses/{businessId}/me/restore",
      "kind": "rest",
      "collection": "commerce",
      "page": "generated/commerce/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1restore/post",
      "description": "Restore a fully cancelled subscription by resubscribing to a plan",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"restorePortalConsumerSubscription\",\n    \"summary\": \"Restore a fully cancelled subscription by resubscribing to a plan\",\n    \"tags\": [\n      \"portal-customer\"\n    ],\n    \"security\": [\n      {\n        \"consumerBearerAuth\": []\n      },\n      {\n        \"siteShellServiceJwt\": [],\n        \"personaSessionCookie\": []\n      }\n    ],\n    \"parameters\": [\n      {\n        \"name\": \"businessId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Business identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      }\n    ],\n    \"requestBody\": {\n      \"required\": true,\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": true\n          }\n        }\n      }\n    },\n    \"responses\": {\n      \"200\": {\n        \"description\": \"Restore result\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": true\n            }\n          }\n        }\n      },\n      \"400\": {\n        \"description\": \"Bad request\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"403\": {\n        \"description\": \"Forbidden\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"404\": {\n        \"description\": \"Not found\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"sdk\": {\n      \"usage\": \"client.billing.restoreSubscription(...)\",\n      \"signature\": \"restoreSubscription(): Promise<RestoreSubscriptionResult>;\",\n      \"source\": \"packages/farthershore-js/dist/resources/billing.d.ts#L13\",\n      \"declarationName\": \"BillingResource\",\n      \"page\": \"generated/frontend-sdk/root\",\n      \"typeReferences\": [\n        {\n          \"name\": \"BillPreview\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1284\"\n        },\n        {\n          \"name\": \"CancelSubscriptionResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1122\"\n        },\n        {\n          \"name\": \"ChangePlanResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1144\"\n        },\n        {\n          \"name\": \"RestoreSubscriptionResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1134\"\n        },\n        {\n          \"name\": \"SpendCapResult\",\n          \"source\": \"packages/farthershore-js/dist/resources/billing.d.ts#L5\"\n        },\n        {\n          \"name\": \"Subscription\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L739\"\n        }\n      ]\n    },\n    \"requestValidator\": {\n      \"name\": \"restoreSchema\",\n      \"source\": \"apps/core/src/validation/portal-schemas.ts#L76\",\n      \"declaration\": \"export const restoreSchema = z\\n  .object({\\n    compiledPlanId: z.string().min(1).optional(),\\n    organizationId: z.string().uuid().optional(),\\n    returnUrl: z.string().url().optional(),\\n  })\\n  .strict();\"\n    },\n    \"note\": \"SDK limitation: restoreSubscription takes no arguments and returns raw:unknown. Core's free-plan restore branch requires compiledPlanId; use the documented HTTP body when that branch applies. The exact successful wire response remains unspecified by OpenAPI.\"\n  }\n}\n",
      "guide": "commerce/overview"
    },
    {
      "id": "rest.revokePortalConsumerApiKey",
      "name": "DELETE /portal/businesses/{businessId}/me/api-keys/{keyId}",
      "kind": "rest",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1api-keys~1{keyId}/delete",
      "description": "Revoke a consumer-scoped API key for the signed-in user on a product portal",
      "signature": "{\n  \"operationId\": \"revokePortalConsumerApiKey\",\n  \"summary\": \"Revoke a consumer-scoped API key for the signed-in user on a product portal\",\n  \"tags\": [\n    \"portal-customer\"\n  ],\n  \"security\": [\n    {\n      \"consumerBearerAuth\": []\n    },\n    {\n      \"siteShellServiceJwt\": [],\n      \"personaSessionCookie\": []\n    }\n  ],\n  \"parameters\": [\n    {\n      \"name\": \"businessId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"description\": \"Business identifier\",\n      \"schema\": {\n        \"type\": \"string\"\n      }\n    },\n    {\n      \"name\": \"keyId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"description\": \"Consumer API key identifier\",\n      \"schema\": {\n        \"type\": \"string\"\n      }\n    }\n  ],\n  \"responses\": {\n    \"204\": {\n      \"description\": \"No content\"\n    },\n    \"401\": {\n      \"description\": \"Unauthorized\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"403\": {\n      \"description\": \"Forbidden\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"404\": {\n      \"description\": \"Not found\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n",
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "rest.revokePortalServiceAccount",
      "name": "POST /portal/businesses/{businessId}/me/service-accounts/{serviceAccountId}/revoke",
      "kind": "rest",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1service-accounts~1{serviceAccountId}~1revoke/post",
      "description": "Revoke a managed service account and all of its active keys",
      "signature": "{\n  \"operationId\": \"revokePortalServiceAccount\",\n  \"summary\": \"Revoke a managed service account and all of its active keys\",\n  \"tags\": [\n    \"portal-customer\"\n  ],\n  \"security\": [\n    {\n      \"consumerBearerAuth\": []\n    },\n    {\n      \"siteShellServiceJwt\": [],\n      \"personaSessionCookie\": []\n    }\n  ],\n  \"parameters\": [\n    {\n      \"name\": \"businessId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"description\": \"Business identifier\",\n      \"schema\": {\n        \"type\": \"string\"\n      }\n    },\n    {\n      \"name\": \"serviceAccountId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"description\": \"Managed service-account identifier\",\n      \"schema\": {\n        \"type\": \"string\"\n      }\n    }\n  ],\n  \"requestBody\": {\n    \"required\": true,\n    \"content\": {\n      \"application/json\": {\n        \"schema\": {\n          \"type\": \"object\",\n          \"additionalProperties\": false,\n          \"properties\": {}\n        }\n      }\n    }\n  },\n  \"responses\": {\n    \"204\": {\n      \"description\": \"No content\"\n    },\n    \"401\": {\n      \"description\": \"Unauthorized\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"403\": {\n      \"description\": \"Forbidden\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"404\": {\n      \"description\": \"Not found\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n",
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "rest.rotatePortalConsumerApiKey",
      "name": "POST /portal/businesses/{businessId}/me/api-keys/{keyId}/rotate",
      "kind": "rest",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1api-keys~1{keyId}~1rotate/post",
      "description": "Rotate a consumer-scoped API key — create a replacement then revoke the old one",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"rotatePortalConsumerApiKey\",\n    \"summary\": \"Rotate a consumer-scoped API key — create a replacement then revoke the old one\",\n    \"tags\": [\n      \"portal-customer\"\n    ],\n    \"security\": [\n      {\n        \"consumerBearerAuth\": []\n      },\n      {\n        \"siteShellServiceJwt\": [],\n        \"personaSessionCookie\": []\n      }\n    ],\n    \"parameters\": [\n      {\n        \"name\": \"businessId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Business identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      },\n      {\n        \"name\": \"keyId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Consumer API key identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      }\n    ],\n    \"responses\": {\n      \"201\": {\n        \"description\": \"Rotated API key (new raw secret included)\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": true\n            }\n          }\n        }\n      },\n      \"400\": {\n        \"description\": \"Bad request\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"403\": {\n        \"description\": \"Forbidden\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"404\": {\n        \"description\": \"Not found\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"sdk\": {\n      \"usage\": \"client.keys.rotate(...)\",\n      \"signature\": \"rotate(keyId: string): Promise<CreatedApiKey>;\",\n      \"source\": \"packages/farthershore-js/dist/resources/keys.d.ts#L3\",\n      \"declarationName\": \"KeysResource\",\n      \"page\": \"generated/frontend-sdk/root\",\n      \"typeReferences\": [\n        {\n          \"name\": \"ApiKey\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L347\"\n        },\n        {\n          \"name\": \"CreatedApiKey\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L375\"\n        },\n        {\n          \"name\": \"ServiceAccountsResource\",\n          \"source\": \"packages/farthershore-js/dist/resources/keys.d.ts#L53\"\n        }\n      ]\n    },\n    \"note\": \"Pass keyId as the path argument; no request body is required.\"\n  }\n}\n",
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "rest.rotatePortalServiceAccount",
      "name": "POST /portal/businesses/{businessId}/me/service-accounts/{serviceAccountId}/rotate",
      "kind": "rest",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1service-accounts~1{serviceAccountId}~1rotate/post",
      "description": "Rotate a managed service account and return its replacement secret once",
      "signature": "{\n  \"operationId\": \"rotatePortalServiceAccount\",\n  \"summary\": \"Rotate a managed service account and return its replacement secret once\",\n  \"tags\": [\n    \"portal-customer\"\n  ],\n  \"security\": [\n    {\n      \"consumerBearerAuth\": []\n    },\n    {\n      \"siteShellServiceJwt\": [],\n      \"personaSessionCookie\": []\n    }\n  ],\n  \"parameters\": [\n    {\n      \"name\": \"businessId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"description\": \"Business identifier\",\n      \"schema\": {\n        \"type\": \"string\"\n      }\n    },\n    {\n      \"name\": \"serviceAccountId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"description\": \"Managed service-account identifier\",\n      \"schema\": {\n        \"type\": \"string\"\n      }\n    }\n  ],\n  \"requestBody\": {\n    \"required\": true,\n    \"content\": {\n      \"application/json\": {\n        \"schema\": {\n          \"type\": \"object\",\n          \"additionalProperties\": false,\n          \"properties\": {}\n        }\n      }\n    }\n  },\n  \"responses\": {\n    \"201\": {\n      \"description\": \"Service-account key rotated\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"status\",\n              \"serviceAccountId\",\n              \"revokedKeyId\",\n              \"apiKeyId\",\n              \"plaintext\",\n              \"grantedPermissions\"\n            ],\n            \"properties\": {\n              \"status\": {\n                \"type\": \"string\",\n                \"const\": \"ACTIVE\"\n              },\n              \"serviceAccountId\": {\n                \"type\": \"string\",\n                \"format\": \"uuid\"\n              },\n              \"grantedPermissions\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"string\"\n                },\n                \"minItems\": 1,\n                \"maxItems\": 100\n              },\n              \"revokedKeyId\": {\n                \"type\": \"string\",\n                \"format\": \"uuid\"\n              },\n              \"apiKeyId\": {\n                \"type\": \"string\",\n                \"format\": \"uuid\"\n              },\n              \"plaintext\": {\n                \"type\": \"string\",\n                \"writeOnly\": true\n              }\n            }\n          }\n        }\n      }\n    },\n    \"401\": {\n      \"description\": \"Unauthorized\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"403\": {\n      \"description\": \"Forbidden\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"404\": {\n      \"description\": \"Not found\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n",
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "rest.updatePortalConsumerSpendCap",
      "name": "PATCH /portal/businesses/{businessId}/me/spend-cap",
      "kind": "rest",
      "collection": "commerce",
      "page": "generated/commerce/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1spend-cap/patch",
      "description": "Set or remove the monthly spend cap for the signed-in consumer on a product portal",
      "signature": "{\n  \"openapi\": {\n    \"operationId\": \"updatePortalConsumerSpendCap\",\n    \"summary\": \"Set or remove the monthly spend cap for the signed-in consumer on a product portal\",\n    \"tags\": [\n      \"portal-customer\"\n    ],\n    \"security\": [\n      {\n        \"consumerBearerAuth\": []\n      },\n      {\n        \"siteShellServiceJwt\": [],\n        \"personaSessionCookie\": []\n      }\n    ],\n    \"parameters\": [\n      {\n        \"name\": \"businessId\",\n        \"in\": \"path\",\n        \"required\": true,\n        \"description\": \"Business identifier\",\n        \"schema\": {\n          \"type\": \"string\"\n        }\n      }\n    ],\n    \"responses\": {\n      \"200\": {\n        \"description\": \"Spend cap updated\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": true\n            }\n          }\n        }\n      },\n      \"400\": {\n        \"description\": \"Bad request\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"401\": {\n        \"description\": \"Unauthorized\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"403\": {\n        \"description\": \"Forbidden\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"404\": {\n        \"description\": \"Not found\",\n        \"content\": {\n          \"application/json\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"additionalProperties\": false,\n              \"required\": [\n                \"error\"\n              ],\n              \"properties\": {\n                \"error\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"code\",\n                    \"message\"\n                  ],\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"details\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"companion\": {\n    \"limitation\": \"OpenAPI uses GenericObject or GenericObjectArray here and does not fully specify the HTTP contract. These are documentation placeholders, not permission to send arbitrary fields. SDK signatures describe normalized SDK inputs and outputs, not exact wire response envelopes. Source validators specify structural inputs; route authorization and semantic checks still apply.\",\n    \"sdk\": {\n      \"usage\": \"client.billing.setSpendCap(...)\",\n      \"signature\": \"setSpendCap(input: {\\n        maxMonthlySpendCents: number | null;\\n    }): Promise<SpendCapResult>;\",\n      \"source\": \"packages/farthershore-js/dist/resources/billing.d.ts#L13\",\n      \"declarationName\": \"BillingResource\",\n      \"page\": \"generated/frontend-sdk/root\",\n      \"typeReferences\": [\n        {\n          \"name\": \"BillPreview\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1284\"\n        },\n        {\n          \"name\": \"CancelSubscriptionResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1122\"\n        },\n        {\n          \"name\": \"ChangePlanResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1144\"\n        },\n        {\n          \"name\": \"RestoreSubscriptionResult\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L1134\"\n        },\n        {\n          \"name\": \"SpendCapResult\",\n          \"source\": \"packages/farthershore-js/dist/resources/billing.d.ts#L5\"\n        },\n        {\n          \"name\": \"Subscription\",\n          \"source\": \"packages/farthershore-js/dist/types.d.ts#L739\"\n        }\n      ]\n    },\n    \"requestValidator\": {\n      \"name\": \"updateSpendCapSchema\",\n      \"source\": \"apps/core/src/validation/portal-schemas.ts#L97\",\n      \"declaration\": \"export const updateSpendCapSchema = z.object({\\n  maxMonthlySpendCents: z\\n    .number()\\n    .int()\\n    .min(1, \\\"maxMonthlySpendCents must be a positive integer\\\")\\n    .nullable(),\\n  organizationId: z.string().uuid().optional(),\\n});\"\n    }\n  }\n}\n",
      "guide": "commerce/overview"
    },
    {
      "id": "rest.updatePortalServiceAccount",
      "name": "PATCH /portal/businesses/{businessId}/me/service-accounts/{serviceAccountId}",
      "kind": "rest",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1service-accounts~1{serviceAccountId}/patch",
      "description": "Update or request approval for a service-account grant snapshot",
      "signature": "{\n  \"operationId\": \"updatePortalServiceAccount\",\n  \"summary\": \"Update or request approval for a service-account grant snapshot\",\n  \"tags\": [\n    \"portal-customer\"\n  ],\n  \"security\": [\n    {\n      \"consumerBearerAuth\": []\n    },\n    {\n      \"siteShellServiceJwt\": [],\n      \"personaSessionCookie\": []\n    }\n  ],\n  \"parameters\": [\n    {\n      \"name\": \"businessId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"description\": \"Business identifier\",\n      \"schema\": {\n        \"type\": \"string\"\n      }\n    },\n    {\n      \"name\": \"serviceAccountId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"description\": \"Managed service-account identifier\",\n      \"schema\": {\n        \"type\": \"string\"\n      }\n    },\n    {\n      \"name\": \"Idempotency-Key\",\n      \"in\": \"header\",\n      \"required\": false,\n      \"description\": \"Stable replay key for this provisioning request.\",\n      \"schema\": {\n        \"type\": \"string\",\n        \"minLength\": 1\n      }\n    }\n  ],\n  \"requestBody\": {\n    \"required\": true,\n    \"content\": {\n      \"application/json\": {\n        \"schema\": {\n          \"type\": \"object\",\n          \"additionalProperties\": false,\n          \"minProperties\": 1,\n          \"properties\": {\n            \"requestedPermissions\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"type\": \"string\"\n              },\n              \"minItems\": 1,\n              \"maxItems\": 100\n            },\n            \"usageLimit\": {\n              \"anyOf\": [\n                {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"quantity\",\n                    \"mode\"\n                  ],\n                  \"properties\": {\n                    \"quantity\": {\n                      \"type\": \"string\",\n                      \"pattern\": \"^[a-z0-9_]{1,64}$\"\n                    },\n                    \"mode\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"BLOCK\",\n                        \"NOTIFY\"\n                      ]\n                    },\n                    \"notifyAtPct\": {\n                      \"type\": \"number\",\n                      \"minimum\": 0.01,\n                      \"maximum\": 1,\n                      \"description\": \"Required for NOTIFY usage limits and forbidden for BLOCK.\"\n                    },\n                    \"limitUnits\": {\n                      \"type\": \"integer\",\n                      \"minimum\": 0,\n                      \"maximum\": 2147483647\n                    },\n                    \"limitCents\": {\n                      \"type\": \"integer\",\n                      \"minimum\": 0,\n                      \"maximum\": 2147483647\n                    }\n                  },\n                  \"oneOf\": [\n                    {\n                      \"required\": [\n                        \"quantity\",\n                        \"limitCents\"\n                      ],\n                      \"properties\": {\n                        \"quantity\": {\n                          \"type\": \"string\",\n                          \"const\": \"spend\"\n                        }\n                      },\n                      \"not\": {\n                        \"required\": [\n                          \"limitUnits\"\n                        ]\n                      }\n                    },\n                    {\n                      \"required\": [\n                        \"quantity\",\n                        \"limitUnits\"\n                      ],\n                      \"properties\": {\n                        \"quantity\": {\n                          \"type\": \"string\",\n                          \"not\": {\n                            \"const\": \"spend\"\n                          }\n                        }\n                      },\n                      \"not\": {\n                        \"required\": [\n                          \"limitCents\"\n                        ]\n                      }\n                    }\n                  ],\n                  \"allOf\": [\n                    {\n                      \"if\": {\n                        \"required\": [\n                          \"mode\"\n                        ],\n                        \"properties\": {\n                          \"mode\": {\n                            \"const\": \"NOTIFY\"\n                          }\n                        }\n                      },\n                      \"then\": {\n                        \"required\": [\n                          \"notifyAtPct\"\n                        ]\n                      }\n                    },\n                    {\n                      \"if\": {\n                        \"required\": [\n                          \"mode\"\n                        ],\n                        \"properties\": {\n                          \"mode\": {\n                            \"const\": \"BLOCK\"\n                          }\n                        }\n                      },\n                      \"then\": {\n                        \"not\": {\n                          \"required\": [\n                            \"notifyAtPct\"\n                          ]\n                        }\n                      }\n                    },\n                    {\n                      \"if\": {\n                        \"anyOf\": [\n                          {\n                            \"required\": [\n                              \"limitUnits\"\n                            ],\n                            \"properties\": {\n                              \"limitUnits\": {\n                                \"const\": 0\n                              }\n                            }\n                          },\n                          {\n                            \"required\": [\n                              \"limitCents\"\n                            ],\n                            \"properties\": {\n                              \"limitCents\": {\n                                \"const\": 0\n                              }\n                            }\n                          }\n                        ]\n                      },\n                      \"then\": {\n                        \"properties\": {\n                          \"mode\": {\n                            \"const\": \"BLOCK\"\n                          }\n                        }\n                      }\n                    }\n                  ]\n                },\n                {\n                  \"type\": \"null\"\n                }\n              ]\n            }\n          }\n        }\n      }\n    }\n  },\n  \"responses\": {\n    \"200\": {\n      \"description\": \"Service-account snapshot updated\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"status\",\n              \"serviceAccountId\",\n              \"requestedPermissions\",\n              \"grantedPermissions\"\n            ],\n            \"properties\": {\n              \"status\": {\n                \"type\": \"string\",\n                \"const\": \"ACTIVE\"\n              },\n              \"serviceAccountId\": {\n                \"type\": \"string\",\n                \"format\": \"uuid\"\n              },\n              \"grantedPermissions\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"string\"\n                },\n                \"minItems\": 1,\n                \"maxItems\": 100\n              },\n              \"requestedPermissions\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"string\"\n                },\n                \"minItems\": 1,\n                \"maxItems\": 100\n              }\n            }\n          }\n        }\n      }\n    },\n    \"202\": {\n      \"description\": \"Update pending approval; active snapshot is unchanged\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"status\",\n              \"serviceAccountId\",\n              \"approvalId\",\n              \"activePermissions\",\n              \"requestedPermissions\",\n              \"excessPermissions\",\n              \"eligibleApproverIds\"\n            ],\n            \"properties\": {\n              \"status\": {\n                \"type\": \"string\",\n                \"const\": \"PENDING\"\n              },\n              \"serviceAccountId\": {\n                \"type\": \"string\",\n                \"format\": \"uuid\"\n              },\n              \"approvalId\": {\n                \"type\": \"string\",\n                \"format\": \"uuid\"\n              },\n              \"activePermissions\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"string\"\n                }\n              },\n              \"requestedPermissions\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"string\"\n                },\n                \"minItems\": 1,\n                \"maxItems\": 100\n              },\n              \"excessPermissions\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"string\"\n                }\n              },\n              \"eligibleApproverIds\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"string\"\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"400\": {\n      \"description\": \"Bad request\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"401\": {\n      \"description\": \"Unauthorized\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"403\": {\n      \"description\": \"Forbidden\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"404\": {\n      \"description\": \"Not found\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"409\": {\n      \"description\": \"Conflict\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"422\": {\n      \"description\": \"Idempotency key was reused with a different request\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n",
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "rest.updatePortalUsageLimit",
      "name": "PUT /portal/businesses/{businessId}/me/usage-limits/{limitId}",
      "kind": "rest",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/http",
      "source": "apps/core/openapi.json#/paths/~1portal~1businesses~1{businessId}~1me~1usage-limits~1{limitId}/put",
      "description": "Update a subscriber-owned usage limit",
      "signature": "{\n  \"operationId\": \"updatePortalUsageLimit\",\n  \"summary\": \"Update a subscriber-owned usage limit\",\n  \"description\": \"Updates a usage-limit row across the subscription. This is an all-mutation operation and requires subscription-wide usage_limit:update authority, not just own-row read authority.\",\n  \"tags\": [\n    \"portal-customer\"\n  ],\n  \"security\": [\n    {\n      \"consumerBearerAuth\": []\n    },\n    {\n      \"siteShellServiceJwt\": [],\n      \"personaSessionCookie\": []\n    }\n  ],\n  \"parameters\": [\n    {\n      \"name\": \"businessId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"description\": \"Business identifier\",\n      \"schema\": {\n        \"type\": \"string\"\n      }\n    },\n    {\n      \"name\": \"limitId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"description\": \"Usage-limit identifier\",\n      \"schema\": {\n        \"type\": \"string\"\n      }\n    }\n  ],\n  \"requestBody\": {\n    \"required\": true,\n    \"content\": {\n      \"application/json\": {\n        \"schema\": {\n          \"type\": \"object\",\n          \"additionalProperties\": false,\n          \"minProperties\": 1,\n          \"properties\": {\n            \"limitUnits\": {\n              \"type\": \"integer\",\n              \"minimum\": 0,\n              \"maximum\": 2147483647\n            },\n            \"limitCents\": {\n              \"type\": \"integer\",\n              \"minimum\": 0,\n              \"maximum\": 2147483647\n            },\n            \"mode\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"BLOCK\",\n                \"NOTIFY\"\n              ]\n            },\n            \"notifyAtPct\": {\n              \"anyOf\": [\n                {\n                  \"type\": \"number\",\n                  \"minimum\": 0.01,\n                  \"maximum\": 1\n                },\n                {\n                  \"type\": \"null\"\n                }\n              ],\n              \"description\": \"Required for NOTIFY usage limits and forbidden for BLOCK.\"\n            }\n          },\n          \"not\": {\n            \"required\": [\n              \"limitUnits\",\n              \"limitCents\"\n            ]\n          },\n          \"allOf\": [\n            {\n              \"if\": {\n                \"required\": [\n                  \"mode\"\n                ],\n                \"properties\": {\n                  \"mode\": {\n                    \"const\": \"NOTIFY\"\n                  }\n                }\n              },\n              \"then\": {\n                \"required\": [\n                  \"notifyAtPct\"\n                ],\n                \"properties\": {\n                  \"notifyAtPct\": {\n                    \"type\": \"number\"\n                  }\n                }\n              }\n            },\n            {\n              \"if\": {\n                \"required\": [\n                  \"mode\"\n                ],\n                \"properties\": {\n                  \"mode\": {\n                    \"const\": \"BLOCK\"\n                  }\n                }\n              },\n              \"then\": {\n                \"properties\": {\n                  \"notifyAtPct\": {\n                    \"type\": \"null\"\n                  }\n                }\n              }\n            },\n            {\n              \"if\": {\n                \"allOf\": [\n                  {\n                    \"anyOf\": [\n                      {\n                        \"required\": [\n                          \"limitUnits\"\n                        ],\n                        \"properties\": {\n                          \"limitUnits\": {\n                            \"const\": 0\n                          }\n                        }\n                      },\n                      {\n                        \"required\": [\n                          \"limitCents\"\n                        ],\n                        \"properties\": {\n                          \"limitCents\": {\n                            \"const\": 0\n                          }\n                        }\n                      }\n                    ]\n                  },\n                  {\n                    \"required\": [\n                      \"mode\"\n                    ]\n                  }\n                ]\n              },\n              \"then\": {\n                \"properties\": {\n                  \"mode\": {\n                    \"const\": \"BLOCK\"\n                  }\n                }\n              }\n            }\n          ]\n        }\n      }\n    }\n  },\n  \"responses\": {\n    \"200\": {\n      \"description\": \"Usage limit updated\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"id\",\n              \"quantity\",\n              \"mode\",\n              \"period\",\n              \"createdBy\",\n              \"createdAt\",\n              \"updatedAt\",\n              \"scope\"\n            ],\n            \"properties\": {\n              \"id\": {\n                \"type\": \"string\",\n                \"format\": \"uuid\"\n              },\n              \"quantity\": {\n                \"type\": \"string\",\n                \"pattern\": \"^[a-z0-9_]{1,64}$\"\n              },\n              \"mode\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"BLOCK\",\n                  \"NOTIFY\"\n                ]\n              },\n              \"notifyAtPct\": {\n                \"type\": \"number\",\n                \"minimum\": 0.01,\n                \"maximum\": 1,\n                \"description\": \"Required for NOTIFY usage limits and forbidden for BLOCK.\"\n              },\n              \"limitUnits\": {\n                \"type\": \"integer\",\n                \"minimum\": 0,\n                \"maximum\": 2147483647\n              },\n              \"limitCents\": {\n                \"type\": \"integer\",\n                \"minimum\": 0,\n                \"maximum\": 2147483647\n              },\n              \"scope\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"ORG\",\n                  \"MEMBER\",\n                  \"SERVICE_ACCOUNT\"\n                ]\n              },\n              \"subjectId\": {\n                \"type\": \"string\",\n                \"minLength\": 1,\n                \"maxLength\": 128\n              },\n              \"period\": {\n                \"type\": \"string\",\n                \"const\": \"BILLING_PERIOD\"\n              },\n              \"ceiling\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"limitUnits\": {\n                    \"type\": \"integer\",\n                    \"minimum\": 0\n                  },\n                  \"limitCents\": {\n                    \"type\": \"integer\",\n                    \"minimum\": 0\n                  }\n                },\n                \"description\": \"The builder's own per-billing-period ceiling on this quantity, when the plan declares one. Read-only.\"\n              },\n              \"effectiveWindow\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"strategy\",\n                  \"periodSeconds\"\n                ],\n                \"properties\": {\n                  \"strategy\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"fixed_window\",\n                      \"sliding_window\"\n                    ]\n                  },\n                  \"periodSeconds\": {\n                    \"type\": \"integer\",\n                    \"minimum\": 1\n                  }\n                },\n                \"description\": \"Read-only: how the limit is accounted at the edge. `sliding_window` means the ceiling is a rolling horizon of `periodSeconds` rather than one that resets at the billing-period boundary. Builder-owned; not writable.\"\n              },\n              \"createdBy\": {\n                \"anyOf\": [\n                  {\n                    \"type\": \"string\"\n                  },\n                  {\n                    \"type\": \"null\"\n                  }\n                ]\n              },\n              \"createdAt\": {\n                \"type\": \"string\",\n                \"format\": \"date-time\"\n              },\n              \"updatedAt\": {\n                \"type\": \"string\",\n                \"format\": \"date-time\"\n              }\n            },\n            \"allOf\": [\n              {\n                \"oneOf\": [\n                  {\n                    \"required\": [\n                      \"quantity\",\n                      \"limitCents\"\n                    ],\n                    \"properties\": {\n                      \"quantity\": {\n                        \"type\": \"string\",\n                        \"const\": \"spend\"\n                      }\n                    },\n                    \"not\": {\n                      \"required\": [\n                        \"limitUnits\"\n                      ]\n                    }\n                  },\n                  {\n                    \"required\": [\n                      \"quantity\",\n                      \"limitUnits\"\n                    ],\n                    \"properties\": {\n                      \"quantity\": {\n                        \"type\": \"string\",\n                        \"not\": {\n                          \"const\": \"spend\"\n                        }\n                      }\n                    },\n                    \"not\": {\n                      \"required\": [\n                        \"limitCents\"\n                      ]\n                    }\n                  }\n                ]\n              },\n              {\n                \"oneOf\": [\n                  {\n                    \"required\": [\n                      \"scope\"\n                    ],\n                    \"properties\": {\n                      \"scope\": {\n                        \"type\": \"string\",\n                        \"const\": \"ORG\"\n                      }\n                    },\n                    \"not\": {\n                      \"required\": [\n                        \"subjectId\"\n                      ]\n                    }\n                  },\n                  {\n                    \"required\": [\n                      \"scope\",\n                      \"subjectId\"\n                    ],\n                    \"properties\": {\n                      \"scope\": {\n                        \"type\": \"string\",\n                        \"const\": \"MEMBER\"\n                      }\n                    }\n                  },\n                  {\n                    \"required\": [\n                      \"scope\",\n                      \"subjectId\"\n                    ],\n                    \"properties\": {\n                      \"scope\": {\n                        \"type\": \"string\",\n                        \"const\": \"SERVICE_ACCOUNT\"\n                      }\n                    }\n                  }\n                ]\n              },\n              {\n                \"if\": {\n                  \"required\": [\n                    \"mode\"\n                  ],\n                  \"properties\": {\n                    \"mode\": {\n                      \"const\": \"NOTIFY\"\n                    }\n                  }\n                },\n                \"then\": {\n                  \"required\": [\n                    \"notifyAtPct\"\n                  ]\n                }\n              },\n              {\n                \"if\": {\n                  \"required\": [\n                    \"mode\"\n                  ],\n                  \"properties\": {\n                    \"mode\": {\n                      \"const\": \"BLOCK\"\n                    }\n                  }\n                },\n                \"then\": {\n                  \"not\": {\n                    \"required\": [\n                      \"notifyAtPct\"\n                    ]\n                  }\n                }\n              },\n              {\n                \"if\": {\n                  \"anyOf\": [\n                    {\n                      \"required\": [\n                        \"limitUnits\"\n                      ],\n                      \"properties\": {\n                        \"limitUnits\": {\n                          \"const\": 0\n                        }\n                      }\n                    },\n                    {\n                      \"required\": [\n                        \"limitCents\"\n                      ],\n                      \"properties\": {\n                        \"limitCents\": {\n                          \"const\": 0\n                        }\n                      }\n                    }\n                  ]\n                },\n                \"then\": {\n                  \"properties\": {\n                    \"mode\": {\n                      \"const\": \"BLOCK\"\n                    }\n                  }\n                }\n              }\n            ]\n          }\n        }\n      }\n    },\n    \"400\": {\n      \"description\": \"Bad request\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"401\": {\n      \"description\": \"Unauthorized\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"403\": {\n      \"description\": \"Forbidden\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"404\": {\n      \"description\": \"Not found\",\n      \"content\": {\n        \"application/json\": {\n          \"schema\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"required\": [\n              \"error\"\n            ],\n            \"properties\": {\n              \"error\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"code\",\n                  \"message\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  },\n                  \"details\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n",
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "schema.automation.create",
      "name": "Automation create body",
      "kind": "schema",
      "collection": "agents",
      "page": "generated/agents/automation",
      "source": "packages/contracts/src/automation/rule.ts",
      "description": "Closed automation create input, including trigger, condition and action variants.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 200\n    },\n    \"trigger\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"eventType\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"subscription.created\",\n            \"subscription.updated\",\n            \"subscription.canceled\",\n            \"payment.succeeded\",\n            \"payment.failed\",\n            \"entitlement.changed\",\n            \"usage.threshold_reached\",\n            \"rate_limit.exceeded\",\n            \"usage.recorded\",\n            \"usage.archive_checkpoint\",\n            \"gateway.request_denied\",\n            \"change_set.created\",\n            \"change_set.approved\",\n            \"change_set.applied\",\n            \"change_set.rolled_back\",\n            \"change_set.cancelled\",\n            \"billing.event_recorded\",\n            \"authz.decision\",\n            \"repo.changed\",\n            \"automation.rule_fired\",\n            \"automation.action_succeeded\",\n            \"automation.action_failed\",\n            \"automation.action_denied\",\n            \"automation.notification\",\n            \"access_request.created\",\n            \"access_request.resolved\",\n            \"build.failed\",\n            \"product.published\",\n            \"workflow.failed\",\n            \"pr.review_posted\"\n          ]\n        },\n        \"filter\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"subjectType\": {\n              \"type\": \"string\",\n              \"minLength\": 1,\n              \"maxLength\": 128\n            },\n            \"subjectId\": {\n              \"type\": \"string\",\n              \"minLength\": 1,\n              \"maxLength\": 256\n            }\n          },\n          \"additionalProperties\": false\n        }\n      },\n      \"required\": [\n        \"eventType\"\n      ],\n      \"additionalProperties\": false\n    },\n    \"conditions\": {\n      \"default\": [],\n      \"maxItems\": 20,\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"path\": {\n            \"type\": \"string\",\n            \"minLength\": 1,\n            \"maxLength\": 136\n          },\n          \"operator\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"eq\",\n              \"neq\",\n              \"gt\",\n              \"lt\",\n              \"contains\",\n              \"path_prefix\"\n            ]\n          },\n          \"value\": {\n            \"anyOf\": [\n              {\n                \"type\": \"string\",\n                \"maxLength\": 1024\n              },\n              {\n                \"type\": \"number\"\n              },\n              {\n                \"type\": \"boolean\"\n              }\n            ]\n          }\n        },\n        \"required\": [\n          \"path\",\n          \"operator\",\n          \"value\"\n        ],\n        \"additionalProperties\": false\n      }\n    },\n    \"actions\": {\n      \"minItems\": 1,\n      \"maxItems\": 10,\n      \"type\": \"array\",\n      \"items\": {\n        \"oneOf\": [\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"kind\": {\n                \"type\": \"string\",\n                \"const\": \"emit_webhook_event\"\n              },\n              \"event\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"subscription.created\",\n                  \"subscription.updated\",\n                  \"subscription.canceled\",\n                  \"payment.succeeded\",\n                  \"payment.failed\",\n                  \"entitlement.changed\",\n                  \"usage.threshold_reached\"\n                ]\n              },\n              \"payload\": {\n                \"default\": {},\n                \"type\": \"object\",\n                \"propertyNames\": {\n                  \"type\": \"string\"\n                },\n                \"additionalProperties\": {}\n              }\n            },\n            \"required\": [\n              \"kind\",\n              \"event\",\n              \"payload\"\n            ],\n            \"additionalProperties\": false\n          },\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"kind\": {\n                \"type\": \"string\",\n                \"const\": \"create_notification\"\n              },\n              \"level\": {\n                \"default\": \"info\",\n                \"type\": \"string\",\n                \"enum\": [\n                  \"info\",\n                  \"warning\",\n                  \"critical\"\n                ]\n              },\n              \"message\": {\n                \"type\": \"string\",\n                \"minLength\": 1,\n                \"maxLength\": 2000\n              }\n            },\n            \"required\": [\n              \"kind\",\n              \"level\",\n              \"message\"\n            ],\n            \"additionalProperties\": false\n          },\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"kind\": {\n                \"type\": \"string\",\n                \"const\": \"propose_change_set\"\n              },\n              \"intent\": {\n                \"type\": \"string\",\n                \"minLength\": 1,\n                \"maxLength\": 500\n              },\n              \"roleKey\": {\n                \"type\": \"string\",\n                \"minLength\": 1,\n                \"maxLength\": 200\n              },\n              \"permissions\": {\n                \"maxItems\": 200,\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"string\",\n                  \"minLength\": 1,\n                  \"maxLength\": 200\n                }\n              }\n            },\n            \"required\": [\n              \"kind\",\n              \"intent\",\n              \"roleKey\",\n              \"permissions\"\n            ],\n            \"additionalProperties\": false\n          },\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"kind\": {\n                \"type\": \"string\",\n                \"const\": \"notify_audience\"\n              },\n              \"audience\": {\n                \"type\": \"object\",\n                \"propertyNames\": {\n                  \"type\": \"string\"\n                },\n                \"additionalProperties\": {}\n              },\n              \"class\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"product_update\",\n                  \"transactional\"\n                ]\n              },\n              \"subject\": {\n                \"type\": \"string\",\n                \"minLength\": 1,\n                \"maxLength\": 200\n              },\n              \"body\": {\n                \"type\": \"string\",\n                \"minLength\": 1,\n                \"maxLength\": 20000\n              }\n            },\n            \"required\": [\n              \"kind\",\n              \"audience\",\n              \"class\",\n              \"subject\",\n              \"body\"\n            ],\n            \"additionalProperties\": false\n          }\n        ]\n      }\n    },\n    \"enabled\": {\n      \"default\": true,\n      \"type\": \"boolean\"\n    },\n    \"schemaVersion\": {\n      \"default\": 1,\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 9007199254740991\n    }\n  },\n  \"required\": [\n    \"name\",\n    \"trigger\",\n    \"conditions\",\n    \"actions\",\n    \"enabled\",\n    \"schemaVersion\"\n  ],\n  \"additionalProperties\": false\n}\n",
      "guide": "agents/automation"
    },
    {
      "id": "schema.automation.update",
      "name": "Automation update body",
      "kind": "schema",
      "collection": "agents",
      "page": "generated/agents/automation",
      "source": "packages/contracts/src/automation/rule.ts",
      "description": "Closed automation update input, including trigger, condition and action variants.",
      "signature": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 200\n    },\n    \"trigger\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"eventType\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"subscription.created\",\n            \"subscription.updated\",\n            \"subscription.canceled\",\n            \"payment.succeeded\",\n            \"payment.failed\",\n            \"entitlement.changed\",\n            \"usage.threshold_reached\",\n            \"rate_limit.exceeded\",\n            \"usage.recorded\",\n            \"usage.archive_checkpoint\",\n            \"gateway.request_denied\",\n            \"change_set.created\",\n            \"change_set.approved\",\n            \"change_set.applied\",\n            \"change_set.rolled_back\",\n            \"change_set.cancelled\",\n            \"billing.event_recorded\",\n            \"authz.decision\",\n            \"repo.changed\",\n            \"automation.rule_fired\",\n            \"automation.action_succeeded\",\n            \"automation.action_failed\",\n            \"automation.action_denied\",\n            \"automation.notification\",\n            \"access_request.created\",\n            \"access_request.resolved\",\n            \"build.failed\",\n            \"product.published\",\n            \"workflow.failed\",\n            \"pr.review_posted\"\n          ]\n        },\n        \"filter\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"subjectType\": {\n              \"type\": \"string\",\n              \"minLength\": 1,\n              \"maxLength\": 128\n            },\n            \"subjectId\": {\n              \"type\": \"string\",\n              \"minLength\": 1,\n              \"maxLength\": 256\n            }\n          },\n          \"additionalProperties\": false\n        }\n      },\n      \"required\": [\n        \"eventType\"\n      ],\n      \"additionalProperties\": false\n    },\n    \"conditions\": {\n      \"maxItems\": 20,\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"path\": {\n            \"type\": \"string\",\n            \"minLength\": 1,\n            \"maxLength\": 136\n          },\n          \"operator\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"eq\",\n              \"neq\",\n              \"gt\",\n              \"lt\",\n              \"contains\",\n              \"path_prefix\"\n            ]\n          },\n          \"value\": {\n            \"anyOf\": [\n              {\n                \"type\": \"string\",\n                \"maxLength\": 1024\n              },\n              {\n                \"type\": \"number\"\n              },\n              {\n                \"type\": \"boolean\"\n              }\n            ]\n          }\n        },\n        \"required\": [\n          \"path\",\n          \"operator\",\n          \"value\"\n        ],\n        \"additionalProperties\": false\n      }\n    },\n    \"actions\": {\n      \"minItems\": 1,\n      \"maxItems\": 10,\n      \"type\": \"array\",\n      \"items\": {\n        \"oneOf\": [\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"kind\": {\n                \"type\": \"string\",\n                \"const\": \"emit_webhook_event\"\n              },\n              \"event\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"subscription.created\",\n                  \"subscription.updated\",\n                  \"subscription.canceled\",\n                  \"payment.succeeded\",\n                  \"payment.failed\",\n                  \"entitlement.changed\",\n                  \"usage.threshold_reached\"\n                ]\n              },\n              \"payload\": {\n                \"default\": {},\n                \"type\": \"object\",\n                \"propertyNames\": {\n                  \"type\": \"string\"\n                },\n                \"additionalProperties\": {}\n              }\n            },\n            \"required\": [\n              \"kind\",\n              \"event\",\n              \"payload\"\n            ],\n            \"additionalProperties\": false\n          },\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"kind\": {\n                \"type\": \"string\",\n                \"const\": \"create_notification\"\n              },\n              \"level\": {\n                \"default\": \"info\",\n                \"type\": \"string\",\n                \"enum\": [\n                  \"info\",\n                  \"warning\",\n                  \"critical\"\n                ]\n              },\n              \"message\": {\n                \"type\": \"string\",\n                \"minLength\": 1,\n                \"maxLength\": 2000\n              }\n            },\n            \"required\": [\n              \"kind\",\n              \"level\",\n              \"message\"\n            ],\n            \"additionalProperties\": false\n          },\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"kind\": {\n                \"type\": \"string\",\n                \"const\": \"propose_change_set\"\n              },\n              \"intent\": {\n                \"type\": \"string\",\n                \"minLength\": 1,\n                \"maxLength\": 500\n              },\n              \"roleKey\": {\n                \"type\": \"string\",\n                \"minLength\": 1,\n                \"maxLength\": 200\n              },\n              \"permissions\": {\n                \"maxItems\": 200,\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"string\",\n                  \"minLength\": 1,\n                  \"maxLength\": 200\n                }\n              }\n            },\n            \"required\": [\n              \"kind\",\n              \"intent\",\n              \"roleKey\",\n              \"permissions\"\n            ],\n            \"additionalProperties\": false\n          },\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"kind\": {\n                \"type\": \"string\",\n                \"const\": \"notify_audience\"\n              },\n              \"audience\": {\n                \"type\": \"object\",\n                \"propertyNames\": {\n                  \"type\": \"string\"\n                },\n                \"additionalProperties\": {}\n              },\n              \"class\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"product_update\",\n                  \"transactional\"\n                ]\n              },\n              \"subject\": {\n                \"type\": \"string\",\n                \"minLength\": 1,\n                \"maxLength\": 200\n              },\n              \"body\": {\n                \"type\": \"string\",\n                \"minLength\": 1,\n                \"maxLength\": 20000\n              }\n            },\n            \"required\": [\n              \"kind\",\n              \"audience\",\n              \"class\",\n              \"subject\",\n              \"body\"\n            ],\n            \"additionalProperties\": false\n          }\n        ]\n      }\n    },\n    \"enabled\": {\n      \"type\": \"boolean\"\n    }\n  },\n  \"additionalProperties\": false\n}\n",
      "guide": "agents/automation"
    },
    {
      "id": "sdk.backend.express.createExpressHandler",
      "name": "@farthershore/backend/express.createExpressHandler",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/express",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L129",
      "description": "Wrap a route handler so it runs only with a GUARANTEED verified PRINCIPAL. The\nstrict {@link createExpressMiddleware} already attaches `req.fartherShore`\nbefore any handler runs; this closes the type gap by handing the handler a\n{@link VerifiedPrincipalContext} whose `principal` is NON-OPTIONAL (no\noptional-chaining to read `ctx.principal`). It enforces that guarantee at\nruntime with two fail-closed 401s BEFORE the callback runs:\n  - `context_unverified` when there is no verified context at all (handler\n    mounted without the middleware);\n  - `principal_required` when the context is verified but identity-less (a\n    valid gateway request that carried no `X-Fs-Context`) — so the callback is\n    never invoked with an absent `ctx.principal`.\nA thrown `FartherShoreError` / `FartherShorePermissionError` — e.g. from\n`requireMember(ctx)` — is mapped to its typed status; any other error is\nforwarded to `next` for the app's error pipeline.\n\nReturns the wide {@link ExpressMiddleware} so it drops straight into\n`app.post(path, fs.handler(...))`: a handler whose `req` is narrowed to a\n`{ fartherShore: ... }` request type is a SUBTYPE of Express's `Request` and\nwould fail Express's `RequestHandler` assignability — moving the verified\ncontext onto its own `ctx` argument (not the `req` type) is what keeps the\nnon-optional guarantee AND Express compatibility.\nOptions-first overload: `fs.handler({ permission: \"widgets:write\" }, cb)`\nasserts the verified principal holds `permission` (via the fail-closed\ncarrier gate — an absent permission set DENIES) BEFORE the callback runs,\nresponding `403 permission_denied` otherwise. The key is checked with the\nunified grammar (`*` / `<subject>:*` / exact); derive route-shaped keys with\n`routePermission(subject, method)`.",
      "signature": "export declare function createExpressHandler<Req extends ExpressRequestLike = ExpressRequestLike, Res extends ExpressResponseLike = ExpressResponseLike>(handler: VerifiedExpressHandler<Req, Res>): ExpressMiddleware;\nexport declare function createExpressHandler<Req extends ExpressRequestLike = ExpressRequestLike, Res extends ExpressResponseLike = ExpressResponseLike>(options: HandlerOptions, handler: VerifiedExpressHandler<Req, Res>): ExpressMiddleware;",
      "typeReferences": [
        {
          "name": "ExpressMiddleware",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L30"
        },
        {
          "name": "ExpressRequestLike",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L5"
        },
        {
          "name": "ExpressResponseLike",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L17"
        },
        {
          "name": "HandlerOptions",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L91"
        },
        {
          "name": "VerifiedExpressHandler",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L89"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.express.createExpressMiddleware",
      "name": "@farthershore/backend/express.createExpressMiddleware",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/express",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L105",
      "description": "Build the Express middleware. Captures raw body bytes, calls verifyRequest,\nand fail-closes on any error.",
      "signature": "export declare function createExpressMiddleware(fs: FartherShore__b6398b2ddfc7, options?: MiddlewareOptions): ExpressMiddleware;",
      "typeReferences": [
        {
          "name": "ExpressMiddleware",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L30"
        },
        {
          "name": "FartherShore__b6398b2ddfc7",
          "source": "packages/backend/dist/types/core/runtime.d.ts#L84"
        },
        {
          "name": "MiddlewareOptions",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L31"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.express.ExpressMiddleware",
      "name": "@farthershore/backend/express.ExpressMiddleware",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/express",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L30",
      "description": "Public export ExpressMiddleware; see its declaration and owning guide.",
      "signature": "export type ExpressMiddleware = (req: ExpressRequestLike, res: ExpressResponseLike, next: ExpressNext) => void;",
      "typeReferences": [
        {
          "name": "ExpressNext",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L29"
        },
        {
          "name": "ExpressRequestLike",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L5"
        },
        {
          "name": "ExpressResponseLike",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L17"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.express.ExpressNext",
      "name": "@farthershore/backend/express.ExpressNext",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/express",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L29",
      "description": "Public export ExpressNext; see its declaration and owning guide.",
      "signature": "export type ExpressNext = (err?: unknown) => void;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.express.ExpressRequestLike",
      "name": "@farthershore/backend/express.ExpressRequestLike",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/express",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L5",
      "description": "Minimal Express-shaped types so we don't hard-depend on",
      "signature": "export type ExpressRequestLike = {\n    method: string;\n    /** Original URL incl. query, e.g. \"/v1/x?a=1\". */\n    originalUrl?: string;\n    url?: string;\n    path?: string;\n    headers: Record<string, string | string[] | undefined>;\n    /** Raw body bytes if captured by an upstream raw parser. */\n    rawBody?: Buffer | Uint8Array;\n    body?: unknown;\n    fartherShore?: FartherShoreRequestContext__fee40dd450e8;\n};",
      "typeReferences": [
        {
          "name": "FartherShoreRequestContext__fee40dd450e8",
          "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L24"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.express.ExpressResponseLike",
      "name": "@farthershore/backend/express.ExpressResponseLike",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/express",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L17",
      "description": "Public export ExpressResponseLike; see its declaration and owning guide.",
      "signature": "export type ExpressResponseLike = {\n    status(code: number): ExpressResponseLike;\n    json(body: unknown): unknown;\n    setHeader(name: string, value: string): void;\n    /**\n     * Node's `ServerResponse.headersSent`. This is what makes the reporting verb's\n     * transport choice AUTOMATIC: while it is false the measurement rides signed\n     * response headers (no network call); once the response is on the wire\n     * `ctx.report()` transparently switches to the post-stream channel.\n     */\n    headersSent?: boolean;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.express.HandlerOptions",
      "name": "@farthershore/backend/express.HandlerOptions",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/express",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L91",
      "description": "Options for the `fs.handler(options, cb)` overload.",
      "signature": "export type HandlerOptions = {\n    /**\n     * Permission key the verified principal must hold (unified grammar:\n     * `*` / `<subject>:*` / exact — custom strings work). Checked with the\n     * FAIL-CLOSED carrier gate (`requirePermission`): an ABSENT permission set\n     * denies. On failure the wrapper responds `403 { error: \"permission_denied\" }`\n     * before the callback runs.\n     */\n    permission?: string;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.express.MiddlewareOptions",
      "name": "@farthershore/backend/express.MiddlewareOptions",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/express",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L31",
      "description": "Public export MiddlewareOptions; see its declaration and owning guide.",
      "signature": "export type MiddlewareOptions = {\n    /**\n     * STRICT BY DEFAULT (`true`). Every request is verified FAIL-CLOSED and its\n     * inbound `x-fs-*` headers are stripped before the handler runs — the verified\n     * `req.fartherShore` context is the only identity source. The builder need not\n     * pass this: the gateway signs every request, and a missing/invalid signature\n     * or context is a `401`.\n     *\n     * Set `always: false` to instead DEFER to bootstrap's\n     * `verification.required` flag — when the backend contract does not require\n     * verification, the request passes through WITHOUT a context (and without\n     * stripping). This is an advanced escape hatch for a backend that intentionally\n     * consumes no identity; the secure default is strict.\n     */\n    always?: boolean;\n    /**\n     * Called when verification REJECTS a request, with the diagnostic detail that\n     * is deliberately withheld from the response body.\n     *\n     * The wire response is only `{ error: <code> }` (plus the error's `details`,\n     * if any) — several distinct causes share one code (`route_mismatch` covers\n     * both a business mismatch and a backend mismatch; an unserved route id is\n     * the separate `route_unknown`), and the specifics must not leak to an\n     * unauthenticated caller. But discarding them entirely leaves the operator\n     * with no way to tell which cause fired, in their OWN logs, for their OWN\n     * server. That is what this hook restores.\n     *\n     * Defaults to a one-line `console.warn`. Pass a function to route it into a\n     * structured logger, or `() => {}` to silence it.\n     */\n    onVerificationError?: (detail: {\n        code: string;\n        message: string;\n        status: number;\n        method: string;\n        path: string;\n    }) => void;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.express.VerifiedExpressHandler",
      "name": "@farthershore/backend/express.VerifiedExpressHandler",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/express",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L89",
      "description": "A route handler that runs only with a GUARANTEED verified PRINCIPAL. The first\nargument is the {@link VerifiedPrincipalContext} — read `ctx.principal` and\n`ctx.signedContext` (and narrow with `requireMember`/`requireService`)\nwithout any optional-chaining.\nSee {@link createExpressHandler}.",
      "signature": "export type VerifiedExpressHandler<Req extends ExpressRequestLike = ExpressRequestLike, Res extends ExpressResponseLike = ExpressResponseLike> = (ctx: VerifiedPrincipalContext, req: Req, res: Res, next: ExpressNext) => void | Promise<void>;",
      "typeReferences": [
        {
          "name": "ExpressNext",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L29"
        },
        {
          "name": "ExpressRequestLike",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L5"
        },
        {
          "name": "ExpressResponseLike",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L17"
        },
        {
          "name": "VerifiedPrincipalContext",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L78"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.express.VerifiedPrincipalContext",
      "name": "@farthershore/backend/express.VerifiedPrincipalContext",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/express",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L78",
      "description": "A verified request context whose {@link ConsumerPrincipal} is GUARANTEED\npresent — the shape handed to a {@link VerifiedExpressHandler}. The raw\n`FartherShoreRequestContext.principal` is optional (an identity-less gateway\nrequest is legitimate on the `fs.middleware()` path); `fs.handler()` narrows to\nthis type only AFTER rejecting an absent principal with `401 principal_required`,\nso the callback can read `ctx.principal` (and narrow with\n`requireMember`/`requireService`) without any optional-chaining.",
      "signature": "export type VerifiedPrincipalContext = FartherShoreRequestContext__fee40dd450e8 & {\n    principal: ConsumerPrincipal__16f951b9786d;\n    signedContext: FartherShoreSignedContext__24c947c09583;\n};",
      "typeReferences": [
        {
          "name": "ConsumerPrincipal__16f951b9786d",
          "source": "packages/backend/dist/types/core/verifyContext.d.ts#L8"
        },
        {
          "name": "FartherShoreRequestContext__fee40dd450e8",
          "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L24"
        },
        {
          "name": "FartherShoreSignedContext__24c947c09583",
          "source": "packages/backend/dist/types/core/verifyContext.d.ts#L33"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.reflect.ReflectOptions",
      "name": "@farthershore/backend/reflect.ReflectOptions",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/reflect",
      "source": "packages/backend/dist/types/reflect/index.d.ts#L7",
      "description": "Public export ReflectOptions; see its declaration and owning guide.",
      "signature": "export interface ReflectOptions {\n    framework?: \"express\";\n}",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.reflect.ReflectResult",
      "name": "@farthershore/backend/reflect.ReflectResult",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/reflect",
      "source": "packages/backend/dist/types/reflect/index.d.ts#L2",
      "description": "Public export ReflectResult; see its declaration and owning guide.",
      "signature": "export interface ReflectResult {\n    routes: ReflectedRoute__a5f4bc3646ed[];\n    /** Count of sub-mounted routes that couldn't be reflected (Express-5 mount). */\n    unreflectable: number;\n}",
      "typeReferences": [
        {
          "name": "ReflectedRoute__a5f4bc3646ed",
          "source": "packages/backend/dist/types/reflect/route-canon.d.ts#L2"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.reflect.reflectRoutes",
      "name": "@farthershore/backend/reflect.reflectRoutes",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/reflect",
      "source": "packages/backend/dist/types/reflect/index.d.ts#L16",
      "description": "Reflect the routes an Express app serves into the canonical `ReflectedRoute[]`.\nDeduped, HEAD-suppressed, canonical paths (`:id`→`{id}`).",
      "signature": "export declare function reflectRoutes(app: unknown, opts?: ReflectOptions): ReflectedRoute__a5f4bc3646ed[];",
      "typeReferences": [
        {
          "name": "ReflectedRoute__a5f4bc3646ed",
          "source": "packages/backend/dist/types/reflect/route-canon.d.ts#L2"
        },
        {
          "name": "ReflectOptions",
          "source": "packages/backend/dist/types/reflect/index.d.ts#L7"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.reflect.reflectRoutesDetailed",
      "name": "@farthershore/backend/reflect.reflectRoutesDetailed",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/reflect",
      "source": "packages/backend/dist/types/reflect/index.d.ts#L11",
      "description": "Reflect with diagnostics. Use `reflectRoutes` for just the canonical list.",
      "signature": "export declare function reflectRoutesDetailed(app: unknown, _opts?: ReflectOptions): ReflectResult;",
      "typeReferences": [
        {
          "name": "ReflectOptions",
          "source": "packages/backend/dist/types/reflect/index.d.ts#L7"
        },
        {
          "name": "ReflectResult",
          "source": "packages/backend/dist/types/reflect/index.d.ts#L2"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.BootstrapClient",
      "name": "@farthershore/backend.BootstrapClient",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/bootstrap.d.ts#L25",
      "description": "Caches the bootstrap response and refreshes it lazily. `get()` returns the\ncached value when fresh, otherwise refreshes (single-flight).",
      "signature": "export declare class BootstrapClient {\n    private readonly runtimeToken;\n    private readonly endpoint;\n    private readonly request;\n    private readonly fetchImpl;\n    private readonly now;\n    private readonly minRefreshSeconds;\n    private readonly maxStaleMs;\n    private cached;\n    private fetchedAt;\n    private refreshAfterMs;\n    private inflight;\n    constructor(options: BootstrapClientOptions);\n    /** Cached config when fresh; otherwise refreshes. */\n    get(): Promise<RuntimeBootstrapResponse>;\n    /** Force a network refresh (single-flight). */\n    refresh(): Promise<RuntimeBootstrapResponse>;\n    /** Last cached value without triggering a refresh (null until bootstrapped). */\n    peek(): RuntimeBootstrapResponse | null;\n    /**\n     * Seconds since the cached response was fetched; `null` before the first\n     * successful bootstrap. Diagnostics only — a rejected route logs this so an\n     * operator can tell \"cache is an hour old\" from \"core says it really is gone\".\n     */\n    ageSeconds(): number | null;\n    private isStale;\n    private isHardStale;\n    private cachedOrThrowOnHardStale;\n    private doBootstrap;\n}",
      "typeReferences": [
        {
          "name": "BootstrapClientOptions",
          "source": "packages/backend/dist/types/core/bootstrap.d.ts#L3"
        },
        {
          "name": "RuntimeBootstrapResponse",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L228"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.BootstrapClientOptions",
      "name": "@farthershore/backend.BootstrapClientOptions",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/bootstrap.d.ts#L3",
      "description": "Where to reach core's bootstrap endpoint. Derived from the token's coreUrl.",
      "signature": "export type BootstrapClientOptions = {\n    runtimeToken: string;\n    /** Core base URL, e.g. https://core.farthershore.com. */\n    coreUrl: string;\n    /** Optional bootstrap request metadata. */\n    request?: RuntimeBootstrapRequest__4b9c188578f3;\n    /** Injectable fetch (tests). */\n    fetchImpl?: typeof fetch;\n    /** Injectable clock in ms (tests). */\n    now?: () => number;\n    /** Minimum seconds between refreshes regardless of server hint. */\n    minRefreshSeconds?: number;\n    /**\n     * Maximum age for cached bootstrap authorization metadata during transient\n     * refresh failures. Defaults to 5 minutes.\n     */\n    maxStaleSeconds?: number;\n};",
      "typeReferences": [
        {
          "name": "RuntimeBootstrapRequest__4b9c188578f3",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L183"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.buildCanonicalSigningString",
      "name": "@farthershore/backend.buildCanonicalSigningString",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-signing.d.ts#L16",
      "description": "Build the byte-exact canonical signing string. This is the cross-language\ngate: every SDK MUST produce identical output for identical inputs, with NO\ndependence on JSON key order or Node Buffer serialization.",
      "signature": "declare const buildCanonicalSigningString: (input: CanonicalSigningInput) => string;",
      "typeReferences": [
        {
          "name": "CanonicalSigningInput",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L153"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.buildHealthReport",
      "name": "@farthershore/backend.buildHealthReport",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/health.d.ts#L11",
      "description": "Build the fs.health() report from the current snapshot.",
      "signature": "export declare function buildHealthReport(snapshot: HealthSnapshot): RuntimeHealthReport;",
      "typeReferences": [
        {
          "name": "HealthSnapshot",
          "source": "packages/backend/dist/types/core/health.d.ts#L3"
        },
        {
          "name": "RuntimeHealthReport",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L306"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.canonicalizeQuery",
      "name": "@farthershore/backend.canonicalizeQuery",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-signing.d.ts#L10",
      "description": "Normalize a query string into the canonical form: split into name=value\npairs on '&', sort by (name, then value) using byte (code-unit) order, and\nre-join with '&'. Pass-through (no re-encoding) so all SDKs agree on bytes.\nAn empty input yields an empty string.",
      "signature": "declare const canonicalizeQuery: (query: string) => string;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.CanonicalSigningInput",
      "name": "@farthershore/backend.CanonicalSigningInput",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-types.d.ts#L153",
      "description": "The signed claim set. Field VALUES are language-neutral strings/integers;\nthe canonical serialization (in runtime-signing.ts) pins the wire bytes.",
      "signature": "export type CanonicalSigningInput = {\n    /** HTTP method; canonicalized to upper-case. */\n    method: string;\n    /** Request path (no host, no query). */\n    path: string;\n    /** Raw query string (without leading '?'), or \"\" when absent. */\n    query: string;\n    /** Lowercase-hex SHA-256 of the raw body, EMPTY_BODY_SHA256, or \"STREAM\". */\n    bodyHash: string;\n    /** Gateway-minted request id (also the replay nonce). */\n    requestId: string;\n    /** Unix epoch seconds at signing time. */\n    timestamp: number;\n    businessId: string;\n    backendId: string;\n    /** Resolved route id; \"\" when unresolved. */\n    routeId: string;\n    policyVersion: string;\n    /**\n     * Consumer-principal wave (D3) — SHA-256 hex of the presented `X-Fs-Context`\n     * JWT string, or the SHA-256 of the EMPTY string when context signing is off.\n     * Bound into the canonical string so one request-signature verification\n     * covers both the request and the identity context. Compute via\n     * {@link hashContextToken}.\n     */\n    contextHash: string;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.CloudflaredSupervisor",
      "name": "@farthershore/backend.CloudflaredSupervisor",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/tunnel.d.ts#L88",
      "description": "Supervises a single `cloudflared` child process. One supervisor ⇒ one tunnel\n(one backend). Restarts on unexpected exit; stays down after `shutdown()`.",
      "signature": "export declare class CloudflaredSupervisor {\n    private readonly tunnelToken;\n    private readonly spawn;\n    private readonly binaryPath;\n    private readonly locateBinary;\n    private readonly logger;\n    private readonly onError;\n    private readonly failClosed;\n    private readonly baseBackoffMs;\n    private readonly maxBackoffMs;\n    private readonly backoffJitter;\n    private readonly random;\n    private readonly setTimeoutFn;\n    private readonly clearTimeoutFn;\n    private readonly childEnv;\n    private child;\n    private state;\n    private restarts;\n    private consecutiveFailures;\n    private lastError;\n    private intentionalStop;\n    private restartTimer;\n    private signalsBound;\n    private readonly signalHandler;\n    constructor(options: CloudflaredSupervisorOptions);\n    /**\n     * Resolve the binary, spawn the child, wire log piping + exit handling, and\n     * bind SIGTERM/SIGINT. Fail-open by default (resolves; error in `status()`);\n     * fail-closed when configured (rejects).\n     *\n     * Async by contract: the public lifecycle API (and a future binary\n     * download/health-probe step) is Promise-returning even when today's body is\n     * synchronous, so callers can always `await fs.start()`.\n     */\n    start(): Promise<void>;\n    /**\n     * Intentional graceful stop: cancel any pending restart, signal the child\n     * (SIGTERM), unbind signals, and mark the supervisor stopped. Any exit that\n     * the kill provokes will NOT trigger a restart. Async by lifecycle contract.\n     */\n    shutdown(): Promise<void>;\n    /** Token-free status snapshot for diagnostics / health. */\n    status(): TunnelStatus;\n    /** Compact health string for `fs.health().tunnel`. */\n    healthString(): string;\n    private spawnChild;\n    /**\n     * Resolve the cloudflared binary path. Order:\n     *   1. an installed `@farthershore/cloudflared-<platform>` optional-dependency\n     *      matching process.platform+arch (the injected locator), then\n     *   2. an explicit `binaryPath` supplied by the host, then\n     *   3. the bare `cloudflared` name on PATH (resolved at spawn time).\n     *\n     * On an unsupported arch (no optional dep, no binaryPath) AND no usable PATH\n     * fallback, this raises a clear, redacted error pointing at the sidecar — it\n     * NEVER downloads a binary at runtime. (Cross-platform binary management is the\n     * optional-dep packages' job, populated at publish time.)\n     */\n    private resolveBinary;\n    /** Pipe stdout/stderr to the logger with the tunnel token redacted. */\n    private pipeLogs;\n    /**\n     * Build a per-stream `data` handler that BUFFERS partial lines across chunks\n     * before redacting. The OS can deliver a single log line in two `data` events\n     * with the boundary mid-token; redacting each chunk independently would let\n     * the two token halves slip through. Buffering until a newline reassembles\n     * the full line (a token never contains a newline), so redaction always sees\n     * the whole token. A trailing partial is held for the next chunk, or flushed\n     * if it grows past a safety cap (cloudflared is line-oriented, so this is a\n     * belt-and-suspenders guard against unbounded buffer growth).\n     */\n    private makeLineSink;\n    private emitLogLine;\n    /** Replace every occurrence of the tunnel token with the sentinel. */\n    private redact;\n    private handleExit;\n    private scheduleRestart;\n    private backoffDelay;\n    private handleStartFailure;\n    private recordError;\n    private bindSignals;\n    private unbindSignals;\n}",
      "typeReferences": [
        {
          "name": "CloudflaredSupervisorOptions",
          "source": "packages/backend/dist/types/core/tunnel.d.ts#L32"
        },
        {
          "name": "TunnelStatus",
          "source": "packages/backend/dist/types/core/tunnel.d.ts#L77"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.CloudflaredSupervisorOptions",
      "name": "@farthershore/backend.CloudflaredSupervisorOptions",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/tunnel.d.ts#L32",
      "description": "Public export CloudflaredSupervisorOptions; see its declaration and owning guide.",
      "signature": "export type CloudflaredSupervisorOptions = {\n    /**\n     * The Cloudflare tunnel token (transport identity for `cloudflared`). HIGHLY\n     * sensitive: kept in memory, never logged, redacted everywhere. (Distinct from\n     * the runtime token / app identity.)\n     */\n    tunnelToken: string;\n    /** Injected spawner (required; tests pass a fake — never a real process). */\n    spawn: SpawnFn;\n    /**\n     * Explicit binary path. When omitted, `locateBinary` resolves it (Linux-first\n     * candidates). When neither resolves, start fails with a clear error.\n     */\n    binaryPath?: string;\n    /** Injected binary locator. Returns an absolute path or null if not found. */\n    locateBinary?: () => string | null;\n    /** Log sink for redacted cloudflared output. Defaults to console.error. */\n    logger?: (line: string) => void;\n    /** Error-surface callback (fail-open path). Receives a token-redacted error. */\n    onError?: (error: Error) => void;\n    /**\n     * When true, a spawn failure rejects `start()` (the host opted into letting a\n     * tunnel failure stop the app). Default false: tunnel failure ≠ app crash.\n     * (Request *verification* is always fail-closed regardless — different axis.)\n     */\n    failClosed?: boolean;\n    /** Base backoff for the first restart (doubles each consecutive failure). */\n    baseBackoffMs?: number;\n    /** Backoff ceiling. */\n    maxBackoffMs?: number;\n    /** Jitter strategy for the restart backoff. Defaults to `equal` (the shared\n     *  backoff default) — half the capped exponential is fixed, half randomized,\n     *  so multiple supervisors don't re-collide in lockstep after a shared\n     *  outage. Pass `none` for a deterministic schedule. */\n    backoffJitter?: JitterStrategy__d3dcffd979fd;\n    /** Injectable uniform random in [0, 1) for the jitter (tests pin it). Defaults\n     *  to Math.random. */\n    random?: () => number;\n    /** Injectable timer (tests use fake timers / a custom scheduler). */\n    setTimeoutFn?: (cb: () => void, ms: number) => unknown;\n    clearTimeoutFn?: (handle: unknown) => void;\n    /** Process env passed to the child (tunnel token is NOT injected via env). */\n    childEnv?: NodeJS.ProcessEnv;\n};",
      "typeReferences": [
        {
          "name": "JitterStrategy__d3dcffd979fd",
          "source": "packages/backend/dist/types/core/backoff.d.ts#L2"
        },
        {
          "name": "SpawnFn",
          "source": "packages/backend/dist/types/core/tunnel.d.ts#L25"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.computeMeteringHeaders",
      "name": "@farthershore/backend.computeMeteringHeaders",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/response-metering.d.ts#L83",
      "description": "Compute the three response-metering headers for a payload as a plain\nname→value map, attachable to ANY response mechanism (Fetch `Response`,\nExpress `res.set`, a raw header object). This is the metering-availability\nprimitive: it NEVER throws at request time — if no token is resolvable (or\nsigning fails) it skips stamping, reports the reason (`onSkip` / dev hook /\na `console.warn`), and returns `{}` so the builder's endpoint is never broken.\n\nThis is the framework-neutral wire recipe: `ctx.report()` is the JS surface\nover it, and a Python/Go backend can stamp identical headers by building the\nsame payload (see `docs/response-metering-wire.md`).",
      "signature": "export declare function computeMeteringHeaders(payload: ResponseMeteringUsagePayload, options?: ComputeMeteringOptions): Promise<MeteringHeaders>;",
      "typeReferences": [
        {
          "name": "ComputeMeteringOptions",
          "source": "packages/backend/dist/types/response-metering.d.ts#L44"
        },
        {
          "name": "MeteringHeaders",
          "source": "packages/backend/dist/types/response-metering.d.ts#L43"
        },
        {
          "name": "ResponseMeteringUsagePayload",
          "source": "packages/backend/dist/types/response-metering.d.ts#L20"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.ComputeMeteringOptions",
      "name": "@farthershore/backend.ComputeMeteringOptions",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/response-metering.d.ts#L44",
      "description": "Public export ComputeMeteringOptions; see its declaration and owning guide.",
      "signature": "export type ComputeMeteringOptions = {\n    token?: string;\n    env?: Record<string, string | undefined>;\n    /** Gateway request id, for dev-mode trace/usage association (never signed). */\n    requestId?: string;\n    /**\n     * Called (instead of throwing) when headers cannot be stamped at request time\n     * — e.g. no token. The endpoint is never broken; usage is simply not metered.\n     */\n    onSkip?: (reason: string) => void;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.ConsumerPrincipal",
      "name": "@farthershore/backend.ConsumerPrincipal",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/verifyContext.d.ts#L8",
      "description": "The verified consumer principal derived from the cv=2 signed context — a\ntenant (`org`) plus exactly one subject. Local copy of the contracts\n`ConsumerPrincipal` (the SDK never leaks `@farthershore/contracts` into a\npublic type signature; see runtime-signing.ts).",
      "signature": "export type ConsumerPrincipal = {\n    org: {\n        id: string;\n    };\n    subject: {\n        kind: \"member\";\n        /** The member's stable internal id (never an IdP subject/email). */\n        memberId: string;\n        /** How this request's identity was proven. */\n        via: \"session\" | \"api_key\";\n        /** The personal `fsk_` key id when `via === \"api_key\"` (audit). */\n        keyId?: string;\n    } | {\n        kind: \"service\";\n        /** The org-owned service account id — the stable service identity. */\n        serviceAccountId: string;\n        /** The specific service `fsk_` key id (rotates; audit). */\n        keyId: string;\n    };\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.createExpressHandler",
      "name": "@farthershore/backend.createExpressHandler",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L129",
      "description": "Wrap a route handler so it runs only with a GUARANTEED verified PRINCIPAL. The\nstrict {@link createExpressMiddleware} already attaches `req.fartherShore`\nbefore any handler runs; this closes the type gap by handing the handler a\n{@link VerifiedPrincipalContext} whose `principal` is NON-OPTIONAL (no\noptional-chaining to read `ctx.principal`). It enforces that guarantee at\nruntime with two fail-closed 401s BEFORE the callback runs:\n  - `context_unverified` when there is no verified context at all (handler\n    mounted without the middleware);\n  - `principal_required` when the context is verified but identity-less (a\n    valid gateway request that carried no `X-Fs-Context`) — so the callback is\n    never invoked with an absent `ctx.principal`.\nA thrown `FartherShoreError` / `FartherShorePermissionError` — e.g. from\n`requireMember(ctx)` — is mapped to its typed status; any other error is\nforwarded to `next` for the app's error pipeline.\n\nReturns the wide {@link ExpressMiddleware} so it drops straight into\n`app.post(path, fs.handler(...))`: a handler whose `req` is narrowed to a\n`{ fartherShore: ... }` request type is a SUBTYPE of Express's `Request` and\nwould fail Express's `RequestHandler` assignability — moving the verified\ncontext onto its own `ctx` argument (not the `req` type) is what keeps the\nnon-optional guarantee AND Express compatibility.\nOptions-first overload: `fs.handler({ permission: \"widgets:write\" }, cb)`\nasserts the verified principal holds `permission` (via the fail-closed\ncarrier gate — an absent permission set DENIES) BEFORE the callback runs,\nresponding `403 permission_denied` otherwise. The key is checked with the\nunified grammar (`*` / `<subject>:*` / exact); derive route-shaped keys with\n`routePermission(subject, method)`.",
      "signature": "export declare function createExpressHandler<Req extends ExpressRequestLike = ExpressRequestLike, Res extends ExpressResponseLike = ExpressResponseLike>(handler: VerifiedExpressHandler<Req, Res>): ExpressMiddleware;\nexport declare function createExpressHandler<Req extends ExpressRequestLike = ExpressRequestLike, Res extends ExpressResponseLike = ExpressResponseLike>(options: HandlerOptions, handler: VerifiedExpressHandler<Req, Res>): ExpressMiddleware;",
      "typeReferences": [
        {
          "name": "ExpressMiddleware",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L30"
        },
        {
          "name": "ExpressRequestLike",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L5"
        },
        {
          "name": "ExpressResponseLike",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L17"
        },
        {
          "name": "HandlerOptions",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L91"
        },
        {
          "name": "VerifiedExpressHandler",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L89"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.createExpressMiddleware",
      "name": "@farthershore/backend.createExpressMiddleware",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L105",
      "description": "Build the Express middleware. Captures raw body bytes, calls verifyRequest,\nand fail-closes on any error.",
      "signature": "export declare function createExpressMiddleware(fs: FartherShore, options?: MiddlewareOptions): ExpressMiddleware;",
      "typeReferences": [
        {
          "name": "ExpressMiddleware",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L30"
        },
        {
          "name": "FartherShore",
          "source": "packages/backend/dist/types/core/runtime.d.ts#L84"
        },
        {
          "name": "MiddlewareOptions",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L31"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.credentialKind",
      "name": "@farthershore/backend.credentialKind",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/subject.d.ts#L36",
      "description": "The credential SURFACE behind a verified request, DERIVED from the signed\nprincipal (route-surfaces wave) — no new claim, no spoofable header. A member\nsubject carries `via`; a service subject is always key-borne. Returns\n`undefined` when the request carried no verified principal (identity-less), so\na caller can distinguish \"not a portal session\" from \"unknown\".\n\n  - `\"portal_session\"` ⟺ a member via a browser session (`fsc_`).\n  - `\"api_key\"`        ⟺ a member's personal key OR any service key (`fsk_`).",
      "signature": "export declare function credentialKind(ctx: PrincipalCarrier): \"portal_session\" | \"api_key\" | undefined;",
      "typeReferences": [
        {
          "name": "PrincipalCarrier",
          "source": "packages/backend/dist/types/core/subject.d.ts#L11"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.decodeContextClaims",
      "name": "@farthershore/backend.decodeContextClaims",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/verifyContext.d.ts#L109",
      "description": "Decode + shape-check a cv=2 context token's PAYLOAD **without** verifying its\nHS256 signature. Safe to call ONLY after the token's authenticity has been\nestablished by another proof — in this SDK the presented `X-Fs-Context`'s\nSHA-256 (`contextHash`) is bound into the Ed25519-verified request signature,\nso once that request signature checks out the token bytes are byte-exact the\nones the gateway signed and its CONTENT is gateway-vouched (no HS256 secret\nrequired). This is the DEFAULT identity path: with request signing on, a\nverified request always yields the principal even when no HS256 context secret\nis distributed to the backend. Returns the typed cv=2 claims, or `null` when\nthe token is malformed or is not a cv=2 claim.",
      "signature": "export declare function decodeContextClaims(token: string): FartherShoreSignedContext | null;",
      "typeReferences": [
        {
          "name": "FartherShoreSignedContext",
          "source": "packages/backend/dist/types/core/verifyContext.d.ts#L33"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.DEFAULT_TOKEN_ENV",
      "name": "@farthershore/backend.DEFAULT_TOKEN_ENV",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/response-metering.d.ts#L66",
      "description": "Public export DEFAULT_TOKEN_ENV; see its declaration and owning guide.",
      "signature": "declare const DEFAULT_TOKEN_ENV: \"FS_RUNTIME_TOKEN\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.EMPTY_BODY_SHA256",
      "name": "@farthershore/backend.EMPTY_BODY_SHA256",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-types.d.ts#L143",
      "description": "SHA-256 of zero bytes — the canonical empty-body hash.",
      "signature": "declare const EMPTY_BODY_SHA256 = \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.ExpressMiddleware",
      "name": "@farthershore/backend.ExpressMiddleware",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L30",
      "description": "Public export ExpressMiddleware; see its declaration and owning guide.",
      "signature": "export type ExpressMiddleware = (req: ExpressRequestLike, res: ExpressResponseLike, next: ExpressNext) => void;",
      "typeReferences": [
        {
          "name": "ExpressNext",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L29"
        },
        {
          "name": "ExpressRequestLike",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L5"
        },
        {
          "name": "ExpressResponseLike",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L17"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.ExpressNext",
      "name": "@farthershore/backend.ExpressNext",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L29",
      "description": "Public export ExpressNext; see its declaration and owning guide.",
      "signature": "export type ExpressNext = (err?: unknown) => void;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.ExpressRequestLike",
      "name": "@farthershore/backend.ExpressRequestLike",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L5",
      "description": "Minimal Express-shaped types so we don't hard-depend on",
      "signature": "export type ExpressRequestLike = {\n    method: string;\n    /** Original URL incl. query, e.g. \"/v1/x?a=1\". */\n    originalUrl?: string;\n    url?: string;\n    path?: string;\n    headers: Record<string, string | string[] | undefined>;\n    /** Raw body bytes if captured by an upstream raw parser. */\n    rawBody?: Buffer | Uint8Array;\n    body?: unknown;\n    fartherShore?: FartherShoreRequestContext;\n};",
      "typeReferences": [
        {
          "name": "FartherShoreRequestContext",
          "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L24"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.ExpressResponseLike",
      "name": "@farthershore/backend.ExpressResponseLike",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L17",
      "description": "Public export ExpressResponseLike; see its declaration and owning guide.",
      "signature": "export type ExpressResponseLike = {\n    status(code: number): ExpressResponseLike;\n    json(body: unknown): unknown;\n    setHeader(name: string, value: string): void;\n    /**\n     * Node's `ServerResponse.headersSent`. This is what makes the reporting verb's\n     * transport choice AUTOMATIC: while it is false the measurement rides signed\n     * response headers (no network call); once the response is on the wire\n     * `ctx.report()` transparently switches to the post-stream channel.\n     */\n    headersSent?: boolean;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.fartherShore",
      "name": "@farthershore/backend.fartherShore",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/index.d.ts#L64",
      "description": "Public export fartherShore; see its declaration and owning guide.",
      "signature": "declare const fartherShore: {\n    /** Derive everything from FS_RUNTIME_TOKEN via bootstrap. */\n    initFromEnv(options?: FartherShoreInitOptions): FartherShoreInstance;\n};",
      "typeReferences": [
        {
          "name": "FartherShoreInitOptions",
          "source": "packages/backend/dist/types/core/runtime.d.ts#L21"
        },
        {
          "name": "FartherShoreInstance",
          "source": "packages/backend/dist/types/index.d.ts#L32"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.FartherShore",
      "name": "@farthershore/backend.FartherShore",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/runtime.d.ts#L84",
      "description": "The runtime instance. Lazily bootstraps; holds the JWKS client, nonce cache,\nmetering buffer, and shutdown hooks.",
      "signature": "export declare class FartherShore {\n    private readonly bootstrapClient;\n    private readonly fetchImpl;\n    private readonly verificationEnabled;\n    private readonly meteringEnabledOverride;\n    private readonly runtimeToken;\n    private readonly coreUrl;\n    private readonly instanceId?;\n    private readonly tunnelOptions;\n    /** OPTIONAL HS256 secret(s) — defense-in-depth over the cv=2 X-Fs-Context. */\n    private readonly contextSecrets;\n    private readonly nonceCache;\n    private readonly replayProtectionDiagnostic;\n    private readonly shutdownManager;\n    /** Bounds the on-demand bootstrap refreshes an unknown route id can trigger. */\n    private readonly routeRefreshLimiter;\n    private jwks;\n    private postStreamUsageClient;\n    private tunnel;\n    private bootstrapped;\n    constructor(options?: FartherShoreInitOptions);\n    /** Ensure bootstrap config is loaded; build the JWKS + metering clients. */\n    ensureBootstrapped(): Promise<RuntimeBootstrapResponse>;\n    /**\n     * Boot-time route reconciliation (call once, before `listen()`). Reflects the\n     * app's real route surface, diffs it against the declared lock from bootstrap,\n     * REPORTS drift to the platform, and CONFIRMS the declared `pending` routes\n     * this replica serves. Fail-OPEN: never throws / never blocks boot.\n     *\n     * The reflection code is dynamically imported so it stays OFF the per-request\n     * verification hot path (the runtime stays route-unaware there). The report is\n     * an OUTBOUND backend→core call (same channel as bootstrap/metering), so it\n     * works for every transport (direct / tunnel).\n     *\n     * Returns the reconcile result (or null if reflection is unavailable / boot\n     * reporting failed). v1 reflects Express; `app` omitted → no-op.\n     */\n    ready(app?: unknown): Promise<ReconcileResult__9286f3220e09 | null>;\n    /** Outbound report sink for `ready()` — runtime-token-authed POSTs to core. */\n    private buildReportSink;\n    /**\n     * Framework-neutral verification primitive. Fail-closed: throws a typed\n     * FartherShoreError on any verification failure. Returns the verified context.\n     */\n    verifyRequest(input: VerifyRequestInput, options?: VerifyRequestHostOptions__981e9466821d): Promise<FartherShoreRequestContext>;\n    /**\n     * Bind the ONE reporting verb to a verified context. Identity comes from the\n     * context (`signedContext.subscriptionId` + `requestId`) — never from the\n     * caller — so a handler cannot forget it, and a background job that is handed\n     * this context keeps reporting against the SAME served identity.\n     */\n    private buildReportFn;\n    /** Whether verification is required (bootstrap × opt-out). */\n    verificationRequired(): Promise<boolean>;\n    /**\n     * Start the embedded runner. For a `tunnel` backend whose runner is\n     * `embedded`, this supervises `cloudflared` as a child process\n     * (spawned via the injected/default spawner) using the tunnel token from\n     * bootstrap. For every other transport (`direct`, or the `sidecar` runner)\n     * it is a no-op — there is no SDK-managed process to run.\n     *\n     * Fail-open by default: a tunnel that cannot start does NOT crash the host app\n     * (request verification stays fail-closed regardless — a different axis).\n     */\n    start(): Promise<void>;\n    /**\n     * PRIVATE transport for the post-stream lane of `ctx.report()`. Never rejects\n     * — a metering hiccup must not break a builder's endpoint. This is machinery,\n     * not surface: the ONE public reporting verb is `ctx.report()`.\n     */\n    private reportPostStreamUsage;\n    /**\n     * How far replay protection actually reaches — `\"shared\"` (enforced across\n     * every replica) or `\"single-instance\"` (this process only). Deployment\n     * diagnostic: log it at boot, or assert on it in a smoke test, so the mode is\n     * never a surprise. See {@link FartherShoreInitOptions.nonceStore}.\n     */\n    replayProtection(): ReplayProtectionDiagnostic;\n    /** Current local health report. */\n    health(): RuntimeHealthReport;\n    /** Graceful shutdown: flush metering + send a stopping heartbeat. */\n    shutdown(): Promise<void>;\n    /** Register an additional shutdown hook (e.g. the cloudflared supervisor). */\n    onShutdown(hook: () => Promise<void> | void): void;\n}",
      "typeReferences": [
        {
          "name": "FartherShoreInitOptions",
          "source": "packages/backend/dist/types/core/runtime.d.ts#L21"
        },
        {
          "name": "FartherShoreRequestContext",
          "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L24"
        },
        {
          "name": "ReconcileResult__9286f3220e09",
          "source": "packages/backend/dist/types/reflect/reconcile.d.ts#L23"
        },
        {
          "name": "ReplayProtectionDiagnostic",
          "source": "packages/backend/dist/types/core/replay-protection.d.ts#L4"
        },
        {
          "name": "RuntimeBootstrapResponse",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L228"
        },
        {
          "name": "RuntimeHealthReport",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L306"
        },
        {
          "name": "VerifyRequestHostOptions__981e9466821d",
          "source": "packages/backend/dist/types/core/runtime.d.ts#L76"
        },
        {
          "name": "VerifyRequestInput",
          "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L6"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.FartherShoreContext",
      "name": "@farthershore/backend.FartherShoreContext",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L85",
      "description": "The verified Farther Shore context — the identity + reporting handle a\nhandler (or a background job the handler hands it to) works with. Alias of\n{@link FartherShoreRequestContext}: a background job is simply given the\nalready-verified context, so there is no second context type to learn.",
      "signature": "export type FartherShoreContext = FartherShoreRequestContext;",
      "typeReferences": [
        {
          "name": "FartherShoreRequestContext",
          "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L24"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.FartherShoreError",
      "name": "@farthershore/backend.FartherShoreError",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/errors.d.ts#L33",
      "description": "A verification / runtime failure with a stable, cross-language `code` and the\nfail-closed HTTP status the adapter should emit.\n\nOptionally carries a {@link LimitDescriptor} (`limitDescriptor`) when the\nfailure is a plan-limit deny the backend chooses to surface itself, so SDKs\ncan render an upgrade affordance from a backend-minted error. This is OPT-IN\nplumbing — the backend normally RELAYS the gateway's deny (which already\ncarries the descriptor) rather than minting its own, so the field is absent on\nevery verification/runtime failure. Additive; no behavior change.",
      "signature": "export declare class FartherShoreError extends Error {\n    readonly code: FartherShoreErrorCode;\n    readonly status: number;\n    /** Present only when this error is a self-minted plan-limit deny (rare; the\n     *  backend usually relays the gateway's descriptor-bearing deny instead). */\n    readonly limitDescriptor?: LimitDescriptor;\n    /**\n     * Extra scalar fields the adapters merge into the `{ error: <code> }` response\n     * body. Kept to strings so the body stays a flat, machine-readable envelope —\n     * `route_unknown` uses it to name the `routeId` that was not served, which is\n     * the single fact an operator needs to tell a stale cache from a real deny.\n     */\n    readonly details?: Readonly<Record<string, string>>;\n    constructor(code: FartherShoreErrorCode, message: string, status?: number, limitDescriptor?: LimitDescriptor, details?: Readonly<Record<string, string>>);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreErrorCode",
          "source": "packages/backend/dist/types/core/errors.d.ts#L21"
        },
        {
          "name": "LimitDescriptor",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L8"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.FartherShoreErrorCode",
      "name": "@farthershore/backend.FartherShoreErrorCode",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/errors.d.ts#L21",
      "description": "Every code a {@link FartherShoreError} can carry.",
      "signature": "export type FartherShoreErrorCode = RuntimeErrorCode | SdkLocalErrorCode;",
      "typeReferences": [
        {
          "name": "RuntimeErrorCode",
          "source": "packages/backend/dist/types/generated/runtime-contract.d.ts#L21"
        },
        {
          "name": "SdkLocalErrorCode",
          "source": "packages/backend/dist/types/core/errors.d.ts#L19"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.FartherShoreInitOptions",
      "name": "@farthershore/backend.FartherShoreInitOptions",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/runtime.d.ts#L21",
      "description": "Public export FartherShoreInitOptions; see its declaration and owning guide.",
      "signature": "export type FartherShoreInitOptions = {\n    /** Explicit runtime token. Defaults to process.env.FS_RUNTIME_TOKEN. */\n    runtimeToken?: string;\n    /** Core base URL. Defaults to FS_CORE_URL or https://core.farthershore.com. */\n    coreUrl?: string;\n    /** Env map (tests). Defaults to process.env. */\n    env?: Record<string, string | undefined>;\n    /** Injectable fetch (tests). */\n    fetchImpl?: typeof fetch;\n    /** Optional advanced opt-outs (default: everything on). */\n    verification?: {\n        enabled?: boolean;\n    };\n    metering?: {\n        enabled?: boolean;\n    };\n    /** Embedded-cloudflared runner config (advanced opt-in; default DX is on). */\n    tunnel?: FartherShoreTunnelOptions;\n    /** SDK metadata forwarded to bootstrap. */\n    instanceId?: string;\n    /**\n     * OPTIONAL HS256 secret(s) for the gateway's cv=2 `X-Fs-Context` claim — pure\n     * DEFENSE-IN-DEPTH, NOT required to derive identity. The consumer principal is\n     * always produced from the `X-Fs-Context` token whose bytes are vouched for by\n     * the Ed25519 request signature (the token's SHA-256 is bound into the signed\n     * canonical string). These secrets add a second, independent HS256 proof: when\n     * configured, a presented token must ALSO pass HS256 or the request is\n     * rejected. They are the GATEWAY CONTEXT-SIGNING keyring values\n     * (`CONTEXT_SIGNING_KEYS_JSON`; supply every live key during rotation —\n     * try-all), NOT the business's `contextTokenSecret` (which signs `fsc_`\n     * INGRESS tokens verified BY the gateway — setting that here would reject every\n     * valid gateway request). Defaults to `FS_CONTEXT_SECRETS` (comma-separated)\n     * from the env. Leaving it unset is the common case.\n     */\n    contextSecrets?: readonly string[];\n    /**\n     * OPTIONAL shared replay-prevention store. Not required: the signature's\n     * ~305s time window is the always-on defense, and the zero-config default is\n     * an in-memory per-process cache. Inject a shared atomic store (Redis /\n     * Memcached / Cloudflare KV / Durable Object) implementing {@link NonceStore}\n     * only if you want one-time-use enforced ACROSS replicas rather than within\n     * each one. `checkAndRemember` may be async, and should be TTL-bound to the\n     * signature validity window.\n     *\n     * If you do inject one, an outage of that store fails requests CLOSED — it\n     * never degrades to \"not a replay\".\n     */\n    nonceStore?: NonceStore;\n};",
      "typeReferences": [
        {
          "name": "FartherShoreTunnelOptions",
          "source": "packages/backend/dist/types/core/runtime.d.ts#L9"
        },
        {
          "name": "NonceStore",
          "source": "packages/backend/dist/types/core/nonceCache.d.ts#L13"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.FartherShoreInstance",
      "name": "@farthershore/backend.FartherShoreInstance",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/index.d.ts#L32",
      "description": "The conceptual public entrypoint. `fartherShore.initFromEnv()` mirrors the\nlanguage-neutral spec. The returned instance is augmented with `middleware()`\n(the Express adapter) bound to itself.",
      "signature": "export type FartherShoreInstance = FartherShore & {\n    /** Express middleware: strict fail-closed verify → req.fartherShore (+ strip x-fs-*). */\n    middleware(options?: MiddlewareOptions): ExpressMiddleware;\n    /**\n     * Wrap a route handler so it runs only with a GUARANTEED verified PRINCIPAL —\n     * the handler's first argument is a {@link VerifiedPrincipalContext} whose\n     * `principal` is NON-OPTIONAL. Fails closed (401 `context_unverified` when the\n     * context is absent, `principal_required` when it is identity-less) before the\n     * callback runs. Pairs with the strict `middleware()`.\n     */\n    handler: {\n        <Req extends ExpressRequestLike = ExpressRequestLike, Res extends ExpressResponseLike = ExpressResponseLike>(handler: VerifiedExpressHandler<Req, Res>): ExpressMiddleware;\n        /**\n         * Options-first overload: `fs.handler({ permission: \"widgets:write\" }, cb)`\n         * asserts the permission (fail-closed) before the callback runs,\n         * responding `403 permission_denied` otherwise.\n         */\n        <Req extends ExpressRequestLike = ExpressRequestLike, Res extends ExpressResponseLike = ExpressResponseLike>(options: HandlerOptions, handler: VerifiedExpressHandler<Req, Res>): ExpressMiddleware;\n    };\n    /**\n     * In-handler authorization helpers bound to the instance — the SAME shape as\n     * the dev runtime's `rt.authz` (which additionally traces each decision), so\n     * dev and prod code reads identically. Both key ONLY on `ctx.permissions`\n     * with FAIL-CLOSED carrier semantics: an ABSENT permission set DENIES.\n     */\n    authz: {\n        /** True when the acting user holds `key` (`*` / `<subject>:*` / exact). */\n        hasPermission(ctx: PermissionCarrier, key: string): boolean;\n        /** Assert `key` is held; throws `FartherShorePermissionError` (403). */\n        requirePermission(ctx: PermissionCarrier, key: string): void;\n    };\n};",
      "typeReferences": [
        {
          "name": "ExpressMiddleware",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L30"
        },
        {
          "name": "ExpressRequestLike",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L5"
        },
        {
          "name": "ExpressResponseLike",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L17"
        },
        {
          "name": "FartherShore",
          "source": "packages/backend/dist/types/core/runtime.d.ts#L84"
        },
        {
          "name": "HandlerOptions",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L91"
        },
        {
          "name": "MiddlewareOptions",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L31"
        },
        {
          "name": "PermissionCarrier",
          "source": "packages/backend/dist/types/core/permissions.d.ts#L61"
        },
        {
          "name": "VerifiedExpressHandler",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L89"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.FartherShorePermissionError",
      "name": "@farthershore/backend.FartherShorePermissionError",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/permissions.d.ts#L8",
      "description": "Thrown by {@link requirePermission} when the acting user lacks a permission.\nDistinct from {@link FartherShoreError } (which models signing/verification\nfailures) — authorization is a separate concern from request verification,\nand its 403 status is not part of the runtime verification contract.",
      "signature": "export declare class FartherShorePermissionError extends Error {\n    readonly code = \"permission_denied\";\n    readonly status = 403;\n    /** The permission key that was required but not held. */\n    readonly requiredPermission: string;\n    constructor(requiredPermission: string, message?: string);\n}",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.FartherShoreRequestContext",
      "name": "@farthershore/backend.FartherShoreRequestContext",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L24",
      "description": "The verified request context attached to req.fartherShore.",
      "signature": "export type FartherShoreRequestContext = {\n    requestId: string;\n    businessId: string;\n    backendId: string;\n    routeId: string;\n    policyVersion: string;\n    timestamp: number;\n    bodyHash: string;\n    /** Filled by the host bootstrap layer (tenant/customer), not by verify. */\n    tenantId?: string;\n    customerId?: string;\n    meters?: string[];\n    features?: Record<string, unknown>;\n    /**\n     * The verified CONSUMER PRINCIPAL behind this request (consumer-principal\n     * wave, D3) — derived from the cv=2 `X-Fs-Context` whose bytes are vouched for\n     * by the Ed25519 request signature (the token hash is bound into the canonical\n     * signing string). OPTIONAL on this raw `fs.middleware()` path: a valid gateway\n     * request MAY be identity-less (no `X-Fs-Context` — the gateway signs an\n     * empty context hash), in which case there is no principal to resolve. This\n     * field is typed honestly here; the `fs.handler()` path (createExpressHandler)\n     * is where the GUARANTEED non-optional principal lives — it rejects an\n     * identity-less request with `401 principal_required` before the callback runs.\n     * Use {@link requireMember} to narrow to the member arm on member-only routes.\n     */\n    principal?: ConsumerPrincipal;\n    /**\n     * Managed-RBAC permissions the gateway resolved for the acting subject —\n     * sourced ONLY from the VERIFIED signed `X-Fs-Context` claim (the unsigned\n     * `x-fs-permissions` fallback is GONE). `undefined` when the claim was absent\n     * ⇒ FAR-723 carrier-level DENY; `[]` for an authenticated subject with no\n     * grants. Read via {@link hasPermission} / {@link requirePermission}.\n     */\n    permissions?: string[];\n    /** Exact current-G product permissions default-allowed for this request. */\n    unassignedProductPermissions?: string[];\n    /** The VERIFIED signed cv=2 context payload. Its permissions/roles populated\n     *  the fields above; its claims derived {@link principal}. */\n    signedContext?: FartherShoreSignedContext;\n    /** Managed-RBAC role keys the acting subject holds (display/audit only). */\n    roles?: string[];\n    /**\n     * THE reporting verb. `report({ meter, values, dims?, quote? })` reports\n     * MEASUREMENTS against the served identity this context already carries —\n     * there is no subscription/release argument to forget. The SDK picks the\n     * transport (signed in-band headers before the response is sent, the attested\n     * post-stream channel after it, or from a background job), so the builder\n     * never chooses one.\n     *\n     * Attached by the runtime facade. A context produced by the BARE\n     * `verifyRequest()` primitive has no metering channel, so its `report()`\n     * throws an error naming the fix rather than dropping the measurement.\n     */\n    report: ReportFn__89e79b33cabf;\n};",
      "typeReferences": [
        {
          "name": "ConsumerPrincipal",
          "source": "packages/backend/dist/types/core/verifyContext.d.ts#L8"
        },
        {
          "name": "FartherShoreSignedContext",
          "source": "packages/backend/dist/types/core/verifyContext.d.ts#L33"
        },
        {
          "name": "ReportFn__89e79b33cabf",
          "source": "packages/backend/dist/types/core/report.d.ts#L115"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.FartherShoreSignedContext",
      "name": "@farthershore/backend.FartherShoreSignedContext",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/verifyContext.d.ts#L33",
      "description": "The cv=2 signed-context payload the gateway stamps into `X-Fs-Context`. Local\ncopy of the contracts `ConsumerContextClaims`. Identity rides the RFC 9068 /\nRFC 8693 claims (`sub`, `client_id`, `act`, `subjectKind`).",
      "signature": "export type FartherShoreSignedContext = {\n    /** Claim-format version. This SDK understands ONLY cv=2 (consumer principal). */\n    cv: 2;\n    /** Resource owner: member id (member) or service account id (service). */\n    sub: string;\n    /** API key / service credential id, when the call is key-borne. */\n    client_id?: string;\n    /** Nested actor (on-behalf-of): personal-key traffic sets `{ sub: keyId }`. */\n    act?: {\n        sub: string;\n    };\n    /** The org (tenant) id. */\n    org: string;\n    businessId: string;\n    compiledPlanId: string;\n    subscriptionId: string;\n    subscriberId: string;\n    environmentId: string | null;\n    subjectKey: string;\n    /** Which subject arm this context resolves to. */\n    subjectKind: \"member\" | \"service\";\n    /** The org-owned service account id, for service subjects (mirror of `sub`). */\n    serviceAccountId?: string;\n    /** The bound role keys (absent when unminted). */\n    roles?: string[];\n    /** The unified-authz permission claim (absent when unminted). */\n    permissions?: string[];\n    /** Exact current-G product permissions default-allowed for this request. */\n    unassignedProductPermissions?: string[];\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.FartherShoreTunnelOptions",
      "name": "@farthershore/backend.FartherShoreTunnelOptions",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/runtime.d.ts#L9",
      "description": "Advanced opt-in tunnel config. The embedded runner is the default DX.",
      "signature": "export type FartherShoreTunnelOptions = {\n    /** Opt out of the embedded cloudflared runner (e.g. sidecar mode). */\n    enabled?: boolean;\n    /** Injected spawner (tests/non-default hosts). Defaults to node:child_process. */\n    spawn?: SpawnFn;\n    /** Explicit cloudflared binary path. */\n    binaryPath?: string;\n    /** Crash the host app if the tunnel cannot start. Default: fail-open. */\n    failClosed?: boolean;\n    /** Log sink for redacted cloudflared output. */\n    logger?: (line: string) => void;\n};",
      "typeReferences": [
        {
          "name": "SpawnFn",
          "source": "packages/backend/dist/types/core/tunnel.d.ts#L25"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.FS_RUNTIME_TOKEN_ENV",
      "name": "@farthershore/backend.FS_RUNTIME_TOKEN_ENV",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-types.d.ts#L118",
      "description": "Public export FS_RUNTIME_TOKEN_ENV; see its declaration and owning guide.",
      "signature": "declare const FS_RUNTIME_TOKEN_ENV: \"FS_RUNTIME_TOKEN\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.HandlerOptions",
      "name": "@farthershore/backend.HandlerOptions",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L91",
      "description": "Options for the `fs.handler(options, cb)` overload.",
      "signature": "export type HandlerOptions = {\n    /**\n     * Permission key the verified principal must hold (unified grammar:\n     * `*` / `<subject>:*` / exact — custom strings work). Checked with the\n     * FAIL-CLOSED carrier gate (`requirePermission`): an ABSENT permission set\n     * denies. On failure the wrapper responds `403 { error: \"permission_denied\" }`\n     * before the callback runs.\n     */\n    permission?: string;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.hashBody",
      "name": "@farthershore/backend.hashBody",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-signing.d.ts#L3",
      "description": "Lowercase-hex SHA-256 of the RAW request bytes. Never re-serialized JSON.",
      "signature": "declare const hashBody: (body: Uint8Array) => Promise<string>;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.hasPermission",
      "name": "@farthershore/backend.hasPermission",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/permissions.d.ts#L88",
      "description": "True when the acting user holds `key`. Call only with a verified request\ncontext (the verified `X-Fs-Context` permissions claim lives on\n`context.permissions`).\nNOTE: this is a convenience for in-handler gating; the edge `permission`\nconstraint is the security boundary for route-level access.\n\nFAIL-CLOSED: an ABSENT permission set (`ctx.permissions === undefined`)\nDENIES — absence NEVER means grant-all, and the presence of a verified signed\ncontext does NOT change that (its presence is not consulted). A DEFINED array\nuses the unified {@link permissionSatisfies} rule (`*` / `<subject>:*` /\nexact), so an explicit `[\"*\"]` (org OWNER / RBAC-disabled) grants everything\nand `[]` denies. A builder that wants an ungated route simply does not call\nthis / {@link requirePermission}.",
      "signature": "export declare function hasPermission(ctx: PermissionCarrier, key: string): boolean;",
      "typeReferences": [
        {
          "name": "PermissionCarrier",
          "source": "packages/backend/dist/types/core/permissions.d.ts#L61"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.HeadersLike",
      "name": "@farthershore/backend.HeadersLike",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L22",
      "description": "Public export HeadersLike; see its declaration and owning guide.",
      "signature": "export type HeadersLike = Headers | Record<string, string | string[] | undefined>;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.HealthSnapshot",
      "name": "@farthershore/backend.HealthSnapshot",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/health.d.ts#L3",
      "description": "Public export HealthSnapshot; see its declaration and owning guide.",
      "signature": "export type HealthSnapshot = {\n    runtimeToken: boolean;\n    bootstrap: boolean;\n    tunnel: string | null;\n    verification: boolean;\n    metering: boolean;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.HealthStatus",
      "name": "@farthershore/backend.HealthStatus",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/health.d.ts#L2",
      "description": "Public export HealthStatus; see its declaration and owning guide.",
      "signature": "export type HealthStatus = \"starting\" | \"ready\" | \"degraded\" | \"stopping\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.HeartbeatOptions",
      "name": "@farthershore/backend.HeartbeatOptions",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/health.d.ts#L12",
      "description": "Public export HeartbeatOptions; see its declaration and owning guide.",
      "signature": "export type HeartbeatOptions = {\n    runtimeToken: string;\n    coreUrl: string;\n    status: HealthStatus;\n    instanceId?: string;\n    fetchImpl?: typeof fetch;\n};",
      "typeReferences": [
        {
          "name": "HealthStatus",
          "source": "packages/backend/dist/types/core/health.d.ts#L2"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.initFromEnv",
      "name": "@farthershore/backend.initFromEnv",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/index.d.ts#L69",
      "description": "Convenience: top-level initFromEnv mirroring fartherShore.initFromEnv().",
      "signature": "export declare function initFromEnv(options?: FartherShoreInitOptions): FartherShoreInstance;",
      "typeReferences": [
        {
          "name": "FartherShoreInitOptions",
          "source": "packages/backend/dist/types/core/runtime.d.ts#L21"
        },
        {
          "name": "FartherShoreInstance",
          "source": "packages/backend/dist/types/index.d.ts#L32"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.isPortalSession",
      "name": "@farthershore/backend.isPortalSession",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/subject.d.ts#L45",
      "description": "True when the verified request came from the managed portal UI (a member\nbrowser session), false when it came from an API key, and `undefined` when\nthere is no verified principal. Convenience over {@link credentialKind} for\nthe common portal-vs-API branch (e.g. richer UI payloads for portal callers).\nThe gateway's `enforce-surface` middleware is the SECURITY boundary; this is\nfor in-handler ergonomics.",
      "signature": "export declare function isPortalSession(ctx: PrincipalCarrier): boolean | undefined;",
      "typeReferences": [
        {
          "name": "PrincipalCarrier",
          "source": "packages/backend/dist/types/core/subject.d.ts#L11"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.Jwk",
      "name": "@farthershore/backend.Jwk",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/jwks.d.ts#L1",
      "description": "Public export Jwk; see its declaration and owning guide.",
      "signature": "export type Jwk = JsonWebKey & {\n    kid?: string;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.JwksClient",
      "name": "@farthershore/backend.JwksClient",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/jwks.d.ts#L43",
      "description": "Caching JWKS client. Serves the last successful key set as a warm fallback\nwhile a refresh is failing, but only until {@link JwksClientOptions.hardStaleMs};\nfails closed on a cold cache and past the hard-stale ceiling.",
      "signature": "export declare class JwksClient {\n    private readonly jwksUrl;\n    private readonly fetchImpl;\n    private readonly cacheTtlMs;\n    private readonly hardStaleMs;\n    private readonly negativeCacheMs;\n    private readonly now;\n    private readonly onObservation;\n    private keysByKid;\n    private fetchedAt;\n    private hasFetchedOnce;\n    private inflight;\n    private readonly negativeKids;\n    constructor(options: JwksClientOptions);\n    /**\n     * Resolve a public JWK for `kid`, fail-closed. Throws FartherShoreError with\n     * `jwks_unavailable` (cold cache, or a hard-stale cache whose refresh is\n     * failing) or `unknown_key_id`.\n     */\n    getKey(kid: string): Promise<Jwk>;\n    /** Record a confirmed-missing kid, evicting the oldest if at capacity. */\n    private rememberMissingKid;\n    private ageMs;\n    private isStale;\n    private isHardStale;\n    /** Current freshness of the cached key set. */\n    private cacheState;\n    private observe;\n    /** Fail closed when the cached key set is past the hard-stale ceiling. */\n    private assertWithinHardStale;\n    /** Single-flight refresh: concurrent callers share one fetch. */\n    private refresh;\n    private doFetch;\n    /**\n     * BOUNDED stale-while-revalidate. A COLD cache fails closed. A warm cache\n     * inside the soft window swallows the failure and keeps serving. Past the\n     * hard-stale ceiling it fails closed too — availability is worth a bounded\n     * window of degraded trust, not an unbounded one.\n     */\n    private handleRefreshFailure;\n}",
      "typeReferences": [
        {
          "name": "Jwk",
          "source": "packages/backend/dist/types/core/jwks.d.ts#L1"
        },
        {
          "name": "JwksClientOptions",
          "source": "packages/backend/dist/types/core/jwks.d.ts#L19"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.JwksClientOptions",
      "name": "@farthershore/backend.JwksClientOptions",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/jwks.d.ts#L19",
      "description": "Public export JwksClientOptions; see its declaration and owning guide.",
      "signature": "export type JwksClientOptions = {\n    jwksUrl: string;\n    /** Injectable fetch (tests). Defaults to globalThis.fetch. */\n    fetchImpl?: typeof fetch;\n    /** How long a successful fetch stays fresh before a background refresh. */\n    cacheTtlMs?: number;\n    /**\n     * Hard ceiling on serving a key set whose refresh is failing. Past this age\n     * the client FAILS CLOSED rather than vouching for keys it can no longer\n     * confirm. Must be ≥ cacheTtlMs.\n     */\n    hardStaleMs?: number;\n    /** How long an unknown-kid result is negatively cached (avoids hammering). */\n    negativeCacheMs?: number;\n    /** Injectable clock (tests). */\n    now?: () => number;\n    /** Freshness//staleness observations for metrics. */\n    onObservation?: JwksObserver__4d7082fe0d6b;\n};",
      "typeReferences": [
        {
          "name": "JwksObserver__4d7082fe0d6b",
          "source": "packages/backend/dist/types/core/jwks.d.ts#L18"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.LimitDescriptor",
      "name": "@farthershore/backend.LimitDescriptor",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-types.d.ts#L8",
      "description": "C-1 — the machine-readable limit descriptor on a limit-deny body. A backend\nthat surfaces a plan-limit deny carries this so SDKs can render an upgrade\naffordance. Structurally identical to the contracts `LimitDescriptor`.",
      "signature": "export interface LimitDescriptor {\n    /** Stable identifier for the limit hit — a `limitCode` VALUE\n     *  (`quota` | `rate_limit` | `credit` | `resource:<name>`), NOT a wire code. */\n    limitCode: string;\n    /** Metered/resource dimension when known; null otherwise. */\n    dimension: string | null;\n    /** The cap the subscriber is at when known; null otherwise. */\n    currentCapacity: number | null;\n}",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.MAX_BODY_BYTES",
      "name": "@farthershore/backend.MAX_BODY_BYTES",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-types.d.ts#L148",
      "description": "Max raw-body bytes the gateway/SDK will hash before returning 413.",
      "signature": "declare const MAX_BODY_BYTES: number;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.Measurement",
      "name": "@farthershore/backend.Measurement",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/report.d.ts#L70",
      "description": "The wire shape of one validated measurement.",
      "signature": "export type Measurement = {\n    meter: string;\n    values: MeasurementValues;\n    dims?: MeasurementDimensions;\n};",
      "typeReferences": [
        {
          "name": "MeasurementDimensions",
          "source": "packages/backend/dist/types/core/report.d.ts#L5"
        },
        {
          "name": "MeasurementValues",
          "source": "packages/backend/dist/types/core/report.d.ts#L3"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.MeasurementDimensions",
      "name": "@farthershore/backend.MeasurementDimensions",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/report.d.ts#L5",
      "description": "Catalog selectors the measurement was produced under, keyed by dimension.",
      "signature": "export type MeasurementDimensions = Record<string, string>;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.MEASUREMENTS_VERSION",
      "name": "@farthershore/backend.MEASUREMENTS_VERSION",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/report.d.ts#L76",
      "description": "Version of the `measurements` payload lane (additive over `rawDimsUnits`).",
      "signature": "declare const MEASUREMENTS_VERSION = 1;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.MeasurementValues",
      "name": "@farthershore/backend.MeasurementValues",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/report.d.ts#L3",
      "description": "Observed measurement values, keyed by measure key.",
      "signature": "export type MeasurementValues = Record<string, number>;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.MemberSubject",
      "name": "@farthershore/backend.MemberSubject",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/subject.d.ts#L3",
      "description": "The member arm of {@link ConsumerPrincipal}'s subject.",
      "signature": "export type MemberSubject = Extract<ConsumerPrincipal[\"subject\"], {\n    kind: \"member\";\n}>;",
      "typeReferences": [
        {
          "name": "ConsumerPrincipal",
          "source": "packages/backend/dist/types/core/verifyContext.d.ts#L8"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.METERING_PAYLOAD_HEADER",
      "name": "@farthershore/backend.METERING_PAYLOAD_HEADER",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/response-metering.d.ts#L63",
      "description": "Public export METERING_PAYLOAD_HEADER; see its declaration and owning guide.",
      "signature": "declare const METERING_PAYLOAD_HEADER: \"x-fs-metering\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.METERING_SIGNATURE_HEADER",
      "name": "@farthershore/backend.METERING_SIGNATURE_HEADER",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/response-metering.d.ts#L64",
      "description": "Public export METERING_SIGNATURE_HEADER; see its declaration and owning guide.",
      "signature": "declare const METERING_SIGNATURE_HEADER: \"x-fs-metering-sig\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.METERING_TOKEN_HEADER",
      "name": "@farthershore/backend.METERING_TOKEN_HEADER",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/response-metering.d.ts#L65",
      "description": "Public export METERING_TOKEN_HEADER; see its declaration and owning guide.",
      "signature": "declare const METERING_TOKEN_HEADER: \"x-fs-metering-token\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.MeteringError",
      "name": "@farthershore/backend.MeteringError",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/response-metering.d.ts#L67",
      "description": "Public export MeteringError; see its declaration and owning guide.",
      "signature": "export declare class MeteringError extends Error {\n    readonly code: ResponseMeteringErrorCode__bb4ee7cec8df;\n    constructor(code: ResponseMeteringErrorCode__bb4ee7cec8df, message: string);\n}",
      "typeReferences": [
        {
          "name": "ResponseMeteringErrorCode__bb4ee7cec8df",
          "source": "packages/backend/dist/types/response-metering.d.ts#L8"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.MeteringHeaders",
      "name": "@farthershore/backend.MeteringHeaders",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/response-metering.d.ts#L43",
      "description": "The three response-metering headers as a plain, attachable name→value map.",
      "signature": "export type MeteringHeaders = Record<string, string>;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.MiddlewareOptions",
      "name": "@farthershore/backend.MiddlewareOptions",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L31",
      "description": "Public export MiddlewareOptions; see its declaration and owning guide.",
      "signature": "export type MiddlewareOptions = {\n    /**\n     * STRICT BY DEFAULT (`true`). Every request is verified FAIL-CLOSED and its\n     * inbound `x-fs-*` headers are stripped before the handler runs — the verified\n     * `req.fartherShore` context is the only identity source. The builder need not\n     * pass this: the gateway signs every request, and a missing/invalid signature\n     * or context is a `401`.\n     *\n     * Set `always: false` to instead DEFER to bootstrap's\n     * `verification.required` flag — when the backend contract does not require\n     * verification, the request passes through WITHOUT a context (and without\n     * stripping). This is an advanced escape hatch for a backend that intentionally\n     * consumes no identity; the secure default is strict.\n     */\n    always?: boolean;\n    /**\n     * Called when verification REJECTS a request, with the diagnostic detail that\n     * is deliberately withheld from the response body.\n     *\n     * The wire response is only `{ error: <code> }` (plus the error's `details`,\n     * if any) — several distinct causes share one code (`route_mismatch` covers\n     * both a business mismatch and a backend mismatch; an unserved route id is\n     * the separate `route_unknown`), and the specifics must not leak to an\n     * unauthenticated caller. But discarding them entirely leaves the operator\n     * with no way to tell which cause fired, in their OWN logs, for their OWN\n     * server. That is what this hook restores.\n     *\n     * Defaults to a one-line `console.warn`. Pass a function to route it into a\n     * structured logger, or `() => {}` to silence it.\n     */\n    onVerificationError?: (detail: {\n        code: string;\n        message: string;\n        status: number;\n        method: string;\n        path: string;\n    }) => void;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.nodeSpawn",
      "name": "@farthershore/backend.nodeSpawn",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/tunnel.d.ts#L177",
      "description": "The default production spawner: a thin wrapper over Node's\n`child_process.spawn`. Stdio is piped (so logs flow through the redactor); the\ntunnel token is passed as an argv item, never via the environment. Tests\nalways inject their own spawner instead of this.",
      "signature": "export declare function nodeSpawn(): SpawnFn;",
      "typeReferences": [
        {
          "name": "SpawnFn",
          "source": "packages/backend/dist/types/core/tunnel.d.ts#L25"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.NonceCache",
      "name": "@farthershore/backend.NonceCache",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/nonceCache.d.ts#L36",
      "description": "Bounded nonce cache. `checkAndRemember(id)` returns false (and records the id)\nthe first time it sees an id, and true (replay) on any subsequent sighting\nwhile the id is still retained.",
      "signature": "export declare class NonceCache implements NonceStore {\n    private readonly maxEntries;\n    private readonly ttlMs;\n    private readonly now;\n    private readonly seen;\n    constructor(options?: NonceCacheOptions);\n    /**\n     * @returns true if `id` was already seen (a REPLAY); false on first sight\n     * (the id is then remembered).\n     */\n    checkAndRemember(id: string): boolean;\n    /** Number of retained nonces (test/observability hook). */\n    get size(): number;\n    private evictExpired;\n}",
      "typeReferences": [
        {
          "name": "NonceCacheOptions",
          "source": "packages/backend/dist/types/core/nonceCache.d.ts#L16"
        },
        {
          "name": "NonceStore",
          "source": "packages/backend/dist/types/core/nonceCache.d.ts#L13"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.NonceCacheOptions",
      "name": "@farthershore/backend.NonceCacheOptions",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/nonceCache.d.ts#L16",
      "description": "Public export NonceCacheOptions; see its declaration and owning guide.",
      "signature": "export type NonceCacheOptions = {\n    /**\n     * Max distinct nonces retained. At capacity (after expired nonces are\n     * removed) the cache FAILS CLOSED — new nonces are rejected as replays rather\n     * than evicting an unexpired one. Raise this for high single-instance\n     * throughput, or inject a shared {@link NonceStore}.\n     */\n    maxEntries?: number;\n    /** TTL after which a nonce is forgotten. Defaults to the signature validity\n     *  window (replay window + clock skew); a nonce older than that is rejected by\n     *  the timestamp check anyway. Must be ≥ that window. */\n    ttlMs?: number;\n    /** Injectable clock (tests). */\n    now?: () => number;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.NonceStore",
      "name": "@farthershore/backend.NonceStore",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/nonceCache.d.ts#L13",
      "description": "Replay-prevention store contract. `checkAndRemember(id)` returns `true` if\n`id` was already seen (a REPLAY) and `false` on first sight (recording it).\n\nThe default {@link NonceCache} is IN-MEMORY and PER-PROCESS: it prevents\nreplay against a single instance only. A multi-replica backend where a\ncaptured, still-valid signed request is replayed to a DIFFERENT replica needs\na SHARED store (Redis/Memcached/Cloudflare KV/Durable Object) — inject one via\n`FartherShoreInitOptions.nonceStore`. `checkAndRemember` may be async so a\nnetwork-backed store can be awaited. (Time-bounding still caps the exposure\nto the signature's ~300s validity window regardless of the store.)",
      "signature": "export interface NonceStore {\n    checkAndRemember(id: string): boolean | Promise<boolean>;\n}",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.PermissionCarrier",
      "name": "@farthershore/backend.PermissionCarrier",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/permissions.d.ts#L61",
      "description": "The subset of a verified context these helpers read.",
      "signature": "export interface PermissionCarrier {\n    permissions?: readonly string[];\n    /** Exact product permissions default-allowed by the current G+A decision. */\n    unassignedProductPermissions?: readonly string[];\n    /**\n     * The verified X-Fs-Context claims, when the request carried a valid token.\n     * NOT consulted for permission decisions — its presence NEVER grants (an\n     * absent `permissions` set always denies). Retained only as part of the\n     * verified-context shape a carrier is built from.\n     */\n    signedContext?: FartherShoreSignedContext;\n}",
      "typeReferences": [
        {
          "name": "FartherShoreSignedContext",
          "source": "packages/backend/dist/types/core/verifyContext.d.ts#L33"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.permissionSatisfies",
      "name": "@farthershore/backend.permissionSatisfies",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/permissions.d.ts#L59",
      "description": "Whether the granted `permissions` satisfy the required `key` under the\nunified grammar: `\"*\"` (global), `\"<subject>:*\"` (subject wildcard), or the\nEXACT key. NO verb-class widening (class forms are expanded to concrete verbs\nserver-side at save time). Superset of {@link permissionGrants } — it adds the\n`<subject>:*` rung. NOTE: the `granted === undefined → true` codomain here is\nthe PRIMITIVE's contract (kept byte-identical to contracts for parity); it is\nNOT the SDK's carrier policy. Callers gate through {@link hasPermission},\nwhich under FAR-723 DENIES an absent permission set before ever reaching this\nprimitive — so absence never grants at the carrier level.\n\nFAITHFUL COPY of the canonical `permissionSatisfies` in\n`@farthershore/contracts` (`authz/verbs.ts`); the published bundle is\ncontracts-free, so `permissions-parity.test.ts` asserts agreement over a\nshared golden table (with the backend's grace rule tested separately).",
      "signature": "export declare function permissionSatisfies(required: string, granted: readonly string[] | undefined): boolean;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.PrincipalCarrier",
      "name": "@farthershore/backend.PrincipalCarrier",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/subject.d.ts#L11",
      "description": "Anything carrying a verified {@link ConsumerPrincipal} (the request context).",
      "signature": "export type PrincipalCarrier = {\n    principal?: ConsumerPrincipal;\n};",
      "typeReferences": [
        {
          "name": "ConsumerPrincipal",
          "source": "packages/backend/dist/types/core/verifyContext.d.ts#L8"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.principalFromContextClaims",
      "name": "@farthershore/backend.principalFromContextClaims",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/verifyContext.d.ts#L88",
      "description": "Derive the {@link ConsumerPrincipal} from a verified cv=2 payload, FAIL-CLOSED.\n\nThis is a thin, contracts-free-typed re-export of the SINGLE canonical\nderivation in `@farthershore/contracts` (`authz/principal.ts`). The SDK keeps\nits own local {@link ConsumerPrincipal} / {@link FartherShoreSignedContext}\n*types* (so the published `.d.ts` never leaks the private contracts package),\nbut the derivation LOGIC lives in exactly one place — no drift is possible.\n\nReturns `null` — never a partially-populated principal — when any identity /\nauthz field is invalid: an empty/whitespace `sub`/`org`/`businessId`, a\nmissing/unknown `subjectKind`, a `service` subject with no `serviceAccountId`\nor `keyId`, a delegated `member` with an empty `act.sub`, a `permissions` /\n`roles` claim that is not an array of non-empty strings, or CONTRADICTORY\nidentity evidence (a `serviceAccountId` that disagrees with `sub`, or a\n`client_id` that disagrees with `act.sub`). The caller (`verifyRequest`) treats\n`null` as tamper evidence and fails closed (`context_unverified`).\n\n - service: `serviceAccountId = serviceAccountId ?? sub` (the two must agree),\n   `keyId = client_id ?? act.sub ?? sub`.\n - member:  `memberId = sub`; `via = \"api_key\"` with `keyId = act.sub` when\n   the delegation claim is present, else `via = \"session\"`.\n\nEvery derived id is the TRIMMED (canonical) value.",
      "signature": "export declare function principalFromContextClaims(claims: FartherShoreSignedContext): ConsumerPrincipal | null;",
      "typeReferences": [
        {
          "name": "ConsumerPrincipal",
          "source": "packages/backend/dist/types/core/verifyContext.d.ts#L8"
        },
        {
          "name": "FartherShoreSignedContext",
          "source": "packages/backend/dist/types/core/verifyContext.d.ts#L33"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.QuoteInput",
      "name": "@farthershore/backend.QuoteInput",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/report.d.ts#L23",
      "description": "Authoring shape of {@link QuoteProposal}. `amountNanos` (nanodollars PER\nUNIT of the entry's measure) accepts a number, bigint, or decimal integer\nstring; anything else is rejected.",
      "signature": "export type QuoteInput = {\n    currency: string;\n    amountNanos: number | bigint | string;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.QuoteProposal",
      "name": "@farthershore/backend.QuoteProposal",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/report.d.ts#L14",
      "description": "The validated, transmitted quote — a PROPOSED rate input, never a charge.\n`amountNanos` is a decimal integer string of nanodollars **per unit of the\nentry's measure** (the platform's money unit is the nanodollar); core\nmultiplies it by the measured quantity, clamps it into the pricing policy's\ndeclared per-unit `{min,max}`, and flags out-of-range proposals for dispute.\nNever send a total.",
      "signature": "export type QuoteProposal = {\n    currency: string;\n    amountNanos: string;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.READ_METHODS",
      "name": "@farthershore/backend.READ_METHODS",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/permissions.d.ts#L25",
      "description": "HTTP verbs that classify as `:read`. Everything else — including the\nroute-catalog wildcard `*` — classifies as `:write`.\n\nFAITHFUL COPY of the canonical `READ_METHODS` in the permissions kernel\n(`@farthershore/authz/grammar/route`, re-exported by\n`@farthershore/contracts/rbac`); the published bundle is contracts-free, so\n`permissions-parity.test.ts` asserts agreement and the full corpus replay\nlives in packages/authz/test-node/sdk-copy-parity.test.ts.",
      "signature": "declare const READ_METHODS: ReadonlySet<string>;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.REDACTED_TOKEN",
      "name": "@farthershore/backend.REDACTED_TOKEN",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/tunnel.d.ts#L31",
      "description": "The sentinel substituted for the tunnel token in any logged/serialized text.",
      "signature": "declare const REDACTED_TOKEN = \"***REDACTED***\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.ReplayProtectionDiagnostic",
      "name": "@farthershore/backend.ReplayProtectionDiagnostic",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/replay-protection.d.ts#L4",
      "description": "Public export ReplayProtectionDiagnostic; see its declaration and owning guide.",
      "signature": "export type ReplayProtectionDiagnostic = {\n    mode: ReplayProtectionMode;\n    /** True when replay is enforced across every replica, not just this process. */\n    crossReplica: boolean;\n};",
      "typeReferences": [
        {
          "name": "ReplayProtectionMode",
          "source": "packages/backend/dist/types/core/replay-protection.d.ts#L3"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.ReplayProtectionMode",
      "name": "@farthershore/backend.ReplayProtectionMode",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/replay-protection.d.ts#L3",
      "description": "How far one-time-use enforcement actually reaches.",
      "signature": "export type ReplayProtectionMode = \"shared\" | \"single-instance\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.reportHealth",
      "name": "@farthershore/backend.reportHealth",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/health.d.ts#L23",
      "description": "POST a heartbeat to core. Best-effort: resolves false on any failure rather\nthan throwing (tunnel/health failure ≠ verification — must not crash the app).",
      "signature": "export declare function reportHealth(options: HeartbeatOptions): Promise<boolean>;",
      "typeReferences": [
        {
          "name": "HeartbeatOptions",
          "source": "packages/backend/dist/types/core/health.d.ts#L12"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.ReportInput",
      "name": "@farthershore/backend.ReportInput",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/report.d.ts#L28",
      "description": "One measurement report. The complete argument surface of the verb.",
      "signature": "export type ReportInput = {\n    /** Meter key as declared in the business release (plain string at the wire). */\n    meter: string;\n    /** Observed values keyed by measure key, e.g. `{ input_tokens: 1200 }`. */\n    values: MeasurementValues;\n    /** Catalog selectors, e.g. `{ model: \"acme-4\", cache_status: \"hit\" }`. */\n    dims?: MeasurementDimensions;\n    /**\n     * OPTIONAL money proposal for a `backendQuoted` pricing rule: a PER-UNIT\n     * rate in nanodollars (multiplied by the measured quantity — never a\n     * total). Opaque at the authoring boundary (a job result carries it through\n     * untyped); validated against {@link QuoteInput} here and transmitted as a\n     * {@link QuoteProposal}. Applies to every backend-quoted component of this\n     * report; ignored by rules that are not backend-quoted.\n     */\n    quote?: unknown;\n};",
      "typeReferences": [
        {
          "name": "MeasurementDimensions",
          "source": "packages/backend/dist/types/core/report.d.ts#L5"
        },
        {
          "name": "MeasurementValues",
          "source": "packages/backend/dist/types/core/report.d.ts#L3"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.ReportResult",
      "name": "@farthershore/backend.ReportResult",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/report.d.ts#L53",
      "description": "Delivery outcome. Validation faults THROW (a malformed report is a builder\nbug worth surfacing); delivery faults resolve `ok: false` so a metering\nhiccup never breaks the builder's endpoint. A served request may own only\none post-stream callback identity, so later calls fail explicitly.",
      "signature": "export type ReportResult = {\n    ok: true;\n    transport: ReportTransport;\n} | {\n    ok: false;\n    transport: ReportTransport;\n    reason: string;\n    /** The PLATFORM's error code, when the failure came back in a response\n     *  body (e.g. `post_stream_request_not_found`). Absent for local faults.\n     *  Surfaced so a builder can act on the cause without wrapping fetch. */\n    code?: string;\n    /** The platform's own error message, verbatim. */\n    message?: string;\n    /** HTTP status of the final delivery attempt, when there was one. */\n    status?: number;\n};",
      "typeReferences": [
        {
          "name": "ReportTransport",
          "source": "packages/backend/dist/types/core/report.d.ts#L46"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.ReportTransport",
      "name": "@farthershore/backend.ReportTransport",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/report.d.ts#L46",
      "description": "Which channel actually carried the measurement.",
      "signature": "export type ReportTransport = \"in_band\" | \"post_stream\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.requireMember",
      "name": "@farthershore/backend.requireMember",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/subject.d.ts#L20",
      "description": "Assert the request resolved to a MEMBER subject and return it narrowed. On a\ngateway-enforced `subject: 'member'` route this never throws; call it in\nhandler code to read `memberId` without a manual discriminant check. Throws\n`member_subject_required` when the subject is a service (or absent).",
      "signature": "export declare function requireMember(ctx: PrincipalCarrier): MemberSubject;",
      "typeReferences": [
        {
          "name": "MemberSubject",
          "source": "packages/backend/dist/types/core/subject.d.ts#L3"
        },
        {
          "name": "PrincipalCarrier",
          "source": "packages/backend/dist/types/core/subject.d.ts#L11"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.requirePermission",
      "name": "@farthershore/backend.requirePermission",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/permissions.d.ts#L93",
      "description": "Assert the acting user holds `key`, throwing {@link FartherShorePermissionError}\n(403) otherwise. Same trust model as {@link hasPermission}.",
      "signature": "export declare function requirePermission(ctx: PermissionCarrier, key: string): void;",
      "typeReferences": [
        {
          "name": "PermissionCarrier",
          "source": "packages/backend/dist/types/core/permissions.d.ts#L61"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.requireService",
      "name": "@farthershore/backend.requireService",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/subject.d.ts#L25",
      "description": "Assert the request resolved to a SERVICE subject and return it narrowed.\nThrows `service_subject_required` when the subject is a member (or absent).",
      "signature": "export declare function requireService(ctx: PrincipalCarrier): ServiceSubject;",
      "typeReferences": [
        {
          "name": "PrincipalCarrier",
          "source": "packages/backend/dist/types/core/subject.d.ts#L11"
        },
        {
          "name": "ServiceSubject",
          "source": "packages/backend/dist/types/core/subject.d.ts#L7"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.ResponseMeteringUsagePayload",
      "name": "@farthershore/backend.ResponseMeteringUsagePayload",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/response-metering.d.ts#L20",
      "description": "The signed response-metering payload. `computeMeteringHeaders` accepts one of\nthese directly, so a non-Express / non-Fetch handler (or a Python/Go backend\nfollowing the wire recipe) can stamp valid headers with no JS SDK at all.\n`ctx.report()` is the JS surface that builds it.\n\n`measurements` (with its `measurementsVersion`) is the measurement lane the\none reporting verb emits: `{ meter, values, dims }` as declared in the\nbusiness release. `rawDimsUnits` remains as the flat projection the gateway's\nexisting settlement lane reads.",
      "signature": "export type ResponseMeteringUsagePayload = {\n    method: string;\n    path: string;\n    rawDimsUnits?: Record<string, number>;\n    /** Schema version of {@link measurements}; currently `1`. */\n    measurementsVersion?: number;\n    /** Reported measurements — the authoritative rating input. */\n    measurements?: {\n        meter: string;\n        values: Record<string, number>;\n        dims?: Record<string, string>;\n    }[];\n    /** Proposed rate input for a `backendQuoted` pricing rule (core clamps it). */\n    quote?: {\n        currency: string;\n        amountNanos: string;\n    };\n    measureContext?: Record<string, unknown>;\n    creditUnitsConsumed?: Record<string, number>;\n    operationKey?: string;\n    usagePolicyId?: string;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.routePermission",
      "name": "@farthershore/backend.routePermission",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/permissions.d.ts#L42",
      "description": "Derive the permission string a credential must hold to call a route:\n`<subject>:read` for safe verbs (GET / HEAD / OPTIONS, any casing),\n`<subject>:write` for every other method INCLUDING the route-catalog\nwildcard `*`. Use it to build in-handler permission keys from the same\ngrammar the edge `permission` constraint enforces — never re-spell the\n`:read`/`:write` suffix locally.\n\nFAITHFUL COPY of the canonical `routePermission` in the permissions kernel\n(`@farthershore/authz/grammar/route`, re-exported by\n`@farthershore/contracts/rbac`); parity asserted as for {@link READ_METHODS}.",
      "signature": "export declare function routePermission(subject: string, method: string): string;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.RUNTIME_CLOCK_SKEW_SECONDS",
      "name": "@farthershore/backend.RUNTIME_CLOCK_SKEW_SECONDS",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-types.d.ts#L140",
      "description": "Mirrors SERVICE_JWT_CLOCK_SKEW_SECONDS — the per-request signer reuses the\nsame Ed25519/JWKS infra so the skew allowance is kept identical.",
      "signature": "declare const RUNTIME_CLOCK_SKEW_SECONDS = 5;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.RUNTIME_ERROR_CODE_TO_ERROR_CODE",
      "name": "@farthershore/backend.RUNTIME_ERROR_CODE_TO_ERROR_CODE",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-types.d.ts#L111",
      "description": "C-2 — map every canonical {@link RuntimeErrorCode} (wire snake_case value) to\nthe core `ErrorCode` it belongs to. Total over `RuntimeErrorCode` (the\n`Record<RuntimeErrorCode, …>` type makes a missing key a compile error). A\nfaithful copy of contracts' `RUNTIME_ERROR_CODE_TO_ERROR_CODE`.",
      "signature": "declare const RUNTIME_ERROR_CODE_TO_ERROR_CODE: Record<RuntimeErrorCode, RuntimeMappedErrorCode>;",
      "typeReferences": [
        {
          "name": "RuntimeErrorCode",
          "source": "packages/backend/dist/types/generated/runtime-contract.d.ts#L21"
        },
        {
          "name": "RuntimeMappedErrorCode",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L104"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.RUNTIME_ERROR_CODES",
      "name": "@farthershore/backend.RUNTIME_ERROR_CODES",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/generated/runtime-contract.d.ts#L1",
      "description": "Public export RUNTIME_ERROR_CODES; see its declaration and owning guide.",
      "signature": "declare const RUNTIME_ERROR_CODES: {\n    readonly missingSignature: \"missing_signature\";\n    readonly malformedSignature: \"malformed_signature\";\n    readonly unknownKeyId: \"unknown_key_id\";\n    readonly jwksUnavailable: \"jwks_unavailable\";\n    readonly badSignature: \"bad_signature\";\n    readonly bodyHashMismatch: \"body_hash_mismatch\";\n    readonly routeMismatch: \"route_mismatch\";\n    readonly clockSkew: \"clock_skew\";\n    readonly expiredSignature: \"expired_signature\";\n    readonly replayedNonce: \"replayed_nonce\";\n    readonly bodyTooLarge: \"body_too_large\";\n    readonly environmentMismatch: \"environment_mismatch\";\n    readonly missingToken: \"missing_token\";\n    readonly invalidToken: \"invalid_token\";\n    readonly contextUnverified: \"context_unverified\";\n    readonly memberSubjectRequired: \"member_subject_required\";\n    readonly serviceSubjectRequired: \"service_subject_required\";\n    readonly surfaceNotAllowed: \"surface_not_allowed\";\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.RUNTIME_HEADER_NAMES",
      "name": "@farthershore/backend.RUNTIME_HEADER_NAMES",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-types.d.ts#L126",
      "description": "Public export RUNTIME_HEADER_NAMES; see its declaration and owning guide.",
      "signature": "declare const RUNTIME_HEADER_NAMES: {\n    readonly signature: \"x-fs-signature\";\n    readonly keyId: \"x-fs-key-id\";\n    readonly requestId: \"x-fs-request-id\";\n    readonly timestamp: \"x-fs-timestamp\";\n    readonly businessId: \"x-fs-business-id\";\n    readonly backendId: \"x-fs-backend-id\";\n    readonly routeId: \"x-fs-route-id\";\n    readonly policyVersion: \"x-fs-policy-version\";\n    readonly bodyHash: \"x-fs-body-hash\";\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.RUNTIME_REPLAY_WINDOW_SECONDS",
      "name": "@farthershore/backend.RUNTIME_REPLAY_WINDOW_SECONDS",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-types.d.ts#L141",
      "description": "Public export RUNTIME_REPLAY_WINDOW_SECONDS; see its declaration and owning guide.",
      "signature": "declare const RUNTIME_REPLAY_WINDOW_SECONDS = 300;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.RUNTIME_TOKEN_OPERATIONS",
      "name": "@farthershore/backend.RUNTIME_TOKEN_OPERATIONS",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-types.d.ts#L124",
      "description": "Public export RUNTIME_TOKEN_OPERATIONS; see its declaration and owning guide.",
      "signature": "declare const RUNTIME_TOKEN_OPERATIONS: readonly [\"gateway_verification\", \"metering\", \"health\", \"tunnel\", \"drift_report\"];",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.RUNTIME_TOKEN_PREFIXES",
      "name": "@farthershore/backend.RUNTIME_TOKEN_PREFIXES",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-types.d.ts#L119",
      "description": "Public export RUNTIME_TOKEN_PREFIXES; see its declaration and owning guide.",
      "signature": "declare const RUNTIME_TOKEN_PREFIXES: {\n    readonly live: \"fsrt_live_\";\n    readonly test: \"fsrt_test_\";\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.RuntimeBootstrapResponse",
      "name": "@farthershore/backend.RuntimeBootstrapResponse",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-types.d.ts#L228",
      "description": "Public export RuntimeBootstrapResponse; see its declaration and owning guide.",
      "signature": "export type RuntimeBootstrapResponse = {\n    business: {\n        id: string;\n        slug: string;\n    };\n    backend: {\n        id: string;\n        slug: string;\n        name: string;\n    };\n    /**\n     * Every backend id this token may serve, across ALL of the business's\n     * environments — `backend.id` is always a member.\n     *\n     * One deployment holds exactly one `FS_RUNTIME_TOKEN`, so an\n     * environment-scoped token forced a SEPARATE deployment per environment:\n     * serving a preview env meant repointing (and breaking) production. A\n     * business-scoped token serves every environment from one deployment, and the\n     * SDK checks the gateway's signed backend id for MEMBERSHIP of this set\n     * rather than equality with a single id.\n     *\n     * Optional and additive: an older core omits it and the SDK falls back to the\n     * single-id equality check.\n     */\n    backendIds?: string[];\n    environment: {\n        id: string | null;\n        kind: RuntimeEnvironmentKind__ac9ea026fbe7;\n    };\n    operations: RuntimeTokenOperation[];\n    verification: RuntimeVerificationConfig__5494b13a9008;\n    metering: RuntimeMeteringConfig__3d27722db6c2;\n    transport: RuntimeTransportConfig__7254e971c589;\n    routes: RuntimeRouteDescriptor__48a862559af0[];\n    /** Reflected route-surface lock (surfaceHash + version). Present once core\n     *  serves it; `fs.ready()` diffs the reflected surface against it. */\n    lock?: RuntimeLockDescriptor__0d22ecd0bb58;\n    policyVersion: string;\n    refreshAfterSeconds: number;\n};",
      "typeReferences": [
        {
          "name": "RuntimeEnvironmentKind__ac9ea026fbe7",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L180"
        },
        {
          "name": "RuntimeLockDescriptor__0d22ecd0bb58",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L224"
        },
        {
          "name": "RuntimeMeteringConfig__3d27722db6c2",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L195"
        },
        {
          "name": "RuntimeRouteDescriptor__48a862559af0",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L214"
        },
        {
          "name": "RuntimeTokenOperation",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L125"
        },
        {
          "name": "RuntimeTransportConfig__7254e971c589",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L203"
        },
        {
          "name": "RuntimeVerificationConfig__5494b13a9008",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L188"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.RuntimeErrorCode",
      "name": "@farthershore/backend.RuntimeErrorCode",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/generated/runtime-contract.d.ts#L21",
      "description": "Public export RuntimeErrorCode; see its declaration and owning guide.",
      "signature": "export type RuntimeErrorCode = (typeof RUNTIME_ERROR_CODES)[keyof typeof RUNTIME_ERROR_CODES];",
      "typeReferences": [
        {
          "name": "RUNTIME_ERROR_CODES",
          "source": "packages/backend/dist/types/generated/runtime-contract.d.ts#L1"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.runtimeErrorToErrorCode",
      "name": "@farthershore/backend.runtimeErrorToErrorCode",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-types.d.ts#L117",
      "description": "C-2 — translate a runtime code into the canonical core `ErrorCode`. Returns\n`INTERNAL_ERROR` for an unrecognized value (defensive; the map is total over\nknown codes). Mirrors contracts' `runtimeErrorToErrorCode`.",
      "signature": "export declare function runtimeErrorToErrorCode(code: string): RuntimeMappedErrorCode;",
      "typeReferences": [
        {
          "name": "RuntimeMappedErrorCode",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L104"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.RuntimeHealthReport",
      "name": "@farthershore/backend.RuntimeHealthReport",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-types.d.ts#L306",
      "description": "Public export RuntimeHealthReport; see its declaration and owning guide.",
      "signature": "export type RuntimeHealthReport = {\n    runtimeToken: boolean;\n    bootstrap: boolean;\n    tunnel: string | null;\n    verification: boolean;\n    metering: boolean;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.RuntimeMappedErrorCode",
      "name": "@farthershore/backend.RuntimeMappedErrorCode",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-types.d.ts#L104",
      "description": "C-2 — the canonical core `ErrorCode` VALUES this backend can map a\n`RuntimeErrorCode` onto (the codomain of {@link RUNTIME_ERROR_CODE_TO_ERROR_CODE}).\nThe full core enum lives in the shared platform contracts; the SDK only needs\nthe subset its bridge produces. Each is a verbatim core `ErrorCode` string —\nthe drift guard asserts membership in the canonical enum.",
      "signature": "export type RuntimeMappedErrorCode = \"UNAUTHORIZED\" | \"FORBIDDEN\" | \"SERVICE_UNAVAILABLE\" | \"VALIDATION_ERROR\" | \"INTERNAL_ERROR\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.RuntimeMeteringEvent",
      "name": "@farthershore/backend.RuntimeMeteringEvent",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-types.d.ts#L268",
      "description": "Public export RuntimeMeteringEvent; see its declaration and owning guide.",
      "signature": "export type RuntimeMeteringEvent = {\n    event_id: string;\n    business_id: string;\n    backend_id: string;\n    route_id?: string;\n    request_id?: string;\n    /** Subscription the usage belongs to (billing attribution). Optional and\n     *  additive: legacy emitters omit it; core then falls back to resolving the\n     *  served gateway request via `request_id`, and rows that resolve neither\n     *  way are persisted unbilled + flagged unattributable. */\n    subscription_id?: string;\n    meter: string;\n    qty: number;\n    timestamp: string;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.runtimeTokenKind",
      "name": "@farthershore/backend.runtimeTokenKind",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-signing.d.ts#L32",
      "description": "Classify a presented runtime token by prefix without trusting its body.\nReturns the environment kind, or `null` when the prefix is not recognized.",
      "signature": "declare const runtimeTokenKind: (token: string) => RuntimeTokenKind__821c369e851d | null;",
      "typeReferences": [
        {
          "name": "RuntimeTokenKind__821c369e851d",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L123"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.RuntimeTokenOperation",
      "name": "@farthershore/backend.RuntimeTokenOperation",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-types.d.ts#L125",
      "description": "Public export RuntimeTokenOperation; see its declaration and owning guide.",
      "signature": "export type RuntimeTokenOperation = (typeof RUNTIME_TOKEN_OPERATIONS)[number];",
      "typeReferences": [
        {
          "name": "RUNTIME_TOKEN_OPERATIONS",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L124"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.SDK_LOCAL_ERROR_CODES",
      "name": "@farthershore/backend.SDK_LOCAL_ERROR_CODES",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/errors.d.ts#L15",
      "description": "Codes this SDK mints on its own, which no gateway ever puts on the wire.\n\nThey deliberately do NOT live in `RUNTIME_ERROR_CODES` (the language-neutral\ngateway↔backend contract mirrored from `@farthershore/contracts/runtime` and\npinned by `runtime-contract-parity.test.ts`): that set describes the protocol\nthe gateway speaks, and a backend→CALLER response code is not part of it.\n\n`route_unknown` is the honest answer to \"your signature is valid, this process\nsimply does not serve that route id\" — previously indistinguishable from an\nauth failure because it shared `route_mismatch`'s 401.",
      "signature": "declare const SDK_LOCAL_ERROR_CODES: {\n    /** Valid signature, unknown route id even after a forced bootstrap refresh. */\n    readonly routeUnknown: \"route_unknown\";\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.SdkLocalErrorCode",
      "name": "@farthershore/backend.SdkLocalErrorCode",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/errors.d.ts#L19",
      "description": "Public export SdkLocalErrorCode; see its declaration and owning guide.",
      "signature": "export type SdkLocalErrorCode = (typeof SDK_LOCAL_ERROR_CODES)[keyof typeof SDK_LOCAL_ERROR_CODES];",
      "typeReferences": [
        {
          "name": "SDK_LOCAL_ERROR_CODES",
          "source": "packages/backend/dist/types/core/errors.d.ts#L15"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.ServiceSubject",
      "name": "@farthershore/backend.ServiceSubject",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/subject.d.ts#L7",
      "description": "The service arm of {@link ConsumerPrincipal}'s subject.",
      "signature": "export type ServiceSubject = Extract<ConsumerPrincipal[\"subject\"], {\n    kind: \"service\";\n}>;",
      "typeReferences": [
        {
          "name": "ConsumerPrincipal",
          "source": "packages/backend/dist/types/core/verifyContext.d.ts#L8"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.ShutdownHook",
      "name": "@farthershore/backend.ShutdownHook",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/shutdown.d.ts#L1",
      "description": "Public export ShutdownHook; see its declaration and owning guide.",
      "signature": "export type ShutdownHook = () => Promise<void> | void;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.ShutdownManager",
      "name": "@farthershore/backend.ShutdownManager",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/shutdown.d.ts#L3",
      "description": "LIFO registry of shutdown hooks, each isolated from sibling failures.",
      "signature": "export declare class ShutdownManager {\n    private readonly hooks;\n    private done;\n    register(hook: ShutdownHook): void;\n    get isShutDown(): boolean;\n    /** Run all hooks in reverse order, isolating failures. Idempotent. */\n    shutdown(): Promise<void>;\n}",
      "typeReferences": [
        {
          "name": "ShutdownHook",
          "source": "packages/backend/dist/types/core/shutdown.d.ts#L1"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.signCanonicalString",
      "name": "@farthershore/backend.signCanonicalString",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-signing.d.ts#L25",
      "description": "Sign the canonical string with an Ed25519 private JWK → base64url signature.",
      "signature": "declare const signCanonicalString: (canonical: string, privateJwk: JsonWebKey) => Promise<string>;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.SpawnedTunnelProcess",
      "name": "@farthershore/backend.SpawnedTunnelProcess",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/tunnel.d.ts#L11",
      "description": "The minimal child-process surface the supervisor needs. A real\n`child_process.ChildProcess` satisfies this; tests pass a fake. We deliberately\ndo NOT depend on the full ChildProcess type so the spawner stays injectable and\nthe SDK does not pull a Node-only process model into the language-neutral core.",
      "signature": "export interface SpawnedTunnelProcess {\n    readonly stdout: StdioStream__d26eea00aaf1 | null;\n    readonly stderr: StdioStream__d26eea00aaf1 | null;\n    readonly pid?: number;\n    /** Register the process-exit handler. */\n    on(event: \"exit\", listener: (code: number | null, signal: NodeJS.Signals | null) => void): unknown;\n    /** Signal the child to stop. */\n    kill(signal?: NodeJS.Signals | number): boolean;\n}",
      "typeReferences": [
        {
          "name": "StdioStream__d26eea00aaf1",
          "source": "packages/backend/dist/types/core/tunnel.d.ts#L4"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.SpawnFn",
      "name": "@farthershore/backend.SpawnFn",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/tunnel.d.ts#L25",
      "description": "The injected spawner port. In production this is a thin wrapper over\n`child_process.spawn`; in tests it is a fake that records argv. It MUST NOT be\npassed `local_target` — routing is owned by Cloudflare.",
      "signature": "export type SpawnFn = (command: string, args: string[], options?: {\n    env?: NodeJS.ProcessEnv;\n}) => SpawnedTunnelProcess;",
      "typeReferences": [
        {
          "name": "SpawnedTunnelProcess",
          "source": "packages/backend/dist/types/core/tunnel.d.ts#L11"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.statusForCode",
      "name": "@farthershore/backend.statusForCode",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/errors.d.ts#L55",
      "description": "Map a runtime error code to its fail-closed HTTP status. Oversized bodies are\n413; a wrong-credential-surface denial is 403 (the caller IS authenticated,\njust not on a surface this route admits — mirrors the canonical\n`surface_not_allowed → FORBIDDEN` mapping in contracts/error-codes.ts);\nall other verification failures are 401.",
      "signature": "export declare function statusForCode(code: FartherShoreErrorCode): number;",
      "typeReferences": [
        {
          "name": "FartherShoreErrorCode",
          "source": "packages/backend/dist/types/core/errors.d.ts#L21"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.STREAMING_EXEMPT_BODY_HASH",
      "name": "@farthershore/backend.STREAMING_EXEMPT_BODY_HASH",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-types.d.ts#L146",
      "description": "Sentinel emitted into the canonical string when a request is body-hash\nexempt (streaming). Raw-byte hashing is otherwise mandatory.",
      "signature": "declare const STREAMING_EXEMPT_BODY_HASH = \"STREAM\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.TransportMode",
      "name": "@farthershore/backend.TransportMode",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-types.d.ts#L181",
      "description": "Public export TransportMode; see its declaration and owning guide.",
      "signature": "export type TransportMode = \"direct\" | \"tunnel\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.TunnelState",
      "name": "@farthershore/backend.TunnelState",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/tunnel.d.ts#L29",
      "description": "Supervisor lifecycle states, surfaced through `status()` / `healthString()`.",
      "signature": "export type TunnelState = \"stopped\" | \"starting\" | \"running\" | \"restarting\" | \"error\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.TunnelStatus",
      "name": "@farthershore/backend.TunnelStatus",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/tunnel.d.ts#L77",
      "description": "A read-only snapshot of the supervisor — safe to serialize (token-free).",
      "signature": "export type TunnelStatus = {\n    state: TunnelState;\n    pid: number | null;\n    restarts: number;\n    /** Token-redacted last error message, if any. */\n    lastError: string | null;\n};",
      "typeReferences": [
        {
          "name": "TunnelState",
          "source": "packages/backend/dist/types/core/tunnel.d.ts#L29"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.VerifiedExpressHandler",
      "name": "@farthershore/backend.VerifiedExpressHandler",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L89",
      "description": "A route handler that runs only with a GUARANTEED verified PRINCIPAL. The first\nargument is the {@link VerifiedPrincipalContext} — read `ctx.principal` and\n`ctx.signedContext` (and narrow with `requireMember`/`requireService`)\nwithout any optional-chaining.\nSee {@link createExpressHandler}.",
      "signature": "export type VerifiedExpressHandler<Req extends ExpressRequestLike = ExpressRequestLike, Res extends ExpressResponseLike = ExpressResponseLike> = (ctx: VerifiedPrincipalContext, req: Req, res: Res, next: ExpressNext) => void | Promise<void>;",
      "typeReferences": [
        {
          "name": "ExpressNext",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L29"
        },
        {
          "name": "ExpressRequestLike",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L5"
        },
        {
          "name": "ExpressResponseLike",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L17"
        },
        {
          "name": "VerifiedPrincipalContext",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L78"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.VerifiedPrincipalContext",
      "name": "@farthershore/backend.VerifiedPrincipalContext",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/adapters/express.d.ts#L78",
      "description": "A verified request context whose {@link ConsumerPrincipal} is GUARANTEED\npresent — the shape handed to a {@link VerifiedExpressHandler}. The raw\n`FartherShoreRequestContext.principal` is optional (an identity-less gateway\nrequest is legitimate on the `fs.middleware()` path); `fs.handler()` narrows to\nthis type only AFTER rejecting an absent principal with `401 principal_required`,\nso the callback can read `ctx.principal` (and narrow with\n`requireMember`/`requireService`) without any optional-chaining.",
      "signature": "export type VerifiedPrincipalContext = FartherShoreRequestContext & {\n    principal: ConsumerPrincipal;\n    signedContext: FartherShoreSignedContext;\n};",
      "typeReferences": [
        {
          "name": "ConsumerPrincipal",
          "source": "packages/backend/dist/types/core/verifyContext.d.ts#L8"
        },
        {
          "name": "FartherShoreRequestContext",
          "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L24"
        },
        {
          "name": "FartherShoreSignedContext",
          "source": "packages/backend/dist/types/core/verifyContext.d.ts#L33"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.verifyCanonicalSignature",
      "name": "@farthershore/backend.verifyCanonicalSignature",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/runtime-signing.d.ts#L27",
      "description": "Verify a base64url Ed25519 signature over the canonical string.",
      "signature": "declare const verifyCanonicalSignature: (canonical: string, signatureB64Url: string, publicJwk: JsonWebKey) => Promise<boolean>;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.verifyContext",
      "name": "@farthershore/backend.verifyContext",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/verifyContext.d.ts#L96",
      "description": "Verify an `X-Fs-Context` token against one or more HS256 secrets (try-all for\nkeyring rotation). Returns the typed cv=2 payload on success, `null` on any\nfailure (malformed, wrong alg, bad signature, unparseable payload, OR a\n`cv !== 2` claim-format the SDK does not understand). The caller treats a\n`null` as fatal (fail-closed).",
      "signature": "export declare function verifyContext(token: string, secrets: readonly string[]): Promise<FartherShoreSignedContext | null>;",
      "typeReferences": [
        {
          "name": "FartherShoreSignedContext",
          "source": "packages/backend/dist/types/core/verifyContext.d.ts#L33"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.verifyRequest",
      "name": "@farthershore/backend.verifyRequest",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L167",
      "description": "Public export verifyRequest; see its declaration and owning guide.",
      "signature": "export declare function verifyRequest(input: VerifyRequestInput, deps: VerifyRequestDeps): Promise<FartherShoreRequestContext>;",
      "typeReferences": [
        {
          "name": "FartherShoreRequestContext",
          "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L24"
        },
        {
          "name": "VerifyRequestDeps",
          "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L86"
        },
        {
          "name": "VerifyRequestInput",
          "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L6"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.VerifyRequestDeps",
      "name": "@farthershore/backend.VerifyRequestDeps",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L86",
      "description": "Public export VerifyRequestDeps; see its declaration and owning guide.",
      "signature": "export type VerifyRequestDeps = {\n    jwks: JwksClient;\n    nonceCache: NonceStore;\n    /** Expected business id (from bootstrap). When set, must match the signed claim. */\n    businessId?: string;\n    /** Expected backend id (from bootstrap). When set, must match — unless\n     *  `backendIds` is provided, which supersedes it with a membership check. */\n    backendId?: string;\n    /**\n     * Every backend id this deployment may serve (from bootstrap), across all of\n     * the business's environments. When provided, the signed backend id must be a\n     * MEMBER of this set — superseding the single-id equality check above.\n     *\n     * A process holds exactly one `FS_RUNTIME_TOKEN`, so pinning to one backend id\n     * forced a separate deployment per environment: serving a preview env meant\n     * repointing (and breaking) production. A business-scoped token serves them\n     * all from one deployment. Still fail-closed, still bound to this business —\n     * just no longer bound to a single environment.\n     */\n    backendIds?: ReadonlySet<string>;\n    /**\n     * Set of route ids this backend serves (from bootstrap). When provided AND\n     * the signed route-id is non-empty, the signed route must be a member —\n     * otherwise `route_unknown` (403), after one forced {@link refreshRouteSet}.\n     */\n    knownRouteIds?: ReadonlySet<string>;\n    clockSkewSeconds?: number;\n    replayWindowSeconds?: number;\n    /** Injectable clock (seconds since epoch). */\n    nowSeconds?: () => number;\n    /**\n     * OPTIONAL HS256 secret(s) for the gateway's cv=2 `X-Fs-Context` claim\n     * (multiple = keyring rotation, try-all). Consumer-principal wave (D3): these\n     * are NOT required to produce the principal. The context token's authenticity\n     * comes from the Ed25519 REQUEST signature — the token's SHA-256 is bound into\n     * the canonical signing string, so a verified request already vouches for the\n     * token's content. Principal derivation therefore happens whenever a token is\n     * presented, with or without a configured secret. When these secrets ARE\n     * configured they add DEFENSE-IN-DEPTH: a presented token must ALSO pass HS256\n     * (a second, independent proof) or the request is rejected. Leaving this empty\n     * is the common case (the request-signature binding is sufficient).\n     */\n    contextSecrets?: readonly string[];\n    /**\n     * The `policyVersion` of the bootstrap that produced {@link knownRouteIds}.\n     * When the gateway's SIGNED policy version disagrees with it, this process is\n     * demonstrably behind the edge — an exact, cheap refresh trigger that does not\n     * wait for a route id to be missed.\n     */\n    cachedPolicyVersion?: string;\n    /**\n     * Force ONE bootstrap refresh and return the fresh route set. Called ONLY\n     * after the Ed25519 signature has verified, and only through\n     * {@link routeRefreshLimiter}. Returning `null` (or throwing) leaves the\n     * cached set in force — a refresh failure must never turn a KNOWN route into\n     * a rejection.\n     */\n    refreshRouteSet?: RouteSetRefresher__8966fd1442e8;\n    /**\n     * Rate limiter guarding {@link refreshRouteSet}. Omitting it admits every\n     * refresh, which is acceptable only in tests — the runtime facade always\n     * supplies one so a flood of bogus route ids cannot fan out to core.\n     */\n    routeRefreshLimiter?: RouteRefreshGate__ebb28e3c71bf;\n    /** Age of the cached bootstrap in seconds (diagnostics only). */\n    bootstrapAgeSeconds?: () => number;\n    /** WARN sink for route-propagation diagnostics. Defaults to `console.warn`. */\n    onWarn?: (message: string) => void;\n};",
      "typeReferences": [
        {
          "name": "JwksClient",
          "source": "packages/backend/dist/types/core/jwks.d.ts#L43"
        },
        {
          "name": "NonceStore",
          "source": "packages/backend/dist/types/core/nonceCache.d.ts#L13"
        },
        {
          "name": "RouteRefreshGate__ebb28e3c71bf",
          "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L164"
        },
        {
          "name": "RouteSetRefresher__8966fd1442e8",
          "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L159"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.root.VerifyRequestInput",
      "name": "@farthershore/backend.VerifyRequestInput",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/root",
      "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L6",
      "description": "Per-request input. `headers` keys are matched case-insensitively.",
      "signature": "export type VerifyRequestInput = {\n    method: string;\n    /** Path only (no host, no query). */\n    path: string;\n    /** Raw query string (with or without leading '?'); \"\" when absent. */\n    query?: string;\n    headers: HeadersLike;\n    /** Raw request bytes captured pre-parser; null/undefined for empty body. */\n    body?: Uint8Array | null;\n    /**\n     * True when the request is body-hash-exempt (streaming). The signed hash must\n     * then be the STREAM sentinel and the body is not hashed (size cap still\n     * applies upstream).\n     */\n    streamingExempt?: boolean;\n};",
      "typeReferences": [
        {
          "name": "HeadersLike",
          "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L22"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.runtime.isStreamingExemptContentType",
      "name": "@farthershore/backend/runtime.isStreamingExemptContentType",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/runtime",
      "source": "packages/backend/dist/types/generated/runtime-contract.d.ts#L42",
      "description": "THE content-type half of the shared body-hash rule — a faithful copy of\n`isStreamingExemptContentType` in `@farthershore/contracts/runtime`, pinned\nbehaviourally by `runtime-contract-parity.test.ts`.\n\nMatching is on the content type's BASE (the part before any `;` parameters,\ne.g. a multipart boundary), case-insensitively. An exempt content type signs\nand verifies the STREAM sentinel REGARDLESS OF SIZE — the gateway signer\napplies the identical rule, so a small multipart upload agrees on both sides.",
      "signature": "export declare function isStreamingExemptContentType(contentType: string | null | undefined): boolean;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.runtime.RUNTIME_BODY_HASH_CONTRACT",
      "name": "@farthershore/backend/runtime.RUNTIME_BODY_HASH_CONTRACT",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/runtime",
      "source": "packages/backend/dist/types/generated/runtime-contract.d.ts#L22",
      "description": "Public export RUNTIME_BODY_HASH_CONTRACT; see its declaration and owning guide.",
      "signature": "declare const RUNTIME_BODY_HASH_CONTRACT: {\n    readonly algorithm: \"SHA-256\";\n    readonly encoding: \"hex-lower\";\n    readonly source: \"raw-request-bytes\";\n    readonly emptyBodyHash: \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\";\n    readonly maxBodyBytes: 10485760;\n    readonly streamingExemptToken: \"STREAM\";\n    readonly streamingExemptContentTypes: readonly [\"text/event-stream\", \"application/octet-stream\", \"multipart/form-data\"];\n    readonly overMaxStatus: 413;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.runtime.RUNTIME_ERROR_CODES",
      "name": "@farthershore/backend/runtime.RUNTIME_ERROR_CODES",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/runtime",
      "source": "packages/backend/dist/types/generated/runtime-contract.d.ts#L1",
      "description": "Public export RUNTIME_ERROR_CODES; see its declaration and owning guide.",
      "signature": "declare const RUNTIME_ERROR_CODES: {\n    readonly missingSignature: \"missing_signature\";\n    readonly malformedSignature: \"malformed_signature\";\n    readonly unknownKeyId: \"unknown_key_id\";\n    readonly jwksUnavailable: \"jwks_unavailable\";\n    readonly badSignature: \"bad_signature\";\n    readonly bodyHashMismatch: \"body_hash_mismatch\";\n    readonly routeMismatch: \"route_mismatch\";\n    readonly clockSkew: \"clock_skew\";\n    readonly expiredSignature: \"expired_signature\";\n    readonly replayedNonce: \"replayed_nonce\";\n    readonly bodyTooLarge: \"body_too_large\";\n    readonly environmentMismatch: \"environment_mismatch\";\n    readonly missingToken: \"missing_token\";\n    readonly invalidToken: \"invalid_token\";\n    readonly contextUnverified: \"context_unverified\";\n    readonly memberSubjectRequired: \"member_subject_required\";\n    readonly serviceSubjectRequired: \"service_subject_required\";\n    readonly surfaceNotAllowed: \"surface_not_allowed\";\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.runtime.RUNTIME_RESPONSE_METERING_CONTRACT",
      "name": "@farthershore/backend/runtime.RUNTIME_RESPONSE_METERING_CONTRACT",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/runtime",
      "source": "packages/backend/dist/types/generated/runtime-contract.d.ts#L43",
      "description": "Public export RUNTIME_RESPONSE_METERING_CONTRACT; see its declaration and owning guide.",
      "signature": "declare const RUNTIME_RESPONSE_METERING_CONTRACT: {\n    readonly headers: {\n        readonly payload: \"x-fs-metering\";\n        readonly signature: \"x-fs-metering-sig\";\n        readonly token: \"x-fs-metering-token\";\n    };\n    readonly token: {\n        readonly environmentVariable: \"FS_RUNTIME_TOKEN\";\n        readonly presentation: \"x-fs-metering-token\";\n        readonly storage: \"sha256-hash-only\";\n    };\n    readonly signature: {\n        readonly algorithm: \"HMAC-SHA256\";\n        readonly encoding: \"base64url\";\n        readonly input: \"payload-json\";\n        readonly secret: \"presented-runtime-token\";\n    };\n    readonly payload: {\n        readonly method: \"string\";\n        readonly path: \"string\";\n        readonly rawDimsUnits: \"Record<string, number>?\";\n        readonly measureContext: \"Record<string, unknown>?\";\n        readonly creditUnitsConsumed: \"Record<string, number>?\";\n        readonly measurementsVersion: \"1?\";\n        readonly measurements: \"Array<{ meter: string; values: Record<string, number>; dims?: Record<string, string> }>?\";\n        readonly quote: \"{ currency: string; amountNanos: string }?\";\n    };\n    readonly errors: {\n        readonly missingToken: \"missing_token\";\n        readonly invalidMeterKey: \"invalid_meter_key\";\n        readonly invalidMeterValue: \"invalid_meter_value\";\n        readonly invalidQuote: \"invalid_quote\";\n    };\n    readonly httpAdapter: {\n        readonly input: \"Request\";\n        readonly output: \"Response\";\n        readonly networkCalls: false;\n        readonly preserves: readonly [\"body\", \"headers\", \"status\", \"statusText\"];\n        readonly gatewayStripsInternalHeaders: true;\n    };\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.runtime.RuntimeErrorCode",
      "name": "@farthershore/backend/runtime.RuntimeErrorCode",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/runtime",
      "source": "packages/backend/dist/types/generated/runtime-contract.d.ts#L21",
      "description": "Public export RuntimeErrorCode; see its declaration and owning guide.",
      "signature": "export type RuntimeErrorCode = (typeof RUNTIME_ERROR_CODES)[keyof typeof RUNTIME_ERROR_CODES];",
      "typeReferences": [
        {
          "name": "RUNTIME_ERROR_CODES",
          "source": "packages/backend/dist/types/generated/runtime-contract.d.ts#L1"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.assertNotProduction",
      "name": "@farthershore/backend/testing.assertNotProduction",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/prodGuard.d.ts#L12",
      "description": "Throw {@link DevModeInProductionError} when `NODE_ENV=production`. Call at the\nTOP of every dev-runtime constructor. `context` names the entry point for the\nerror message (e.g. \"createDevRuntime\", \"FS_DEV_MODE\").",
      "signature": "export declare function assertNotProduction(context: string, env?: Record<string, string | undefined>): void;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.AuthzDecisionEntry",
      "name": "@farthershore/backend/testing.AuthzDecisionEntry",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/traceSink.d.ts#L3",
      "description": "Public export AuthzDecisionEntry; see its declaration and owning guide.",
      "signature": "export type AuthzDecisionEntry = {\n    permission: string;\n    decision: \"allow\" | \"deny\";\n    reason?: string;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.buildPersonaMap",
      "name": "@farthershore/backend/testing.buildPersonaMap",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/personas.d.ts#L90",
      "description": "Merge caller personas over the built-in defaults into a name→def map.",
      "signature": "export declare function buildPersonaMap(overrides?: Record<string, PersonaDefinition> | PersonaDefinition[]): Map<string, PersonaDefinition>;",
      "typeReferences": [
        {
          "name": "PersonaDefinition",
          "source": "packages/backend/dist/types/testing/personas.d.ts#L4"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.CONTEXT_HEADER_NAME",
      "name": "@farthershore/backend/testing.CONTEXT_HEADER_NAME",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/personas.d.ts#L92",
      "description": "The header name for the signed context (exported for assertions).",
      "signature": "declare const CONTEXT_HEADER_NAME = \"x-fs-context\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.createDevGateway",
      "name": "@farthershore/backend/testing.createDevGateway",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/devGateway.d.ts#L40",
      "description": "Build the in-process dev gateway. `mode` drives `verification.required`:\n`passthrough` → false (the adapter passes requests through unverified, matching\nthe pre-keystone deploy order), `simulated` → true (fail-closed verification is\nexercised end-to-end).",
      "signature": "export declare function createDevGateway(options: DevGatewayOptions): DevGateway;",
      "typeReferences": [
        {
          "name": "DevGateway",
          "source": "packages/backend/dist/types/testing/devGateway.d.ts#L21"
        },
        {
          "name": "DevGatewayOptions",
          "source": "packages/backend/dist/types/testing/devGateway.d.ts#L7"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.createDevRuntime",
      "name": "@farthershore/backend/testing.createDevRuntime",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/devRuntime.d.ts#L71",
      "description": "Build a dev runtime: a real `FartherShore` wired to the in-process gateway and\nsigned personas, plus assertable usage/trace side channels.",
      "signature": "export declare function createDevRuntime(options: CreateDevRuntimeOptions): DevRuntime;",
      "typeReferences": [
        {
          "name": "CreateDevRuntimeOptions",
          "source": "packages/backend/dist/types/testing/devRuntime.d.ts#L30"
        },
        {
          "name": "DevRuntime",
          "source": "packages/backend/dist/types/testing/devRuntime.d.ts#L46"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.createDevRuntimeFromEnv",
      "name": "@farthershore/backend/testing.createDevRuntimeFromEnv",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/devRuntime.d.ts#L79",
      "description": "Self-construct the dev simulator from the environment. Called by `initFromEnv`\nwhen `FS_DEV_MODE` is set. Prints a LOUD banner, wires JSONL usage/trace sinks\n+ a mode-600 dev-keys file, and returns the augmented runtime.",
      "signature": "export declare function createDevRuntimeFromEnv(env?: Record<string, string | undefined>): FartherShoreDevInstance;",
      "typeReferences": [
        {
          "name": "FartherShoreDevInstance",
          "source": "packages/backend/dist/types/testing/devRuntime.d.ts#L14"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.CreateDevRuntimeOptions",
      "name": "@farthershore/backend/testing.CreateDevRuntimeOptions",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/devRuntime.d.ts#L30",
      "description": "Public export CreateDevRuntimeOptions; see its declaration and owning guide.",
      "signature": "export type CreateDevRuntimeOptions = {\n    mode: DevMode;\n    /** Persona overrides merged over the built-in owner/admin/member/anonymous. */\n    personas?: Record<string, PersonaDefinition> | PersonaDefinition[];\n    /** Route ids to expose in bootstrap (for route-binding tests). */\n    routes?: string[];\n    /** Meter keys (informational — the dev gateway accepts any meter). */\n    meters?: string[];\n    businessId?: string;\n    backendId?: string;\n    /** Optional app transport for persona `.fetch()`; defaults to global fetch. */\n    appFetch?: typeof fetch;\n    /** Reuse a fixed key set (cross-process). Defaults to a fresh ephemeral set. */\n    keys?: DevSignerKeys;\n};",
      "typeReferences": [
        {
          "name": "DevMode",
          "source": "packages/backend/dist/types/testing/traceSink.d.ts#L1"
        },
        {
          "name": "DevSignerKeys",
          "source": "packages/backend/dist/types/testing/signers.d.ts#L80"
        },
        {
          "name": "PersonaDefinition",
          "source": "packages/backend/dist/types/testing/personas.d.ts#L4"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.createPersonaClient",
      "name": "@farthershore/backend/testing.createPersonaClient",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/personas.d.ts#L85",
      "description": "Build a persona client bound to a set of dev keys + bootstrap ids. Returns an\n`asPersona(name)` factory. Constructed by the dev runtime; also constructible\nstandalone from a dev-keys file (see `personaClientFromKeysFile`).",
      "signature": "export declare function createPersonaClient(ctx: PersonaClientContext): {\n    asPersona(name: string): PersonaRequest;\n    personas: Map<string, PersonaDefinition>;\n};",
      "typeReferences": [
        {
          "name": "PersonaClientContext",
          "source": "packages/backend/dist/types/testing/personas.d.ts#L54"
        },
        {
          "name": "PersonaDefinition",
          "source": "packages/backend/dist/types/testing/personas.d.ts#L4"
        },
        {
          "name": "PersonaRequest",
          "source": "packages/backend/dist/types/testing/personas.d.ts#L66"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.DEFAULT_KEYS_FILE",
      "name": "@farthershore/backend/testing.DEFAULT_KEYS_FILE",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/keysFile.d.ts#L4",
      "description": "Public export DEFAULT_KEYS_FILE; see its declaration and owning guide.",
      "signature": "declare const DEFAULT_KEYS_FILE = \".farthershore/dev-keys.json\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.DEFAULT_PERSONAS",
      "name": "@farthershore/backend/testing.DEFAULT_PERSONAS",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/personas.d.ts#L34",
      "description": "The four built-in personas: owner / admin / member / anonymous.",
      "signature": "declare const DEFAULT_PERSONAS: Record<string, PersonaDefinition>;",
      "typeReferences": [
        {
          "name": "PersonaDefinition",
          "source": "packages/backend/dist/types/testing/personas.d.ts#L4"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.definePersona",
      "name": "@farthershore/backend/testing.definePersona",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/personas.d.ts#L32",
      "description": "Identity-neutral pass-through of a persona definition (readability sugar).",
      "signature": "export declare function definePersona(def: PersonaDefinition): PersonaDefinition;",
      "typeReferences": [
        {
          "name": "PersonaDefinition",
          "source": "packages/backend/dist/types/testing/personas.d.ts#L4"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.DEV_CORE_URL",
      "name": "@farthershore/backend/testing.DEV_CORE_URL",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/devGateway.d.ts#L4",
      "description": "Public export DEV_CORE_URL; see its declaration and owning guide.",
      "signature": "declare const DEV_CORE_URL = \"https://dev-gateway.farthershore.local\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.DEV_JWKS_URL",
      "name": "@farthershore/backend/testing.DEV_JWKS_URL",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/devGateway.d.ts#L5",
      "description": "Public export DEV_JWKS_URL; see its declaration and owning guide.",
      "signature": "declare const DEV_JWKS_URL = \"https://dev-gateway.farthershore.local/.well-known/jwks.json\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.DEV_METERING_ENDPOINT",
      "name": "@farthershore/backend/testing.DEV_METERING_ENDPOINT",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/devGateway.d.ts#L6",
      "description": "Public export DEV_METERING_ENDPOINT; see its declaration and owning guide.",
      "signature": "declare const DEV_METERING_ENDPOINT = \"https://dev-gateway.farthershore.local/v1/metering/events\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.DevGateway",
      "name": "@farthershore/backend/testing.DevGateway",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/devGateway.d.ts#L21",
      "description": "Public export DevGateway; see its declaration and owning guide.",
      "signature": "export type DevGateway = {\n    /** Inject this as `fetchImpl` when constructing the FartherShore runtime. */\n    fetchImpl: typeof fetch;\n    /** The bootstrap response this fixture serves. */\n    bootstrap: RuntimeBootstrapResponse__aecc7a0d671f;\n    /** Every captured background metering event (a capture == an ACK). */\n    meterEvents: RuntimeMeteringEvent__418138753c49[];\n    /** Every captured attested post-stream usage report. */\n    reportUsageEvents: RuntimePostStreamUsageEvent__1827aaa16965[];\n    businessId: string;\n    backendId: string;\n    jwksUrl: string;\n};",
      "typeReferences": [
        {
          "name": "RuntimeBootstrapResponse__aecc7a0d671f",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L228"
        },
        {
          "name": "RuntimeMeteringEvent__418138753c49",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L268"
        },
        {
          "name": "RuntimePostStreamUsageEvent__1827aaa16965",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L284"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.DevGatewayOptions",
      "name": "@farthershore/backend/testing.DevGatewayOptions",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/devGateway.d.ts#L7",
      "description": "Public export DevGatewayOptions; see its declaration and owning guide.",
      "signature": "export type DevGatewayOptions = {\n    mode: DevMode;\n    keys: DevSignerKeys;\n    businessId?: string;\n    backendId?: string;\n    businessSlug?: string;\n    backendSlug?: string;\n    /** Extra route ids to expose in bootstrap for route-binding tests. */\n    routeIds?: string[];\n    /** Called for each captured metering event (at-least-once ACK). */\n    onMeterEvent?: (event: RuntimeMeteringEvent__418138753c49) => void;\n    /** Called for each captured attested post-stream report. */\n    onReportUsage?: (event: RuntimePostStreamUsageEvent__1827aaa16965) => void;\n};",
      "typeReferences": [
        {
          "name": "DevMode",
          "source": "packages/backend/dist/types/testing/traceSink.d.ts#L1"
        },
        {
          "name": "DevSignerKeys",
          "source": "packages/backend/dist/types/testing/signers.d.ts#L80"
        },
        {
          "name": "RuntimeMeteringEvent__418138753c49",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L268"
        },
        {
          "name": "RuntimePostStreamUsageEvent__1827aaa16965",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L284"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.DevKeysFile",
      "name": "@farthershore/backend/testing.DevKeysFile",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/keysFile.d.ts#L6",
      "description": "The on-disk shape of the dev-keys handoff file.",
      "signature": "export type DevKeysFile = {\n    version: 1;\n    mode: DevMode;\n    keys: DevSignerKeys;\n    businessId: string;\n    backendId: string;\n    /** Persona definitions in effect for this dev session. */\n    personas: Record<string, PersonaDefinition>;\n};",
      "typeReferences": [
        {
          "name": "DevMode",
          "source": "packages/backend/dist/types/testing/traceSink.d.ts#L1"
        },
        {
          "name": "DevSignerKeys",
          "source": "packages/backend/dist/types/testing/signers.d.ts#L80"
        },
        {
          "name": "PersonaDefinition",
          "source": "packages/backend/dist/types/testing/personas.d.ts#L4"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.DevMode",
      "name": "@farthershore/backend/testing.DevMode",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/traceSink.d.ts#L1",
      "description": "Public export DevMode; see its declaration and owning guide.",
      "signature": "export type DevMode = \"passthrough\" | \"simulated\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.devModeFromEnv",
      "name": "@farthershore/backend/testing.devModeFromEnv",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/devRuntime.d.ts#L73",
      "description": "Whether `FS_DEV_MODE` selects a dev mode. Returns the mode or null.",
      "signature": "export declare function devModeFromEnv(env: Record<string, string | undefined>): DevMode | null;",
      "typeReferences": [
        {
          "name": "DevMode",
          "source": "packages/backend/dist/types/testing/traceSink.d.ts#L1"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.DevModeInProductionError",
      "name": "@farthershore/backend/testing.DevModeInProductionError",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/prodGuard.d.ts#L4",
      "description": "Thrown when a dev runtime is constructed in a production process.",
      "signature": "export declare class DevModeInProductionError extends Error {\n    constructor(context: string);\n}",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.DevRuntime",
      "name": "@farthershore/backend/testing.DevRuntime",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/devRuntime.d.ts#L46",
      "description": "The dev harness returned by `createDevRuntime` and attached as `fs.dev`.",
      "signature": "export type DevRuntime = {\n    fs: FartherShoreDevInstance;\n    asPersona(name: string): PersonaRequest;\n    usage: DevUsageSink;\n    trace: DevTraceSink;\n    gateway: DevGateway;\n    keys: DevSignerKeys;\n    personas: Map<string, PersonaDefinition>;\n    mode: DevMode;\n    bootstrap: DevGateway[\"bootstrap\"];\n    /** Traced authz helpers — delegate to the REAL permission functions and\n     *  record each decision into the trace (keyed by ctx.requestId). */\n    authz: {\n        hasPermission(ctx: TracedCarrier, key: string): boolean;\n        requirePermission(ctx: TracedCarrier, key: string): void;\n    };\n    /** A trace-aware Express middleware (wraps the real fail-closed middleware). */\n    middleware(options?: MiddlewareOptions__b16fbb0c44c2): ExpressMiddleware__416c4ad228c7;\n    /** Clear usage + trace + captured meter events. */\n    reset(): void;\n};",
      "typeReferences": [
        {
          "name": "DevGateway",
          "source": "packages/backend/dist/types/testing/devGateway.d.ts#L21"
        },
        {
          "name": "DevMode",
          "source": "packages/backend/dist/types/testing/traceSink.d.ts#L1"
        },
        {
          "name": "DevSignerKeys",
          "source": "packages/backend/dist/types/testing/signers.d.ts#L80"
        },
        {
          "name": "DevTraceSink",
          "source": "packages/backend/dist/types/testing/traceSink.d.ts#L34"
        },
        {
          "name": "DevUsageSink",
          "source": "packages/backend/dist/types/testing/usageSink.d.ts#L27"
        },
        {
          "name": "ExpressMiddleware__416c4ad228c7",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L30"
        },
        {
          "name": "FartherShoreDevInstance",
          "source": "packages/backend/dist/types/testing/devRuntime.d.ts#L14"
        },
        {
          "name": "MiddlewareOptions__b16fbb0c44c2",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L31"
        },
        {
          "name": "PersonaDefinition",
          "source": "packages/backend/dist/types/testing/personas.d.ts#L4"
        },
        {
          "name": "PersonaRequest",
          "source": "packages/backend/dist/types/testing/personas.d.ts#L66"
        },
        {
          "name": "TracedCarrier",
          "source": "packages/backend/dist/types/testing/devRuntime.d.ts#L10"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.DevSignerKeys",
      "name": "@farthershore/backend/testing.DevSignerKeys",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/signers.d.ts#L80",
      "description": "Public export DevSignerKeys; see its declaration and owning guide.",
      "signature": "export type DevSignerKeys = {\n    /** Ed25519 signing keypair as JWKs (request-signature keys). */\n    kid: string;\n    privateJwk: JsonWebKey;\n    publicJwk: JsonWebKey;\n    /** HS256 context-signing secret + its kid (X-Fs-Context keys). */\n    contextKid: string;\n    contextSecret: string;\n    /** Ephemeral fsrt_test_ runtime token (bootstrap bearer + metering HMAC). */\n    runtimeToken: string;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.DevTrace",
      "name": "@farthershore/backend/testing.DevTrace",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/traceSink.d.ts#L12",
      "description": "Public export DevTrace; see its declaration and owning guide.",
      "signature": "export type DevTrace = {\n    requestId: string;\n    method?: string;\n    path?: string;\n    persona?: string;\n    mode: DevMode;\n    verification?: {\n        outcome: VerificationOutcome;\n        reason?: string;\n    };\n    authz: AuthzDecisionEntry[];\n    metering: MeteringTraceEntry[];\n    response?: {\n        status: number;\n    };\n};",
      "typeReferences": [
        {
          "name": "AuthzDecisionEntry",
          "source": "packages/backend/dist/types/testing/traceSink.d.ts#L3"
        },
        {
          "name": "DevMode",
          "source": "packages/backend/dist/types/testing/traceSink.d.ts#L1"
        },
        {
          "name": "MeteringTraceEntry",
          "source": "packages/backend/dist/types/testing/traceSink.d.ts#L8"
        },
        {
          "name": "VerificationOutcome",
          "source": "packages/backend/dist/types/testing/traceSink.d.ts#L2"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.DevTraceSink",
      "name": "@farthershore/backend/testing.DevTraceSink",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/traceSink.d.ts#L34",
      "description": "Accumulates one `DevTrace` per request id and (optionally) appends each\ncompleted trace as a single JSONL line via the injected `appendLine` sink.",
      "signature": "export declare class DevTraceSink {\n    private readonly traces;\n    private readonly flushed;\n    private readonly appendLine?;\n    constructor(options?: {\n        appendLine?: (line: string) => void;\n    });\n    private ensure;\n    /** Record how a request's signature/context verification resolved. */\n    recordVerification(requestId: string, mode: DevMode, outcome: VerificationOutcome, fields?: {\n        method?: string;\n        path?: string;\n        persona?: string;\n        reason?: string;\n    }): void;\n    /** Record a single hasPermission / requirePermission decision. */\n    recordAuthz(requestId: string, mode: DevMode, entry: AuthzDecisionEntry): void;\n    /** Record usage reported for this request. */\n    recordMetering(requestId: string, mode: DevMode, entry: MeteringTraceEntry): void;\n    /** Record the final response status and flush the trace as one JSONL line. */\n    recordResponse(requestId: string, mode: DevMode, status: number): void;\n    /**\n     * Append a trace's current state as one JSONL line (if a sink is wired).\n     * Flushes at most ONCE per request id, so wrapping several response methods\n     * (status/json/end) never produces duplicate JSONL lines.\n     */\n    flush(requestId: string): void;\n    /** The accumulated trace for a request id, or `undefined`. */\n    forRequest(requestId: string): DevTrace | undefined;\n    /** Every accumulated trace (insertion order). */\n    all(): DevTrace[];\n    /** Clear all traces. */\n    reset(): void;\n}",
      "typeReferences": [
        {
          "name": "AuthzDecisionEntry",
          "source": "packages/backend/dist/types/testing/traceSink.d.ts#L3"
        },
        {
          "name": "DevMode",
          "source": "packages/backend/dist/types/testing/traceSink.d.ts#L1"
        },
        {
          "name": "DevTrace",
          "source": "packages/backend/dist/types/testing/traceSink.d.ts#L12"
        },
        {
          "name": "MeteringTraceEntry",
          "source": "packages/backend/dist/types/testing/traceSink.d.ts#L8"
        },
        {
          "name": "VerificationOutcome",
          "source": "packages/backend/dist/types/testing/traceSink.d.ts#L2"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.DevUsageEvent",
      "name": "@farthershore/backend/testing.DevUsageEvent",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/usageSink.d.ts#L3",
      "description": "One recorded usage observation. `source` distinguishes the two channels.",
      "signature": "export type DevUsageEvent = {\n    source: \"response\";\n    /** rawDimsUnits from the signed response-metering payload. */\n    meters: Record<string, number>;\n    /** The full response-metering payload (method/path/rawDimsUnits/…). */\n    payload: Record<string, unknown>;\n    /** The gateway request id this usage was reported against, when known. */\n    requestId?: string;\n    at: number;\n} | {\n    source: \"meter\";\n    /** `{ [meter]: qty }` for a single background metering event. */\n    meters: Record<string, number>;\n    event: RuntimeMeteringEvent__418138753c49;\n    requestId?: string;\n    at: number;\n} | {\n    source: \"reportUsage\";\n    meters: Record<string, number>;\n    event: RuntimePostStreamUsageEvent__1827aaa16965;\n    requestId: string;\n    at: number;\n};",
      "typeReferences": [
        {
          "name": "RuntimeMeteringEvent__418138753c49",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L268"
        },
        {
          "name": "RuntimePostStreamUsageEvent__1827aaa16965",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L284"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.DevUsageSink",
      "name": "@farthershore/backend/testing.DevUsageSink",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/usageSink.d.ts#L27",
      "description": "In-memory, assertable sink for all dev usage.",
      "signature": "export declare class DevUsageSink {\n    readonly events: DevUsageEvent[];\n    /** Record a signed response-metering payload (report() in-band / computeMeteringHeaders). */\n    recordResponse(payload: Record<string, unknown>, requestId?: string): void;\n    /** Record a background `fs.meter()` event captured by the dev gateway. */\n    recordMeterEvent(event: RuntimeMeteringEvent__418138753c49): void;\n    /** Record an attested post-stream report captured by the dev gateway. */\n    recordReportUsage(event: RuntimePostStreamUsageEvent__1827aaa16965): void;\n    /** Total quantity per meter key across every recorded event. */\n    byMeter(): Record<string, number>;\n    /** Clear all recorded usage. */\n    reset(): void;\n}",
      "typeReferences": [
        {
          "name": "DevUsageEvent",
          "source": "packages/backend/dist/types/testing/usageSink.d.ts#L3"
        },
        {
          "name": "RuntimeMeteringEvent__418138753c49",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L268"
        },
        {
          "name": "RuntimePostStreamUsageEvent__1827aaa16965",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L284"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.FartherShoreDevInstance",
      "name": "@farthershore/backend/testing.FartherShoreDevInstance",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/devRuntime.d.ts#L14",
      "description": "The FartherShore instance augmented with a bound Express middleware.",
      "signature": "export type FartherShoreDevInstance = FartherShore__b6398b2ddfc7 & {\n    middleware(options?: MiddlewareOptions__b16fbb0c44c2): ExpressMiddleware__416c4ad228c7;\n    /** Strict-context handler wrapper (guaranteed non-optional ctx). */\n    handler: {\n        <Req extends ExpressRequestLike__f93080abdbb9 = ExpressRequestLike__f93080abdbb9, Res extends ExpressResponseLike__7a6dd95793e1 = ExpressResponseLike__7a6dd95793e1>(handler: VerifiedExpressHandler__ca6f4e2c232b<Req, Res>): ExpressMiddleware__416c4ad228c7;\n        /** Options-first overload — declarative `permission` gate. */\n        <Req extends ExpressRequestLike__f93080abdbb9 = ExpressRequestLike__f93080abdbb9, Res extends ExpressResponseLike__7a6dd95793e1 = ExpressResponseLike__7a6dd95793e1>(options: HandlerOptions__89c221f2c3e0, handler: VerifiedExpressHandler__ca6f4e2c232b<Req, Res>): ExpressMiddleware__416c4ad228c7;\n    };\n    /** Traced authz helpers — the SAME shape as the prod facade's `fs.authz`. */\n    authz: {\n        hasPermission(ctx: TracedCarrier, key: string): boolean;\n        requirePermission(ctx: TracedCarrier, key: string): void;\n    };\n    /** The dev harness attached to this runtime. */\n    dev: DevRuntime;\n};",
      "typeReferences": [
        {
          "name": "DevRuntime",
          "source": "packages/backend/dist/types/testing/devRuntime.d.ts#L46"
        },
        {
          "name": "ExpressMiddleware__416c4ad228c7",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L30"
        },
        {
          "name": "ExpressRequestLike__f93080abdbb9",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L5"
        },
        {
          "name": "ExpressResponseLike__7a6dd95793e1",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L17"
        },
        {
          "name": "FartherShore__b6398b2ddfc7",
          "source": "packages/backend/dist/types/core/runtime.d.ts#L84"
        },
        {
          "name": "HandlerOptions__89c221f2c3e0",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L91"
        },
        {
          "name": "MiddlewareOptions__b16fbb0c44c2",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L31"
        },
        {
          "name": "TracedCarrier",
          "source": "packages/backend/dist/types/testing/devRuntime.d.ts#L10"
        },
        {
          "name": "VerifiedExpressHandler__ca6f4e2c232b",
          "source": "packages/backend/dist/types/adapters/express.d.ts#L89"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.generateDevSignerKeys",
      "name": "@farthershore/backend/testing.generateDevSignerKeys",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/signers.d.ts#L97",
      "description": "Generate a fresh, ephemeral set of dev signer keys: an Ed25519 request-signing\nkeypair, an HS256 context secret, and a `fsrt_test_` runtime token. Fully\nsynchronous (uses `node:crypto`) so a dev simulator can be built without\nawaiting. NEVER call this in production (guarded upstream).",
      "signature": "export declare function generateDevSignerKeys(): DevSignerKeys;",
      "typeReferences": [
        {
          "name": "DevSignerKeys",
          "source": "packages/backend/dist/types/testing/signers.d.ts#L80"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.isProductionEnv",
      "name": "@farthershore/backend/testing.isProductionEnv",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/prodGuard.d.ts#L2",
      "description": "Case-insensitive `NODE_ENV=production` check (matches core's `isProductionEnv`).",
      "signature": "export declare function isProductionEnv(env?: Record<string, string | undefined>): boolean;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.makeSignedRequest",
      "name": "@farthershore/backend/testing.makeSignedRequest",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/signers.d.ts#L53",
      "description": "Produce a valid signed claim + the X-FS-* header bag. Returns both the verify\ninput shape and a mutable header record you can corrupt for negative tests.",
      "signature": "export declare function makeSignedRequest(spec?: SignedRequestSpec): Promise<{\n    input: {\n        method: string;\n        path: string;\n        query: string;\n        body: Uint8Array | null;\n        streamingExempt: boolean;\n    };\n    claim: CanonicalSigningInput__d7cf4cea4ad9;\n    headers: Record<string, string>;\n}>;",
      "typeReferences": [
        {
          "name": "CanonicalSigningInput__d7cf4cea4ad9",
          "source": "packages/backend/dist/types/runtime-types.d.ts#L153"
        },
        {
          "name": "SignedRequestSpec",
          "source": "packages/backend/dist/types/testing/signers.d.ts#L22"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.memoryJwks",
      "name": "@farthershore/backend/testing.memoryJwks",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/signers.d.ts#L65",
      "description": "A JwksClient backed by an in-memory key set (no network).",
      "signature": "export declare function memoryJwks(keys?: Array<JsonWebKey & {\n    kid?: string;\n}>): JwksClient__3bf9d241c5e2;",
      "typeReferences": [
        {
          "name": "JwksClient__3bf9d241c5e2",
          "source": "packages/backend/dist/types/core/jwks.d.ts#L43"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.MeteringTraceEntry",
      "name": "@farthershore/backend/testing.MeteringTraceEntry",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/traceSink.d.ts#L8",
      "description": "Public export MeteringTraceEntry; see its declaration and owning guide.",
      "signature": "export type MeteringTraceEntry = {\n    meters: Record<string, number>;\n    source: \"response\" | \"meter\";\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.PersonaClientContext",
      "name": "@farthershore/backend/testing.PersonaClientContext",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/personas.d.ts#L54",
      "description": "The context a persona client signs against (bootstrap ids + dev keys).",
      "signature": "export type PersonaClientContext = {\n    keys: DevSignerKeys;\n    businessId: string;\n    backendId: string;\n    contextSecret: string;\n    contextKid: string;\n    personas: Map<string, PersonaDefinition>;\n    mode: DevMode;\n    /** fetch used by `.fetch()`; defaults to global fetch for real app listeners. */\n    fetchImpl?: typeof fetch;\n};",
      "typeReferences": [
        {
          "name": "DevMode",
          "source": "packages/backend/dist/types/testing/traceSink.d.ts#L1"
        },
        {
          "name": "DevSignerKeys",
          "source": "packages/backend/dist/types/testing/signers.d.ts#L80"
        },
        {
          "name": "PersonaDefinition",
          "source": "packages/backend/dist/types/testing/personas.d.ts#L4"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.personaClientFromKeysFile",
      "name": "@farthershore/backend/testing.personaClientFromKeysFile",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/keysFile.d.ts#L24",
      "description": "Construct a persona client from a dev-keys file — the cross-process entry\npoint. A test runner in a separate process reads the file the running service\nwrote and can immediately `asPersona(\"member\").fetch(url)` against it.",
      "signature": "export declare function personaClientFromKeysFile(path?: string, options?: {\n    fetchImpl?: typeof fetch;\n}): {\n    asPersona(name: string): PersonaRequest;\n    personas: Map<string, PersonaDefinition>;\n    file: DevKeysFile;\n};",
      "typeReferences": [
        {
          "name": "DevKeysFile",
          "source": "packages/backend/dist/types/testing/keysFile.d.ts#L6"
        },
        {
          "name": "PersonaDefinition",
          "source": "packages/backend/dist/types/testing/personas.d.ts#L4"
        },
        {
          "name": "PersonaRequest",
          "source": "packages/backend/dist/types/testing/personas.d.ts#L66"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.PersonaDefinition",
      "name": "@farthershore/backend/testing.PersonaDefinition",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/personas.d.ts#L4",
      "description": "A named identity in the platform's test-persona claim vocabulary.",
      "signature": "export type PersonaDefinition = {\n    name: string;\n    orgId?: string;\n    actor?: {\n        type: string;\n        id: string | null;\n    };\n    productId?: string;\n    environmentId?: string | null;\n    compiledPlanId?: string;\n    subscriptionId?: string;\n    subscriberId?: string;\n    /**\n     * The unified-authz permission grant. `[\"*\"]` = full access (org OWNER /\n     * RBAC-disabled). `[]` = authenticated with no grants (fail-closed on every\n     * check). Omit to mint a verified-but-claimless context (RBAC N/A ⇒ grant).\n     */\n    permissions?: string[];\n    roles?: string[];\n    subjectKey?: string;\n    /**\n     * When true, `asPersona` emits NO `X-Fs-Context` — an unidentified caller.\n     * Under `simulated` mode the request still verifies (valid signature) but\n     * carrier-level permission checks fail closed. Used by the `anonymous` default.\n     */\n    anonymous?: boolean;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.PersonaRequest",
      "name": "@farthershore/backend/testing.PersonaRequest",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/personas.d.ts#L66",
      "description": "The request-builder returned by `asPersona(name)`.",
      "signature": "export type PersonaRequest = {\n    /** The persona name. */\n    readonly persona: string;\n    /**\n     * The 9 signed `x-fs-*` headers + `X-Fs-Context` (unless anonymous).\n     * Defaults to GET; pass `method` for non-GET requests so the signature\n     * matches the request the caller sends.\n     */\n    headers(spec?: PersonaRequestSpec): Promise<Record<string, string>>;\n    /** Real HTTP with signed headers (uses the wired fetch). */\n    fetch(url: string, init?: RequestInit): Promise<Response>;\n    /** Set the signed headers on any `.set()`-carrying request (supertest, etc.). */\n    inject(req: SettableRequest, spec?: PersonaRequestSpec): Promise<SettableRequest>;\n};",
      "typeReferences": [
        {
          "name": "PersonaRequestSpec",
          "source": "packages/backend/dist/types/testing/personas.d.ts#L43"
        },
        {
          "name": "SettableRequest",
          "source": "packages/backend/dist/types/testing/personas.d.ts#L36"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.PersonaRequestSpec",
      "name": "@farthershore/backend/testing.PersonaRequestSpec",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/personas.d.ts#L43",
      "description": "A single request spec for `.headers()`.",
      "signature": "export type PersonaRequestSpec = {\n    method?: string;\n    path?: string;\n    query?: string;\n    body?: Uint8Array | null;\n    streamingExempt?: boolean;\n    routeId?: string;\n    requestId?: string;\n    timestamp?: number;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.readDevKeysFile",
      "name": "@farthershore/backend/testing.readDevKeysFile",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/keysFile.d.ts#L18",
      "description": "Read + parse a dev-keys file.",
      "signature": "export declare function readDevKeysFile(path?: string): DevKeysFile;",
      "typeReferences": [
        {
          "name": "DevKeysFile",
          "source": "packages/backend/dist/types/testing/keysFile.d.ts#L6"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.redactValue",
      "name": "@farthershore/backend/testing.redactValue",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/traceSink.d.ts#L29",
      "description": "Redact anything that smells like a credential from a free-form string.",
      "signature": "export declare function redactValue(input: string): string;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.SettableRequest",
      "name": "@farthershore/backend/testing.SettableRequest",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/personas.d.ts#L36",
      "description": "A minimal `.set(name, value)`-carrying request (supertest `Test`, etc.).",
      "signature": "export type SettableRequest = {\n    method?: string;\n    url?: string;\n    path?: string;\n    set(field: string, value: string): unknown;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.signContextToken",
      "name": "@farthershore/backend/testing.signContextToken",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/signers.d.ts#L79",
      "description": "Mint an HS256-signed `X-Fs-Context` token — the exact INVERSE of\n`verifyContext.ts`. The header is `{alg:\"HS256\",typ:\"JWT\",kid}` and the\npayload is the cv=2 `ConsumerContextClaims` shape (sub / client_id? / act? /\nsubjectKind / org / businessId / compiledPlanId / subscriptionId /\nsubscriberId / environmentId / subjectKey plus optional permissions / roles).\nSigns with the same secret the SDK would verify against (`contextSecrets` /\n`FS_CONTEXT_SECRETS`).",
      "signature": "export declare function signContextToken(claim: FartherShoreSignedContext__24c947c09583, secret?: string, kid?: string): Promise<string>;",
      "typeReferences": [
        {
          "name": "FartherShoreSignedContext__24c947c09583",
          "source": "packages/backend/dist/types/core/verifyContext.d.ts#L33"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.SIGNED_HEADER_NAMES",
      "name": "@farthershore/backend/testing.SIGNED_HEADER_NAMES",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/personas.d.ts#L94",
      "description": "The signed request header names (exported for assertions).",
      "signature": "declare const SIGNED_HEADER_NAMES: {\n    readonly signature: \"x-fs-signature\";\n    readonly keyId: \"x-fs-key-id\";\n    readonly requestId: \"x-fs-request-id\";\n    readonly timestamp: \"x-fs-timestamp\";\n    readonly businessId: \"x-fs-business-id\";\n    readonly backendId: \"x-fs-backend-id\";\n    readonly routeId: \"x-fs-route-id\";\n    readonly policyVersion: \"x-fs-policy-version\";\n    readonly bodyHash: \"x-fs-body-hash\";\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.SignedHeaderOverrides",
      "name": "@farthershore/backend/testing.SignedHeaderOverrides",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/signers.d.ts#L11",
      "description": "Public export SignedHeaderOverrides; see its declaration and owning guide.",
      "signature": "export type SignedHeaderOverrides = Partial<{\n    signature: string;\n    kid: string;\n    requestId: string;\n    timestamp: number;\n    businessId: string;\n    backendId: string;\n    routeId: string;\n    policyVersion: string;\n    bodyHash: string;\n}>;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.SignedRequestSpec",
      "name": "@farthershore/backend/testing.SignedRequestSpec",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/signers.d.ts#L22",
      "description": "Public export SignedRequestSpec; see its declaration and owning guide.",
      "signature": "export type SignedRequestSpec = {\n    method?: string;\n    path?: string;\n    query?: string;\n    body?: Uint8Array | null;\n    streamingExempt?: boolean;\n    businessId?: string;\n    backendId?: string;\n    routeId?: string;\n    policyVersion?: string;\n    requestId?: string;\n    timestamp?: number;\n    /**\n     * Ed25519 private JWK to sign with. Defaults to {@link TEST_PRIVATE_JWK}. A\n     * dev simulator passes its ephemeral signer here.\n     */\n    privateJwk?: JsonWebKey;\n    /** Key id stamped into `x-fs-key-id`. Defaults to {@link TEST_KID}. */\n    kid?: string;\n    /**\n     * Consumer-principal wave (D3) — the signed `X-Fs-Context` JWT to bind into\n     * the request signature (and stamp as the `x-fs-context` header). Its SHA-256\n     * is appended to the canonical string, exactly as the gateway signer does. A\n     * missing token binds the empty-string hash (identity-less request).\n     */\n    contextToken?: string;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.SignedTestWebhook",
      "name": "@farthershore/backend/testing.SignedTestWebhook",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/webhooks.d.ts#L16",
      "description": "Public export SignedTestWebhook; see its declaration and owning guide.",
      "signature": "export interface SignedTestWebhook<T extends WebhookEnvelopeType__22116d242a71> {\n    envelope: WebhookEnvelope__f1da89296e6d<T>;\n    /** The exact bytes to POST. */\n    body: string;\n    /** `webhook-id` / `webhook-timestamp` / `webhook-signature` / event / content-type. */\n    headers: Record<string, string>;\n    /** Convenience: a `Request` you can hand straight to `handler.fetch`. */\n    request(url?: string): Request;\n}",
      "typeReferences": [
        {
          "name": "WebhookEnvelope__f1da89296e6d",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L68"
        },
        {
          "name": "WebhookEnvelopeType__22116d242a71",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L10"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.signWebhookForTesting",
      "name": "@farthershore/backend/testing.signWebhookForTesting",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/webhooks.d.ts#L30",
      "description": "Build + sign one delivery the way the platform does (Standard Webhooks\nover `${id}.${timestamp}.${body}`). Pass several secrets to emulate the\n24 h dual-signing rotation window.",
      "signature": "export declare function signWebhookForTesting<T extends WebhookEnvelopeType__22116d242a71>(input: SignWebhookForTestingInput<T>): SignedTestWebhook<T>;",
      "typeReferences": [
        {
          "name": "SignedTestWebhook",
          "source": "packages/backend/dist/types/testing/webhooks.d.ts#L16"
        },
        {
          "name": "SignWebhookForTestingInput",
          "source": "packages/backend/dist/types/testing/webhooks.d.ts#L2"
        },
        {
          "name": "WebhookEnvelopeType__22116d242a71",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L10"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.SignWebhookForTestingInput",
      "name": "@farthershore/backend/testing.SignWebhookForTestingInput",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/webhooks.d.ts#L2",
      "description": "Public export SignWebhookForTestingInput; see its declaration and owning guide.",
      "signature": "export interface SignWebhookForTestingInput<T extends WebhookEnvelopeType__22116d242a71> {\n    /** The endpoint secret(s) the receiver is configured with (current first). */\n    secret: string | readonly string[];\n    type: T;\n    data: WebhookEventData__3ab81689f0bb[T];\n    /** Defaults to a random delivery id. */\n    id?: string;\n    businessId?: string;\n    environmentId?: string | null;\n    /** Defaults to now (ISO). */\n    createdAt?: string;\n    /** Signing timestamp (unix seconds); defaults to now. */\n    timestamp?: number;\n}",
      "typeReferences": [
        {
          "name": "WebhookEnvelopeType__22116d242a71",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L10"
        },
        {
          "name": "WebhookEventData__3ab81689f0bb",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L16"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.TEST_CONTEXT_KID",
      "name": "@farthershore/backend/testing.TEST_CONTEXT_KID",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/signers.d.ts#L10",
      "description": "The default context-signing kid stamped into the JWT header.",
      "signature": "declare const TEST_CONTEXT_KID = \"fs-context-test-2026\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.TEST_CONTEXT_SECRET",
      "name": "@farthershore/backend/testing.TEST_CONTEXT_SECRET",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/signers.d.ts#L8",
      "description": "The default HS256 context-signing secret for dev fixtures (NEVER production).",
      "signature": "declare const TEST_CONTEXT_SECRET = \"fs-dev-context-secret-2026\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.TEST_KID",
      "name": "@farthershore/backend/testing.TEST_KID",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/signers.d.ts#L4",
      "description": "Public export TEST_KID; see its declaration and owning guide.",
      "signature": "declare const TEST_KID = \"fs-runtime-test-2026\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.TEST_PRIVATE_JWK",
      "name": "@farthershore/backend/testing.TEST_PRIVATE_JWK",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/signers.d.ts#L5",
      "description": "Public export TEST_PRIVATE_JWK; see its declaration and owning guide.",
      "signature": "declare const TEST_PRIVATE_JWK: JsonWebKey;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.TEST_PUBLIC_JWK",
      "name": "@farthershore/backend/testing.TEST_PUBLIC_JWK",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/signers.d.ts#L6",
      "description": "Public export TEST_PUBLIC_JWK; see its declaration and owning guide.",
      "signature": "declare const TEST_PUBLIC_JWK: JsonWebKey;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.TracedCarrier",
      "name": "@farthershore/backend/testing.TracedCarrier",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/devRuntime.d.ts#L10",
      "description": "A permission carrier that also knows its request id (for trace keying).",
      "signature": "export type TracedCarrier = PermissionCarrier__227d98a75a82 & {\n    requestId?: string;\n};",
      "typeReferences": [
        {
          "name": "PermissionCarrier__227d98a75a82",
          "source": "packages/backend/dist/types/core/permissions.d.ts#L61"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.unreachableJwks",
      "name": "@farthershore/backend/testing.unreachableJwks",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/signers.d.ts#L69",
      "description": "A JwksClient whose fetch always throws (cold-cache failure).",
      "signature": "export declare function unreachableJwks(): JwksClient__3bf9d241c5e2;",
      "typeReferences": [
        {
          "name": "JwksClient__3bf9d241c5e2",
          "source": "packages/backend/dist/types/core/jwks.d.ts#L43"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.VerificationOutcome",
      "name": "@farthershore/backend/testing.VerificationOutcome",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/traceSink.d.ts#L2",
      "description": "Public export VerificationOutcome; see its declaration and owning guide.",
      "signature": "export type VerificationOutcome = \"verified\" | \"passthrough\" | \"rejected\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.testing.writeDevKeysFile",
      "name": "@farthershore/backend/testing.writeDevKeysFile",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/testing",
      "source": "packages/backend/dist/types/testing/keysFile.d.ts#L16",
      "description": "Write the dev-keys file with 0600 permissions (owner read/write only).",
      "signature": "export declare function writeDevKeysFile(path: string, contents: DevKeysFile): void;",
      "typeReferences": [
        {
          "name": "DevKeysFile",
          "source": "packages/backend/dist/types/testing/keysFile.d.ts#L6"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.createWebhookHandler",
      "name": "@farthershore/backend/webhooks.createWebhookHandler",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L237",
      "description": "Public export createWebhookHandler; see its declaration and owning guide.",
      "signature": "export declare function createWebhookHandler(options: CreateWebhookHandlerOptions): WebhookHandler;",
      "typeReferences": [
        {
          "name": "CreateWebhookHandlerOptions",
          "source": "packages/backend/dist/types/webhooks/index.d.ts#L116"
        },
        {
          "name": "WebhookHandler",
          "source": "packages/backend/dist/types/webhooks/index.d.ts#L218"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.CreateWebhookHandlerOptions",
      "name": "@farthershore/backend/webhooks.CreateWebhookHandlerOptions",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L116",
      "description": "Public export CreateWebhookHandlerOptions; see its declaration and owning guide.",
      "signature": "export interface CreateWebhookHandlerOptions {\n    /** The endpoint's signing secret (`fswh_…`). */\n    secret?: string;\n    /** Several accepted secrets (current first) — use while rolling a rotation. */\n    secrets?: readonly string[];\n    /** Typed per-event handlers. Missing types are acknowledged and ignored. */\n    on: WebhookHandlers;\n    /**\n     * Called for an event `type` this SDK does not know (a newer platform).\n     * Always acknowledged 2xx; use this to log or forward.\n     */\n    onUnknown?: (event: {\n        id: string;\n        type: string;\n        body: unknown;\n    }) => void | Promise<void>;\n    /** Called for every rejected delivery (never throws the request). */\n    onRejected?: (rejection: WebhookRejection) => void;\n    /** Called when a duplicate `webhook-id` is acknowledged without running. */\n    onDuplicate?: (event: {\n        id: string;\n        type: string;\n    }) => void;\n    /**\n     * Delivery-id store for deduplication. Defaults to a bounded in-memory\n     * cache (single instance, `WEBHOOK_DEDUPE_TTL_MS`). Provide a shared store\n     * (Redis, DB) with an atomic `claim`/`settle` lease when the receiver runs on\n     * more than one instance (see {@link WebhookNonceStore}).\n     */\n    nonceStore?: WebhookNonceStore;\n    /**\n     * Largest request body the adapters will buffer (default 1 MiB). Checked\n     * against `Content-Length` and enforced on the stream BEFORE the signature\n     * is verified, so an unauthenticated caller cannot exhaust memory.\n     */\n    maxBodyBytes?: number;\n    /** Override for tests; defaults to `Date.now`. */\n    now?: () => number;\n}",
      "typeReferences": [
        {
          "name": "WebhookHandlers",
          "source": "packages/backend/dist/types/webhooks/index.d.ts#L11"
        },
        {
          "name": "WebhookNonceStore",
          "source": "packages/backend/dist/types/webhooks/index.d.ts#L76"
        },
        {
          "name": "WebhookRejection",
          "source": "packages/backend/dist/types/webhooks/index.d.ts#L15"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.DATA_FIELD_TYPES",
      "name": "@farthershore/backend/webhooks.DATA_FIELD_TYPES",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L247",
      "description": "Runtime mirror of the typed keys in `WebhookEventData` (types.ts). Kept\nSDK-local (no zod in the published bundle) and pinned field-by-field to the\ncontracts schemas (`WEBHOOK_EVENT_DATA_SCHEMAS`) by `contracts-drift.test.ts`\n— a wrong `kind` here (e.g. dropping the `|null` from `amount`) would reject\na legitimately-signed delivery, so the pin proves each kind matches the zod\nfield's null/type behavior. Exported solely so that pin can read it.",
      "signature": "declare const DATA_FIELD_TYPES: Record<Exclude<WebhookEnvelopeType, \"webhook.test\">, Record<string, DataFieldKind>>;",
      "typeReferences": [
        {
          "name": "DataFieldKind",
          "source": "packages/backend/dist/types/webhooks/index.d.ts#L238"
        },
        {
          "name": "WebhookEnvelopeType",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L10"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.DataFieldKind",
      "name": "@farthershore/backend/webhooks.DataFieldKind",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L238",
      "description": "Public export DataFieldKind; see its declaration and owning guide.",
      "signature": "export type DataFieldKind = \"string\" | \"number\" | \"string|null\" | \"number|null\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.isWebhookEnvelopeType",
      "name": "@farthershore/backend/webhooks.isWebhookEnvelopeType",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L9",
      "description": "Public export isWebhookEnvelopeType; see its declaration and owning guide.",
      "signature": "export declare function isWebhookEnvelopeType(value: unknown): value is WebhookEnvelopeType;",
      "typeReferences": [
        {
          "name": "WebhookEnvelopeType",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L10"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.MemoryWebhookNonceStore",
      "name": "@farthershore/backend/webhooks.MemoryWebhookNonceStore",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L94",
      "description": "Default single-instance delivery-id store: an atomic claim/settle lease,\nTTL-bounded, capacity-bounded, and honest about saturation (returns\n`\"saturated\"` rather than lying when it cannot lease a fresh id).",
      "signature": "export declare class MemoryWebhookNonceStore implements WebhookNonceStore {\n    private readonly options;\n    private readonly seen;\n    private tokenSeq;\n    constructor(options?: {\n        ttlMs?: number;\n        leaseMs?: number;\n        maxEntries?: number;\n        now?: () => number;\n    });\n    private horizonFor;\n    claim(id: string): WebhookClaim;\n    settle(id: string, token: string, outcome: \"processed\" | \"release\"): void;\n    get size(): number;\n}",
      "typeReferences": [
        {
          "name": "WebhookClaim",
          "source": "packages/backend/dist/types/webhooks/index.d.ts#L38"
        },
        {
          "name": "WebhookNonceStore",
          "source": "packages/backend/dist/types/webhooks/index.d.ts#L76"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.readBoundedRequestBody",
      "name": "@farthershore/backend/webhooks.readBoundedRequestBody",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L236",
      "description": "Read a Fetch request body without ever buffering more than `limit` bytes:\na declared `Content-Length` over the cap is refused before any allocation,\nand a stream that exceeds it mid-flight is abandoned. Returns `null` when\nthe cap is exceeded.",
      "signature": "export declare function readBoundedRequestBody(request: Request, limit: number): Promise<Uint8Array | null>;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.verifyWebhook",
      "name": "@farthershore/backend/webhooks.verifyWebhook",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L8",
      "description": "Verify one delivery's Standard Webhooks signature + timestamp window. The\nlow-level primitive; `createWebhookHandler` adds dedupe, parsing and routing.",
      "signature": "export declare function verifyWebhook(input: VerifyWebhookInput): WebhookVerifyResult;",
      "typeReferences": [
        {
          "name": "VerifyWebhookInput",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L96"
        },
        {
          "name": "WebhookVerifyResult",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L88"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.VerifyWebhookInput",
      "name": "@farthershore/backend/webhooks.VerifyWebhookInput",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/types.d.ts#L96",
      "description": "Public export VerifyWebhookInput; see its declaration and owning guide.",
      "signature": "export interface VerifyWebhookInput {\n    /** Raw request body, exactly as received. */\n    body: string | Uint8Array;\n    /** Request headers (any case). */\n    headers: Record<string, string | string[] | undefined> | Headers;\n    /**\n     * Accepted signing secrets. Pass `[current, previous]` while you roll a\n     * rotated secret on your side; the platform already dual-signs for 24 h.\n     */\n    secrets: readonly string[];\n    /** Override for tests; defaults to `Date.now()`. */\n    now?: () => number;\n    /** Override for tests; defaults to ±300 s. */\n    toleranceSeconds?: number;\n}",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WEBHOOK_DEDUPE_MAX_ENTRIES",
      "name": "@farthershore/backend/webhooks.WEBHOOK_DEDUPE_MAX_ENTRIES",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L81",
      "description": "Capacity of the default in-memory store (ids retained per TTL window).",
      "signature": "declare const WEBHOOK_DEDUPE_MAX_ENTRIES = 250000;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WEBHOOK_DEDUPE_TTL_MS",
      "name": "@farthershore/backend/webhooks.WEBHOOK_DEDUPE_TTL_MS",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L115",
      "description": "How long a delivery id is remembered. The platform retries a delivery at\n30 s, 5 min and 30 min after the first attempt (≈ 35.5 min horizon), so the\nwindow must outlast the LAST retry plus clock tolerance — a shorter window\nwould let the final retry re-run a handler whose 2xx the platform never saw.",
      "signature": "declare const WEBHOOK_DEDUPE_TTL_MS: number;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WEBHOOK_EVENT_HEADER",
      "name": "@farthershore/backend/webhooks.WEBHOOK_EVENT_HEADER",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/types.d.ts#L82",
      "description": "Public export WEBHOOK_EVENT_HEADER; see its declaration and owning guide.",
      "signature": "declare const WEBHOOK_EVENT_HEADER = \"x-fs-webhook-event\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WEBHOOK_EVENT_NAMES",
      "name": "@farthershore/backend/webhooks.WEBHOOK_EVENT_NAMES",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/types.d.ts#L5",
      "description": "Event names a webhook endpoint can subscribe to (the platform events\ncatalog's webhook-deliverable subset), in catalog order.",
      "signature": "declare const WEBHOOK_EVENT_NAMES: readonly [\"subscription.created\", \"subscription.updated\", \"subscription.canceled\", \"payment.succeeded\", \"payment.failed\", \"entitlement.changed\", \"usage.threshold_reached\"];",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WEBHOOK_ID_HEADER",
      "name": "@farthershore/backend/webhooks.WEBHOOK_ID_HEADER",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/types.d.ts#L79",
      "description": "Header names on the wire (Standard Webhooks + our convenience header).",
      "signature": "declare const WEBHOOK_ID_HEADER = \"webhook-id\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WEBHOOK_INFLIGHT_LEASE_MS",
      "name": "@farthershore/backend/webhooks.WEBHOOK_INFLIGHT_LEASE_MS",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L88",
      "description": "How long an in-flight lease is held before a crashed / hung handler's id\nbecomes reclaimable. Longer than any reasonable handler, shorter than the\nretry horizon, so a genuinely stuck delivery is retried rather than wedged\nas a permanent \"in_flight\".",
      "signature": "declare const WEBHOOK_INFLIGHT_LEASE_MS: number;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WEBHOOK_MAX_BODY_BYTES",
      "name": "@farthershore/backend/webhooks.WEBHOOK_MAX_BODY_BYTES",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L156",
      "description": "Default cap on a delivery body. Platform envelopes are a few KiB.",
      "signature": "declare const WEBHOOK_MAX_BODY_BYTES: number;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WEBHOOK_SECRET_PREFIX",
      "name": "@farthershore/backend/webhooks.WEBHOOK_SECRET_PREFIX",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/types.d.ts#L86",
      "description": "Prefix every platform-minted signing secret carries.",
      "signature": "declare const WEBHOOK_SECRET_PREFIX = \"fswh_\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WEBHOOK_SIGNATURE_HEADER",
      "name": "@farthershore/backend/webhooks.WEBHOOK_SIGNATURE_HEADER",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/types.d.ts#L81",
      "description": "Public export WEBHOOK_SIGNATURE_HEADER; see its declaration and owning guide.",
      "signature": "declare const WEBHOOK_SIGNATURE_HEADER = \"webhook-signature\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WEBHOOK_TEST_EVENT",
      "name": "@farthershore/backend/webhooks.WEBHOOK_TEST_EVENT",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/types.d.ts#L8",
      "description": "The synthetic event a dashboard / CLI \"Send test\" produces.",
      "signature": "declare const WEBHOOK_TEST_EVENT: \"webhook.test\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WEBHOOK_TIMESTAMP_HEADER",
      "name": "@farthershore/backend/webhooks.WEBHOOK_TIMESTAMP_HEADER",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/types.d.ts#L80",
      "description": "Public export WEBHOOK_TIMESTAMP_HEADER; see its declaration and owning guide.",
      "signature": "declare const WEBHOOK_TIMESTAMP_HEADER = \"webhook-timestamp\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WEBHOOK_TIMESTAMP_TOLERANCE_SECONDS",
      "name": "@farthershore/backend/webhooks.WEBHOOK_TIMESTAMP_TOLERANCE_SECONDS",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/types.d.ts#L84",
      "description": "Accept deliveries within ±this many seconds of the receiver's clock.",
      "signature": "declare const WEBHOOK_TIMESTAMP_TOLERANCE_SECONDS = 300;",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WebhookClaim",
      "name": "@farthershore/backend/webhooks.WebhookClaim",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L38",
      "description": "The result of `claim`. A `token` is present ONLY for a \"fresh\" claim — it\nidentifies THIS lease so `settle` cannot act on a lease that has since been\nreclaimed by another delivery (see {@link WebhookNonceStore}).",
      "signature": "export interface WebhookClaim {\n    outcome: WebhookClaimOutcome;\n    token?: string;\n}",
      "typeReferences": [
        {
          "name": "WebhookClaimOutcome",
          "source": "packages/backend/dist/types/webhooks/index.d.ts#L34"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WebhookClaimOutcome",
      "name": "@farthershore/backend/webhooks.WebhookClaimOutcome",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L34",
      "description": "Delivery-id store for deduplication. Unlike the request verifier's\n`NonceStore`, a webhook store leases an id: `claim` before the handler and\n`settle` after, so a thrown handler releases the id and the platform's retry\n(same `webhook-id`) re-runs it instead of being acknowledged as a duplicate,\nwhile a concurrent retry of an in-flight id never double-runs the handler.\nSee {@link WebhookNonceStore}.",
      "signature": "export type WebhookClaimOutcome = \"fresh\" | \"in_flight\" | \"processed\" | \"saturated\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WebhookEnvelope",
      "name": "@farthershore/backend/webhooks.WebhookEnvelope",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/types.d.ts#L68",
      "description": "The JSON body of every delivery. `id` equals the `webhook-id` header.",
      "signature": "export type WebhookEnvelope<T extends WebhookEnvelopeType = WebhookEnvelopeType> = T extends WebhookEnvelopeType ? {\n    id: string;\n    type: T;\n    /** ISO 8601 — when the event was recorded (stable across retries). */\n    createdAt: string;\n    businessId: string;\n    /** `null` = production. */\n    environmentId: string | null;\n    data: WebhookEventData[T];\n} : never;",
      "typeReferences": [
        {
          "name": "WebhookEnvelopeType",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L10"
        },
        {
          "name": "WebhookEventData",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L16"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WebhookEnvelopeType",
      "name": "@farthershore/backend/webhooks.WebhookEnvelopeType",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/types.d.ts#L10",
      "description": "Every `type` a delivery envelope can carry.",
      "signature": "export type WebhookEnvelopeType = WebhookEventName | typeof WEBHOOK_TEST_EVENT;",
      "typeReferences": [
        {
          "name": "WEBHOOK_TEST_EVENT",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L8"
        },
        {
          "name": "WebhookEventName",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L6"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WebhookEventData",
      "name": "@farthershore/backend/webhooks.WebhookEventData",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/types.d.ts#L16",
      "description": "Per-event `data`. The keys listed are what the platform's producers carry\ntoday; extra keys pass through untouched (automation rules may attach\nbuilder-authored fields), so every shape is open.",
      "signature": "export interface WebhookEventData {\n    \"subscription.created\": {\n        subscriptionId?: string;\n        compiledPlanId?: string;\n        [key: string]: unknown;\n    };\n    \"subscription.updated\": {\n        subscriptionId?: string;\n        /** Producer-specific change reason, e.g. `plan_changed`, `trial_ending`. */\n        reason?: string;\n        lifecycle?: string;\n        compiledPlanId?: string;\n        [key: string]: unknown;\n    };\n    \"subscription.canceled\": {\n        subscriptionId?: string;\n        reason?: string;\n        lifecycle?: string;\n        [key: string]: unknown;\n    };\n    \"payment.succeeded\": WebhookPaymentData__dc4de7029bac;\n    \"payment.failed\": WebhookPaymentData__dc4de7029bac;\n    \"entitlement.changed\": {\n        compiledPlanId?: string;\n        lineageId?: string;\n        status?: string;\n        [key: string]: unknown;\n    };\n    \"usage.threshold_reached\": {\n        subscriptionId?: string;\n        subscriberId?: string;\n        limitId?: string;\n        threshold?: number;\n        windowStartMs?: number;\n        windowEndMs?: number;\n        [key: string]: unknown;\n    };\n    \"webhook.test\": {\n        businessId: string;\n        sentAt: string;\n        [key: string]: unknown;\n    };\n}",
      "typeReferences": [
        {
          "name": "WebhookPaymentData__dc4de7029bac",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L59"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WebhookEventHandler",
      "name": "@farthershore/backend/webhooks.WebhookEventHandler",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L10",
      "description": "Public export WebhookEventHandler; see its declaration and owning guide.",
      "signature": "export type WebhookEventHandler<T extends WebhookEnvelopeType> = (event: WebhookEnvelope<T>) => void | Promise<void>;",
      "typeReferences": [
        {
          "name": "WebhookEnvelope",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L68"
        },
        {
          "name": "WebhookEnvelopeType",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L10"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WebhookEventName",
      "name": "@farthershore/backend/webhooks.WebhookEventName",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/types.d.ts#L6",
      "description": "Public export WebhookEventName; see its declaration and owning guide.",
      "signature": "export type WebhookEventName = (typeof WEBHOOK_EVENT_NAMES)[number];",
      "typeReferences": [
        {
          "name": "WEBHOOK_EVENT_NAMES",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L5"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WebhookExpressRequestLike",
      "name": "@farthershore/backend/webhooks.WebhookExpressRequestLike",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L208",
      "description": "Minimal Express-shaped types so we don't hard-depend on",
      "signature": "export type WebhookExpressRequestLike = {\n    headers: Record<string, string | string[] | undefined>;\n    /** Raw body bytes when captured by a raw parser (`express.raw()`). */\n    body?: unknown;\n    rawBody?: Buffer | Uint8Array;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WebhookExpressResponseLike",
      "name": "@farthershore/backend/webhooks.WebhookExpressResponseLike",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L214",
      "description": "Public export WebhookExpressResponseLike; see its declaration and owning guide.",
      "signature": "export type WebhookExpressResponseLike = {\n    status(code: number): WebhookExpressResponseLike;\n    json(body: unknown): unknown;\n};",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WebhookHandleInput",
      "name": "@farthershore/backend/webhooks.WebhookHandleInput",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L202",
      "description": "Public export WebhookHandleInput; see its declaration and owning guide.",
      "signature": "export interface WebhookHandleInput {\n    /** Raw request body, exactly as received. */\n    body: string | Uint8Array;\n    headers: Record<string, string | string[] | undefined> | Headers;\n}",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WebhookHandleOutcome",
      "name": "@farthershore/backend/webhooks.WebhookHandleOutcome",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L157",
      "description": "Public export WebhookHandleOutcome; see its declaration and owning guide.",
      "signature": "export type WebhookHandleOutcome = {\n    status: 200;\n    kind: \"handled\";\n    id: string;\n    type: WebhookEnvelopeType;\n} | {\n    status: 200;\n    kind: \"ignored\";\n    id: string;\n    type: WebhookEnvelopeType;\n} | {\n    status: 200;\n    kind: \"unknown_type\";\n    id: string;\n    type: string;\n} | {\n    status: 200;\n    kind: \"duplicate\";\n    id: string;\n    type: string;\n} | {\n    status: 400 | 401;\n    kind: \"rejected\";\n    rejection: WebhookRejection;\n} | {\n    status: 413;\n    kind: \"rejected\";\n    rejection: WebhookRejection;\n} | {\n    status: 503;\n    kind: \"store_unavailable\";\n    id: string;\n    type: string;\n} | {\n    status: 503;\n    kind: \"in_flight\";\n    id: string;\n    type: string;\n} | {\n    status: 500;\n    kind: \"handler_error\";\n    id: string;\n    type: string;\n    error: unknown;\n};",
      "typeReferences": [
        {
          "name": "WebhookEnvelopeType",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L10"
        },
        {
          "name": "WebhookRejection",
          "source": "packages/backend/dist/types/webhooks/index.d.ts#L15"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WebhookHandler",
      "name": "@farthershore/backend/webhooks.WebhookHandler",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L218",
      "description": "Public export WebhookHandler; see its declaration and owning guide.",
      "signature": "export interface WebhookHandler {\n    /** Framework-neutral: verify, dedupe, parse, route. Never throws. */\n    handle(input: WebhookHandleInput): Promise<WebhookHandleOutcome>;\n    /** Fetch-API handler (Next.js route handlers, Hono, Bun, Workers…). */\n    fetch(request: Request): Promise<Response>;\n    /**\n     * Express handler. Mount AFTER a raw-body parser\n     * (`express.raw({ type: \"application/json\" })`) or set `req.rawBody`; a pre-parsed\n     * JSON body cannot be verified and is rejected 400.\n     */\n    express(): (req: WebhookExpressRequestLike, res: WebhookExpressResponseLike) => Promise<void>;\n}",
      "typeReferences": [
        {
          "name": "WebhookExpressRequestLike",
          "source": "packages/backend/dist/types/webhooks/index.d.ts#L208"
        },
        {
          "name": "WebhookExpressResponseLike",
          "source": "packages/backend/dist/types/webhooks/index.d.ts#L214"
        },
        {
          "name": "WebhookHandleInput",
          "source": "packages/backend/dist/types/webhooks/index.d.ts#L202"
        },
        {
          "name": "WebhookHandleOutcome",
          "source": "packages/backend/dist/types/webhooks/index.d.ts#L157"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WebhookHandlers",
      "name": "@farthershore/backend/webhooks.WebhookHandlers",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L11",
      "description": "Public export WebhookHandlers; see its declaration and owning guide.",
      "signature": "export type WebhookHandlers = {\n    [T in WebhookEnvelopeType]?: WebhookEventHandler<T>;\n};",
      "typeReferences": [
        {
          "name": "WebhookEnvelopeType",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L10"
        },
        {
          "name": "WebhookEventHandler",
          "source": "packages/backend/dist/types/webhooks/index.d.ts#L10"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WebhookNonceStore",
      "name": "@farthershore/backend/webhooks.WebhookNonceStore",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L76",
      "description": "Delivery-id store protocol — an ATOMIC, OWNERSHIP-FENCED claim/settle lease.\n\nThe earlier split `has(id)` … handler … `remember(id)` had a check-then-act\nrace: two concurrent deliveries of the SAME `webhook-id` could BOTH observe\n`has(id) === false` and both run a payment / lifecycle handler. An atomic\nclaim closes that window.\n\n  `claim(id)` is taken BEFORE the handler:\n    - \"fresh\"      → unseen; the caller HOLDS the lease (identified by the\n                     returned `token`) and must settle() with that token.\n    - \"in_flight\"  → another delivery of this id is mid-handler; the caller\n                     answers 503 and NEVER runs the handler. The platform\n                     retries; that retry sees \"processed\" once the first wins.\n    - \"processed\"  → already handled to success; answer 200 without re-running.\n    - \"saturated\"  → the store cannot retain the id; the caller runs the\n                     handler best-effort WITHOUT a lease (at-least-once holds).\n\n  `settle(id, token, outcome)` resolves a \"fresh\" claim, and is a NO-OP unless\n  `token` still identifies the live lease:\n    - \"processed\"  → keep the id so future retries dedupe.\n    - \"release\"    → drop the lease so the platform's retry re-runs the handler.\n\nThe token fences the case where a handler outlives the in-flight lease TTL:\nthe id becomes reclaimable, a retry re-leases it with a NEW token, and the\noriginal handler's late `settle` (with the OLD token) is ignored rather than\ndeleting or overwriting the replacement's lease. (A handler that exceeds the\nlease TTL still degrades to at-least-once — the receiver dedupes on\nwebhook-id — but never corrupts another delivery's lease.)\n\nA shared store (Redis, DB) implements `claim` as an atomic upsert stamping a\nunique token, a short in-flight lease TTL (so a crashed handler's id becomes\nreclaimable) and a longer processed TTL of at least `WEBHOOK_DEDUPE_TTL_MS`.",
      "signature": "export interface WebhookNonceStore {\n    claim(id: string): WebhookClaim | Promise<WebhookClaim>;\n    settle(id: string, token: string, outcome: \"processed\" | \"release\"): void | Promise<void>;\n}",
      "typeReferences": [
        {
          "name": "WebhookClaim",
          "source": "packages/backend/dist/types/webhooks/index.d.ts#L38"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WebhookRejection",
      "name": "@farthershore/backend/webhooks.WebhookRejection",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/index.d.ts#L15",
      "description": "Why a delivery was rejected (401 / 400) — surfaced through `onRejected`.",
      "signature": "export type WebhookRejection = {\n    reason: WebhookVerifyFailure;\n} | {\n    reason: \"invalid_json\";\n} | {\n    reason: \"invalid_envelope\";\n    detail: string;\n} | {\n    reason: \"payload_too_large\";\n    limitBytes: number;\n};",
      "typeReferences": [
        {
          "name": "WebhookVerifyFailure",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L87"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WebhookVerifyFailure",
      "name": "@farthershore/backend/webhooks.WebhookVerifyFailure",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/types.d.ts#L87",
      "description": "Public export WebhookVerifyFailure; see its declaration and owning guide.",
      "signature": "export type WebhookVerifyFailure = \"missing_headers\" | \"invalid_timestamp\" | \"timestamp_out_of_tolerance\" | \"no_matching_signature\";",
      "typeReferences": [],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.backend.webhooks.WebhookVerifyResult",
      "name": "@farthershore/backend/webhooks.WebhookVerifyResult",
      "kind": "sdk",
      "collection": "backend-sdk",
      "page": "generated/backend-sdk/webhooks",
      "source": "packages/backend/dist/types/webhooks/types.d.ts#L88",
      "description": "Public export WebhookVerifyResult; see its declaration and owning guide.",
      "signature": "export type WebhookVerifyResult = {\n    ok: true;\n    id: string;\n    timestamp: number;\n} | {\n    ok: false;\n    reason: WebhookVerifyFailure;\n};",
      "typeReferences": [
        {
          "name": "WebhookVerifyFailure",
          "source": "packages/backend/dist/types/webhooks/types.d.ts#L87"
        }
      ],
      "guide": "reference/backend-sdk"
    },
    {
      "id": "sdk.business.codegen.irToValueModelSource",
      "name": "@farthershore/business/codegen.irToValueModelSource",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/codegen",
      "source": "packages/business/dist/types/codegen/index.d.ts#L7",
      "description": "Generate the canonical functional Business SDK program for a value-model IR.\nEvery declaration is assigned one stable identifier and all relationships\nreuse those branded refs; no stringly-typed cross-reference is emitted.",
      "signature": "export declare function irToValueModelSource(ir: ManifestIrDocument__3d04599c0d50): string;",
      "typeReferences": [
        {
          "name": "ManifestIrDocument__3d04599c0d50",
          "source": "packages/business/dist/types/ir-types.d.ts#L425"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.AuthoredMoneyAmount",
      "name": "@farthershore/business.AuthoredMoneyAmount",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L230",
      "description": "Public export AuthoredMoneyAmount; see its declaration and owning guide.",
      "signature": "export type AuthoredMoneyAmount = Readonly<MoneyAmount__51964157493a & CommerceBrand__7b1b990b7c90<\"money_amount\">>;",
      "typeReferences": [
        {
          "name": "CommerceBrand__7b1b990b7c90",
          "source": "packages/business/dist/types/commerce/types.d.ts#L8"
        },
        {
          "name": "MoneyAmount__51964157493a",
          "source": "packages/business/dist/types/value-model/money.d.ts#L11"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.backend",
      "name": "@farthershore/business.backend",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/declarations.d.ts#L66",
      "description": "Public export backend; see its declaration and owning guide.",
      "signature": "export declare function backend(id: string, options?: FunctionalBackendOptions): BackendRef;",
      "typeReferences": [
        {
          "name": "BackendRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L42"
        },
        {
          "name": "FunctionalBackendOptions",
          "source": "packages/business/dist/types/value-model/declarations.d.ts#L12"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.BackendDefinitionJson",
      "name": "@farthershore/business.BackendDefinitionJson",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L304",
      "description": "Public export BackendDefinitionJson; see its declaration and owning guide.",
      "signature": "export type BackendDefinitionJson = {\n    name?: string;\n    slug?: string;\n    transport?: {\n        mode?: BackendTransportModeJson;\n        runner?: BackendRunnerJson;\n    };\n    /**\n     * Gateway->backend request signing. Emitted for every declared backend; the\n     * builder helper defaults omission to `{ required: true }` (HARD default).\n     */\n    verification?: {\n        required?: boolean;\n    };\n    /** Meter allow-list. Omitted = all business meters allowed. */\n    meters?: string[];\n    /** Marks the default backend when a business declares more than one. */\n    default?: boolean;\n};",
      "typeReferences": [
        {
          "name": "BackendRunnerJson",
          "source": "packages/business/dist/types/ir-types.d.ts#L303"
        },
        {
          "name": "BackendTransportModeJson",
          "source": "packages/business/dist/types/ir-types.d.ts#L302"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.BackendRef",
      "name": "@farthershore/business.BackendRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/refs.d.ts#L42",
      "description": "Public export BackendRef; see its declaration and owning guide.",
      "signature": "export type BackendRef = DeclarationRef__2a230f417174<\"backend\">;",
      "typeReferences": [
        {
          "name": "DeclarationRef__2a230f417174",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L5"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.BackendRunnerJson",
      "name": "@farthershore/business.BackendRunnerJson",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L303",
      "description": "Public export BackendRunnerJson; see its declaration and owning guide.",
      "signature": "export type BackendRunnerJson = \"embedded\" | \"sidecar\";",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.BackendTransportModeJson",
      "name": "@farthershore/business.BackendTransportModeJson",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L302",
      "description": "Public export BackendTransportModeJson; see its declaration and owning guide.",
      "signature": "export type BackendTransportModeJson = \"direct\" | \"tunnel\";",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.BoundRateRef",
      "name": "@farthershore/business.BoundRateRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L63",
      "description": "Public export BoundRateRef; see its declaration and owning guide.",
      "signature": "export type BoundRateRef = Readonly<{\n    kind: \"bound_catalog_rate\";\n    rate?: ExactRate;\n    tiers?: ExactCatalogTiers;\n    quote?: ExactQuoteBounds__e9cf817917c1;\n    measure: MeasureRef;\n    item?: ModelRef;\n    where: readonly DimensionValueRef[];\n} & CommerceBrand__7b1b990b7c90<\"bound_catalog_rate\">>;",
      "typeReferences": [
        {
          "name": "CommerceBrand__7b1b990b7c90",
          "source": "packages/business/dist/types/commerce/types.d.ts#L8"
        },
        {
          "name": "DimensionValueRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L26"
        },
        {
          "name": "ExactCatalogTiers",
          "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L5"
        },
        {
          "name": "ExactQuoteBounds__e9cf817917c1",
          "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L13"
        },
        {
          "name": "ExactRate",
          "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L1"
        },
        {
          "name": "MeasureRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L16"
        },
        {
          "name": "ModelRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L42"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.business",
      "name": "@farthershore/business.business",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L21",
      "description": "Public export business; see its declaration and owning guide.",
      "signature": "declare const business: BusinessFunction__7e4f3d5c2657;",
      "typeReferences": [
        {
          "name": "BusinessFunction__7e4f3d5c2657",
          "source": "packages/business/dist/types/commerce/types.d.ts#L229"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.BusinessSpecJson",
      "name": "@farthershore/business.BusinessSpecJson",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L395",
      "description": "Public export BusinessSpecJson; see its declaration and owning guide.",
      "signature": "export type BusinessSpecJson = {\n    business: BusinessBlockJson__a04690090fc8;\n    gateway?: {\n        authHeader?: string;\n        upstreamAuth?: {\n            type: \"none\" | \"static_bearer\";\n            token?: string;\n        };\n    };\n    metering?: {\n        meters?: MeterDefinitionJson[];\n        billOn4xx?: boolean;\n    };\n    /** BYO-Backend V1 — first-class backend declarations keyed by backend id.\n     *  Emitted only when at least one backend is declared (so single-backend /\n     *  no-backend products keep their pre-BYOB irHash). */\n    backend?: Record<string, BackendDefinitionJson>;\n    resources?: CountedResourceJson__90d0b7f16d08[];\n    /** Repo-owned custom permission subjects. Emitted (sorted by subject) only\n     *  when at least one permission-carrying group is declared, so businesses\n     *  without permission groups keep their pre-cutover irHash. */\n    permissions?: PermissionSubjectJson__d124b4a2259d[];\n    policies?: BusinessPoliciesJson__0d51efe66230;\n    customer_context?: BusinessCustomerContextJson__e5b9539124a5;\n    plans?: PlanSpecJson[];\n    /** Advanced/internal platform-schema blocks (usage, billing,\n     *  environments, lifecycle, ephemeral, …) are validated by the platform\n     *  schema but are not authorable through the functional SDK. */\n    [key: string]: unknown;\n};",
      "typeReferences": [
        {
          "name": "BackendDefinitionJson",
          "source": "packages/business/dist/types/ir-types.d.ts#L304"
        },
        {
          "name": "BusinessBlockJson__a04690090fc8",
          "source": "packages/business/dist/types/ir-types.d.ts#L383"
        },
        {
          "name": "BusinessCustomerContextJson__e5b9539124a5",
          "source": "packages/business/dist/types/ir-types.d.ts#L375"
        },
        {
          "name": "BusinessPoliciesJson__0d51efe66230",
          "source": "packages/business/dist/types/ir-types.d.ts#L364"
        },
        {
          "name": "CountedResourceJson__90d0b7f16d08",
          "source": "packages/business/dist/types/ir-types.d.ts#L355"
        },
        {
          "name": "MeterDefinitionJson",
          "source": "packages/business/dist/types/ir-types.d.ts#L4"
        },
        {
          "name": "PermissionSubjectJson__d124b4a2259d",
          "source": "packages/business/dist/types/ir-types.d.ts#L389"
        },
        {
          "name": "PlanSpecJson",
          "source": "packages/business/dist/types/ir-types.d.ts#L113"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.CacheProfile",
      "name": "@farthershore/business.CacheProfile",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L3",
      "description": "Public export CacheProfile; see its declaration and owning guide.",
      "signature": "export type CacheProfile = \"long\" | \"short\" | \"blocking\";",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.canonicalIrJson",
      "name": "@farthershore/business.canonicalIrJson",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/validate.d.ts#L68",
      "description": "Public export canonicalIrJson; see its declaration and owning guide.",
      "signature": "export declare function canonicalIrJson(ir: unknown): string;",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.CatalogSelectorRef",
      "name": "@farthershore/business.CatalogSelectorRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L52",
      "description": "Public export CatalogSelectorRef; see its declaration and owning guide.",
      "signature": "export type CatalogSelectorRef = ModelRef | DimensionValueRef;",
      "typeReferences": [
        {
          "name": "DimensionValueRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L26"
        },
        {
          "name": "ModelRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L42"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.CatalogTierInput",
      "name": "@farthershore/business.CatalogTierInput",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L12",
      "description": "One authored tier bracket: `upTo` is the inclusive cumulative upper bound; `null` = open-ended final tier.",
      "signature": "export type CatalogTierInput = Readonly<{\n    upTo: number | null;\n    rate: UnboundRateRef;\n}>;",
      "typeReferences": [
        {
          "name": "UnboundRateRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L53"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.commerceSnapshotOf",
      "name": "@farthershore/business.commerceSnapshotOf",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L22",
      "description": "Public export commerceSnapshotOf; see its declaration and owning guide.",
      "signature": "export declare function commerceSnapshotOf(businessValue: CompiledBusiness__671c1daa22b7): CommerceAuthoringSnapshot__60159f2d0d70 | null;",
      "typeReferences": [
        {
          "name": "CommerceAuthoringSnapshot__60159f2d0d70",
          "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L92"
        },
        {
          "name": "CompiledBusiness__671c1daa22b7",
          "source": "packages/business/dist/types/business.d.ts#L7"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.dimension",
      "name": "@farthershore/business.dimension",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L4",
      "description": "Public export dimension; see its declaration and owning guide.",
      "signature": "export declare function dimension(key: string, options?: Readonly<{\n    values?: readonly string[];\n}>): DimensionRef;",
      "typeReferences": [
        {
          "name": "DimensionRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L36"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.DimensionConditionRef",
      "name": "@farthershore/business.DimensionConditionRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L31",
      "description": "Public export DimensionConditionRef; see its declaration and owning guide.",
      "signature": "export type DimensionConditionRef = Readonly<{\n    kind: \"dimension_condition\";\n    dimension: DimensionRef;\n    value: string;\n} & CommerceBrand__7b1b990b7c90<\"dimension_condition\">>;",
      "typeReferences": [
        {
          "name": "CommerceBrand__7b1b990b7c90",
          "source": "packages/business/dist/types/commerce/types.d.ts#L8"
        },
        {
          "name": "DimensionRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L36"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.DimensionRef",
      "name": "@farthershore/business.DimensionRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L36",
      "description": "Public export DimensionRef; see its declaration and owning guide.",
      "signature": "export type DimensionRef = Readonly<{\n    kind: \"dimension\";\n    key: string;\n    value(value: string): DimensionValueRef;\n    is(value: string): DimensionConditionRef;\n} & CommerceBrand__7b1b990b7c90<\"dimension\">>;",
      "typeReferences": [
        {
          "name": "CommerceBrand__7b1b990b7c90",
          "source": "packages/business/dist/types/commerce/types.d.ts#L8"
        },
        {
          "name": "DimensionConditionRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L31"
        },
        {
          "name": "DimensionValueRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L26"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.DimensionValueRef",
      "name": "@farthershore/business.DimensionValueRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L26",
      "description": "Public export DimensionValueRef; see its declaration and owning guide.",
      "signature": "export type DimensionValueRef = Readonly<{\n    kind: \"dimension_value\";\n    dimension: DimensionRef;\n    value: string;\n} & CommerceBrand__7b1b990b7c90<\"dimension_value\">>;",
      "typeReferences": [
        {
          "name": "CommerceBrand__7b1b990b7c90",
          "source": "packages/business/dist/types/commerce/types.d.ts#L8"
        },
        {
          "name": "DimensionRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L36"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.disclosure",
      "name": "@farthershore/business.disclosure",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L59",
      "description": "Public export disclosure; see its declaration and owning guide.",
      "signature": "declare const disclosure: Readonly<{\n    opaque: DisclosureRef;\n    transparent: DisclosureRef;\n}>;",
      "typeReferences": [
        {
          "name": "DisclosureRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L118"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.DisclosureRef",
      "name": "@farthershore/business.DisclosureRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L118",
      "description": "Public export DisclosureRef; see its declaration and owning guide.",
      "signature": "export type DisclosureRef = Readonly<{\n    kind: \"disclosure\";\n    disclosure: \"opaque\" | \"transparent\";\n} & CommerceBrand__7b1b990b7c90<\"disclosure\">>;",
      "typeReferences": [
        {
          "name": "CommerceBrand__7b1b990b7c90",
          "source": "packages/business/dist/types/commerce/types.d.ts#L8"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.display",
      "name": "@farthershore/business.display",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L54",
      "description": "Public export display; see its declaration and owning guide.",
      "signature": "declare const display: Readonly<{\n    multiplier(options: Readonly<{\n        factor: number;\n    }>): MultiplierDisplayRef;\n}>;",
      "typeReferences": [
        {
          "name": "MultiplierDisplayRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L110"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.ExactCatalogTiers",
      "name": "@farthershore/business.ExactCatalogTiers",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L5",
      "description": "Public export ExactCatalogTiers; see its declaration and owning guide.",
      "signature": "export type ExactCatalogTiers = Readonly<{\n    strategy: \"graduated\" | \"volume_retroactive\";\n    tiers: readonly Readonly<{\n        upTo: string | null;\n        rate: ExactRate;\n    }>[];\n}>;",
      "typeReferences": [
        {
          "name": "ExactRate",
          "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L1"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.ExactRate",
      "name": "@farthershore/business.ExactRate",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L1",
      "description": "Public export ExactRate; see its declaration and owning guide.",
      "signature": "export type ExactRate = Readonly<{\n    num: string;\n    den: string;\n}>;",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.exhaustion",
      "name": "@farthershore/business.exhaustion",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L67",
      "description": "Public export exhaustion; see its declaration and owning guide.",
      "signature": "declare const exhaustion: Readonly<{\n    block: ExhaustionRef;\n    overage(binding: PricingBindingRef): ExhaustionRef;\n}>;",
      "typeReferences": [
        {
          "name": "ExhaustionRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L122"
        },
        {
          "name": "PricingBindingRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L97"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.ExhaustionRef",
      "name": "@farthershore/business.ExhaustionRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L122",
      "description": "Public export ExhaustionRef; see its declaration and owning guide.",
      "signature": "export type ExhaustionRef = Readonly<{\n    kind: \"exhaustion\";\n    behavior: \"block\" | \"overage\";\n} & CommerceBrand__7b1b990b7c90<\"exhaustion\">>;",
      "typeReferences": [
        {
          "name": "CommerceBrand__7b1b990b7c90",
          "source": "packages/business/dist/types/commerce/types.d.ts#L8"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.free",
      "name": "@farthershore/business.free",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/money.d.ts#L31",
      "description": "The zero recurring price. Only meaningful on a `plan.kind.free` plan,\nwhere it is optional (a free plan needs no price control at all); every\nother kind states its price with `money.usd(...)`.",
      "signature": "export declare function free(): AuthoredPrice__fa4522a263d6;",
      "typeReferences": [
        {
          "name": "AuthoredPrice__fa4522a263d6",
          "source": "packages/business/dist/types/value-model/money.d.ts#L4"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.frontendIntegration",
      "name": "@farthershore/business.frontendIntegration",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/declarations.d.ts#L67",
      "description": "Public export frontendIntegration; see its declaration and owning guide.",
      "signature": "export declare function frontendIntegration(id: string, options: FrontendIntegrationOptions): FrontendIntegrationRef;",
      "typeReferences": [
        {
          "name": "FrontendIntegrationOptions",
          "source": "packages/business/dist/types/value-model/declarations.d.ts#L43"
        },
        {
          "name": "FrontendIntegrationRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L43"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.FrontendIntegrationInjectionJson",
      "name": "@farthershore/business.FrontendIntegrationInjectionJson",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L159",
      "description": "Public export FrontendIntegrationInjectionJson; see its declaration and owning guide.",
      "signature": "export type FrontendIntegrationInjectionJson = {\n    secretRef: string;\n    location: \"header\";\n    name: string;\n    template: \"{value}\" | \"Bearer {value}\";\n} | {\n    secretRef: string;\n    location: \"query\";\n    name: string;\n};",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.FrontendIntegrationOperationJson",
      "name": "@farthershore/business.FrontendIntegrationOperationJson",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L152",
      "description": "Public export FrontendIntegrationOperationJson; see its declaration and owning guide.",
      "signature": "export type FrontendIntegrationOperationJson = {\n    method: FrontendIntegrationMethodJson__404791a522ea;\n    path: string;\n    headers: string[];\n    query: string[];\n    body: FrontendIntegrationBodyJson__412664c4c97a;\n};",
      "typeReferences": [
        {
          "name": "FrontendIntegrationBodyJson__412664c4c97a",
          "source": "packages/business/dist/types/ir-types.d.ts#L142"
        },
        {
          "name": "FrontendIntegrationMethodJson__404791a522ea",
          "source": "packages/business/dist/types/ir-types.d.ts#L141"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.FrontendIntegrationOptions",
      "name": "@farthershore/business.FrontendIntegrationOptions",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/declarations.d.ts#L43",
      "description": "Public export FrontendIntegrationOptions; see its declaration and owning guide.",
      "signature": "export type FrontendIntegrationOptions = Omit<FrontendIntegrationSpecJson, \"id\" | \"request\" | \"response\"> & {\n    request: {\n        operations: ReadonlyArray<Omit<FrontendIntegrationSpecJson[\"request\"][\"operations\"][number], \"headers\" | \"query\" | \"body\"> & {\n            headers?: readonly string[];\n            query?: readonly string[];\n            body: FrontendIntegrationBodyOptions__69124a73fbef;\n        }>;\n    };\n    response: Omit<FrontendIntegrationSpecJson[\"response\"], \"contentTypes\" | \"jsonPointers\" | \"responseHeaders\"> & {\n        contentTypes: readonly string[];\n        jsonPointers: readonly string[];\n        responseHeaders?: readonly string[];\n    };\n    /** Integration calls are always platform-only and cannot carry customer economics. */\n    costs?: never;\n    reports?: never;\n    usagePolicy?: never;\n    creates?: never;\n    deletes?: never;\n};",
      "typeReferences": [
        {
          "name": "FrontendIntegrationBodyOptions__69124a73fbef",
          "source": "packages/business/dist/types/value-model/declarations.d.ts#L36"
        },
        {
          "name": "FrontendIntegrationSpecJson",
          "source": "packages/business/dist/types/ir-types.d.ts#L170"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.FrontendIntegrationRef",
      "name": "@farthershore/business.FrontendIntegrationRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/refs.d.ts#L43",
      "description": "Public export FrontendIntegrationRef; see its declaration and owning guide.",
      "signature": "export type FrontendIntegrationRef = DeclarationRef__2a230f417174<\"frontend_integration\">;",
      "typeReferences": [
        {
          "name": "DeclarationRef__2a230f417174",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L5"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.FrontendIntegrationSpecJson",
      "name": "@farthershore/business.FrontendIntegrationSpecJson",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L170",
      "description": "Secret-value-free mirror of contracts' FrontendIntegrationSpec.",
      "signature": "export type FrontendIntegrationSpecJson = {\n    id: string;\n    upstream: string;\n    request: {\n        operations: FrontendIntegrationOperationJson[];\n    };\n    injection: FrontendIntegrationInjectionJson;\n    response: {\n        kind: \"json\";\n        contentTypes: string[];\n        maxBytes: number;\n        jsonPointers: string[];\n        responseHeaders: string[];\n    };\n};",
      "typeReferences": [
        {
          "name": "FrontendIntegrationInjectionJson",
          "source": "packages/business/dist/types/ir-types.d.ts#L159"
        },
        {
          "name": "FrontendIntegrationOperationJson",
          "source": "packages/business/dist/types/ir-types.d.ts#L152"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.FunctionalBackendOptions",
      "name": "@farthershore/business.FunctionalBackendOptions",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/declarations.d.ts#L12",
      "description": "Public export FunctionalBackendOptions; see its declaration and owning guide.",
      "signature": "export type FunctionalBackendOptions = Omit<BackendOptions__63ffee6039bc, \"meters\"> & {\n    meters?: MeterRef[];\n};",
      "typeReferences": [
        {
          "name": "BackendOptions__63ffee6039bc",
          "source": "packages/business/dist/types/backend.d.ts#L8"
        },
        {
          "name": "MeterRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L26"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.FunctionalBusinessOptions",
      "name": "@farthershore/business.FunctionalBusinessOptions",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/declarations.d.ts#L8",
      "description": "Public export FunctionalBusinessOptions; see its declaration and owning guide.",
      "signature": "export type FunctionalBusinessOptions = BusinessOptions__bbd5a4a3592b;",
      "typeReferences": [
        {
          "name": "BusinessOptions__bbd5a4a3592b",
          "source": "packages/business/dist/types/business.d.ts#L35"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.FunctionalGroupOptions",
      "name": "@farthershore/business.FunctionalGroupOptions",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/declarations.d.ts#L89",
      "description": "Public export FunctionalGroupOptions; see its declaration and owning guide.",
      "signature": "export type FunctionalGroupOptions = {\n    permission?: FunctionalGroupPermissionOptions;\n};",
      "typeReferences": [
        {
          "name": "FunctionalGroupPermissionOptions",
          "source": "packages/business/dist/types/value-model/declarations.d.ts#L84"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.FunctionalGroupPermissionOptions",
      "name": "@farthershore/business.FunctionalGroupPermissionOptions",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/declarations.d.ts#L84",
      "description": "Repo-owned raw permission vocabulary — the `permission` option of\n`fs.group`. This declaration never creates a role, chooses a default role,\nor assigns a user. Each subscribing organization composes these permissions\ninto its own CUSTOM roles at runtime.\n\nDeclaring it makes the group id a custom permission subject: member routes\nare gated at the gateway by `<id>:read|write`, and `verbs` are the EXTRA\ngrant-by-exact-name domain verbs the builder's own backend checks\n(`read`/`write` are implied and may not be re-declared). Collisions with\nthe managed / platform permission vocabularies are rejected by the\nplatform compiler's validate pass.",
      "signature": "export type FunctionalGroupPermissionOptions = {\n    verbs?: readonly string[];\n    escalatory?: readonly string[];\n    description?: string;\n};",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.FunctionalMeterOptions",
      "name": "@farthershore/business.FunctionalMeterOptions",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/declarations.d.ts#L15",
      "description": "Public export FunctionalMeterOptions; see its declaration and owning guide.",
      "signature": "export type FunctionalMeterOptions = Omit<MeterOptions__b9495f4ba34f, \"pairsWith\" | \"estimate\"> & {\n    pairsWith?: MeterRef;\n};",
      "typeReferences": [
        {
          "name": "MeterOptions__b9495f4ba34f",
          "source": "packages/business/dist/types/business.d.ts#L63"
        },
        {
          "name": "MeterRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L26"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.FunctionalMeterRoutesOptions",
      "name": "@farthershore/business.FunctionalMeterRoutesOptions",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/registry.d.ts#L28",
      "description": "Public export FunctionalMeterRoutesOptions; see its declaration and owning guide.",
      "signature": "export type FunctionalMeterRoutesOptions = Pick<FunctionalRouteOptions, \"reports\" | \"costs\" | \"onStatusCodes\" | \"postStreamBilling\">;",
      "typeReferences": [
        {
          "name": "FunctionalRouteOptions",
          "source": "packages/business/dist/types/value-model/registry.d.ts#L7"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.FunctionalRequestMeterOptions",
      "name": "@farthershore/business.FunctionalRequestMeterOptions",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/declarations.d.ts#L18",
      "description": "Public export FunctionalRequestMeterOptions; see its declaration and owning guide.",
      "signature": "export type FunctionalRequestMeterOptions = Omit<RequestMeterOptions__7ec5d6047951, \"estimate\">;",
      "typeReferences": [
        {
          "name": "RequestMeterOptions__7ec5d6047951",
          "source": "packages/business/dist/types/business.d.ts#L66"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.FunctionalResourceOptions",
      "name": "@farthershore/business.FunctionalResourceOptions",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/declarations.d.ts#L9",
      "description": "Public export FunctionalResourceOptions; see its declaration and owning guide.",
      "signature": "export type FunctionalResourceOptions = ResourceOptions__04a2cc1fd6ee & {\n    cap?: ResourceOptions__04a2cc1fd6ee[\"scope\"];\n};",
      "typeReferences": [
        {
          "name": "ResourceOptions__04a2cc1fd6ee",
          "source": "packages/business/dist/types/business.d.ts#L74"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.FunctionalRouteLimitAuthoring",
      "name": "@farthershore/business.FunctionalRouteLimitAuthoring",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/registry.d.ts#L26",
      "description": "Public export FunctionalRouteLimitAuthoring; see its declaration and owning guide.",
      "signature": "export type FunctionalRouteLimitAuthoring = Extract<RouteLimitAuthoring__ae39586db789, string> | FunctionalRouteLimitInput;",
      "typeReferences": [
        {
          "name": "FunctionalRouteLimitInput",
          "source": "packages/business/dist/types/value-model/registry.d.ts#L23"
        },
        {
          "name": "RouteLimitAuthoring__ae39586db789",
          "source": "packages/business/dist/types/route-metering.d.ts#L34"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.FunctionalRouteLimitInput",
      "name": "@farthershore/business.FunctionalRouteLimitInput",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/registry.d.ts#L23",
      "description": "Public export FunctionalRouteLimitInput; see its declaration and owning guide.",
      "signature": "export type FunctionalRouteLimitInput = Omit<RouteLimitInput__250d9325480a, \"dimension\"> & {\n    dimension?: MeterRef;\n};",
      "typeReferences": [
        {
          "name": "MeterRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L26"
        },
        {
          "name": "RouteLimitInput__250d9325480a",
          "source": "packages/business/dist/types/route-metering.d.ts#L22"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.FunctionalRouteOptions",
      "name": "@farthershore/business.FunctionalRouteOptions",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/registry.d.ts#L7",
      "description": "Public export FunctionalRouteOptions; see its declaration and owning guide.",
      "signature": "export type FunctionalRouteOptions = Omit<RouteOptions__8ba341feca83, \"action\" | \"backend\" | \"reports\" | \"costs\" | \"rateLimit\" | \"quota\" | \"limits\" | \"surfaces\"> & {\n    action?: string;\n    /** Repo-owned custom permissions — require ONE of the route's permission\n     *  group's declared verbs at the gateway for this operation, instead of the\n     *  method-derived read/write default. Only valid on a route that is a\n     *  member of a permission-carrying group declaring the verb. */\n    permission?: string;\n    backend?: BackendRef;\n    reports?: MeterRef | readonly MeterRef[];\n    costs?: MeterCost | readonly MeterCost[];\n    rateLimit?: FunctionalRouteLimitAuthoring;\n    quota?: FunctionalRouteLimitAuthoring;\n    creates?: ResourceRef;\n    deletes?: ResourceRef;\n    surfaces?: RouteOptions__8ba341feca83[\"surfaces\"];\n};",
      "typeReferences": [
        {
          "name": "BackendRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L42"
        },
        {
          "name": "FunctionalRouteLimitAuthoring",
          "source": "packages/business/dist/types/value-model/registry.d.ts#L26"
        },
        {
          "name": "MeterCost",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L16"
        },
        {
          "name": "MeterRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L26"
        },
        {
          "name": "ResourceRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L38"
        },
        {
          "name": "RouteOptions__8ba341feca83",
          "source": "packages/business/dist/types/business.d.ts#L67"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.FundingBucketRef",
      "name": "@farthershore/business.FundingBucketRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L114",
      "description": "Public export FundingBucketRef; see its declaration and owning guide.",
      "signature": "export type FundingBucketRef = Readonly<{\n    kind: \"funding_bucket\";\n    bucketKind: FundingBucketKind__eced6b195b95;\n} & CommerceBrand__7b1b990b7c90<\"funding_bucket\">>;",
      "typeReferences": [
        {
          "name": "CommerceBrand__7b1b990b7c90",
          "source": "packages/business/dist/types/commerce/types.d.ts#L8"
        },
        {
          "name": "FundingBucketKind__eced6b195b95",
          "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L19"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.group",
      "name": "@farthershore/business.group",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/declarations.d.ts#L92",
      "description": "Public export group; see its declaration and owning guide.",
      "signature": "export declare function group(id: string, members: readonly (RouteRef | GroupRef)[], options?: FunctionalGroupOptions): GroupRef;",
      "typeReferences": [
        {
          "name": "FunctionalGroupOptions",
          "source": "packages/business/dist/types/value-model/declarations.d.ts#L89"
        },
        {
          "name": "GroupRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L36"
        },
        {
          "name": "RouteRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L35"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.GroupRef",
      "name": "@farthershore/business.GroupRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/refs.d.ts#L36",
      "description": "Public export GroupRef; see its declaration and owning guide.",
      "signature": "export type GroupRef = DeclarationRef__2a230f417174<\"group\">;",
      "typeReferences": [
        {
          "name": "DeclarationRef__2a230f417174",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L5"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.hashIr",
      "name": "@farthershore/business.hashIr",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/validate.d.ts#L67",
      "description": "Public export hashIr; see its declaration and owning guide.",
      "signature": "export declare function hashIr(ir: unknown): string;",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.HttpMethod",
      "name": "@farthershore/business.HttpMethod",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L1",
      "description": "Public export HttpMethod; see its declaration and owning guide.",
      "signature": "export type HttpMethod = \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\" | \"HEAD\" | \"OPTIONS\";",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.included",
      "name": "@farthershore/business.included",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L46",
      "description": "Public export included; see its declaration and owning guide.",
      "signature": "export declare function included(amount: AuthoredMoneyAmount, options?: Readonly<{\n    display?: MultiplierDisplayRef;\n}>): FundingBucketRef;",
      "typeReferences": [
        {
          "name": "AuthoredMoneyAmount",
          "source": "packages/business/dist/types/commerce/types.d.ts#L230"
        },
        {
          "name": "FundingBucketRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L114"
        },
        {
          "name": "MultiplierDisplayRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L110"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.LimitStrategy",
      "name": "@farthershore/business.LimitStrategy",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/limit-strategy.d.ts#L1",
      "description": "Public export LimitStrategy; see its declaration and owning guide.",
      "signature": "export type LimitStrategy = \"fixed_window\" | \"sliding_window\" | \"token_bucket\";",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.ManifestBuilderError",
      "name": "@farthershore/business.ManifestBuilderError",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/errors.d.ts#L19",
      "description": "Thrown on builder misuse (duplicate keys, unknown refs) at call time.",
      "signature": "export declare class ManifestBuilderError extends Error {\n    readonly code: string;\n    constructor(message: string, code?: string);\n}",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.ManifestBuildResult",
      "name": "@farthershore/business.ManifestBuildResult",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L434",
      "description": "Platform compiler result: the validated envelope plus its canonical hash.",
      "signature": "export type ManifestBuildResult = {\n    ir: ManifestIrDocument;\n    irHash: string;\n};",
      "typeReferences": [
        {
          "name": "ManifestIrDocument",
          "source": "packages/business/dist/types/ir-types.d.ts#L425"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.ManifestIrDocument",
      "name": "@farthershore/business.ManifestIrDocument",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L425",
      "description": "Public export ManifestIrDocument; see its declaration and owning guide.",
      "signature": "export type ManifestIrDocument = {\n    irVersion: 1;\n    sdkVersion: string;\n    business: BusinessSpecJson;\n    routes: RouteLayerJson[];\n    frontendIntegrations: FrontendIntegrationSpecJson[];\n    commerce: CommerceAuthoringSnapshot__60159f2d0d70;\n};",
      "typeReferences": [
        {
          "name": "BusinessSpecJson",
          "source": "packages/business/dist/types/ir-types.d.ts#L395"
        },
        {
          "name": "CommerceAuthoringSnapshot__60159f2d0d70",
          "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L92"
        },
        {
          "name": "FrontendIntegrationSpecJson",
          "source": "packages/business/dist/types/ir-types.d.ts#L170"
        },
        {
          "name": "RouteLayerJson",
          "source": "packages/business/dist/types/ir-types.d.ts#L340"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.ManifestIssue",
      "name": "@farthershore/business.ManifestIssue",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/errors.d.ts#L2",
      "description": "One validation problem, in the platform's diagnostic envelope shape.",
      "signature": "export type ManifestIssue = {\n    code: string;\n    path: string;\n    message: string;\n    /** Builder source that owns the invalid business definition, when known. */\n    source?: string;\n};",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.ManifestResourceGraphSnapshot",
      "name": "@farthershore/business.ManifestResourceGraphSnapshot",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/resource-graph.d.ts#L11",
      "description": "Public export ManifestResourceGraphSnapshot; see its declaration and owning guide.",
      "signature": "export type ManifestResourceGraphSnapshot = {\n    readonly nodes: readonly Omit<ManifestResourceNode__c5816bda01cb, \"value\">[];\n};",
      "typeReferences": [
        {
          "name": "ManifestResourceNode__c5816bda01cb",
          "source": "packages/business/dist/types/resource-graph.d.ts#L3"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.ManifestResourceKind",
      "name": "@farthershore/business.ManifestResourceKind",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/resource-graph.d.ts#L1",
      "description": "Public export ManifestResourceKind; see its declaration and owning guide.",
      "signature": "export type ManifestResourceKind = \"business\" | \"meter\" | \"counted_resource\" | \"surface\" | \"route_layer\" | \"action\" | \"plan\" | \"backend\" | \"frontend_integration\" | \"permission_subject\";",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.ManifestResourceUrn",
      "name": "@farthershore/business.ManifestResourceUrn",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/resource-graph.d.ts#L2",
      "description": "Public export ManifestResourceUrn; see its declaration and owning guide.",
      "signature": "export type ManifestResourceUrn = `urn:farthershore:business:${ManifestResourceKind}:${string}`;",
      "typeReferences": [
        {
          "name": "ManifestResourceKind",
          "source": "packages/business/dist/types/resource-graph.d.ts#L1"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.ManifestValidationError",
      "name": "@farthershore/business.ManifestValidationError",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/errors.d.ts#L14",
      "description": "Thrown by the platform manifest compiler when the assembled manifest fails\nschema validation. Plain-data `issues` so the error survives serialization\nacross the runner callback boundary.",
      "signature": "export declare class ManifestValidationError extends Error {\n    readonly issues: ManifestIssue[];\n    constructor(issues: ManifestIssue[]);\n}",
      "typeReferences": [
        {
          "name": "ManifestIssue",
          "source": "packages/business/dist/types/errors.d.ts#L2"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.measure",
      "name": "@farthershore/business.measure",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L3",
      "description": "Public export measure; see its declaration and owning guide.",
      "signature": "export declare function measure(key: string): MeasureRef;",
      "typeReferences": [
        {
          "name": "MeasureRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L16"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.MeasureMaximumRef",
      "name": "@farthershore/business.MeasureMaximumRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L21",
      "description": "Public export MeasureMaximumRef; see its declaration and owning guide.",
      "signature": "export type MeasureMaximumRef = Readonly<{\n    kind: \"measure_maximum\";\n    measure: MeasureRef;\n    maximum: number;\n} & CommerceBrand__7b1b990b7c90<\"measure_maximum\">>;",
      "typeReferences": [
        {
          "name": "CommerceBrand__7b1b990b7c90",
          "source": "packages/business/dist/types/commerce/types.d.ts#L8"
        },
        {
          "name": "MeasureRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L16"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.MeasureRef",
      "name": "@farthershore/business.MeasureRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L16",
      "description": "Public export MeasureRef; see its declaration and owning guide.",
      "signature": "export type MeasureRef = Readonly<{\n    kind: \"measure\";\n    key: string;\n    atMost(maximum: number): MeasureMaximumRef;\n} & CommerceBrand__7b1b990b7c90<\"measure\">>;",
      "typeReferences": [
        {
          "name": "CommerceBrand__7b1b990b7c90",
          "source": "packages/business/dist/types/commerce/types.d.ts#L8"
        },
        {
          "name": "MeasureMaximumRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L21"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.meter",
      "name": "@farthershore/business.meter",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L8",
      "description": "Public export meter; see its declaration and owning guide.",
      "signature": "declare const meter: MeterFunction__02c80dd4d01e;",
      "typeReferences": [
        {
          "name": "MeterFunction__02c80dd4d01e",
          "source": "packages/business/dist/types/commerce/types.d.ts#L220"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.MeterCost",
      "name": "@farthershore/business.MeterCost",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/refs.d.ts#L16",
      "description": "Public export MeterCost; see its declaration and owning guide.",
      "signature": "export type MeterCost = {\n    readonly kind: \"meter_cost\";\n    readonly meter: MeterRef;\n    readonly value: number;\n};",
      "typeReferences": [
        {
          "name": "MeterRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L26"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.MeterDefinitionJson",
      "name": "@farthershore/business.MeterDefinitionJson",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L4",
      "description": "Public export MeterDefinitionJson; see its declaration and owning guide.",
      "signature": "export type MeterDefinitionJson = {\n    key: string;\n    display: string;\n    unit?: string;\n    routeDefault?: number;\n    enforcementType?: \"exact_pre_request\" | \"estimated_then_settled\" | \"postpaid\" | \"strict_concurrency\";\n    aggregation?: \"SUM\" | \"COUNT\" | \"MAX\" | \"UNIQUE_COUNT\" | \"LATEST\";\n    window?: \"minute\" | \"hour\" | \"day\" | \"month\" | \"billing_period\";\n    valueProperty?: string;\n    uniqueProperty?: string;\n    groupBy?: string[];\n    eventCode?: string;\n    /** Token category this meter measures, when it is a token meter. T5 covers\n     *  the full token-accounting vocabulary: the input/output/total axes, the\n     *  cache axes (`cached_read_input` / `cache_creation_input`), `context`, the\n     *  output-budget axes (`max_output` / `estimated_output` / `actual_output`),\n     *  and `streaming_output`. Mirrors `TOKEN_CATEGORIES` in contracts. */\n    tokenCategory?: \"input\" | \"output\" | \"total\" | \"cached_read_input\" | \"cache_creation_input\" | \"context\" | \"max_output\" | \"estimated_output\" | \"actual_output\" | \"streaming_output\";\n    /** How the gateway RESERVES units for this meter on an estimate-then-settle\n     *  path: `reserve_max` (conservative worst-case) / `estimate` (heuristic) /\n     *  `count_actual` (no reserve). T5 — authored per token category to its\n     *  use-case: hard quota → `reserve_max` (optionally capped by\n     *  `reserveCeiling`); soft billing → `estimate`; spend → `reserve_max`. */\n    reserveStrategy?: \"reserve_max\" | \"estimate\" | \"count_actual\";\n    /** T5 — optional configured reservation CEILING (meter's native unit) for a\n     *  conservative `reserve_max` strategy that must not hold the full theoretical\n     *  worst case. Positive integer. Omit ⇒ unbounded worst-case reserve. */\n    reserveCeiling?: number;\n    /** Key of a meter this one is paired with (e.g. an `input` token meter pairs\n     *  with its `output` meter) so settlement / observability correlate the pair. */\n    pairsWith?: string;\n};",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.MeterLimit",
      "name": "@farthershore/business.MeterLimit",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/refs.d.ts#L11",
      "description": "Public export MeterLimit; see its declaration and owning guide.",
      "signature": "export type MeterLimit = {\n    readonly kind: \"meter_limit\";\n    readonly meter: MeterRef;\n    readonly value: PlanLimitJson;\n};",
      "typeReferences": [
        {
          "name": "MeterRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L26"
        },
        {
          "name": "PlanLimitJson",
          "source": "packages/business/dist/types/ir-types.d.ts#L75"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.MeterOptions",
      "name": "@farthershore/business.MeterOptions",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L87",
      "description": "`meter()` options. Every meter is structural (aggregation / window /\nenforcement / unit — what routes report and limits ration). Declaring\n`measures` (and optionally `dimensions`) additionally makes it a PRICEABLE\nmeasurement meter that `pricing()` catalogs rate and\n`meterRoutes(key, route, { reports })` binds.",
      "signature": "export type MeterOptions = FunctionalMeterOptions & Readonly<{\n    measures?: readonly MeasureRef[];\n    dimensions?: readonly DimensionRef[];\n}>;",
      "typeReferences": [
        {
          "name": "DimensionRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L36"
        },
        {
          "name": "FunctionalMeterOptions",
          "source": "packages/business/dist/types/value-model/declarations.d.ts#L15"
        },
        {
          "name": "MeasureRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L16"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.MeterRef",
      "name": "@farthershore/business.MeterRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/refs.d.ts#L26",
      "description": "Public export MeterRef; see its declaration and owning guide.",
      "signature": "export type MeterRef = DeclarationRef__2a230f417174<\"meter\"> & {\n    fixed(value: number): MeterCost;\n    perSecond(value: number, options?: TemporalLimitOptions): MeterLimit;\n    perMinute(value: number, options?: TemporalLimitOptions): MeterLimit;\n    perHour(value: number, options?: TemporalLimitOptions): MeterLimit;\n    perDay(value: number, options?: TemporalLimitOptions): MeterLimit;\n    perWeek(value: number, options?: TemporalLimitOptions): MeterLimit;\n    perMonth(value: number, options?: TemporalLimitOptions): MeterLimit;\n};",
      "typeReferences": [
        {
          "name": "DeclarationRef__2a230f417174",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L5"
        },
        {
          "name": "MeterCost",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L16"
        },
        {
          "name": "MeterLimit",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L11"
        },
        {
          "name": "TemporalLimitOptions",
          "source": "packages/business/dist/types/limit-strategy.d.ts#L2"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.MeterRouteBindingOptions",
      "name": "@farthershore/business.MeterRouteBindingOptions",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L163",
      "description": "`meterRoutes(key, routeRef, options)` — a concrete route's commerce\nmetering binding.",
      "signature": "export type MeterRouteBindingOptions = Readonly<{\n    /** Priceable meters (declared with `measures`) this route reports. */\n    reports: readonly MeterRef[];\n    maxOutputUnits?: MeasureMaximumRef;\n    /** FAR-909 — finite route_cap admission bounds for measures the client cannot declare. */\n    caps?: readonly MeasureMaximumRef[];\n    /**\n     * FAR-911 (H5) — the request-side clamp binding for `maxOutputUnits`: names\n     * the compiled admission knob `max_output_units` and the ONE gateway\n     * parser/mutator that reads and rewrites the request body's output-unit\n     * limit (`json_body_max_output_units_v1`: the JSON body's canonical\n     * output-unit field — for LLM chat/stream routes the `max_tokens` /\n     * `max_output_tokens` protocol aliases — parsed as a non-negative integer,\n     * clamped DOWN to the declared bound, and rewritten before upstream\n     * signing; a missing knob is set to the bound). Builders never name a raw\n     * JSON path: the route adapter owns protocol aliases. Compile-time only on\n     * this branch — the gateway consumer is FAR-905\n     * (`far905-requires-clamp-consumer.pending-gate.test.ts`); until it lands,\n     * a client that exceeds a declared bound is TERMINAL-QUARANTINED at\n     * ingestion (`ADMISSION_BOUND_BREACHED`, fail-closed, unbilled), never\n     * over-debited.\n     */\n    maxOutputUnitsAdapter?: Readonly<{\n        knob: \"max_output_units\";\n        parser: \"json_body_max_output_units_v1\";\n        mutator: \"json_body_max_output_units_v1\";\n    }>;\n    /**\n     * FAR-911 (H3) — chunked top-up instead of a declared `maxOutputUnits`:\n     * `bound` is the cumulative per-operation ceiling (`out.atMost(65536)`),\n     * `chunkUnits` the initial reservation; the cumulative ceiling is funded\n     * before the first response byte. Exclusive with `maxOutputUnits`.\n     */\n    chunkPolicy?: Readonly<{\n        bound: MeasureMaximumRef;\n        chunkUnits: number;\n    }>;\n    /**\n     * FAR-911 (H3) — post-stream measurement timing. `settlementMax` declares\n     * the finite per-measure settlement maxima prepaid/x402 plans require.\n     */\n    postStream?: Readonly<{\n        settlementMax?: readonly MeasureMaximumRef[];\n    }>;\n}>;",
      "typeReferences": [
        {
          "name": "MeasureMaximumRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L21"
        },
        {
          "name": "MeterRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L26"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.meterRoutes",
      "name": "@farthershore/business.meterRoutes",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L20",
      "description": "THE meterRoutes verb — always `(key, target, options)` with an\nauthor-supplied stable key. A concrete `route()` ref target is a COMMERCE\nMETERING BINDING (`reports` name priceable meters; admission bounds via\n`maxOutputUnits` / `caps` / `chunkPolicy` / `postStream`). A wildcard path,\ngroup ref, or array target is a STRUCTURAL OVERLAY on the matched routes\n(`reports` / `costs` / `onStatusCodes` / `postStreamBilling`) — the\nroute-layer overlay under `key`.",
      "signature": "declare const meterRoutes: MeterRoutesFunction__799abcbb8f6e;",
      "typeReferences": [
        {
          "name": "MeterRoutesFunction__799abcbb8f6e",
          "source": "packages/business/dist/types/commerce/types.d.ts#L225"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.MeterRoutesOverlayTarget",
      "name": "@farthershore/business.MeterRoutesOverlayTarget",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L224",
      "description": "Structural overlay targets: a wildcard path, a group ref, or an array of\npaths / route refs / group refs. A single `route()` ref is a commerce\nmetering binding instead (see {@link MeterRouteBindingOptions}).",
      "signature": "export type MeterRoutesOverlayTarget = Exclude<MeterRoutesTarget, RouteRef>;",
      "typeReferences": [
        {
          "name": "MeterRoutesTarget",
          "source": "packages/business/dist/types/value-model/registry.d.ts#L27"
        },
        {
          "name": "RouteRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L35"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.MeterRoutesTarget",
      "name": "@farthershore/business.MeterRoutesTarget",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/registry.d.ts#L27",
      "description": "Public export MeterRoutesTarget; see its declaration and owning guide.",
      "signature": "export type MeterRoutesTarget = string | RouteRef | GroupRef | readonly (string | RouteRef | GroupRef)[];",
      "typeReferences": [
        {
          "name": "GroupRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L36"
        },
        {
          "name": "RouteRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L35"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.ModelRef",
      "name": "@farthershore/business.ModelRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L42",
      "description": "Public export ModelRef; see its declaration and owning guide.",
      "signature": "export type ModelRef = Readonly<{\n    kind: \"model\";\n    provider: ProviderRef;\n    key: string;\n} & CommerceBrand__7b1b990b7c90<\"model\">>;",
      "typeReferences": [
        {
          "name": "CommerceBrand__7b1b990b7c90",
          "source": "packages/business/dist/types/commerce/types.d.ts#L8"
        },
        {
          "name": "ProviderRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L47"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.modifier",
      "name": "@farthershore/business.modifier",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L43",
      "description": "Public export modifier; see its declaration and owning guide.",
      "signature": "declare const modifier: Readonly<{\n    multiplier(numerator: number, denominator: number): ModifierBuilder__ae4a0e208869;\n}>;",
      "typeReferences": [
        {
          "name": "ModifierBuilder__ae4a0e208869",
          "source": "packages/business/dist/types/commerce/types.d.ts#L77"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.ModifierRef",
      "name": "@farthershore/business.ModifierRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L72",
      "description": "Public export ModifierRef; see its declaration and owning guide.",
      "signature": "export type ModifierRef = Readonly<{\n    kind: \"pricing_modifier\";\n    multiplier: ExactRate;\n    when: DimensionConditionRef;\n} & CommerceBrand__7b1b990b7c90<\"pricing_modifier\">>;",
      "typeReferences": [
        {
          "name": "CommerceBrand__7b1b990b7c90",
          "source": "packages/business/dist/types/commerce/types.d.ts#L8"
        },
        {
          "name": "DimensionConditionRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L31"
        },
        {
          "name": "ExactRate",
          "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L1"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.money",
      "name": "@farthershore/business.money",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L23",
      "description": "Public export money; see its declaration and owning guide.",
      "signature": "declare const money: MoneyFunction__dc62d2738f6d;",
      "typeReferences": [
        {
          "name": "MoneyFunction__dc62d2738f6d",
          "source": "packages/business/dist/types/commerce/types.d.ts#L231"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.MultiplierDisplayRef",
      "name": "@farthershore/business.MultiplierDisplayRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L110",
      "description": "Public export MultiplierDisplayRef; see its declaration and owning guide.",
      "signature": "export type MultiplierDisplayRef = Readonly<{\n    kind: \"multiplier_display\";\n    factor: number;\n} & CommerceBrand__7b1b990b7c90<\"multiplier_display\">>;",
      "typeReferences": [
        {
          "name": "CommerceBrand__7b1b990b7c90",
          "source": "packages/business/dist/types/commerce/types.d.ts#L8"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.MutationClass",
      "name": "@farthershore/business.MutationClass",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L2",
      "description": "Public export MutationClass; see its declaration and owning guide.",
      "signature": "export type MutationClass = \"runtime\" | \"contractual\";",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.normalizeTemporalLimitOptions",
      "name": "@farthershore/business.normalizeTemporalLimitOptions",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/limit-strategy.d.ts#L31",
      "description": "Validate and presence-preservingly copy the temporal limit fields. A\nresolved quota-length window rejects `token_bucket` up front (mirrors Core\n`requireQuotaWindowStrategy`), including custom windows. `cell` carries the\nsurrounding limit's `capacity` + the dimension's `aggregation` so the\ncoherence rules Core enforces at publish also fail the local build.",
      "signature": "export declare function normalizeTemporalLimitOptions(options: TemporalLimitOptions, context: string, windowSeconds?: number, cell?: {\n    capacity?: number;\n    aggregation?: string;\n}): TemporalLimitOptions;",
      "typeReferences": [
        {
          "name": "TemporalLimitOptions",
          "source": "packages/business/dist/types/limit-strategy.d.ts#L2"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.plan",
      "name": "@farthershore/business.plan",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L10",
      "description": "Public export plan; see its declaration and owning guide.",
      "signature": "declare const plan: PlanFunction__9b23957fc098;",
      "typeReferences": [
        {
          "name": "PlanFunction__9b23957fc098",
          "source": "packages/business/dist/types/commerce/types.d.ts#L208"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.PlanCapacityJson",
      "name": "@farthershore/business.PlanCapacityJson",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L52",
      "description": "A3 — per-request capacity ceiling authored on a plan. Mirrors the contracts\n`planCapacitySchema` (ceilings + enforce/track + failMode + T9\n`tokenCountSource` + T12 `scope`) WITHOUT the compiler-owned `kind` /\n`provenance` discriminators. The core compiler turns it into a\n`{ kind: \"capacity\", …, provenance: \"plan\" }` ConstraintSpec. At least one\nceiling must be present.",
      "signature": "export type PlanCapacityJson = {\n    maxInputTokens?: number;\n    maxOutputTokens?: number;\n    maxContextTokens?: number;\n    maxPayloadBytes?: number;\n    enforcement?: \"enforce\" | \"track\";\n    failMode?: \"open\" | \"closed\";\n    /** T9 — confidence input: `declared` (exact) vs `estimated` (tokenizer). */\n    tokenCountSource?: \"declared\" | \"estimated\";\n    /** T12 — FORWARD-COMPAT scope hint. */\n    scope?: LimitScopeJson__215e4eb2041c;\n};",
      "typeReferences": [
        {
          "name": "LimitScopeJson__215e4eb2041c",
          "source": "packages/business/dist/types/ir-types.d.ts#L40"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.PlanKindJson",
      "name": "@farthershore/business.PlanKindJson",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L66",
      "description": "The DECLARED plan kind (`plan.kind.*`). Carried on the Manifest IR plan\nand on the commerce manifest; surfaces read it, nothing infers it.",
      "signature": "export type PlanKindJson = \"free\" | \"flat\" | \"usage\" | \"prepaid\" | \"hybrid\" | \"trial\" | \"custom\";",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.PlanKindRef",
      "name": "@farthershore/business.PlanKindRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L131",
      "description": "Public export PlanKindRef; see its declaration and owning guide.",
      "signature": "export type PlanKindRef<Name extends PlanKindName__d0fd9bcc38b8 = PlanKindName__d0fd9bcc38b8> = Readonly<{\n    kind: \"plan_kind\";\n    name: Name;\n} & CommerceBrand__7b1b990b7c90<`plan_kind:${Name}`>>;",
      "typeReferences": [
        {
          "name": "CommerceBrand__7b1b990b7c90",
          "source": "packages/business/dist/types/commerce/types.d.ts#L8"
        },
        {
          "name": "PlanKindName__d0fd9bcc38b8",
          "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L20"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.PlanLimitJson",
      "name": "@farthershore/business.PlanLimitJson",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L75",
      "description": "Public export PlanLimitJson; see its declaration and owning guide.",
      "signature": "export type PlanLimitJson = {\n    dimension: string;\n    window: PlanLimitWindowJson__34c3ba9c4506;\n    capacity: number;\n    enforcement?: \"enforce\" | \"track\";\n    /** A3 — optional WARN threshold as a fraction of `capacity` in [0, 1]. The\n     *  core compiler threads it onto the emitted rate_limit / quota constraint's\n     *  `warnAt`. Advisory only; never denies. Optional + additive. */\n    warnAt?: number;\n    strategy?: \"fixed_window\" | \"sliding_window\" | \"token_bucket\";\n    bucketCapacity?: number;\n    refillRatePerSecond?: number;\n    /** T12 — optional FORWARD-COMPAT scope hint. The core compiler threads it onto\n     *  the emitted rate_limit / quota constraint's `scope`. v1 enforcement is\n     *  unchanged. Optional + additive. */\n    scope?: LimitScopeJson__215e4eb2041c;\n    reset_trigger?: \"billing_period\" | \"subscription_start\";\n};",
      "typeReferences": [
        {
          "name": "LimitScopeJson__215e4eb2041c",
          "source": "packages/business/dist/types/ir-types.d.ts#L40"
        },
        {
          "name": "PlanLimitWindowJson__34c3ba9c4506",
          "source": "packages/business/dist/types/ir-types.d.ts#L67"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.PlanOptions",
      "name": "@farthershore/business.PlanOptions",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L158",
      "description": "`plan()` options — the DECLARED `kind` (required), the five economics\ncontrols, and the structural (entitlement) half: what the plan grants and\nhow it rations. Usage money is only ever `usagePricing` / `funding` /\n`spendPolicy`; there is no per-meter rate on a plan.",
      "signature": "export type PlanOptions = PlanEconomicsControls__792c3ab4d885 & Readonly<{\n    kind: PlanKindRef;\n}> & Readonly<Pick<StructuralPlanOptions__f7824ff3bdd0, \"name\" | \"description\" | \"details\" | \"grants\" | \"limits\" | \"capacity\" | \"maxMonthlySpendCents\" | \"minMonthlySpendCents\" | \"selfServeEnabled\" | \"archive\">>;",
      "typeReferences": [
        {
          "name": "PlanEconomicsControls__792c3ab4d885",
          "source": "packages/business/dist/types/commerce/types.d.ts#L135"
        },
        {
          "name": "PlanKindRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L131"
        },
        {
          "name": "StructuralPlanOptions__f7824ff3bdd0",
          "source": "packages/business/dist/types/value-model/declarations.d.ts#L26"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.PlanRef",
      "name": "@farthershore/business.PlanRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/refs.d.ts#L37",
      "description": "Public export PlanRef; see its declaration and owning guide.",
      "signature": "export type PlanRef = DeclarationRef__2a230f417174<\"plan\">;",
      "typeReferences": [
        {
          "name": "DeclarationRef__2a230f417174",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L5"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.PlanSpecJson",
      "name": "@farthershore/business.PlanSpecJson",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L113",
      "description": "Public export PlanSpecJson; see its declaration and owning guide.",
      "signature": "export type PlanSpecJson = {\n    key: string;\n    /** The DECLARED plan kind. Required: a plan is free / flat / usage / …\n     *  because the builder said so, never because of its shape. Usage money\n     *  never lives on the plan; it is commerce-manifest owned. */\n    kind: PlanKindJson;\n    description?: string;\n    details?: string[];\n    recurring_fee_cents?: number;\n    billing_interval?: \"month\" | \"year\";\n    trial_days?: number;\n    max_monthly_spend_cents?: number;\n    min_monthly_spend_cents?: number;\n    limits?: PlanLimitJson[];\n    /** Additive v2 direct grants using stable route ids. */\n    routeGrants?: string[];\n    /** Named managed-frontend integrations this plan permits. */\n    frontendIntegrationGrants?: string[];\n    resource_limits?: Record<string, number>;\n    /** A3 — per-request capacity ceiling. Compiles to a `{ kind: \"capacity\" }`\n     *  ConstraintSpec the gateway enforces (413 `request_too_large`). */\n    capacity?: PlanCapacityJson;\n    overageBehavior?: \"block\" | \"allow_and_bill\";\n    selfServeEnabled?: boolean;\n    archive?: PlanArchiveJson__452830f6517f;\n    /** Escape hatch: future fields ride through here. `variants` was removed and is rejected at validation. */\n    [key: string]: unknown;\n};",
      "typeReferences": [
        {
          "name": "PlanArchiveJson__452830f6517f",
          "source": "packages/business/dist/types/ir-types.d.ts#L108"
        },
        {
          "name": "PlanCapacityJson",
          "source": "packages/business/dist/types/ir-types.d.ts#L52"
        },
        {
          "name": "PlanKindJson",
          "source": "packages/business/dist/types/ir-types.d.ts#L66"
        },
        {
          "name": "PlanLimitJson",
          "source": "packages/business/dist/types/ir-types.d.ts#L75"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.prepaid",
      "name": "@farthershore/business.prepaid",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L49",
      "description": "Public export prepaid; see its declaration and owning guide.",
      "signature": "export declare function prepaid(amount: AuthoredMoneyAmount, options?: Readonly<{\n    topUp?: boolean;\n}>): FundingBucketRef;",
      "typeReferences": [
        {
          "name": "AuthoredMoneyAmount",
          "source": "packages/business/dist/types/commerce/types.d.ts#L230"
        },
        {
          "name": "FundingBucketRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L114"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.pricing",
      "name": "@farthershore/business.pricing",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L9",
      "description": "Public export pricing; see its declaration and owning guide.",
      "signature": "export declare function pricing(key: string, options: PricingOptions): PricingRef;",
      "typeReferences": [
        {
          "name": "PricingOptions",
          "source": "packages/business/dist/types/commerce/types.d.ts#L92"
        },
        {
          "name": "PricingRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L103"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.PricingBindingRef",
      "name": "@farthershore/business.PricingBindingRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L97",
      "description": "Public export PricingBindingRef; see its declaration and owning guide.",
      "signature": "export type PricingBindingRef = Readonly<{\n    kind: \"pricing_binding\";\n    binding: PricingBindingKind__ff438801f484;\n    pricing: PricingRef;\n    version?: number;\n} & CommerceBrand__7b1b990b7c90<\"pricing_binding\">>;",
      "typeReferences": [
        {
          "name": "CommerceBrand__7b1b990b7c90",
          "source": "packages/business/dist/types/commerce/types.d.ts#L8"
        },
        {
          "name": "PricingBindingKind__ff438801f484",
          "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L18"
        },
        {
          "name": "PricingRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L103"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.PricingOptions",
      "name": "@farthershore/business.PricingOptions",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L92",
      "description": "Public export PricingOptions; see its declaration and owning guide.",
      "signature": "export type PricingOptions = Readonly<{\n    /** A meter declared with `measures` (priceable). */\n    meter: MeterRef;\n    catalog: readonly PricingCatalogAuthoringEntry__8ad295725f7a[];\n}>;",
      "typeReferences": [
        {
          "name": "MeterRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L26"
        },
        {
          "name": "PricingCatalogAuthoringEntry__8ad295725f7a",
          "source": "packages/business/dist/types/commerce/types.d.ts#L91"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.PricingRef",
      "name": "@farthershore/business.PricingRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L103",
      "description": "Public export PricingRef; see its declaration and owning guide.",
      "signature": "export type PricingRef = Readonly<{\n    kind: \"pricing\";\n    key: string;\n    current(): PricingBindingRef;\n    withContractTerms(): PricingBindingRef;\n    fixedVersion(version: number): PricingBindingRef;\n} & CommerceBrand__7b1b990b7c90<\"pricing\">>;",
      "typeReferences": [
        {
          "name": "CommerceBrand__7b1b990b7c90",
          "source": "packages/business/dist/types/commerce/types.d.ts#L8"
        },
        {
          "name": "PricingBindingRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L97"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.promo",
      "name": "@farthershore/business.promo",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L52",
      "description": "Public export promo; see its declaration and owning guide.",
      "signature": "export declare function promo(amount: AuthoredMoneyAmount): FundingBucketRef;",
      "typeReferences": [
        {
          "name": "AuthoredMoneyAmount",
          "source": "packages/business/dist/types/commerce/types.d.ts#L230"
        },
        {
          "name": "FundingBucketRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L114"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.provider",
      "name": "@farthershore/business.provider",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L7",
      "description": "Public export provider; see its declaration and owning guide.",
      "signature": "export declare function provider(key: string): ProviderRef;",
      "typeReferences": [
        {
          "name": "ProviderRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L47"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.ProviderRef",
      "name": "@farthershore/business.ProviderRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L47",
      "description": "Public export ProviderRef; see its declaration and owning guide.",
      "signature": "export type ProviderRef = Readonly<{\n    kind: \"provider\";\n    key: string;\n    model(key: string): ModelRef;\n} & CommerceBrand__7b1b990b7c90<\"provider\">>;",
      "typeReferences": [
        {
          "name": "CommerceBrand__7b1b990b7c90",
          "source": "packages/business/dist/types/commerce/types.d.ts#L8"
        },
        {
          "name": "ModelRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L42"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.rail",
      "name": "@farthershore/business.rail",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L64",
      "description": "FAR-911 — admission-rail constants for `spendPolicy.rail`.",
      "signature": "declare const rail: Readonly<{\n    x402: RailRef;\n}>;",
      "typeReferences": [
        {
          "name": "RailRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L127"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.RailRef",
      "name": "@farthershore/business.RailRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L127",
      "description": "FAR-911 — admission rail constant (`rail.x402`): every op is funded before it runs.",
      "signature": "export type RailRef = Readonly<{\n    kind: \"admission_rail\";\n    rail: \"x402\";\n} & CommerceBrand__7b1b990b7c90<\"admission_rail\">>;",
      "typeReferences": [
        {
          "name": "CommerceBrand__7b1b990b7c90",
          "source": "packages/business/dist/types/commerce/types.d.ts#L8"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.rate",
      "name": "@farthershore/business.rate",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L24",
      "description": "Public export rate; see its declaration and owning guide.",
      "signature": "declare const rate: Readonly<{\n    perUnit(amount: AuthoredMoneyAmount): UnboundRateRef;\n    perMillion(amount: AuthoredMoneyAmount): UnboundRateRef;\n    per(unitCount: number, amount: AuthoredMoneyAmount): UnboundRateRef;\n    rational(numerator: number, denominator: number, amount: AuthoredMoneyAmount): UnboundRateRef;\n    /** FAR-909 — graduated tiers: each unit rated by the tier its cumulative window position falls in. */\n    graduated(tiers: readonly CatalogTierInput[]): UnboundRateRef;\n    /** FAR-909 — volume (retroactive) tiers: every unit rated at the tier the window total selects at close. */\n    volume(tiers: readonly CatalogTierInput[]): UnboundRateRef;\n    /**\n     * FAR-911 / M5 — bounded backend quote: the backend proposes a per-unit\n     * rate per report; Core clamps it into `[min, max]` (SDK-created flat\n     * rates, USD per unit) and dispute-flags out-of-range proposals.\n     */\n    backendQuoted(bounds: Readonly<{\n        min: UnboundRateRef;\n        max: UnboundRateRef;\n    }>): UnboundRateRef;\n}>;",
      "typeReferences": [
        {
          "name": "AuthoredMoneyAmount",
          "source": "packages/business/dist/types/commerce/types.d.ts#L230"
        },
        {
          "name": "CatalogTierInput",
          "source": "packages/business/dist/types/commerce/types.d.ts#L12"
        },
        {
          "name": "UnboundRateRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L53"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.referral",
      "name": "@farthershore/business.referral",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/authoring.d.ts#L53",
      "description": "Public export referral; see its declaration and owning guide.",
      "signature": "export declare function referral(amount: AuthoredMoneyAmount): FundingBucketRef;",
      "typeReferences": [
        {
          "name": "AuthoredMoneyAmount",
          "source": "packages/business/dist/types/commerce/types.d.ts#L230"
        },
        {
          "name": "FundingBucketRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L114"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.requests",
      "name": "@farthershore/business.requests",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/declarations.d.ts#L64",
      "description": "Public export requests; see its declaration and owning guide.",
      "signature": "export declare function requests(options?: FunctionalRequestMeterOptions): MeterRef;",
      "typeReferences": [
        {
          "name": "FunctionalRequestMeterOptions",
          "source": "packages/business/dist/types/value-model/declarations.d.ts#L18"
        },
        {
          "name": "MeterRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L26"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.resource",
      "name": "@farthershore/business.resource",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/declarations.d.ts#L65",
      "description": "Public export resource; see its declaration and owning guide.",
      "signature": "export declare function resource(id: string, options?: FunctionalResourceOptions): ResourceRef;",
      "typeReferences": [
        {
          "name": "FunctionalResourceOptions",
          "source": "packages/business/dist/types/value-model/declarations.d.ts#L9"
        },
        {
          "name": "ResourceRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L38"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.resourceGraphOf",
      "name": "@farthershore/business.resourceGraphOf",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/business.d.ts#L133",
      "description": "The declaration graph behind a compiled business — every node's URN, kind,\nkey, `dependsOn` edges, and declaration order.\n\nThis is the SDK's internal representation, exposed for inspection: tooling and\nagents can reason about what a business declares and how its pieces reference\neach other without re-parsing the Manifest IR (where branded refs have already\ncollapsed to plain strings, and `group()` / `meterRoutes()` have been erased\nentirely).\n\nNode payloads are NOT included — `snapshot()` strips `value`, so this is\nstructure only. The Manifest IR remains the wire format and the only thing\nCore consumes.\n\nReturns `null` for a value that is not an authentic `fs.business()` result.\nFor a deferred (folder-discovered) program the graph is captured when the\nmanifest materializes, so call `compileBusinessToManifest` first if you need\nit before anything else has forced materialization.",
      "signature": "export declare function resourceGraphOf(business: CompiledBusiness__671c1daa22b7): ManifestResourceGraphSnapshot | null;",
      "typeReferences": [
        {
          "name": "CompiledBusiness__671c1daa22b7",
          "source": "packages/business/dist/types/business.d.ts#L7"
        },
        {
          "name": "ManifestResourceGraphSnapshot",
          "source": "packages/business/dist/types/resource-graph.d.ts#L11"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.ResourceLimit",
      "name": "@farthershore/business.ResourceLimit",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/refs.d.ts#L21",
      "description": "Public export ResourceLimit; see its declaration and owning guide.",
      "signature": "export type ResourceLimit = {\n    readonly kind: \"resource_limit\";\n    readonly resource: ResourceRef;\n    readonly count: number;\n};",
      "typeReferences": [
        {
          "name": "ResourceRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L38"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.ResourceRef",
      "name": "@farthershore/business.ResourceRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/refs.d.ts#L38",
      "description": "Public export ResourceRef; see its declaration and owning guide.",
      "signature": "export type ResourceRef = DeclarationRef__2a230f417174<\"resource\"> & {\n    /** Maximum number of this persistent resource a subscription may own. */\n    max(count: number): ResourceLimit;\n};",
      "typeReferences": [
        {
          "name": "DeclarationRef__2a230f417174",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L5"
        },
        {
          "name": "ResourceLimit",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L21"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.route",
      "name": "@farthershore/business.route",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/declarations.d.ts#L68",
      "description": "Public export route; see its declaration and owning guide.",
      "signature": "export declare function route(path: string, operations: RouteOperations): RouteRef;",
      "typeReferences": [
        {
          "name": "RouteOperations",
          "source": "packages/business/dist/types/value-model/registry.d.ts#L30"
        },
        {
          "name": "RouteRef",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L35"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.RouteDefinitionJson",
      "name": "@farthershore/business.RouteDefinitionJson",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L225",
      "description": "Public export RouteDefinitionJson; see its declaration and owning guide.",
      "signature": "export type RouteDefinitionJson = {\n    match: {\n        method: HttpMethod;\n        path: string;\n    };\n    metering?: {\n        defaults?: Record<string, number>;\n        reports?: string[];\n        onStatusCodes?: string | number[];\n        /** The authoritative billable units arrive through the attested\n         * post-stream reporter. The in-band gateway event remains reserve-only. */\n        postStreamBilling?: boolean;\n    };\n    /** Explicit billing semantics belong to the route, not the metering block;\n     *  contracts reparses route layers strictly enough to strip unknown nested\n     *  keys, which would silently turn authored free operations into inferred\n     *  billable metered operations. */\n    usagePolicy?: RouteUsagePolicyJson__bd930ebf5713;\n    unmetered?: boolean;\n    inheritDefaultMeters?: boolean;\n    action?: string;\n    /** Repo-owned custom permissions — stamped by lowering when this route is a\n     *  member of a permission-carrying `fs.group`. The gateway gates the route\n     *  on `<permissionSubject>:read|write`; metering/grant identity (`action` /\n     *  canonical method+path) is untouched. Never authored directly on a route. */\n    permissionSubject?: string;\n    /** Repo-owned custom permissions — gateway-required verb override for this\n     *  operation (`<permissionSubject>:<permissionVerb>` instead of the\n     *  method-derived read/write). Present only with `permissionSubject`. */\n    permissionVerb?: string;\n    /** BYO-Backend V1 — route→backend binding id. Omitted = the sole / default\n     *  backend (single-backend businesses stay zero-config). */\n    backend?: string;\n    /** Canonical per-route auth/timeout/retry policy (FAR-680). Omitted when no\n     *  policy intent was authored — keeps the IR (and irHash) byte-identical. */\n    policy?: RoutePolicyJson;\n    /** FAR-684 — canonical per-route rate/quota overrides, normalized from\n     *  `rateLimit` / `quota` sugar. Omitted when the route authored none — keeps\n     *  the IR (and irHash) byte-identical. */\n    limits?: RouteLimitJson__077809c9f639[];\n};",
      "typeReferences": [
        {
          "name": "HttpMethod",
          "source": "packages/business/dist/types/ir-types.d.ts#L1"
        },
        {
          "name": "RouteLimitJson__077809c9f639",
          "source": "packages/business/dist/types/ir-types.d.ts#L99"
        },
        {
          "name": "RoutePolicyJson",
          "source": "packages/business/dist/types/ir-types.d.ts#L206"
        },
        {
          "name": "RouteUsagePolicyJson__bd930ebf5713",
          "source": "packages/business/dist/types/ir-types.d.ts#L281"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.RouteLayerJson",
      "name": "@farthershore/business.RouteLayerJson",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L340",
      "description": "Public export RouteLayerJson; see its declaration and owning guide.",
      "signature": "export type RouteLayerJson = {\n    description?: string;\n    mutation_class?: MutationClass;\n    cacheProfile?: CacheProfile;\n    routes: RouteDefinitionJson[];\n    runtime?: {\n        rollout_key?: string;\n        required_flags?: string[];\n    };\n    actions?: ActionSpecJson__e01b08e9d184[];\n    /** Layer-level default backend binding; exact routes may override it. */\n    backend?: string;\n};",
      "typeReferences": [
        {
          "name": "ActionSpecJson__e01b08e9d184",
          "source": "packages/business/dist/types/ir-types.d.ts#L323"
        },
        {
          "name": "CacheProfile",
          "source": "packages/business/dist/types/ir-types.d.ts#L3"
        },
        {
          "name": "MutationClass",
          "source": "packages/business/dist/types/ir-types.d.ts#L2"
        },
        {
          "name": "RouteDefinitionJson",
          "source": "packages/business/dist/types/ir-types.d.ts#L225"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.RouteOperations",
      "name": "@farthershore/business.RouteOperations",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/registry.d.ts#L30",
      "description": "Public export RouteOperations; see its declaration and owning guide.",
      "signature": "export type RouteOperations = Partial<Record<\"get\" | \"post\" | \"put\" | \"patch\" | \"delete\" | \"head\" | \"options\", RouteOperationOptions__902951868956>>;",
      "typeReferences": [
        {
          "name": "RouteOperationOptions__902951868956",
          "source": "packages/business/dist/types/value-model/registry.d.ts#L29"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.RoutePolicyJson",
      "name": "@farthershore/business.RoutePolicyJson",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L206",
      "description": "Public export RoutePolicyJson; see its declaration and owning guide.",
      "signature": "export type RoutePolicyJson = {\n    authMode?: \"public\" | \"required\";\n    timeoutMs?: number;\n    idleTimeoutMs?: number;\n    retry?: RouteRetryPolicyJson;\n    /** Consumer-principal subject requirement the gateway enforces (403\n     *  `member_subject_required` / `service_subject_required`). OMITTED when the\n     *  route imposes no requirement (\"any\") — absence-vs-presence is the only\n     *  irHash signal, so a route with no subject requirement stays byte-identical. */\n    subject?: \"member\" | \"service\";\n    /** CALLABILITY axis — allowlist of credential surfaces the gateway admits.\n     *  OMITTED = all admitted (the implicit \"hybrid\" state). Emitted as a\n     *  non-empty, deduped, canonically-sorted array so the irHash is stable. */\n    surfaces?: RouteSurface__b5c8a54b503c[];\n    /** VISIBILITY axis — true excludes the route from generated docs + grantable\n     *  API-key scopes, and makes a callability deny return 404 (not 403). OMITTED\n     *  when the route is visible, so a listed route stays byte-identical. */\n    hidden?: boolean;\n};",
      "typeReferences": [
        {
          "name": "RouteRetryPolicyJson",
          "source": "packages/business/dist/types/ir-types.d.ts#L189"
        },
        {
          "name": "RouteSurface__b5c8a54b503c",
          "source": "packages/business/dist/types/ir-types.d.ts#L205"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.RouteRef",
      "name": "@farthershore/business.RouteRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/refs.d.ts#L35",
      "description": "Public export RouteRef; see its declaration and owning guide.",
      "signature": "export type RouteRef = DeclarationRef__2a230f417174<\"route\">;",
      "typeReferences": [
        {
          "name": "DeclarationRef__2a230f417174",
          "source": "packages/business/dist/types/value-model/refs.d.ts#L5"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.RouteRetryOnJson",
      "name": "@farthershore/business.RouteRetryOnJson",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L186",
      "description": "Retry conditions the canonical retry policy fires on (FAR-680).",
      "signature": "export type RouteRetryOnJson = \"network\" | \"5xx\";",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.RouteRetryPolicyJson",
      "name": "@farthershore/business.RouteRetryPolicyJson",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/ir-types.d.ts#L189",
      "description": "CANONICAL retry policy — the explicit IR shape SDK sugar normalizes into\nand FAR-689 consumes. Never hand-authored; `retry: true` expands to it.",
      "signature": "export type RouteRetryPolicyJson = {\n    maxAttempts: number;\n    retryOn: RouteRetryOnJson[];\n    backoff: {\n        base: number;\n        max: number;\n        jitter: number;\n    };\n    budgetRatio: number;\n};",
      "typeReferences": [
        {
          "name": "RouteRetryOnJson",
          "source": "packages/business/dist/types/ir-types.d.ts#L186"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.scope",
      "name": "@farthershore/business.scope",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/constants.d.ts#L5",
      "description": "Public export scope; see its declaration and owning guide.",
      "signature": "declare const scope: Readonly<{\n    subscription: \"subscription\";\n    subject: \"subject\";\n}>;",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.SDK_VERSION",
      "name": "@farthershore/business.SDK_VERSION",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/version.d.ts#L1",
      "description": "Public export SDK_VERSION; see its declaration and owning guide.",
      "signature": "declare const SDK_VERSION: string;",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.surfaces",
      "name": "@farthershore/business.surfaces",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/value-model/constants.d.ts#L1",
      "description": "Public export surfaces; see its declaration and owning guide.",
      "signature": "declare const surfaces: Readonly<{\n    ui: \"ui\";\n    api: \"api\";\n}>;",
      "typeReferences": [],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.TemporalLimitOptions",
      "name": "@farthershore/business.TemporalLimitOptions",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/limit-strategy.d.ts#L2",
      "description": "Public export TemporalLimitOptions; see its declaration and owning guide.",
      "signature": "export type TemporalLimitOptions = {\n    /** Temporal accounting strategy. Omitted preserves fixed-window IR. */\n    strategy?: LimitStrategy;\n    /** Token-bucket burst capacity. Valid only with `token_bucket`. */\n    bucketCapacity?: number;\n    /** Token-bucket steady-state refill rate in units per second. */\n    refillRatePerSecond?: number;\n};",
      "typeReferences": [
        {
          "name": "LimitStrategy",
          "source": "packages/business/dist/types/limit-strategy.d.ts#L1"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.UnboundRateRef",
      "name": "@farthershore/business.UnboundRateRef",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/commerce/types.d.ts#L53",
      "description": "Public export UnboundRateRef; see its declaration and owning guide.",
      "signature": "export type UnboundRateRef = Readonly<{\n    kind: \"catalog_rate\";\n    /** Flat per-unit rate; absent when `tiers` is present. */\n    rate?: ExactRate;\n    /** Tiered pricing model (FAR-909); absent when `rate` is present. */\n    tiers?: ExactCatalogTiers;\n    /** Bounded backend-quoted rule (FAR-911); absent when `rate`/`tiers` is present. */\n    quote?: ExactQuoteBounds__e9cf817917c1;\n    for(measure: MeasureRef, ...selectors: readonly CatalogSelectorRef[]): BoundRateRef;\n} & CommerceBrand__7b1b990b7c90<\"catalog_rate\">>;",
      "typeReferences": [
        {
          "name": "BoundRateRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L63"
        },
        {
          "name": "CatalogSelectorRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L52"
        },
        {
          "name": "CommerceBrand__7b1b990b7c90",
          "source": "packages/business/dist/types/commerce/types.d.ts#L8"
        },
        {
          "name": "ExactCatalogTiers",
          "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L5"
        },
        {
          "name": "ExactQuoteBounds__e9cf817917c1",
          "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L13"
        },
        {
          "name": "ExactRate",
          "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L1"
        },
        {
          "name": "MeasureRef",
          "source": "packages/business/dist/types/commerce/types.d.ts#L16"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.validateManifestIr",
      "name": "@farthershore/business.validateManifestIr",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/validate.d.ts#L18",
      "description": "Validate a candidate envelope against the platform schemas. On success\nthe returned `ir` is the JSON-normalized ORIGINAL candidate — NOT the\nzod-parsed value. The platform treats the business spec as a raw document\nbecause the YAML path never zod-transformed it before storing/compiling.\nValidation proves the document is acceptable; the bytes stay the author's.",
      "signature": "export declare function validateManifestIr(candidate: unknown): ValidationResult;",
      "typeReferences": [
        {
          "name": "ValidationResult",
          "source": "packages/business/dist/types/validate.d.ts#L3"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.validatePlanRateLimitCompleteness",
      "name": "@farthershore/business.validatePlanRateLimitCompleteness",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/validate.d.ts#L37",
      "description": "BUILD-completeness check (distinct from the structural `validateManifestIr`\nabove): emit an `error` issue for every plan missing a `limits[]` rule, using\nthe shared `isCompletePlanRateLimit` predicate so the LOCAL build matches the\nPUBLISH gate exactly (`isCompletePlanRateLimit`, apps/core\n`services/plan-rate-limit.ts`). A limitless plan thus fails at author/build\ntime instead of passing locally and only failing at push. The predicate is\nthe single source of truth in `@farthershore/contracts/plans`, so local ==\npublish by construction.\n\nIt is run by the build entry (`farthershore build` → src/bin.ts) AFTER a\nclean `compileBusinessToManifest`, NOT folded into the platform compiler's\nstructural validation: the compiler's direct callers (and the golden\nIR-equivalence fixtures) compile minimal, intentionally-limitless products\nto assert IR byte-identity, and must stay free of the completeness gate.\n\nThe hint names the plan + shows the minimal structured `limits` shape.",
      "signature": "export declare function validatePlanRateLimitCompleteness(ir: ManifestIrDocument): ManifestIssue[];",
      "typeReferences": [
        {
          "name": "ManifestIrDocument",
          "source": "packages/business/dist/types/ir-types.d.ts#L425"
        },
        {
          "name": "ManifestIssue",
          "source": "packages/business/dist/types/errors.d.ts#L2"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.business.root.ValidationResult",
      "name": "@farthershore/business.ValidationResult",
      "kind": "sdk",
      "collection": "business-sdk",
      "page": "generated/business-sdk/root",
      "source": "packages/business/dist/types/validate.d.ts#L3",
      "description": "Public export ValidationResult; see its declaration and owning guide.",
      "signature": "export type ValidationResult = {\n    ok: true;\n    ir: ManifestIrDocument;\n    irHash: string;\n} | {\n    ok: false;\n    issues: ManifestIssue[];\n};",
      "typeReferences": [
        {
          "name": "ManifestIrDocument",
          "source": "packages/business/dist/types/ir-types.d.ts#L425"
        },
        {
          "name": "ManifestIssue",
          "source": "packages/business/dist/types/errors.d.ts#L2"
        }
      ],
      "guide": "reference/business-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.classifyTabLanguage",
      "name": "@farthershore/farthershore-js/components/docs-chrome.classifyTabLanguage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L27",
      "description": "Normalize an arbitrary tab label/prop to a canonical language id, or `null`\nwhen the tab is auxiliary (a response/rotate/json strip — NOT a language\nvariant). Matching is case-insensitive and alias-aware.\n\nWhen `languages` is provided the info-string is matched against the declared\nset first: a match on `id` or any of a language's `aliases` (case-insensitive)\nwins and returns that language's `id`. Auxiliary labels always return `null`\nregardless. When no declared set is provided the built-in alias table is used\nas a fallback (js→node, py→python, golang→go) so existing callers are\nunaffected.",
      "signature": "export declare function classifyTabLanguage(labelOrProp: string, languages?: ReadonlyArray<DocsLanguage>): string | null;",
      "typeReferences": [
        {
          "name": "DocsLanguage",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.DocsCollection",
      "name": "@farthershore/farthershore-js/components/docs-chrome.DocsCollection",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections.d.ts#L2",
      "description": "A selectable documentation collection (a self-contained docs bundle).",
      "signature": "export type DocsCollection = {\n    /** Stable id: URL segment, R2 key prefix, storage key, and matching (e.g. \"api\"). */\n    id: string;\n    /** Human label for the selector/tab (e.g. \"API reference\"). */\n    label: string;\n    /** Optional tab image URL. The default selector renders it as an `<img src>`,\n     *  so it must be an absolute/root-relative URL or data: URI. */\n    icon?: string;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.DocsCollectionsContextValue",
      "name": "@farthershore/farthershore-js/components/docs-chrome.DocsCollectionsContextValue",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L2",
      "description": "Public export DocsCollectionsContextValue; see its declaration and owning guide.",
      "signature": "export type DocsCollectionsContextValue = {\n    /** The resolved active collection id, or null when there are no collections. */\n    activeCollection: string | null;\n    /** The full collection list (empty when unprovided / single bundle). */\n    collections: ReadonlyArray<DocsCollection>;\n    /** Switch the active collection (persists + lets the host navigate to it). */\n    setCollection: (id: string) => void;\n};",
      "typeReferences": [
        {
          "name": "DocsCollection",
          "source": "packages/farthershore-js/dist/components/docs-chrome/collections.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.DocsCollectionSelector",
      "name": "@farthershore/farthershore-js/components/docs-chrome.DocsCollectionSelector",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L51",
      "description": "Unstyled collection switcher — a `<button>` per collection (the host styles it\ninto a tab bar). Hidden entirely when there are ≤1 collections (a single-bundle\ndoc shows no control). Reads/writes through the docs collection context, so it\nis a drop-in once a `<DocsCollectionsProvider>` is in scope. Ships NO CSS:\nthe active tab is exposed via `aria-pressed` for the host to style.",
      "signature": "export declare function DocsCollectionSelector({ className, }?: DocsCollectionSelectorProps): import(\"react\").JSX.Element | null;",
      "typeReferences": [
        {
          "name": "DocsCollectionSelectorProps",
          "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L41"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.DocsCollectionSelectorProps",
      "name": "@farthershore/farthershore-js/components/docs-chrome.DocsCollectionSelectorProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L41",
      "description": "Public export DocsCollectionSelectorProps; see its declaration and owning guide.",
      "signature": "export type DocsCollectionSelectorProps = {\n    className?: string;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.DocsCollectionsProvider",
      "name": "@farthershore/farthershore-js/components/docs-chrome.DocsCollectionsProvider",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L10",
      "description": "Public export DocsCollectionsProvider; see its declaration and owning guide.",
      "signature": "declare const DocsCollectionsProvider: import(\"react\").Provider<DocsCollectionsContextValue>;",
      "typeReferences": [
        {
          "name": "DocsCollectionsContextValue",
          "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.DocsLanguage",
      "name": "@farthershore/farthershore-js/components/docs-chrome.DocsLanguage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L2",
      "description": "A selectable documentation language (an SDK/runtime target).",
      "signature": "export type DocsLanguage = {\n    /** Stable id used in `?lang=`, storage, and tab/page matching (e.g. \"node\"). */\n    id: string;\n    /** Human label for the selector (e.g. \"Node.js\"). */\n    label: string;\n    /** Optional icon key (renderer maps it to a glyph). */\n    icon?: string;\n    /**\n     * Additional spellings that should map to this language id (e.g. `[\"rb\"]` for\n     * Ruby, `[\"ts\"]` for TypeScript). Matching is case-insensitive.\n     */\n    aliases?: string[];\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.DocsLanguageContextValue",
      "name": "@farthershore/farthershore-js/components/docs-chrome.DocsLanguageContextValue",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L3",
      "description": "Public export DocsLanguageContextValue; see its declaration and owning guide.",
      "signature": "export type DocsLanguageContextValue = {\n    /** The resolved active language id, or null when there is no language concept. */\n    activeLanguage: string | null;\n    /** The full language list (empty when unprovided / single-language). */\n    languages: ReadonlyArray<DocsLanguage>;\n    /** Switch the active language (persists + reflects into `?lang=`). */\n    setLanguage: (id: string) => void;\n};",
      "typeReferences": [
        {
          "name": "DocsLanguage",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.DocsLanguageProvider",
      "name": "@farthershore/farthershore-js/components/docs-chrome.DocsLanguageProvider",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L11",
      "description": "Public export DocsLanguageProvider; see its declaration and owning guide.",
      "signature": "declare const DocsLanguageProvider: import(\"react\").Provider<DocsLanguageContextValue>;",
      "typeReferences": [
        {
          "name": "DocsLanguageContextValue",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.DocsLanguageScopedPage",
      "name": "@farthershore/farthershore-js/components/docs-chrome.DocsLanguageScopedPage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L74",
      "description": "A docs page that may be scoped to a subset of languages.",
      "signature": "export type DocsLanguageScopedPage = {\n    /** When present, the page only exists for these languages. */\n    languages?: ReadonlyArray<string> | null;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.DocsLanguageSelector",
      "name": "@farthershore/farthershore-js/components/docs-chrome.DocsLanguageSelector",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L47",
      "description": "Native `<select>` language switcher — the language analogue of the docs\nversion selector. Hidden entirely when there are ≤1 languages (a\nsingle-language doc shows no control). Reads/writes through the docs language\ncontext, so it is a drop-in once a `<DocsLanguageProvider>` is in scope.\n\nWhen any language declares an `icon`, the selector renders a custom\nbutton-list so the icon can appear alongside the label. When no icons are\ndeclared the native `<select>` is used (lighter, more accessible on mobile).",
      "signature": "export declare function DocsLanguageSelector({ className, }?: DocsLanguageSelectorProps): import(\"react\").JSX.Element | null;",
      "typeReferences": [
        {
          "name": "DocsLanguageSelectorProps",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L34"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.DocsLanguageSelectorProps",
      "name": "@farthershore/farthershore-js/components/docs-chrome.DocsLanguageSelectorProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L34",
      "description": "Public export DocsLanguageSelectorProps; see its declaration and owning guide.",
      "signature": "export type DocsLanguageSelectorProps = {\n    className?: string;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.DocsLanguageTab",
      "name": "@farthershore/farthershore-js/components/docs-chrome.DocsLanguageTab",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L50",
      "description": "A docs code tab — language variants carry a `lang`, aux tabs do not.",
      "signature": "export type DocsLanguageTab = {\n    label: string;\n    /**\n     * The tab's language id. When absent it is derived from the label via\n     * {@link classifyTabLanguage} (so existing tab shapes need no change).\n     */\n    lang?: string | null;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.isPageVisibleForLanguage",
      "name": "@farthershore/farthershore-js/components/docs-chrome.isPageVisibleForLanguage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L85",
      "description": "Whether a page is visible for the active language. A page with no\n`languages` (the common case) is universal — visible for every language and\nwhen no language is selected. A scoped page is visible only when its list\nincludes the active language (and is hidden when no language is selected,\nsince it was explicitly scoped).",
      "signature": "export declare function isPageVisibleForLanguage(page: DocsLanguageScopedPage, activeLanguage: string | null): boolean;",
      "typeReferences": [
        {
          "name": "DocsLanguageScopedPage",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L74"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.LangBlock",
      "name": "@farthershore/farthershore-js/components/docs-chrome.LangBlock",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L59",
      "description": "Render `children` only when the active docs language matches `lang` (a single\nid or a comma-separated allow-list). With no active language (single-language\n/ unprovided) NOTHING is rendered — `<LangBlock>` is inherently a\nmulti-language affordance, so it stays inert until a language is chosen.",
      "signature": "export declare function LangBlock({ lang, children }: LangBlockProps): import(\"react\").JSX.Element | null;",
      "typeReferences": [
        {
          "name": "LangBlockProps",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L48"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.LangBlockProps",
      "name": "@farthershore/farthershore-js/components/docs-chrome.LangBlockProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L48",
      "description": "Public export LangBlockProps; see its declaration and owning guide.",
      "signature": "export type LangBlockProps = {\n    /** One language id or a comma-separated list (e.g. \"go,node\"). */\n    lang: string;\n    children?: ReactNode;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.resolveActiveCollection",
      "name": "@farthershore/farthershore-js/components/docs-chrome.resolveActiveCollection",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections.d.ts#L32",
      "description": "Resolve the active collection id following the precedence:\n  explicit route → stored → defaultCollection → collections[0] → null\n\nA candidate only wins when it is actually one of `collections` (an unknown\nroute segment or a stale stored value is ignored, falling through to the next\nsource). With no collections at all the result is `null` — the \"single\nbundle / no collections\" sentinel every consumer treats as \"render the one\nbundle, show no tab bar\".",
      "signature": "export declare function resolveActiveCollection(input: ResolveActiveCollectionInput): string | null;",
      "typeReferences": [
        {
          "name": "ResolveActiveCollectionInput",
          "source": "packages/farthershore-js/dist/components/docs-chrome/collections.d.ts#L12"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.ResolveActiveCollectionInput",
      "name": "@farthershore/farthershore-js/components/docs-chrome.ResolveActiveCollectionInput",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections.d.ts#L12",
      "description": "Inputs to {@link resolveActiveCollection} — every source is optional.",
      "signature": "export type ResolveActiveCollectionInput = {\n    /** Explicit selection from the route (first path segment); highest precedence. */\n    explicit?: string | null;\n    /** Last persisted selection (scoped localStorage). */\n    stored?: string | null;\n    /** The doc's declared default collection. */\n    defaultCollection?: string | null;\n    /** The doc's full collection list. */\n    collections?: ReadonlyArray<DocsCollection> | null;\n};",
      "typeReferences": [
        {
          "name": "DocsCollection",
          "source": "packages/farthershore-js/dist/components/docs-chrome/collections.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.resolveActiveLanguage",
      "name": "@farthershore/farthershore-js/components/docs-chrome.resolveActiveLanguage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L48",
      "description": "Resolve the active language id following the precedence:\n  explicit `?lang=`  →  stored  →  defaultLanguage  →  languages[0]  →  null\n\nA candidate only wins when it is actually one of `languages` (an unknown\n`?lang=` or a stale stored value is ignored, falling through to the next\nsource). With no languages at all the result is `null` — the \"no language\nconcept\" sentinel every consumer treats as \"render everything\".",
      "signature": "export declare function resolveActiveLanguage(input: ResolveActiveLanguageInput): string | null;",
      "typeReferences": [
        {
          "name": "ResolveActiveLanguageInput",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L29"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.ResolveActiveLanguageInput",
      "name": "@farthershore/farthershore-js/components/docs-chrome.ResolveActiveLanguageInput",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L29",
      "description": "Inputs to {@link resolveActiveLanguage} — every source is optional.",
      "signature": "export type ResolveActiveLanguageInput = {\n    /** Explicit selection from the URL (`?lang=`); highest precedence. */\n    explicit?: string | null;\n    /** Last persisted selection (scoped localStorage). */\n    stored?: string | null;\n    /** The doc's declared default language. */\n    defaultLanguage?: string | null;\n    /** The doc's full language list. */\n    languages?: ReadonlyArray<DocsLanguage> | null;\n};",
      "typeReferences": [
        {
          "name": "DocsLanguage",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.selectLanguageTabs",
      "name": "@farthershore/farthershore-js/components/docs-chrome.selectLanguageTabs",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L72",
      "description": "Partition `tabs` into language variants vs auxiliary tabs and keep only the\nactive language's variant (plus every aux tab), in original order.\n\nByte-identical guarantee: if there is ≤1 language tab, OR `activeLanguage`\nis `null`, the input is returned UNCHANGED (same array, same order) — a\nsingle-language / no-language page never sees filtering. Otherwise the\nactive-language tab is kept (falling back to the FIRST language tab when the\nactive language has no variant here, so the card is never blank), followed by\nall aux tabs.\n\nWhen `languages` is provided it is forwarded to {@link classifyTabLanguage}\nso that builder-declared languages (with custom aliases) are recognized.",
      "signature": "export declare function selectLanguageTabs<T extends DocsLanguageTab>(tabs: ReadonlyArray<T>, activeLanguage: string | null, languages?: ReadonlyArray<DocsLanguage>): ReadonlyArray<T>;",
      "typeReferences": [
        {
          "name": "DocsLanguage",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L2"
        },
        {
          "name": "DocsLanguageTab",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L50"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.SpyHeading",
      "name": "@farthershore/farthershore-js/components/docs-chrome.SpyHeading",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/nav-hooks.d.ts#L22",
      "description": "Minimal heading shape both renderers share (depth-tagged TOC entries).",
      "signature": "export type SpyHeading = {\n    id: string;\n    depth: number;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.useDocsCollections",
      "name": "@farthershore/farthershore-js/components/docs-chrome.useDocsCollections",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L12",
      "description": "Read the active docs collection. Unprovided → `{ activeCollection: null, … }`.",
      "signature": "export declare function useDocsCollections(): DocsCollectionsContextValue;",
      "typeReferences": [
        {
          "name": "DocsCollectionsContextValue",
          "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.useDocsCollectionsState",
      "name": "@farthershore/farthershore-js/components/docs-chrome.useDocsCollectionsState",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L40",
      "description": "Derives the active-collection context value from the route: the URL segment\nis the source of truth (see `resolveActiveCollection` precedence), so there is\nno separate persisted state — a bare `/docs` falls back to `defaultCollection`\nthen `collections[0]`. `setCollection` invokes `onSelect` so the host\nnavigates; the resulting route change re-derives `activeCollection`. SSR-safe:\na pure derivation from props, no window access.",
      "signature": "export declare function useDocsCollectionsState(options: UseDocsCollectionsStateOptions): DocsCollectionsContextValue;",
      "typeReferences": [
        {
          "name": "DocsCollectionsContextValue",
          "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L2"
        },
        {
          "name": "UseDocsCollectionsStateOptions",
          "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L13"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.UseDocsCollectionsStateOptions",
      "name": "@farthershore/farthershore-js/components/docs-chrome.UseDocsCollectionsStateOptions",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L13",
      "description": "Public export UseDocsCollectionsStateOptions; see its declaration and owning guide.",
      "signature": "export type UseDocsCollectionsStateOptions = {\n    /** The doc's full collection list. */\n    collections: ReadonlyArray<DocsCollection>;\n    /** The doc's declared default collection. */\n    defaultCollection?: string | null;\n    /**\n     * The collection id encoded in the current route (first path segment). The\n     * URL is the source of truth for this route-bearing axis, so it wins;\n     * `defaultCollection` then `collections[0]` are the fallbacks for a bare\n     * `/docs`.\n     */\n    routeCollection?: string | null;\n    /**\n     * Called when the user picks a DIFFERENT collection, so the host can navigate\n     * to its landing page. Keeps this layer router-agnostic (no product-docs /\n     * router dependency); the route change is what actually flips the active tab.\n     */\n    onSelect?: (collection: DocsCollection) => void;\n};",
      "typeReferences": [
        {
          "name": "DocsCollection",
          "source": "packages/farthershore-js/dist/components/docs-chrome/collections.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.useDocsLanguage",
      "name": "@farthershore/farthershore-js/components/docs-chrome.useDocsLanguage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L13",
      "description": "Read the active docs language. Unprovided → `{ activeLanguage: null, … }`.",
      "signature": "export declare function useDocsLanguage(): DocsLanguageContextValue;",
      "typeReferences": [
        {
          "name": "DocsLanguageContextValue",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.useDocsLanguageState",
      "name": "@farthershore/farthershore-js/components/docs-chrome.useDocsLanguageState",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L33",
      "description": "Owns the active-language state for a docs surface: resolves the initial value\n(explicit `?lang=` → stored → defaultLanguage → languages[0] → null),\npersists changes to a scope-namespaced localStorage key, and reflects the\nchoice into `?lang=` (merging, never clobbering `?v=`/`?view=`). Returns the\ncontext value to feed `<DocsLanguageProvider>`.\n\nSSR-safe: the initial state ignores window on the server (resolves from the\ndeclared default/list only); the explicit/stored sources are merged on the\nclient in an effect, so the first hydration matches the server snapshot.",
      "signature": "export declare function useDocsLanguageState(options: UseDocsLanguageStateOptions): DocsLanguageContextValue;",
      "typeReferences": [
        {
          "name": "DocsLanguageContextValue",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L3"
        },
        {
          "name": "UseDocsLanguageStateOptions",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L14"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.UseDocsLanguageStateOptions",
      "name": "@farthershore/farthershore-js/components/docs-chrome.UseDocsLanguageStateOptions",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L14",
      "description": "Public export UseDocsLanguageStateOptions; see its declaration and owning guide.",
      "signature": "export type UseDocsLanguageStateOptions = {\n    /** The doc's full language list. */\n    languages: ReadonlyArray<DocsLanguage>;\n    /** The doc's declared default language. */\n    defaultLanguage?: string | null;\n    /** Namespaces the localStorage key so different docs don't share a choice. */\n    scopeKey?: string | null;\n};",
      "typeReferences": [
        {
          "name": "DocsLanguage",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.useHeadingSpy",
      "name": "@farthershore/farthershore-js/components/docs-chrome.useHeadingSpy",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/nav-hooks.d.ts#L35",
      "description": "Track which h2 (`depth === 2`) heading is currently in view, for the active\nsidebar sub-tree highlight. Observes every h2 element by id with a bottom\nroot-margin so a heading counts as \"active\" once it scrolls near the top,\nand seeds the active id to the first h2 so something is highlighted before\nthe first scroll. Re-runs when the heading set or `key` (the current slug)\nchanges. Returns `[activeHeadingId, setActiveHeadingId]` — the setter lets a\nsub-tree link mark itself active on click (both renderers do this).",
      "signature": "export declare function useHeadingSpy(headings: ReadonlyArray<SpyHeading>, key: string): [string | null, Dispatch<SetStateAction<string | null>>];",
      "typeReferences": [
        {
          "name": "SpyHeading",
          "source": "packages/farthershore-js/dist/components/docs-chrome/nav-hooks.d.ts#L22"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.useOpenGroups",
      "name": "@farthershore/farthershore-js/components/docs-chrome.useOpenGroups",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/nav-hooks.d.ts#L20",
      "description": "Multi-open accordion state for docs nav groups. The group holding the current\npage (`activeGroupTitle`) opens by default, navigating to a page in another\ngroup ADDS that group (never collapsing one the reader opened), and the open\nset persists across the per-navigation shell remount via `openGroupsMemory`.\n\nOwn this ONCE per shell and share the result across the sidebar + mobile\ndrawer nav instances — two states writing the shared memory would race\nlast-writer-wins and drop a group opened in the other pane.",
      "signature": "export declare function useOpenGroups(activeGroupTitle: string | null): UseOpenGroupsResult;",
      "typeReferences": [
        {
          "name": "UseOpenGroupsResult",
          "source": "packages/farthershore-js/dist/components/docs-chrome/nav-hooks.d.ts#L4"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components-docs-chrome.UseOpenGroupsResult",
      "name": "@farthershore/farthershore-js/components/docs-chrome.UseOpenGroupsResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components-docs-chrome",
      "source": "packages/farthershore-js/dist/components/docs-chrome/nav-hooks.d.ts#L4",
      "description": "Public export UseOpenGroupsResult; see its declaration and owning guide.",
      "signature": "export type UseOpenGroupsResult = {\n    /** The currently-expanded group titles. */\n    openGroups: Set<string>;\n    /** Toggle one group open/closed (multi-open: never collapses the others). */\n    toggleGroup: (title: string) => void;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components._resetBusinessDocsCache",
      "name": "@farthershore/farthershore-js/components._resetBusinessDocsCache",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/fetch-product-docs.d.ts#L10",
      "description": "Test seam — clear the session-scoped docs memo between cases.",
      "signature": "export declare function _resetBusinessDocsCache(): void;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.AccessDenied",
      "name": "@farthershore/farthershore-js/components.AccessDenied",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/access-denied.d.ts#L37",
      "description": "A self-contained \"you don't have access\" card that names the missing\npermission and (optionally) starts a request-access flow.",
      "signature": "export declare function AccessDenied({ requiredPermission, variant, title, description, onRequestAccess, className, }: AccessDeniedProps): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "AccessDeniedProps",
          "source": "packages/farthershore-js/dist/components/access-denied.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.AccessDeniedProps",
      "name": "@farthershore/farthershore-js/components.AccessDeniedProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/access-denied.d.ts#L2",
      "description": "Public export AccessDeniedProps; see its declaration and owning guide.",
      "signature": "export interface AccessDeniedProps {\n    /** The missing permission, named for the user (e.g. `audit_log:read`).\n     *  Omit when unknown (a bare 403). */\n    requiredPermission?: string;\n    /** Presentation size: `page` (default) for a route-level deny, `inline`\n     *  for an embedded section. */\n    variant?: \"page\" | \"inline\";\n    /** Override the title. */\n    title?: string;\n    /** Extra context under the title (defaults to a role-based explanation). */\n    description?: ReactNode;\n    /**\n     * When provided, renders a \"Request access\" button. Resolve the promise to\n     * flip the button into a confirmation (\"Request sent — an owner will\n     * review it.\"); reject to show a retryable error. Wire it to\n     * `fs.rbac.accessRequests.create(...)` or any custom flow.\n     */\n    onRequestAccess?: () => Promise<void> | void;\n    /** Appended to the root card. */\n    className?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.ApiKeysPanel",
      "name": "@farthershore/farthershore-js/components.ApiKeysPanel",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/keys.d.ts#L12",
      "description": "Exported with its own error boundary: a render throw here shows a contained\n\"couldn't be displayed\" box instead of unmounting the host's page. Wrapped in\nTHIS module rather than the barrel so `export { ApiKeysPanel }` stays a pure\nre-export and the components barrel remains tree-shakeable.",
      "signature": "declare const ApiKeysPanel: typeof ApiKeysPanelImpl__ec7052a86409;",
      "typeReferences": [
        {
          "name": "ApiKeysPanelImpl__ec7052a86409",
          "source": "packages/farthershore-js/dist/components/keys.d.ts#L5"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.ApiKeysPanelProps",
      "name": "@farthershore/farthershore-js/components.ApiKeysPanelProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/keys.d.ts#L1",
      "description": "Public export ApiKeysPanelProps; see its declaration and owning guide.",
      "signature": "export interface ApiKeysPanelProps {\n    /** Appended to the root element. */\n    className?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.AuditLogTable",
      "name": "@farthershore/farthershore-js/components.AuditLogTable",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/audit-log-table.d.ts#L19",
      "description": "Exported with its own error boundary: a render throw here shows a contained\n\"couldn't be displayed\" box instead of unmounting the host's page. Wrapped in\nTHIS module rather than the barrel so `export { AuditLogTable }` stays a pure\nre-export and the components barrel remains tree-shakeable.",
      "signature": "declare const AuditLogTable: typeof AuditLogTableImpl__b13b7a55916f;",
      "typeReferences": [
        {
          "name": "AuditLogTableImpl__b13b7a55916f",
          "source": "packages/farthershore-js/dist/components/audit-log-table.d.ts#L12"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.AuditLogTableProps",
      "name": "@farthershore/farthershore-js/components.AuditLogTableProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/audit-log-table.d.ts#L1",
      "description": "Public export AuditLogTableProps; see its declaration and owning guide.",
      "signature": "export interface AuditLogTableProps {\n    /** Appended to the root card. */\n    className?: string;\n    /** Heading text. Defaults to \"Audit log\". */\n    title?: string;\n    /**\n     * Request-local workspace scope. Pass `null` to read the user's default\n     * subscription without changing the portal's selected workspace.\n     */\n    organizationId?: string | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.AuthGuardDecision",
      "name": "@farthershore/farthershore-js/components.AuthGuardDecision",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auth-guard.d.ts#L9",
      "description": "Public export AuthGuardDecision; see its declaration and owning guide.",
      "signature": "export interface AuthGuardDecision {\n    status: AuthGuardStatus;\n    /** Present only when `status === \"redirecting\"` — where the host should go. */\n    redirectTo?: string;\n}",
      "typeReferences": [
        {
          "name": "AuthGuardStatus",
          "source": "packages/farthershore-js/dist/components/auth-guard.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.AuthGuardInput",
      "name": "@farthershore/farthershore-js/components.AuthGuardInput",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auth-guard.d.ts#L14",
      "description": "Public export AuthGuardInput; see its declaration and owning guide.",
      "signature": "export interface AuthGuardInput {\n    /** Whether the auth layer has finished initializing. */\n    loaded: boolean;\n    /** Whether a user is currently signed in. */\n    signedIn: boolean;\n    /** Whether the gated surface requires authentication. */\n    requireAuth: boolean;\n    /** Where to send a signed-out user off an auth-required surface. Defaults to\n     *  \"/\" (the public landing — the dev-portal-template convention). */\n    redirectTo?: string;\n    /** A Managed-RBAC permission the surface additionally requires (FAR-700),\n     *  in the `<route-id>:read|write` grammar. Checked via {@link hasPermission}\n     *  AFTER the sign-in gate; a signed-in user lacking it → `denied`.\n     *\n     *  ⚠️ UX ONLY: this hides UI, but the gateway's `permission` constraint is\n     *  the security boundary — a call the user isn't permitted to make is\n     *  denied at the edge regardless of what the client renders. */\n    requirePermission?: string;\n    /** The permission check (normally `useFsAuth().hasPermission`). Required\n     *  for `requirePermission` to have any effect; returns false while the\n     *  server-resolved permissions are still loading, so the guard denies\n     *  first and reveals once they arrive. */\n    hasPermission?: (key: string) => boolean;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.AuthGuardStatus",
      "name": "@farthershore/farthershore-js/components.AuthGuardStatus",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auth-guard.d.ts#L8",
      "description": "The guard's resolved decision. `redirecting` carries the target the host\nshould navigate to; `allowed` reveals the protected subtree; `loading`\nholds (no flash) until the auth layer settles; `denied` means the user is\nsigned in but lacks a required Managed-RBAC permission (FAR-700) — render\nthe fallback, don't redirect.",
      "signature": "export type AuthGuardStatus = \"loading\" | \"allowed\" | \"redirecting\" | \"denied\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.AuthLoading",
      "name": "@farthershore/farthershore-js/components.AuthLoading",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auth.d.ts#L30",
      "description": "Renders children only while the auth layer is initializing.",
      "signature": "export declare function AuthLoading({ children }: {\n    children: ReactNode;\n}): import(\"react\").JSX.Element | null;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.AutoKeyBanner",
      "name": "@farthershore/farthershore-js/components.AutoKeyBanner",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auto-key-banner.d.ts#L7",
      "description": "Public export AutoKeyBanner; see its declaration and owning guide.",
      "signature": "export declare function AutoKeyBanner({ className, title, }?: AutoKeyBannerProps): import(\"react\").JSX.Element | null;",
      "typeReferences": [
        {
          "name": "AutoKeyBannerProps",
          "source": "packages/farthershore-js/dist/components/auto-key-banner.d.ts#L1"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.AutoKeyBannerProps",
      "name": "@farthershore/farthershore-js/components.AutoKeyBannerProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auto-key-banner.d.ts#L1",
      "description": "Public export AutoKeyBannerProps; see its declaration and owning guide.",
      "signature": "export interface AutoKeyBannerProps {\n    /** Appended to the banner root. */\n    className?: string;\n    /** Heading. Defaults to \"Your API key\". */\n    title?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BillingSummary",
      "name": "@farthershore/farthershore-js/components.BillingSummary",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/billing.d.ts#L20",
      "description": "Exported with its own error boundary: a render throw here shows a contained\n\"couldn't be displayed\" box instead of unmounting the host's page. Wrapped in\nTHIS module rather than the barrel so `export { BillingSummary }` stays a pure\nre-export and the components barrel remains tree-shakeable.",
      "signature": "declare const BillingSummary: typeof BillingSummaryImpl__8a108aa98a90;",
      "typeReferences": [
        {
          "name": "BillingSummaryImpl__8a108aa98a90",
          "source": "packages/farthershore-js/dist/components/billing.d.ts#L13"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BillingSummaryProps",
      "name": "@farthershore/farthershore-js/components.BillingSummaryProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/billing.d.ts#L2",
      "description": "Public export BillingSummaryProps; see its declaration and owning guide.",
      "signature": "export interface BillingSummaryProps {\n    /** Appended to the root card. */\n    className?: string;\n    /** Override specific regions of the default card. */\n    slots?: {\n        /** Replaces the default \"Manage billing\" CTA button. A host overriding\n         *  this owns its own behavior — internal handlers (e.g. `onManage`) are\n         *  deliberately not exposed through the slot. */\n        actions?: ReactNode;\n    };\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BillPreviewCard",
      "name": "@farthershore/farthershore-js/components.BillPreviewCard",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/bill-preview-card.d.ts#L11",
      "description": "Exported with its own error boundary: a render throw here shows a contained\n\"couldn't be displayed\" box instead of unmounting the host's page.",
      "signature": "declare const BillPreviewCard: typeof BillPreviewCardImpl__d0492f0124c1;",
      "typeReferences": [
        {
          "name": "BillPreviewCardImpl__d0492f0124c1",
          "source": "packages/farthershore-js/dist/components/bill-preview-card.d.ts#L6"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BillPreviewView",
      "name": "@farthershore/farthershore-js/components.BillPreviewView",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/bill-preview-card.d.ts#L3",
      "description": "Pure presenter — props in, markup out; renderable against fixtures.",
      "signature": "export declare function BillPreviewView({ preview }: {\n    preview: BillPreview__c6a85a661e87;\n}): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "BillPreview__c6a85a661e87",
          "source": "packages/farthershore-js/dist/types.d.ts#L1284"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessApiOperationEntry",
      "name": "@farthershore/farthershore-js/components.BusinessApiOperationEntry",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L101",
      "description": "Public export BusinessApiOperationEntry; see its declaration and owning guide.",
      "signature": "export type BusinessApiOperationEntry = {\n    id: string;\n    method: BusinessOpenApiHttpMethod;\n    path: string;\n    displayPath: string;\n    operationId?: string;\n    summary: string;\n    description?: string;\n    tags: string[];\n    deprecated: boolean;\n    parameters: BusinessOpenApiParameterObject[];\n    requestBody?: BusinessOpenApiRequestBodyObject;\n    responses: BusinessApiResponseEntry[];\n    security: string[];\n    serverUrl?: string;\n};",
      "typeReferences": [
        {
          "name": "BusinessApiResponseEntry",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L93"
        },
        {
          "name": "BusinessOpenApiHttpMethod",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L2"
        },
        {
          "name": "BusinessOpenApiParameterObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L35"
        },
        {
          "name": "BusinessOpenApiRequestBodyObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L44"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessApiReference",
      "name": "@farthershore/farthershore-js/components.BusinessApiReference",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L140",
      "description": "Public export BusinessApiReference; see its declaration and owning guide.",
      "signature": "export declare function BusinessApiReference({ document, title, description, serverUrl, filterTags, showInfo, className, emptyState, }: BusinessApiReferenceProps): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "BusinessApiReferenceProps",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L117"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessApiReferenceProps",
      "name": "@farthershore/farthershore-js/components.BusinessApiReferenceProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L117",
      "description": "Public export BusinessApiReferenceProps; see its declaration and owning guide.",
      "signature": "export interface BusinessApiReferenceProps {\n    /** OpenAPI 3.x document or compatible subset. */\n    document: BusinessOpenApiDocument;\n    /** Override `document.info.title`. */\n    title?: string;\n    /** Override `document.info.description`. Markdown-lite is supported. */\n    description?: string;\n    /** Override the displayed server. Defaults to the first server in scope. */\n    serverUrl?: string;\n    /** Only render operations whose tags intersect this allow-list. */\n    filterTags?: string[];\n    /** Render the document title/version/description header. Default true. */\n    showInfo?: boolean;\n    /** Appended to the root. */\n    className?: string;\n    /** Optional empty state when the document has no operations. */\n    emptyState?: ReactNode;\n}",
      "typeReferences": [
        {
          "name": "BusinessOpenApiDocument",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L76"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessApiResponseEntry",
      "name": "@farthershore/farthershore-js/components.BusinessApiResponseEntry",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L93",
      "description": "Public export BusinessApiResponseEntry; see its declaration and owning guide.",
      "signature": "export type BusinessApiResponseEntry = {\n    status: string;\n    description?: string;\n    content: Array<{\n        mediaType: string;\n        schema?: BusinessOpenApiSchemaObject | BusinessOpenApiReferenceObject;\n    }>;\n};",
      "typeReferences": [
        {
          "name": "BusinessOpenApiReferenceObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L3"
        },
        {
          "name": "BusinessOpenApiSchemaObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocs",
      "name": "@farthershore/farthershore-js/components.BusinessDocs",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs.d.ts#L151",
      "description": "Public export BusinessDocs; see its declaration and owning guide.",
      "signature": "export declare function BusinessDocs(props?: BusinessDocsProps): JSX.Element;",
      "typeReferences": [
        {
          "name": "BusinessDocsProps",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs.d.ts#L127"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsCodeCard",
      "name": "@farthershore/farthershore-js/components.BusinessDocsCodeCard",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-shell.d.ts#L64",
      "description": "Tabbed code card for `<CodeBlock>` MDX elements. Ported from the SSR card\nminus the expand-to-fullscreen dialog (simplification — copy + tabs +\nresponse strip are intact).",
      "signature": "export declare function BusinessDocsCodeCard({ block, }: {\n    block: BusinessDocsCodeBlock__2a7a6f0b1817;\n}): import(\"react\").JSX.Element | null;",
      "typeReferences": [
        {
          "name": "BusinessDocsCodeBlock__2a7a6f0b1817",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-mdx.d.ts#L22"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsCollection",
      "name": "@farthershore/farthershore-js/components.BusinessDocsCollection",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L29",
      "description": "A collection is a self-contained docs bundle (its own navigation + pages).\nWhen an index declares `collections`, page slugs are QUALIFIED with the\ncollection id (`<id>/<slug>`) — so the collection is simply the first segment\nof an ordinary slug and all routing/href/fetch machinery keeps working.",
      "signature": "export type BusinessDocsCollection = {\n    id: string;\n    label: string;\n    /** Optional tab image, rendered as an `<img src>` — an absolute/root-relative\n     *  URL or data: URI (bare tokens are dropped by the reader). */\n    icon?: string;\n    /** The collection's landing page (a qualified `<id>/<slug>`). */\n    defaultPage: string;\n    navigation: BusinessDocsNavGroup[];\n    /** Flattened qualified slugs, in navigation order. */\n    pages: string[];\n};",
      "typeReferences": [
        {
          "name": "BusinessDocsNavGroup",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L18"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsData",
      "name": "@farthershore/farthershore-js/components.BusinessDocsData",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/fetch-product-docs.d.ts#L2",
      "description": "Public export BusinessDocsData; see its declaration and owning guide.",
      "signature": "export type BusinessDocsData = {\n    index: BusinessDocsIndex;\n    docs: Record<string, string>;\n};",
      "typeReferences": [
        {
          "name": "BusinessDocsIndex",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L41"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsEmptyReason",
      "name": "@farthershore/farthershore-js/components.BusinessDocsEmptyReason",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs.d.ts#L40",
      "description": "Public export BusinessDocsEmptyReason; see its declaration and owning guide.",
      "signature": "export type BusinessDocsEmptyReason = \n/** The URL under /docs doesn't parse to a route. */\n\"invalid-route\"\n/** No docs published for this product yet. */\n | \"not-published\"\n/** The route is fine but this page isn't in the published index. */\n | \"page-not-found\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsEmptyShell",
      "name": "@farthershore/farthershore-js/components.BusinessDocsEmptyShell",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-view.d.ts#L31",
      "description": "Public export BusinessDocsEmptyShell; see its declaration and owning guide.",
      "signature": "export declare function BusinessDocsEmptyShell({ signedIn, standalonePreview, className, children, }: {\n    signedIn: boolean;\n    standalonePreview: boolean;\n    /** Appended to the mode's empty-shell className. */\n    className?: string;\n    children: ReactNode;\n}): import(\"react\").JSX.Element;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsEmptyState",
      "name": "@farthershore/farthershore-js/components.BusinessDocsEmptyState",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs.d.ts#L11",
      "description": "Titled empty state inside the mode-aware docs shell — the body the\ndefault experience shows for unpublished/missing docs.",
      "signature": "export declare function BusinessDocsEmptyState({ title, body, href, linkLabel, signedIn, standalonePreview, className, children, }: {\n    title: string;\n    body: string;\n    href?: string;\n    linkLabel?: string;\n    signedIn: boolean;\n    standalonePreview: boolean;\n    className?: string;\n    children?: ReactNode;\n}): JSX.Element;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsIndex",
      "name": "@farthershore/farthershore-js/components.BusinessDocsIndex",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L41",
      "description": "Public export BusinessDocsIndex; see its declaration and owning guide.",
      "signature": "export type BusinessDocsIndex = {\n    title?: string;\n    description?: string;\n    defaultPage?: string;\n    version?: string;\n    /** Declared selectable languages (absent = single-language docs). */\n    languages?: DocsLanguage[];\n    defaultLanguage?: string;\n    navigation: BusinessDocsNavGroup[];\n    pages: string[];\n    /**\n     * Optional logical separation into multiple bundles (\"collections\"). Absent =\n     * single flat bundle (byte-identical to before collections existed). When\n     * present, top-level `navigation` is empty and each collection carries its\n     * own; `pages`/`defaultPage` span the collections (qualified slugs).\n     */\n    collections?: BusinessDocsCollection[];\n    /** The collection shown by default (a valid `collections[].id`). */\n    defaultCollection?: string;\n};",
      "typeReferences": [
        {
          "name": "BusinessDocsCollection",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L29"
        },
        {
          "name": "BusinessDocsNavGroup",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L18"
        },
        {
          "name": "DocsLanguage",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsLoading",
      "name": "@farthershore/farthershore-js/components.BusinessDocsLoading",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs.d.ts#L22",
      "description": "The docs loading shell (mode-aware skeleton).",
      "signature": "export declare function BusinessDocsLoading({ signedIn, standalonePreview, className, }: {\n    signedIn: boolean;\n    standalonePreview: boolean;\n    className?: string;\n}): JSX.Element;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsMobileNav",
      "name": "@farthershore/farthershore-js/components.BusinessDocsMobileNav",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-shell.d.ts#L54",
      "description": "Public export BusinessDocsMobileNav; see its declaration and owning guide.",
      "signature": "export declare function BusinessDocsMobileNav({ index, currentSlug, view, }: {\n    index: BusinessDocsIndex;\n    currentSlug: string;\n    view?: \"standalone\";\n}): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "BusinessDocsIndex",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L41"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsNav",
      "name": "@farthershore/farthershore-js/components.BusinessDocsNav",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-shell.d.ts#L10",
      "description": "Public export BusinessDocsNav; see its declaration and owning guide.",
      "signature": "export declare function BusinessDocsNav({ index, currentSlug, collapsed, onNavigate, collapsibleGroups, view, headings, }: {\n    index: BusinessDocsIndex;\n    currentSlug: string;\n    collapsed?: boolean;\n    onNavigate?: () => void;\n    collapsibleGroups?: boolean;\n    view?: \"standalone\";\n    headings?: BusinessDocsHeading__a6d35f30fcdc[];\n}): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "BusinessDocsHeading__a6d35f30fcdc",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-mdx.d.ts#L8"
        },
        {
          "name": "BusinessDocsIndex",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L41"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsNavGroup",
      "name": "@farthershore/farthershore-js/components.BusinessDocsNavGroup",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L18",
      "description": "Public export BusinessDocsNavGroup; see its declaration and owning guide.",
      "signature": "export type BusinessDocsNavGroup = {\n    title: string;\n    icon?: string;\n    pages: BusinessDocsPageEntry[];\n};",
      "typeReferences": [
        {
          "name": "BusinessDocsPageEntry",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsPage",
      "name": "@farthershore/farthershore-js/components.BusinessDocsPage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-customize.d.ts#L24",
      "description": "The parsed shape of ONE docs page — what single-page mode resolves and what\n`<BusinessDocsPageBody>` renders. A subset of the full page-ready state, with\nthe shell-only fields (nav index, pager, mode) dropped.",
      "signature": "export interface BusinessDocsPage {\n    /** The page's slug within the docs tree. */\n    slug: string;\n    /** Frontmatter title, falling back to the index entry's title. */\n    title: string;\n    /** Frontmatter description (or the index entry's), if any. */\n    description?: string;\n    /** The page body with frontmatter stripped — the markdown/MDX source. */\n    mdxSource: string;\n    /** Extracted h2/h3 headings (for a custom on-this-page rail). */\n    headings: BusinessDocsHeading__a6d35f30fcdc[];\n    /** Parsed frontmatter (title/description/layout/previous/next). */\n    frontmatter: BusinessDocsFrontmatter__ceffafa81da1;\n}",
      "typeReferences": [
        {
          "name": "BusinessDocsFrontmatter__ceffafa81da1",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-mdx.d.ts#L1"
        },
        {
          "name": "BusinessDocsHeading__a6d35f30fcdc",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-mdx.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsPageActions",
      "name": "@farthershore/farthershore-js/components.BusinessDocsPageActions",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-shell.d.ts#L6",
      "description": "Public export BusinessDocsPageActions; see its declaration and owning guide.",
      "signature": "export declare function BusinessDocsPageActions({ markdown, standaloneHref, }: {\n    markdown: string;\n    standaloneHref?: string | null;\n}): import(\"react\").JSX.Element;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsPageBody",
      "name": "@farthershore/farthershore-js/components.BusinessDocsPageBody",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-customize.d.ts#L62",
      "description": "Low-level docs page BODY — markdown + interactive code cards (and an\noptional title/description hero), WITHOUT the docs shell (no sidebar, no\ntopbar, no pager). This is the seam for embedding a single docs page inside\na fully custom layout: resolve the page with the single-page mode of\n`useBusinessDocsPage`, then drop its body wherever you want.\n\nRenders inside `.fs-docs-prose` (and an `.fs-docs` scope) so the docs\nstylesheet still applies; the host owns everything around it.",
      "signature": "export declare function BusinessDocsPageBody({ page, mdxComponents, showHero, showPageActions, className, }: BusinessDocsPageBodyProps): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "BusinessDocsPageBodyProps",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-customize.d.ts#L38"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsPageBodyProps",
      "name": "@farthershore/farthershore-js/components.BusinessDocsPageBodyProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-customize.d.ts#L38",
      "description": "Public export BusinessDocsPageBodyProps; see its declaration and owning guide.",
      "signature": "export interface BusinessDocsPageBodyProps {\n    /** The resolved single page (from `useBusinessDocsPage({ slugPath, single:\n     *  true })`, or assembled by hand). */\n    page: BusinessDocsPage;\n    /** Override the markdown component map (threaded into SafeDocsMarkdown). */\n    mdxComponents?: DocsMdxComponents;\n    /** Show the title/description hero above the body. Default true. */\n    showHero?: boolean;\n    /** Show the copy-markdown page action in the hero. Default true (no\n     *  standalone-link action here — that is a shell concern). */\n    showPageActions?: boolean;\n    /** Appended to the body root className. */\n    className?: string;\n}",
      "typeReferences": [
        {
          "name": "BusinessDocsPage",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-customize.d.ts#L24"
        },
        {
          "name": "DocsMdxComponents",
          "source": "packages/farthershore-js/dist/components/product-docs/markdown.d.ts#L11"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsPageEntry",
      "name": "@farthershore/farthershore-js/components.BusinessDocsPageEntry",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L3",
      "description": "Public export BusinessDocsPageEntry; see its declaration and owning guide.",
      "signature": "export type BusinessDocsPageEntry = {\n    slug: string;\n    title: string;\n    description?: string;\n    icon?: string;\n    badge?: string;\n    layout?: BusinessDocsLayout__e9623ab37090;\n    hidden?: boolean;\n    /**\n     * When present, this page only exists for the listed language ids (filtered\n     * to the index's declared `languages`). Absent = universal. The reader-side\n     * filtering is the later B-LANG / C-LANG work.\n     */\n    languages?: string[];\n};",
      "typeReferences": [
        {
          "name": "BusinessDocsLayout__e9623ab37090",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsPageInput",
      "name": "@farthershore/farthershore-js/components.BusinessDocsPageInput",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs.d.ts#L71",
      "description": "Public export BusinessDocsPageInput; see its declaration and owning guide.",
      "signature": "export interface BusinessDocsPageInput {\n    /** Current docs path under /docs (\"\" = index). Defaults to the location. */\n    slugPath?: string;\n    /** Force the standalone (public) shell. Defaults to ?view=standalone. */\n    view?: \"standalone\";\n    /** Single-page mode — when true, the result still resolves the same\n     *  route → fetch → ready/empty state, but ALSO surfaces the resolved page\n     *  as `result.page` (title/description/mdxSource/headings/frontmatter) so a\n     *  builder can render ONE page (via `<BusinessDocsPageBody>`) inside a custom\n     *  layout, with no shell. Additive: the full shell fields are unaffected. */\n    single?: boolean;\n    /** Explicit active documentation language id. Wins over the URL `?lang=`.\n     *  When omitted the language resolves from `?lang=` → the index's\n     *  `defaultLanguage` → its first declared language → null (single-language).\n     *  Resolution only; the stateful selection lives in the language provider. */\n    language?: string | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsPager",
      "name": "@farthershore/farthershore-js/components.BusinessDocsPager",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-shell.d.ts#L67",
      "description": "Public export BusinessDocsPager; see its declaration and owning guide.",
      "signature": "export declare function BusinessDocsPager({ pages, current, defaultSlug, view, }: {\n    pages: BusinessDocsPageEntry[];\n    current: string;\n    defaultSlug?: string | null;\n    view?: \"standalone\";\n}): import(\"react\").JSX.Element | null;",
      "typeReferences": [
        {
          "name": "BusinessDocsPageEntry",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsPageResult",
      "name": "@farthershore/farthershore-js/components.BusinessDocsPageResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs.d.ts#L88",
      "description": "Public export BusinessDocsPageResult; see its declaration and owning guide.",
      "signature": "export interface BusinessDocsPageResult {\n    /** Resolved embedded/standalone mode (managed auth + standalone preview). */\n    mode: DocsMode;\n    signedIn: boolean;\n    standalonePreview: boolean;\n    /** Branding for the standalone topbar. */\n    productName: string;\n    iconUrl: string | null;\n    logoUrl: string | null;\n    /** Reserved for callers that navigate after hook resolution. */\n    redirectTo: string | null;\n    state: BusinessDocsPageState;\n    /** Single-page projection of the resolved page — non-null ONLY when the\n     *  state is `ready` (regardless of the `single` input flag, so it is also\n     *  available to shell callers that want the bare page shape). `null` while\n     *  booting/loading/empty. Feed straight into `<BusinessDocsPageBody>`. */\n    page: BusinessDocsPage | null;\n    /** The index's declared selectable languages (empty for single-language\n     *  docs / before the index resolves). Seed for `<DocsLanguageProvider>`. */\n    languages: ReadonlyArray<DocsLanguage>;\n    /** The resolved active language id (props → `?lang=` → defaultLanguage →\n     *  languages[0] → null). `null` = no language concept (render everything). */\n    activeLanguage: string | null;\n    /** Declared collections (empty for a single-bundle doc). Seed for\n     *  `<DocsCollectionsProvider>` and the tab bar. */\n    collections: ReadonlyArray<DocsCollection>;\n    /** The active collection id (first slug segment resolved against the declared\n     *  collections), or null for a single-bundle doc. */\n    activeCollection: string | null;\n}",
      "typeReferences": [
        {
          "name": "BusinessDocsPage",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-customize.d.ts#L24"
        },
        {
          "name": "BusinessDocsPageState",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs.d.ts#L47"
        },
        {
          "name": "DocsCollection",
          "source": "packages/farthershore-js/dist/components/docs-chrome/collections.d.ts#L2"
        },
        {
          "name": "DocsLanguage",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L2"
        },
        {
          "name": "DocsMode",
          "source": "packages/farthershore-js/dist/components/product-docs/docs-mode.d.ts#L11"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsPageState",
      "name": "@farthershore/farthershore-js/components.BusinessDocsPageState",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs.d.ts#L47",
      "description": "Public export BusinessDocsPageState; see its declaration and owning guide.",
      "signature": "export type BusinessDocsPageState = \n/** Bootstrap (product/branding) still resolving — nothing fetched yet. */\n{\n    status: \"booting\";\n}\n/** Docs fetch in flight, or a latest-release redirect is about to land. */\n | {\n    status: \"loading\";\n} | {\n    status: \"empty\";\n    reason: BusinessDocsEmptyReason;\n    backHref: string;\n} | {\n    status: \"ready\";\n    docs: BusinessDocsData;\n    currentSlug: string;\n    defaultSlug: string;\n    pageTitle: string;\n    pageDescription?: string;\n    mdxSource: string;\n    headings: BusinessDocsHeading__a6d35f30fcdc[];\n    frontmatter: BusinessDocsFrontmatter__ceffafa81da1;\n    standaloneHref: string;\n};",
      "typeReferences": [
        {
          "name": "BusinessDocsData",
          "source": "packages/farthershore-js/dist/components/product-docs/fetch-product-docs.d.ts#L2"
        },
        {
          "name": "BusinessDocsEmptyReason",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs.d.ts#L40"
        },
        {
          "name": "BusinessDocsFrontmatter__ceffafa81da1",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-mdx.d.ts#L1"
        },
        {
          "name": "BusinessDocsHeading__a6d35f30fcdc",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-mdx.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsProps",
      "name": "@farthershore/farthershore-js/components.BusinessDocsProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs.d.ts#L127",
      "description": "Public export BusinessDocsProps; see its declaration and owning guide.",
      "signature": "export interface BusinessDocsProps {\n    /** Current docs path under /docs (\"\" = index). When omitted the component\n     *  reads window.location.pathname itself (re-read on popstate). */\n    slugPath?: string;\n    /** Force the standalone (public) shell — the ?view=standalone preview.\n     *  When omitted it is read from window.location.search. */\n    view?: \"standalone\";\n    /** Host SPA router integration; defaults are plain anchors + location. */\n    Link?: DocsLinkComponent;\n    navigate?: DocsNavigate;\n    className?: string;\n    /** Override the markdown component map — a tag→component map merged OVER the\n     *  managed docs renderer (heading anchors, host-router links, copy-able\n     *  fenced code). Un-overridden tags keep managed behavior. Optional. */\n    mdxComponents?: DocsMdxComponents;\n    /** Host ReactNodes injected at named shell seams (headerBefore /\n     *  sidebarFooter / asideRail). Optional. */\n    slots?: BusinessDocsSlots;\n    /** Explicit active documentation language id — wins over the URL `?lang=`.\n     *  When omitted the language resolves from `?lang=` → the index's declared\n     *  default → its first language → null (single-language, no selector).\n     *  Optional. */\n    language?: string | null;\n}",
      "typeReferences": [
        {
          "name": "BusinessDocsSlots",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-customize.d.ts#L8"
        },
        {
          "name": "DocsLinkComponent",
          "source": "packages/farthershore-js/dist/components/product-docs/navigation.d.ts#L5"
        },
        {
          "name": "DocsMdxComponents",
          "source": "packages/farthershore-js/dist/components/product-docs/markdown.d.ts#L11"
        },
        {
          "name": "DocsNavigate",
          "source": "packages/farthershore-js/dist/components/product-docs/navigation.d.ts#L6"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsSearch",
      "name": "@farthershore/farthershore-js/components.BusinessDocsSearch",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-shell.d.ts#L50",
      "description": "Public export BusinessDocsSearch; see its declaration and owning guide.",
      "signature": "export declare function BusinessDocsSearch({ index, view, }: {\n    index: BusinessDocsIndex;\n    view?: \"standalone\";\n}): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "BusinessDocsIndex",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L41"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsSidebar",
      "name": "@farthershore/farthershore-js/components.BusinessDocsSidebar",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-shell.d.ts#L19",
      "description": "Public export BusinessDocsSidebar; see its declaration and owning guide.",
      "signature": "export declare function BusinessDocsSidebar({ title, index, currentSlug, collapsible, showSearch, showFooter, view, headings, extraFooter, }: {\n    title: string;\n    description?: string | null;\n    index: BusinessDocsIndex;\n    currentSlug: string;\n    collapsible?: boolean;\n    showSearch?: boolean;\n    showFooter?: boolean;\n    view?: \"standalone\";\n    headings?: BusinessDocsHeading__a6d35f30fcdc[];\n    /** Host node rendered in the sidebar's bottom region, below the nav and\n     *  above the powered-by footer — the `slots.sidebarFooter` seam. Optional;\n     *  hidden when the sidebar is collapsed. */\n    extraFooter?: ReactNode;\n}): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "BusinessDocsHeading__a6d35f30fcdc",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-mdx.d.ts#L8"
        },
        {
          "name": "BusinessDocsIndex",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L41"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsSlots",
      "name": "@farthershore/farthershore-js/components.BusinessDocsSlots",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-customize.d.ts#L8",
      "description": "Host-supplied ReactNodes injected at named seams of the managed docs shell.\nEach is optional and rendered verbatim — a builder adds a callout banner,\na sidebar footer, or a right-hand rail without re-composing the shell.",
      "signature": "export interface BusinessDocsSlots {\n    /** Rendered at the very top of the shell, before the topbar/sidebar — e.g.\n     *  an announcement banner spanning the full width. */\n    headerBefore?: ReactNode;\n    /** Rendered inside the sidebar's bottom region, below the nav — e.g. a\n     *  support link or version badge. */\n    sidebarFooter?: ReactNode;\n    /** Rendered as a right-hand rail alongside the article — e.g. an on-this-\n     *  page TOC or a \"was this helpful?\" widget. */\n    asideRail?: ReactNode;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsTopBar",
      "name": "@farthershore/farthershore-js/components.BusinessDocsTopBar",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-shell.d.ts#L41",
      "description": "The standalone docs header. Ported from the SSR BusinessDocsStandaloneHeader\n(brand → default docs page, version selector, mobile Browse docs, theme\ntoggle) plus a back-to-portal link. Rendered by BusinessDocsView only when\n`mode.showStandaloneHeader` — the embedded mode lives inside the host's\nown portal chrome and gets the in-main mobile nav instead (SSR parity).",
      "signature": "export declare function BusinessDocsTopBar({ productName, index, currentSlug, iconUrl, logoUrl, view, signedIn, }: {\n    productName: string;\n    index: BusinessDocsIndex;\n    currentSlug: string;\n    iconUrl?: string | null;\n    logoUrl?: string | null;\n    view?: \"standalone\";\n    signedIn: boolean;\n}): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "BusinessDocsIndex",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L41"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsView",
      "name": "@farthershore/farthershore-js/components.BusinessDocsView",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-view.d.ts#L30",
      "description": "Public export BusinessDocsView; see its declaration and owning guide.",
      "signature": "export declare function BusinessDocsView({ signedIn, standalonePreview, productName, docs, currentSlug, defaultSlug, iconUrl, logoUrl, pageTitle, pageDescription, mdxSource, headings, standaloneHref, className, mdxComponents, slots, activeCollection, }: BusinessDocsViewProps): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "BusinessDocsViewProps",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-view.d.ts#L6"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessDocsViewProps",
      "name": "@farthershore/farthershore-js/components.BusinessDocsViewProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-view.d.ts#L6",
      "description": "Public export BusinessDocsViewProps; see its declaration and owning guide.",
      "signature": "export type BusinessDocsViewProps = {\n    signedIn: boolean;\n    standalonePreview: boolean;\n    productName: string;\n    docs: BusinessDocsData;\n    currentSlug: string;\n    defaultSlug: string;\n    iconUrl: string | null;\n    logoUrl: string | null;\n    pageTitle: string;\n    pageDescription?: string;\n    mdxSource: string;\n    headings: BusinessDocsHeading__a6d35f30fcdc[];\n    standaloneHref: string;\n    /** Appended to the mode's root className (host-extension contract). */\n    className?: string;\n    /** Override the markdown component map — threaded into SafeDocsMarkdown. */\n    mdxComponents?: DocsMdxComponents;\n    /** Host ReactNodes injected at named shell seams. */\n    slots?: BusinessDocsSlots;\n    /** The active collection id when the docs set has collections (else null) —\n     *  scopes the sidebar/pager to that collection's bundle. */\n    activeCollection?: string | null;\n};",
      "typeReferences": [
        {
          "name": "BusinessDocsData",
          "source": "packages/farthershore-js/dist/components/product-docs/fetch-product-docs.d.ts#L2"
        },
        {
          "name": "BusinessDocsHeading__a6d35f30fcdc",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-mdx.d.ts#L8"
        },
        {
          "name": "BusinessDocsSlots",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-customize.d.ts#L8"
        },
        {
          "name": "DocsMdxComponents",
          "source": "packages/farthershore-js/dist/components/product-docs/markdown.d.ts#L11"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessOpenApiDocument",
      "name": "@farthershore/farthershore-js/components.BusinessOpenApiDocument",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L76",
      "description": "Public export BusinessOpenApiDocument; see its declaration and owning guide.",
      "signature": "export type BusinessOpenApiDocument = {\n    openapi?: string;\n    info?: {\n        title?: string;\n        version?: string;\n        description?: string;\n    };\n    servers?: BusinessOpenApiServer[];\n    tags?: Array<{\n        name: string;\n        description?: string;\n    }>;\n    paths?: Record<string, BusinessOpenApiPathItemObject>;\n    components?: {\n        schemas?: Record<string, BusinessOpenApiSchemaObject | BusinessOpenApiReferenceObject>;\n    };\n};",
      "typeReferences": [
        {
          "name": "BusinessOpenApiPathItemObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L70"
        },
        {
          "name": "BusinessOpenApiReferenceObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L3"
        },
        {
          "name": "BusinessOpenApiSchemaObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L8"
        },
        {
          "name": "BusinessOpenApiServer",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L54"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessOpenApiHttpMethod",
      "name": "@farthershore/farthershore-js/components.BusinessOpenApiHttpMethod",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L2",
      "description": "Public export BusinessOpenApiHttpMethod; see its declaration and owning guide.",
      "signature": "export type BusinessOpenApiHttpMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\" | \"options\" | \"head\" | \"trace\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessOpenApiMediaTypeObject",
      "name": "@farthershore/farthershore-js/components.BusinessOpenApiMediaTypeObject",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L25",
      "description": "Public export BusinessOpenApiMediaTypeObject; see its declaration and owning guide.",
      "signature": "export type BusinessOpenApiMediaTypeObject = {\n    schema?: BusinessOpenApiSchemaObject | BusinessOpenApiReferenceObject;\n    example?: unknown;\n    examples?: Record<string, {\n        summary?: string;\n        description?: string;\n        value?: unknown;\n        externalValue?: string;\n    }>;\n};",
      "typeReferences": [
        {
          "name": "BusinessOpenApiReferenceObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L3"
        },
        {
          "name": "BusinessOpenApiSchemaObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessOpenApiOperationObject",
      "name": "@farthershore/farthershore-js/components.BusinessOpenApiOperationObject",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L58",
      "description": "Public export BusinessOpenApiOperationObject; see its declaration and owning guide.",
      "signature": "export type BusinessOpenApiOperationObject = {\n    operationId?: string;\n    summary?: string;\n    description?: string;\n    tags?: string[];\n    deprecated?: boolean;\n    parameters?: Array<BusinessOpenApiParameterObject | BusinessOpenApiReferenceObject>;\n    requestBody?: BusinessOpenApiRequestBodyObject | BusinessOpenApiReferenceObject;\n    responses?: Record<string, BusinessOpenApiResponseObject | BusinessOpenApiReferenceObject>;\n    security?: BusinessOpenApiSecurityRequirement[];\n    servers?: BusinessOpenApiServer[];\n};",
      "typeReferences": [
        {
          "name": "BusinessOpenApiParameterObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L35"
        },
        {
          "name": "BusinessOpenApiReferenceObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L3"
        },
        {
          "name": "BusinessOpenApiRequestBodyObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L44"
        },
        {
          "name": "BusinessOpenApiResponseObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L49"
        },
        {
          "name": "BusinessOpenApiSecurityRequirement",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L53"
        },
        {
          "name": "BusinessOpenApiServer",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L54"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessOpenApiParameterObject",
      "name": "@farthershore/farthershore-js/components.BusinessOpenApiParameterObject",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L35",
      "description": "Public export BusinessOpenApiParameterObject; see its declaration and owning guide.",
      "signature": "export type BusinessOpenApiParameterObject = {\n    name: string;\n    in: \"path\" | \"query\" | \"header\" | \"cookie\" | string;\n    required?: boolean;\n    deprecated?: boolean;\n    description?: string;\n    schema?: BusinessOpenApiSchemaObject | BusinessOpenApiReferenceObject;\n    example?: unknown;\n};",
      "typeReferences": [
        {
          "name": "BusinessOpenApiReferenceObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L3"
        },
        {
          "name": "BusinessOpenApiSchemaObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessOpenApiPathItemObject",
      "name": "@farthershore/farthershore-js/components.BusinessOpenApiPathItemObject",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L70",
      "description": "Public export BusinessOpenApiPathItemObject; see its declaration and owning guide.",
      "signature": "export type BusinessOpenApiPathItemObject = {\n    summary?: string;\n    description?: string;\n    servers?: BusinessOpenApiServer[];\n    parameters?: Array<BusinessOpenApiParameterObject | BusinessOpenApiReferenceObject>;\n} & Partial<Record<BusinessOpenApiHttpMethod, BusinessOpenApiOperationObject | BusinessOpenApiReferenceObject>>;",
      "typeReferences": [
        {
          "name": "BusinessOpenApiHttpMethod",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L2"
        },
        {
          "name": "BusinessOpenApiOperationObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L58"
        },
        {
          "name": "BusinessOpenApiParameterObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L35"
        },
        {
          "name": "BusinessOpenApiReferenceObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L3"
        },
        {
          "name": "BusinessOpenApiServer",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L54"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessOpenApiReferenceObject",
      "name": "@farthershore/farthershore-js/components.BusinessOpenApiReferenceObject",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L3",
      "description": "Public export BusinessOpenApiReferenceObject; see its declaration and owning guide.",
      "signature": "export type BusinessOpenApiReferenceObject = {\n    $ref: string;\n    summary?: string;\n    description?: string;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessOpenApiRequestBodyObject",
      "name": "@farthershore/farthershore-js/components.BusinessOpenApiRequestBodyObject",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L44",
      "description": "Public export BusinessOpenApiRequestBodyObject; see its declaration and owning guide.",
      "signature": "export type BusinessOpenApiRequestBodyObject = {\n    required?: boolean;\n    description?: string;\n    content?: Record<string, BusinessOpenApiMediaTypeObject>;\n};",
      "typeReferences": [
        {
          "name": "BusinessOpenApiMediaTypeObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L25"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessOpenApiResponseObject",
      "name": "@farthershore/farthershore-js/components.BusinessOpenApiResponseObject",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L49",
      "description": "Public export BusinessOpenApiResponseObject; see its declaration and owning guide.",
      "signature": "export type BusinessOpenApiResponseObject = {\n    description?: string;\n    content?: Record<string, BusinessOpenApiMediaTypeObject>;\n};",
      "typeReferences": [
        {
          "name": "BusinessOpenApiMediaTypeObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L25"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessOpenApiSchemaObject",
      "name": "@farthershore/farthershore-js/components.BusinessOpenApiSchemaObject",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L8",
      "description": "Public export BusinessOpenApiSchemaObject; see its declaration and owning guide.",
      "signature": "export type BusinessOpenApiSchemaObject = {\n    type?: string | string[];\n    format?: string;\n    title?: string;\n    description?: string;\n    enum?: unknown[];\n    const?: unknown;\n    default?: unknown;\n    nullable?: boolean;\n    required?: string[];\n    properties?: Record<string, BusinessOpenApiSchemaObject | BusinessOpenApiReferenceObject>;\n    items?: BusinessOpenApiSchemaObject | BusinessOpenApiReferenceObject;\n    allOf?: Array<BusinessOpenApiSchemaObject | BusinessOpenApiReferenceObject>;\n    anyOf?: Array<BusinessOpenApiSchemaObject | BusinessOpenApiReferenceObject>;\n    oneOf?: Array<BusinessOpenApiSchemaObject | BusinessOpenApiReferenceObject>;\n    additionalProperties?: boolean | BusinessOpenApiSchemaObject | BusinessOpenApiReferenceObject;\n};",
      "typeReferences": [
        {
          "name": "BusinessOpenApiReferenceObject",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessOpenApiSecurityRequirement",
      "name": "@farthershore/farthershore-js/components.BusinessOpenApiSecurityRequirement",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L53",
      "description": "Public export BusinessOpenApiSecurityRequirement; see its declaration and owning guide.",
      "signature": "export type BusinessOpenApiSecurityRequirement = Record<string, string[]>;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.BusinessOpenApiServer",
      "name": "@farthershore/farthershore-js/components.BusinessOpenApiServer",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L54",
      "description": "Public export BusinessOpenApiServer; see its declaration and owning guide.",
      "signature": "export type BusinessOpenApiServer = {\n    url: string;\n    description?: string;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.CancelSubscription",
      "name": "@farthershore/farthershore-js/components.CancelSubscription",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/cancel-subscription.d.ts#L14",
      "description": "Exported with its own error boundary: a render throw here shows a contained\n\"couldn't be displayed\" box instead of unmounting the host's page. Wrapped in\nTHIS module rather than the barrel so `export { CancelSubscription }` stays a pure\nre-export and the components barrel remains tree-shakeable.",
      "signature": "declare const CancelSubscription: typeof CancelSubscriptionImpl__11041f19fbf6;",
      "typeReferences": [
        {
          "name": "CancelSubscriptionImpl__11041f19fbf6",
          "source": "packages/farthershore-js/dist/components/cancel-subscription.d.ts#L7"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.CancelSubscriptionProps",
      "name": "@farthershore/farthershore-js/components.CancelSubscriptionProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/cancel-subscription.d.ts#L1",
      "description": "Public export CancelSubscriptionProps; see its declaration and owning guide.",
      "signature": "export interface CancelSubscriptionProps {\n    /** Appended to the trigger button. */\n    className?: string;\n    /** Called after an inline (free-tier) cancel succeeds — refresh /me. */\n    onCancelled?: () => void;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.classifyTabLanguage",
      "name": "@farthershore/farthershore-js/components.classifyTabLanguage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L27",
      "description": "Normalize an arbitrary tab label/prop to a canonical language id, or `null`\nwhen the tab is auxiliary (a response/rotate/json strip — NOT a language\nvariant). Matching is case-insensitive and alias-aware.\n\nWhen `languages` is provided the info-string is matched against the declared\nset first: a match on `id` or any of a language's `aliases` (case-insensitive)\nwins and returns that language's `id`. Auxiliary labels always return `null`\nregardless. When no declared set is provided the built-in alias table is used\nas a fallback (js→node, py→python, golang→go) so existing callers are\nunaffected.",
      "signature": "export declare function classifyTabLanguage(labelOrProp: string, languages?: ReadonlyArray<DocsLanguage>): string | null;",
      "typeReferences": [
        {
          "name": "DocsLanguage",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.CodeGroup",
      "name": "@farthershore/farthershore-js/components.CodeGroup",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/markdown.d.ts#L23",
      "description": "`<CodeGroup>` MDX component — a no-op placeholder for when the MDX renderer\nencounters a `<CodeGroup>` tag that wasn't pre-extracted by\n`extractMdxSegments`. In the managed docs flow, `extractMdxSegments` strips\nevery `<CodeGroup>` from the source BEFORE react-markdown sees it (building a\n`BusinessDocsCodeBlock` instead), so this component is never actually called\nduring normal rendering. It is exported so builders can reference the type in\na custom `mdxComponents` override map, and to satisfy the MDX component-map\nregistration requirement.",
      "signature": "export declare function CodeGroup(props: {\n    children?: import(\"react\").ReactNode;\n    title?: string;\n}): null;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.collectBusinessApiOperations",
      "name": "@farthershore/farthershore-js/components.collectBusinessApiOperations",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L135",
      "description": "Public export collectBusinessApiOperations; see its declaration and owning guide.",
      "signature": "export declare function collectBusinessApiOperations(document: BusinessOpenApiDocument): BusinessApiOperationEntry[];",
      "typeReferences": [
        {
          "name": "BusinessApiOperationEntry",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L101"
        },
        {
          "name": "BusinessOpenApiDocument",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L76"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.ComponentRegistration",
      "name": "@farthershore/farthershore-js/components.ComponentRegistration",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/component-policy.d.ts#L47",
      "description": "Public export ComponentRegistration; see its declaration and owning guide.",
      "signature": "export interface ComponentRegistration {\n    /** A `custom:<slug>` key (builder components) or a managed id (to override\n     *  a managed default host-side). */\n    id: string;\n    /** Render-gate permission. Omit to fall through to overlay/managed/derived\n     *  resolution. */\n    permission?: string;\n    /** Mutating-affordance permission; derived `<subject>:write` otherwise. */\n    writePermission?: string;\n    /** Default deny render for this component. */\n    gateMode?: ComponentGateMode__052103626acf;\n    /** Renders ungated by design. Explicit only — never inferred. */\n    presentational?: boolean;\n}",
      "typeReferences": [
        {
          "name": "ComponentGateMode__052103626acf",
          "source": "packages/farthershore-js/dist/component-policy.d.ts#L5"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsCollection",
      "name": "@farthershore/farthershore-js/components.DocsCollection",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections.d.ts#L2",
      "description": "A selectable documentation collection (a self-contained docs bundle).",
      "signature": "export type DocsCollection = {\n    /** Stable id: URL segment, R2 key prefix, storage key, and matching (e.g. \"api\"). */\n    id: string;\n    /** Human label for the selector/tab (e.g. \"API reference\"). */\n    label: string;\n    /** Optional tab image URL. The default selector renders it as an `<img src>`,\n     *  so it must be an absolute/root-relative URL or data: URI. */\n    icon?: string;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsCollectionsContextValue",
      "name": "@farthershore/farthershore-js/components.DocsCollectionsContextValue",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L2",
      "description": "Public export DocsCollectionsContextValue; see its declaration and owning guide.",
      "signature": "export type DocsCollectionsContextValue = {\n    /** The resolved active collection id, or null when there are no collections. */\n    activeCollection: string | null;\n    /** The full collection list (empty when unprovided / single bundle). */\n    collections: ReadonlyArray<DocsCollection>;\n    /** Switch the active collection (persists + lets the host navigate to it). */\n    setCollection: (id: string) => void;\n};",
      "typeReferences": [
        {
          "name": "DocsCollection",
          "source": "packages/farthershore-js/dist/components/docs-chrome/collections.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsCollectionSelector",
      "name": "@farthershore/farthershore-js/components.DocsCollectionSelector",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L51",
      "description": "Unstyled collection switcher — a `<button>` per collection (the host styles it\ninto a tab bar). Hidden entirely when there are ≤1 collections (a single-bundle\ndoc shows no control). Reads/writes through the docs collection context, so it\nis a drop-in once a `<DocsCollectionsProvider>` is in scope. Ships NO CSS:\nthe active tab is exposed via `aria-pressed` for the host to style.",
      "signature": "export declare function DocsCollectionSelector({ className, }?: DocsCollectionSelectorProps): import(\"react\").JSX.Element | null;",
      "typeReferences": [
        {
          "name": "DocsCollectionSelectorProps",
          "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L41"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsCollectionSelectorProps",
      "name": "@farthershore/farthershore-js/components.DocsCollectionSelectorProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L41",
      "description": "Public export DocsCollectionSelectorProps; see its declaration and owning guide.",
      "signature": "export type DocsCollectionSelectorProps = {\n    className?: string;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsCollectionsProvider",
      "name": "@farthershore/farthershore-js/components.DocsCollectionsProvider",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L10",
      "description": "Public export DocsCollectionsProvider; see its declaration and owning guide.",
      "signature": "declare const DocsCollectionsProvider: import(\"react\").Provider<DocsCollectionsContextValue>;",
      "typeReferences": [
        {
          "name": "DocsCollectionsContextValue",
          "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsLanguage",
      "name": "@farthershore/farthershore-js/components.DocsLanguage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L2",
      "description": "A selectable documentation language (an SDK/runtime target).",
      "signature": "export type DocsLanguage = {\n    /** Stable id used in `?lang=`, storage, and tab/page matching (e.g. \"node\"). */\n    id: string;\n    /** Human label for the selector (e.g. \"Node.js\"). */\n    label: string;\n    /** Optional icon key (renderer maps it to a glyph). */\n    icon?: string;\n    /**\n     * Additional spellings that should map to this language id (e.g. `[\"rb\"]` for\n     * Ruby, `[\"ts\"]` for TypeScript). Matching is case-insensitive.\n     */\n    aliases?: string[];\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsLanguageContextValue",
      "name": "@farthershore/farthershore-js/components.DocsLanguageContextValue",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L3",
      "description": "Public export DocsLanguageContextValue; see its declaration and owning guide.",
      "signature": "export type DocsLanguageContextValue = {\n    /** The resolved active language id, or null when there is no language concept. */\n    activeLanguage: string | null;\n    /** The full language list (empty when unprovided / single-language). */\n    languages: ReadonlyArray<DocsLanguage>;\n    /** Switch the active language (persists + reflects into `?lang=`). */\n    setLanguage: (id: string) => void;\n};",
      "typeReferences": [
        {
          "name": "DocsLanguage",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsLanguageProvider",
      "name": "@farthershore/farthershore-js/components.DocsLanguageProvider",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L11",
      "description": "Public export DocsLanguageProvider; see its declaration and owning guide.",
      "signature": "declare const DocsLanguageProvider: import(\"react\").Provider<DocsLanguageContextValue>;",
      "typeReferences": [
        {
          "name": "DocsLanguageContextValue",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsLanguageScopedPage",
      "name": "@farthershore/farthershore-js/components.DocsLanguageScopedPage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L74",
      "description": "A docs page that may be scoped to a subset of languages.",
      "signature": "export type DocsLanguageScopedPage = {\n    /** When present, the page only exists for these languages. */\n    languages?: ReadonlyArray<string> | null;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsLanguageSelector",
      "name": "@farthershore/farthershore-js/components.DocsLanguageSelector",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L47",
      "description": "Native `<select>` language switcher — the language analogue of the docs\nversion selector. Hidden entirely when there are ≤1 languages (a\nsingle-language doc shows no control). Reads/writes through the docs language\ncontext, so it is a drop-in once a `<DocsLanguageProvider>` is in scope.\n\nWhen any language declares an `icon`, the selector renders a custom\nbutton-list so the icon can appear alongside the label. When no icons are\ndeclared the native `<select>` is used (lighter, more accessible on mobile).",
      "signature": "export declare function DocsLanguageSelector({ className, }?: DocsLanguageSelectorProps): import(\"react\").JSX.Element | null;",
      "typeReferences": [
        {
          "name": "DocsLanguageSelectorProps",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L34"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsLanguageSelectorProps",
      "name": "@farthershore/farthershore-js/components.DocsLanguageSelectorProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L34",
      "description": "Public export DocsLanguageSelectorProps; see its declaration and owning guide.",
      "signature": "export type DocsLanguageSelectorProps = {\n    className?: string;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsLanguageTab",
      "name": "@farthershore/farthershore-js/components.DocsLanguageTab",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L50",
      "description": "A docs code tab — language variants carry a `lang`, aux tabs do not.",
      "signature": "export type DocsLanguageTab = {\n    label: string;\n    /**\n     * The tab's language id. When absent it is derived from the label via\n     * {@link classifyTabLanguage} (so existing tab shapes need no change).\n     */\n    lang?: string | null;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsLegal",
      "name": "@farthershore/farthershore-js/components.DocsLegal",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs.d.ts#L9",
      "description": "Public export DocsLegal; see its declaration and owning guide.",
      "signature": "export declare function DocsLegal({ docsBaseUrl: docsOverride, productName: nameOverride, className, }?: DocsLegalProps): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "DocsLegalProps",
          "source": "packages/farthershore-js/dist/components/docs.d.ts#L1"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsLegalProps",
      "name": "@farthershore/farthershore-js/components.DocsLegalProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs.d.ts#L1",
      "description": "Public export DocsLegalProps; see its declaration and owning guide.",
      "signature": "export interface DocsLegalProps {\n    /** Override the resolved docs origin (defaults from the product). */\n    docsBaseUrl?: string | null;\n    /** Override the product display name (defaults from the product). */\n    productName?: string;\n    /** Appended to the root card. */\n    className?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsLinkComponent",
      "name": "@farthershore/farthershore-js/components.DocsLinkComponent",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/navigation.d.ts#L5",
      "description": "Public export DocsLinkComponent; see its declaration and owning guide.",
      "signature": "export type DocsLinkComponent = ComponentType<DocsLinkProps>;",
      "typeReferences": [
        {
          "name": "DocsLinkProps",
          "source": "packages/farthershore-js/dist/components/product-docs/navigation.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsLinkProps",
      "name": "@farthershore/farthershore-js/components.DocsLinkProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/navigation.d.ts#L2",
      "description": "Public export DocsLinkProps; see its declaration and owning guide.",
      "signature": "export type DocsLinkProps = AnchorHTMLAttributes<HTMLAnchorElement> & {\n    href: string;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsMdxComponents",
      "name": "@farthershore/farthershore-js/components.DocsMdxComponents",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/markdown.d.ts#L11",
      "description": "The MDX/markdown component-override map a builder threads into\n`<BusinessDocs mdxComponents=… />` (or `<BusinessDocsPageBody>` /\n`SafeDocsMarkdown` directly): a map of HTML/markdown tag → React component.\nIt is `react-markdown`'s `Components` type, surfaced here so a builder types\nan override without importing the renderer dependencies directly. Any tag not in the\nmap keeps its managed rendering (heading anchors, host-router links, copy-able\nfenced code).",
      "signature": "export type DocsMdxComponents = Components;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsMode",
      "name": "@farthershore/farthershore-js/components.DocsMode",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/docs-mode.d.ts#L11",
      "description": "Public export DocsMode; see its declaration and owning guide.",
      "signature": "export type DocsMode = {\n    kind: DocsModeKind__e089dfaced18;\n    isEmbedded: boolean;\n    isStandalone: boolean;\n    /** Render the brand top bar above the docs (standalone only in SSR). */\n    showStandaloneHeader: boolean;\n    /** Render the mobile-nav hamburger (only meaningful for signed-in users). */\n    showMobileNav: boolean;\n    /** Props to spread into <BusinessDocsSidebar />. */\n    sidebar: {\n        collapsible: boolean;\n        showSearch: boolean;\n        showFooter: boolean;\n    };\n    /**\n     * The `view` argument to plumb into productDocsHref / withStandaloneView.\n     * \"standalone\" preserves the ?view=standalone query when navigating;\n     * undefined lets links flow back into the embedded portal.\n     */\n    hrefView: \"standalone\" | undefined;\n    /** className for the root .fs-docs element. */\n    rootClassName: string;\n    /** className for the empty-state wrapper. */\n    emptyShellClassName: string;\n};",
      "typeReferences": [
        {
          "name": "DocsModeKind__e089dfaced18",
          "source": "packages/farthershore-js/dist/components/product-docs/docs-mode.d.ts#L1"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsModeInput",
      "name": "@farthershore/farthershore-js/components.DocsModeInput",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/docs-mode.d.ts#L2",
      "description": "Public export DocsModeInput; see its declaration and owning guide.",
      "signature": "export type DocsModeInput = {\n    /** True when the visitor has a portal session (Clerk or persona). */\n    signedIn: boolean;\n    /**\n     * True when ?view=standalone is on the URL. Forces the standalone shell\n     * even for a signed-in user (used to preview the public-facing docs).\n     */\n    standalonePreview: boolean;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.DocsNavigate",
      "name": "@farthershore/farthershore-js/components.DocsNavigate",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/navigation.d.ts#L6",
      "description": "Public export DocsNavigate; see its declaration and owning guide.",
      "signature": "export type DocsNavigate = (to: string, opts?: {\n    replace?: boolean;\n}) => void;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FartherShoreApp",
      "name": "@farthershore/farthershore-js/components.FartherShoreApp",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/app.d.ts#L23",
      "description": "The entire portal in one tag. Resolves the product, mounts the `.fs-app`\nshell + managed auth, and renders the marketing landing (signed-out) or the\naccount dashboard (signed-in). Styling lives in the host's CSS; drop to the\nstandalone components for custom layouts.\n\nW8.7 — the body renders INSIDE the shared {@link FsBootGate } + {@link * composeShell} (the same gate + shell composition <FartherShoreRoot> uses),\nso favicon, splash, the resolve-error view, the render-error boundary, and\nthe automatic preview/test env badge all come for free; `renderDashboard`\nstays the only composite-specific knob. Assumes a <FartherShoreProvider> is\nalready in the tree (the host mounts it, like every other à-la-carte\ncomponent).\n\n`renderDashboard` is the chrome escape hatch: when authenticated, the app\nrenders this instead of the built-in card stack (the default template\nsupplies its full sidebar app shell this way), still inside the resolved\nbootstrap + auth context.",
      "signature": "export declare function FartherShoreApp({ clerk, renderDashboard, }: {\n    /** Clerk connection config (public values) for clerk-strategy environments. */\n    clerk?: FsClerkConfig;\n    renderDashboard?: (boot: Bootstrap__ecb3d46aafde) => ReactNode;\n}): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "Bootstrap__ecb3d46aafde",
          "source": "packages/farthershore-js/dist/types.d.ts#L294"
        },
        {
          "name": "FsClerkConfig",
          "source": "packages/farthershore-js/dist/components/auth.d.ts#L11"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FartherShoreRoot",
      "name": "@farthershore/farthershore-js/components.FartherShoreRoot",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/root.d.ts#L90",
      "description": "Public export FartherShoreRoot; see its declaration and owning guide.",
      "signature": "export declare function FartherShoreRoot({ client, clerk, splash, renderError, renderCrash, envBadge, skipAppShell, skipAuth, skipBootGate, children, }: FartherShoreRootProps): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "FartherShoreRootProps",
          "source": "packages/farthershore-js/dist/components/root.d.ts#L7"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FartherShoreRootProps",
      "name": "@farthershore/farthershore-js/components.FartherShoreRootProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/root.d.ts#L7",
      "description": "Public export FartherShoreRootProps; see its declaration and owning guide.",
      "signature": "export interface FartherShoreRootProps {\n    client: FartherShoreClient__e4fe174a542f;\n    /** Clerk connection config for clerk-strategy environments (public values).\n     *  Ignored on persona environments. */\n    clerk?: FsClerkConfig;\n    /** Custom splash while the product resolves (default: a minimal one). */\n    splash?: ReactNode;\n    /**\n     * Custom view when the product can't RESOLVE (the bootstrap fetch failed).\n     * `retry` re-runs the resolve (wired to the bootstrap read's refetch) so a\n     * transient failure recovers without a full reload. Default: a message.\n     */\n    renderError?: (error: Error, retry: () => void) => ReactNode;\n    /**\n     * Custom view when a render throw escapes the gated children (a CRASH, not a\n     * resolve failure). `reset` clears the boundary so the (now-fixed) subtree\n     * re-renders. Default: the same message view as `renderError`.\n     */\n    renderCrash?: (error: Error, reset: () => void) => ReactNode;\n    /**\n     * The automatic \"Test mode\" indicator (W8.2). Mounts on a preview/test\n     * environment (Stripe test mode or a branch-scoped env) with NO developer\n     * action — opt-OUT by passing `false`, never opt-in. There is no public\n     * env-management API; the env is read from the injected resolve DTO.\n     * @default true\n     */\n    envBadge?: boolean;\n    /** Skip the `.fs-app` wrapper div — for embedding inside a host layout\n     *  that provides its own scoping element. @default false */\n    skipAppShell?: boolean;\n    /** Skip mounting the managed {@link FsAuthProvider} — a development-only\n     *  integration escape hatch for hosts bringing their own auth. Sensitive\n     *  component gates remain denied unless the individual gate explicitly\n     *  opts in. @default false */\n    skipAuth?: boolean;\n    /** Skip the resolve gate entirely — children render immediately with NO\n     *  {@link BootCtx} above them, so `useBoot()` throws by design (a host that\n     *  owns resolve is expected to supply boot data its own way). @default\n     *  false */\n    skipBootGate?: boolean;\n    children: ReactNode;\n}",
      "typeReferences": [
        {
          "name": "FartherShoreClient__e4fe174a542f",
          "source": "packages/farthershore-js/dist/client.d.ts#L36"
        },
        {
          "name": "FsClerkConfig",
          "source": "packages/farthershore-js/dist/components/auth.d.ts#L11"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.fetchBusinessDocs",
      "name": "@farthershore/farthershore-js/components.fetchBusinessDocs",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/fetch-product-docs.d.ts#L16",
      "description": "Fetch product docs from the R2 CDN (public origin — no auth).",
      "signature": "export declare function fetchBusinessDocs(docsBaseUrl: string, options?: FetchBusinessDocsOptions): Promise<BusinessDocsData | null>;",
      "typeReferences": [
        {
          "name": "BusinessDocsData",
          "source": "packages/farthershore-js/dist/components/product-docs/fetch-product-docs.d.ts#L2"
        },
        {
          "name": "FetchBusinessDocsOptions",
          "source": "packages/farthershore-js/dist/components/product-docs/fetch-product-docs.d.ts#L6"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FetchBusinessDocsOptions",
      "name": "@farthershore/farthershore-js/components.FetchBusinessDocsOptions",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/fetch-product-docs.d.ts#L6",
      "description": "Public export FetchBusinessDocsOptions; see its declaration and owning guide.",
      "signature": "export type FetchBusinessDocsOptions = {\n    envName?: string | null;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.findBusinessDocsPage",
      "name": "@farthershore/farthershore-js/components.findBusinessDocsPage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L63",
      "description": "Public export findBusinessDocsPage; see its declaration and owning guide.",
      "signature": "export declare function findBusinessDocsPage(index: BusinessDocsIndex, slug: string): BusinessDocsPageEntry | null;",
      "typeReferences": [
        {
          "name": "BusinessDocsIndex",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L41"
        },
        {
          "name": "BusinessDocsPageEntry",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.flattenBusinessDocsPages",
      "name": "@farthershore/farthershore-js/components.flattenBusinessDocsPages",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L62",
      "description": "Public export flattenBusinessDocsPages; see its declaration and owning guide.",
      "signature": "export declare function flattenBusinessDocsPages(index: Pick<BusinessDocsIndex, \"navigation\" | \"collections\">): BusinessDocsPageEntry[];",
      "typeReferences": [
        {
          "name": "BusinessDocsIndex",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L41"
        },
        {
          "name": "BusinessDocsPageEntry",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FS_SSO_FRAGMENT",
      "name": "@farthershore/farthershore-js/components.FS_SSO_FRAGMENT",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/satellite-boot.d.ts#L3",
      "description": "URL fragment trusted platform surfaces append to portal links to request\nan immediate silent SSO handshake with the primary domain.",
      "signature": "declare const FS_SSO_FRAGMENT = \"#fs-sso\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsAcceptInvite",
      "name": "@farthershore/farthershore-js/components.FsAcceptInvite",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/access-control.d.ts#L85",
      "description": "Track T2 — the invitee's accept surface for the portal `/accept-invite` page.\nReads the token (prop or `?token=`), POSTs it, and reports the outcome. The\nsigned-in user's email must match the invite (403) — the copy surfaces the\nserver's reason for the mismatch/expired/used cases.",
      "signature": "export declare function FsAcceptInvite({ className, token: tokenProp, onAccepted, }?: FsAcceptInviteProps): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "FsAcceptInviteProps",
          "source": "packages/farthershore-js/dist/components/access-control.d.ts#L70"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsAcceptInviteProps",
      "name": "@farthershore/farthershore-js/components.FsAcceptInviteProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/access-control.d.ts#L70",
      "description": "Public export FsAcceptInviteProps; see its declaration and owning guide.",
      "signature": "export interface FsAcceptInviteProps {\n    /** Appended to the root card. */\n    className?: string;\n    /** The invitation token. When omitted, it's read from the current URL's\n     *  `?token=` query param (the emailed accept link shape). */\n    token?: string;\n    /** Fired after a successful accept (e.g. to navigate to the dashboard). */\n    onAccepted?: () => void;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsAccessControl",
      "name": "@farthershore/farthershore-js/components.FsAccessControl",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/access-control.d.ts#L130",
      "description": "The one-tag Managed-RBAC management surface: <FsRoleEditor/> (settings +\nroles + permission matrix) stacked over <FsMemberRoles/> (the roster with\nproduct-role assignment). Self-managed under <FartherShoreRoot>; renders only\nthe roster when the product doesn't enable RBAC (the editor hides itself).\nA role create/delete in the editor refetches the roster so its product-role\ncolumns stay in sync.",
      "signature": "export declare function FsAccessControl({ className, canManage, canRemove, }?: FsAccessControlProps): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "FsAccessControlProps",
          "source": "packages/farthershore-js/dist/components/access-control.d.ts#L111"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsAccessControlProps",
      "name": "@farthershore/farthershore-js/components.FsAccessControlProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/access-control.d.ts#L111",
      "description": "Public export FsAccessControlProps; see its declaration and owning guide.",
      "signature": "export interface FsAccessControlProps {\n    /** Appended to the wrapper. */\n    className?: string;\n    /** Whether the viewer may mutate settings/roles/assignments. When omitted the\n     *  role editor defaults to the `team:manage_rbac` claim and the roster to the\n     *  viewer's team role; pass an explicit value to gate both off one signal\n     *  (e.g. the template's OWNER/ADMIN derivation). */\n    canManage?: boolean;\n    /** Whether the viewer may remove members. Defaults to OWNER only. */\n    canRemove?: boolean;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsAccessRequestsInbox",
      "name": "@farthershore/farthershore-js/components.FsAccessRequestsInbox",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/access-control.d.ts#L110",
      "description": "Track T3 — the managers' request inbox: the pending queue with approve/deny.\nApprove AUTO-GRANTS the requested permission (server-side). Self-fetches\n`fs.rbac.accessRequests.list()`; renders nothing for non-managers or when the\nproduct doesn't enable RBAC (the list throws a hidden code / 403).",
      "signature": "export declare function FsAccessRequestsInbox({ className, canManage, }?: FsAccessRequestsInboxProps): import(\"react\").JSX.Element | null;",
      "typeReferences": [
        {
          "name": "FsAccessRequestsInboxProps",
          "source": "packages/farthershore-js/dist/components/access-control.d.ts#L98"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsAccessRequestsInboxProps",
      "name": "@farthershore/farthershore-js/components.FsAccessRequestsInboxProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/access-control.d.ts#L98",
      "description": "Public export FsAccessRequestsInboxProps; see its declaration and owning guide.",
      "signature": "export interface FsAccessRequestsInboxProps {\n    /** Appended to the root card. */\n    className?: string;\n    /** Whether the viewer may resolve requests. Defaults to false. */\n    canManage?: boolean;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsApiKeysManager",
      "name": "@farthershore/farthershore-js/components.FsApiKeysManager",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/api-keys-manager.d.ts#L5",
      "description": "The redesigned self-fetching API-key manager (create form + one-time\nreveal + responsive key list). Self-gated on the `api_keys_panel` managed\nid — the same policy knob as the scaffold's `ApiKeysPanel`.",
      "signature": "declare const FsApiKeysManager: typeof FsApiKeysManagerImpl__bbce45124779;",
      "typeReferences": [
        {
          "name": "FsApiKeysManagerImpl__bbce45124779",
          "source": "packages/farthershore-js/dist/components/api-keys-manager.d.ts#L1"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsAppShell",
      "name": "@farthershore/farthershore-js/components.FsAppShell",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/app-shell.d.ts#L2",
      "description": "Public export FsAppShell; see its declaration and owning guide.",
      "signature": "export declare function FsAppShell({ children }: {\n    children: ReactNode;\n}): import(\"react\").JSX.Element;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsAuth",
      "name": "@farthershore/farthershore-js/components.FsAuth",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/react/mounted-types.d.ts#L2",
      "description": "Public export FsAuth; see its declaration and owning guide.",
      "signature": "export interface FsAuth {\n    strategy: AuthStrategy__ccafca0932db;\n    /** False while auth is initializing (Clerk JS loading / first session read). */\n    loaded: boolean;\n    /** True while the page is navigating to the primary domain for the silent\n     *  SSO handshake (an `#fs-sso`-hinted load) — hosts keep their splash up. */\n    pendingSsoRedirect: boolean;\n    signedIn: boolean;\n    /** Clerk → redirect to the primary hosted sign-in (returning here);\n     *  persona → scroll to CLI login guidance. */\n    signIn(): void;\n    /** Clerk → redirect to the primary hosted sign-UP (returning here). Use this\n     *  for \"Get started\"/\"Sign up\" CTAs; `signIn()` is for \"Log in\". Strategies\n     *  with no separate registration flow (persona, mock) alias it to signIn. */\n    signUp(): void;\n    signOut(): Promise<void>;\n    /** The signed-in user, normalized to {@link FsAuthUser} (Clerk OR persona),\n     *  or null when signed out. */\n    user: FsAuthUser__f6ff4488f475 | null;\n    /** Re-read the session (persona only; Clerk pushes its own state). */\n    refresh(): void;\n    /** Managed-RBAC product-role keys assigned to the signed-in user\n     *  (FAR-700), server-resolved from `GET /me` — the SDK never decodes\n     *  tokens client-side. `[]` while auth/permissions load and when signed\n     *  out. */\n    roles: string[];\n    /** The user's resolved permission strings (`<route-id>:read|write`\n     *  grammar). Personal orgs / RBAC-off products resolve to `[\"*\"]` (full\n     *  access). `[]` while loading / signed out. */\n    permissions: string[];\n    /**\n     * Whether the signed-in user's permissions grant `key` under the unified\n     * grammar (`*` / `<subject>:*` / exact — no verb-class widening). Returns\n     * `false` while permissions load and when signed out.\n     *\n     * ⚠️ UX ONLY — hide affordances with it, but the gateway's `permission`\n     * constraint is the security boundary: a request the user isn't permitted\n     * to make is denied at the edge regardless of what the client renders.\n     */\n    hasPermission(key: string): boolean;\n    /** Per-subscriber ComponentAccessPolicy override rows from `GET /me`\n     *  (Wave 5) — consumed by the component-policy resolver so `<PermissionGate\n     *  component=…>` and self-gated SDK components apply the subscriber's\n     *  governed overrides. `[]` while loading / signed out / no overrides. */\n    componentPolicies: ComponentAccessPolicyRow__60d2c40fe86e[];\n    /**\n     * True once the Managed-RBAC claim has settled: the `/me` read answered\n     * (or failed → deny-defaults locked in), or the viewer is signed out /\n     * auth finished loading without a session. While false, permission-gated\n     * UI should render a pending placeholder instead of flashing a deny —\n     * `usePermissionGate` consumes this so `<PermissionGate>` never flickers.\n     */\n    authzLoaded: boolean;\n}",
      "typeReferences": [
        {
          "name": "AuthStrategy__ccafca0932db",
          "source": "packages/farthershore-js/dist/types.d.ts#L59"
        },
        {
          "name": "ComponentAccessPolicyRow__60d2c40fe86e",
          "source": "packages/farthershore-js/dist/types.d.ts#L945"
        },
        {
          "name": "FsAuthUser__f6ff4488f475",
          "source": "packages/farthershore-js/dist/types.d.ts#L789"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsAuthProvider",
      "name": "@farthershore/farthershore-js/components.FsAuthProvider",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auth.d.ts#L92",
      "description": "The managed auth layer — mounted by `<FartherShoreRoot>`; mountable directly\nby custom roots. Picks the implementation from the environment's strategy.\nOmitting it (`skipAuth`) is a development/integration escape hatch, not an\nauthorization mode; sensitive component gates stay denied by default.",
      "signature": "export declare function FsAuthProvider({ strategy, clerk, children, }: {\n    strategy: AuthStrategy__ccafca0932db;\n    clerk?: FsClerkConfig;\n    children: ReactNode;\n}): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "AuthStrategy__ccafca0932db",
          "source": "packages/farthershore-js/dist/types.d.ts#L59"
        },
        {
          "name": "FsClerkConfig",
          "source": "packages/farthershore-js/dist/components/auth.d.ts#L11"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsBootGate",
      "name": "@farthershore/farthershore-js/components.FsBootGate",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/root.d.ts#L70",
      "description": "The shared boot gate (INTERNAL, PURE): one cached resolve round-trip, the\nfavicon side-effect, and the {@link BootCtx } that {@link useBoot} reads —\nnothing else. Theme, auth, the render-error boundary, and the env badge are\nNOT mounted here — {@link composeShell} composes those around the resolved\nboot data.\n\n`children` is either plain content or a render function of the resolved\n{@link Bootstrap} (so a composite like {@link FartherShoreApp } can read the\nresolved product without a second `useBoot()` round-trip). Assumes a\n<FartherShoreProvider> is already in the tree — {@link FartherShoreRoot}\nmounts one; a composite assumes the host did.",
      "signature": "export declare function FsBootGate({ splash, renderError, children, }: {\n    splash?: ReactNode;\n    renderError?: (error: Error, retry: () => void) => ReactNode;\n    children: ReactNode | ((boot: Bootstrap__ecb3d46aafde) => ReactNode);\n}): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "Bootstrap__ecb3d46aafde",
          "source": "packages/farthershore-js/dist/types.d.ts#L294"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsClerkConfig",
      "name": "@farthershore/farthershore-js/components.FsClerkConfig",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auth.d.ts#L11",
      "description": "Clerk connection config — public values, baked per environment (e.g. from\nVITE_CLERK_* vars). `satelliteDomain` defaults to the current host minus its\nfirst label (`aurora.farthershore.io` → `farthershore.io`). Satellite mode\nengages only when the full trio resolves; otherwise single-domain Clerk.",
      "signature": "export interface FsClerkConfig {\n    publishableKey: string;\n    signInUrl?: string;\n    /** The hosted SIGN-UP page. Derived from {@link signInUrl} when the platform\n     *  did not inject one (see {@link deriveSignUpUrl}), so a \"Get started\" CTA\n     *  works on an already-deployed edge with no new secret. */\n    signUpUrl?: string;\n    satelliteDomain?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsCodeSample",
      "name": "@farthershore/farthershore-js/components.FsCodeSample",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/code-sample.d.ts#L13",
      "description": "A generic code sample card. Builder-facing and fully content-driven —\nsee FsCodeSampleProps.",
      "signature": "export declare function FsCodeSample({ code, title, copyable, className, }: FsCodeSampleProps): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "FsCodeSampleProps",
          "source": "packages/farthershore-js/dist/components/code-sample.d.ts#L1"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsCodeSampleProps",
      "name": "@farthershore/farthershore-js/components.FsCodeSampleProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/code-sample.d.ts#L1",
      "description": "Public export FsCodeSampleProps; see its declaration and owning guide.",
      "signature": "export interface FsCodeSampleProps {\n    /** The code to display, rendered verbatim in a <pre><code> block. */\n    code: string;\n    /** Optional label shown in the title bar (e.g. a filename). */\n    title?: string;\n    /** Show a copy-to-clipboard button in the title bar. Default true. */\n    copyable?: boolean;\n    /** Extra class names on the root, alongside `fs-code`. */\n    className?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsComponentAccessPanel",
      "name": "@farthershore/farthershore-js/components.FsComponentAccessPanel",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/component-access-panel.d.ts#L16",
      "description": "The org-admin component-gate policy editor: one row per managed component\n(plus any `custom:<slug>` component with an existing override), each with a\nrequired-permission picker (fed by the product's derived `fs.rbac.catalog()`)\nand a gate-mode select. Self-fetches under <FartherShoreRoot>; renders\nnothing without `team:manage_rbac` or when the product doesn't enable RBAC.",
      "signature": "export declare function FsComponentAccessPanel({ className, canManage, }?: FsComponentAccessPanelProps): import(\"react\").JSX.Element | null;",
      "typeReferences": [
        {
          "name": "FsComponentAccessPanelProps",
          "source": "packages/farthershore-js/dist/components/component-access-panel.d.ts#L1"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsComponentAccessPanelProps",
      "name": "@farthershore/farthershore-js/components.FsComponentAccessPanelProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/component-access-panel.d.ts#L1",
      "description": "Public export FsComponentAccessPanelProps; see its declaration and owning guide.",
      "signature": "export interface FsComponentAccessPanelProps {\n    /** Appended to the root card. */\n    className?: string;\n    /** Whether the viewer may edit component policies. Defaults to the signed-in\n     *  member's `team:manage_rbac` claim (`useFsAuth().hasPermission`) — the\n     *  same self-gate the access-control kit uses. Non-managers render nothing. */\n    canManage?: boolean;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsEnvironmentBanner",
      "name": "@farthershore/farthershore-js/components.FsEnvironmentBanner",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/environment-banner.d.ts#L2",
      "description": "Public export FsEnvironmentBanner; see its declaration and owning guide.",
      "signature": "declare const FsEnvironmentBanner: typeof FsEnvironmentBannerImpl__cd0961e9db86;",
      "typeReferences": [
        {
          "name": "FsEnvironmentBannerImpl__cd0961e9db86",
          "source": "packages/farthershore-js/dist/components/environment-banner.d.ts#L1"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsErrorBoundary",
      "name": "@farthershore/farthershore-js/components.FsErrorBoundary",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/error-boundary.d.ts#L16",
      "description": "Public export FsErrorBoundary; see its declaration and owning guide.",
      "signature": "export declare class FsErrorBoundary extends Component<FsErrorBoundaryProps, FsErrorBoundaryState__e52d6cb39c9c> {\n    state: FsErrorBoundaryState__e52d6cb39c9c;\n    static getDerivedStateFromError(error: Error): FsErrorBoundaryState__e52d6cb39c9c;\n    componentDidCatch(error: Error): void;\n    componentDidUpdate(prev: FsErrorBoundaryProps): void;\n    private resetKeysChanged;\n    reset: () => void;\n    render(): ReactNode;\n}",
      "typeReferences": [
        {
          "name": "FsErrorBoundaryProps",
          "source": "packages/farthershore-js/dist/components/error-boundary.d.ts#L2"
        },
        {
          "name": "FsErrorBoundaryState__e52d6cb39c9c",
          "source": "packages/farthershore-js/dist/components/error-boundary.d.ts#L13"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsErrorBoundaryProps",
      "name": "@farthershore/farthershore-js/components.FsErrorBoundaryProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/error-boundary.d.ts#L2",
      "description": "Public export FsErrorBoundaryProps; see its declaration and owning guide.",
      "signature": "export interface FsErrorBoundaryProps {\n    /** Render the fallback for a caught error. `reset` clears the boundary so the\n     *  (now-fixed) subtree re-renders. */\n    renderError: (error: Error, reset: () => void) => ReactNode;\n    /** Side-effect on catch (logging/telemetry). Render stays in `renderError`. */\n    onError?: (error: Error) => void;\n    /** When any value here changes (shallow ===), the boundary auto-resets — wire\n     *  a route/page key so navigating away clears the error. */\n    resetKeys?: ReadonlyArray<unknown>;\n    children: ReactNode;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsFooter",
      "name": "@farthershore/farthershore-js/components.FsFooter",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/chrome.d.ts#L31",
      "description": "Business footer: copyright + docs/legal links + platform attribution.",
      "signature": "export declare function FsFooter({ boot: bootOverride, className, }?: FsFooterProps): import(\"react\").JSX.Element | null;",
      "typeReferences": [
        {
          "name": "FsFooterProps",
          "source": "packages/farthershore-js/dist/components/chrome.d.ts#L25"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsFooterProps",
      "name": "@farthershore/farthershore-js/components.FsFooterProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/chrome.d.ts#L25",
      "description": "Public export FsFooterProps; see its declaration and owning guide.",
      "signature": "export interface FsFooterProps {\n    /** Override the resolved bootstrap (defaults to the cached resolve). */\n    boot?: Bootstrap__ecb3d46aafde;\n    className?: string;\n}",
      "typeReferences": [
        {
          "name": "Bootstrap__ecb3d46aafde",
          "source": "packages/farthershore-js/dist/types.d.ts#L294"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsIcon",
      "name": "@farthershore/farthershore-js/components.FsIcon",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/chrome.d.ts#L14",
      "description": "The product's square mark — platform-managed `iconUrl` data. Placeholder\nuntil an icon is uploaded: the brand dot (`.fs-icon--dot`), colored by the\nhost's own CSS. Hosts size either shape by targeting `.fs-icon` /\n`.fs-icon--dot` under their own wrapper class.",
      "signature": "export declare function FsIcon({ className, alt }?: FsIconProps): import(\"react\").JSX.Element | null;",
      "typeReferences": [
        {
          "name": "FsIconProps",
          "source": "packages/farthershore-js/dist/components/chrome.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsIconProps",
      "name": "@farthershore/farthershore-js/components.FsIconProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/chrome.d.ts#L2",
      "description": "Public export FsIconProps; see its declaration and owning guide.",
      "signature": "export interface FsIconProps {\n    className?: string;\n    /** Accessible name for icon-only placements (a collapsed sidebar, an\n     *  avatar spot). Default \"\" — decorative next to a visible product name. */\n    alt?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsInviteMembers",
      "name": "@farthershore/farthershore-js/components.FsInviteMembers",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/access-control.d.ts#L69",
      "description": "Track T2 — the subscriber-team invitation piece: a create form (email +\nplatform role + optional product-role grants) and the pending-invitation list\nwith revoke. Self-fetches `fs.team.invites.list()` under <FartherShoreRoot>.\nRenders nothing for non-managers (canManage=false). The raw token from a\nsuccessful create is surfaced once (email is the primary delivery channel).",
      "signature": "export declare function FsInviteMembers({ className, canManage, availableRoles, }?: FsInviteMembersProps): import(\"react\").JSX.Element | null;",
      "typeReferences": [
        {
          "name": "FsInviteMembersProps",
          "source": "packages/farthershore-js/dist/components/access-control.d.ts#L48"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsInviteMembersProps",
      "name": "@farthershore/farthershore-js/components.FsInviteMembersProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/access-control.d.ts#L48",
      "description": "Public export FsInviteMembersProps; see its declaration and owning guide.",
      "signature": "export interface FsInviteMembersProps {\n    /** Appended to the root card. */\n    className?: string;\n    /** Whether the viewer may create/revoke invitations. Defaults to false —\n     *  the roster/editor resolve their own manage signal; the template passes\n     *  its OWNER/ADMIN derivation. */\n    canManage?: boolean;\n    /** The org's assignable product roles (from the team read's `availableRoles`)\n     *  offered as grant checkboxes on the create form. */\n    availableRoles?: readonly {\n        roleKey: string;\n        name: string;\n    }[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsLimitBoundary",
      "name": "@farthershore/farthershore-js/components.FsLimitBoundary",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/limit-boundary.d.ts#L37",
      "description": "Catches limits reported via {@link useLimitHandler} and renders the matching\nprompt in an accessible modal overlay (`role=\"dialog\"`, focus moved to the\ndialog, Escape to dismiss). Plan limits render {@link UpgradePrompt }.\nOpt-in: mounting it changes\nnothing until something reports a limit.",
      "signature": "export declare function FsLimitBoundary({ children, className }: FsLimitBoundaryProps): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "FsLimitBoundaryProps",
          "source": "packages/farthershore-js/dist/components/limit-boundary.d.ts#L25"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsLimitBoundaryProps",
      "name": "@farthershore/farthershore-js/components.FsLimitBoundaryProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/limit-boundary.d.ts#L25",
      "description": "Public export FsLimitBoundaryProps; see its declaration and owning guide.",
      "signature": "export interface FsLimitBoundaryProps {\n    children: ReactNode;\n    /** Appended to the overlay root when a prompt is showing. */\n    className?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsLogo",
      "name": "@farthershore/farthershore-js/components.FsLogo",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/chrome.d.ts#L24",
      "description": "The product's wordmark — platform-managed `logoUrl` data. Placeholder\nuntil a logo is uploaded: the display name as text (`.fs-logo--text`).\nHosts size/typeset it by targeting `.fs-logo` / `.fs-logo--text` under\ntheir own wrapper class.",
      "signature": "export declare function FsLogo({ className }?: FsLogoProps): import(\"react\").JSX.Element | null;",
      "typeReferences": [
        {
          "name": "FsLogoProps",
          "source": "packages/farthershore-js/dist/components/chrome.d.ts#L15"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsLogoProps",
      "name": "@farthershore/farthershore-js/components.FsLogoProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/chrome.d.ts#L15",
      "description": "Public export FsLogoProps; see its declaration and owning guide.",
      "signature": "export interface FsLogoProps {\n    className?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsMemberRoles",
      "name": "@farthershore/farthershore-js/components.FsMemberRoles",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/access-control.d.ts#L47",
      "description": "The member roster with Managed-RBAC assignment: platform-role select\n(OWNER/ADMIN/VIEWER), the org's product-role assignment checkboxes,\nstale-role warnings, and remove. Self-fetches the team roster + `GET /me`\n(to find \"self\") under <FartherShoreRoot>. A failed team read degrades to a\nread-only roster with the server's reason (team-panel precedent).",
      "signature": "export declare function FsMemberRoles({ className, canManage, canRemove, title, refreshSignal, }?: FsMemberRolesProps): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "FsMemberRolesProps",
          "source": "packages/farthershore-js/dist/components/access-control.d.ts#L25"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsMemberRolesProps",
      "name": "@farthershore/farthershore-js/components.FsMemberRolesProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/access-control.d.ts#L25",
      "description": "Public export FsMemberRolesProps; see its declaration and owning guide.",
      "signature": "export interface FsMemberRolesProps {\n    /** Appended to the root card. */\n    className?: string;\n    /** Whether the viewer may change roles/assignments. Defaults to the viewer's\n     *  team role (OWNER/ADMIN) resolved from the team read. */\n    canManage?: boolean;\n    /** Whether the viewer may remove members. Defaults to OWNER only. */\n    canRemove?: boolean;\n    /** Heading text. Defaults to \"Team members\". */\n    title?: string;\n    /** Bump this number to force a roster refetch (a sibling role editor uses it\n     *  after a role create/delete so the product-role columns pick up the\n     *  change). Ignored when unchanged / undefined. */\n    refreshSignal?: number;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsNotificationPreferences",
      "name": "@farthershore/farthershore-js/components.FsNotificationPreferences",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/notification-preferences.d.ts#L5",
      "description": "Per-category email notification preferences (master + category toggles,\noptimistic partial PATCH). Self-gated on the `notification_preferences`\nmanaged id.",
      "signature": "declare const FsNotificationPreferences: typeof FsNotificationPreferencesImpl__49ca85217f63;",
      "typeReferences": [
        {
          "name": "FsNotificationPreferencesImpl__49ca85217f63",
          "source": "packages/farthershore-js/dist/components/notification-preferences.d.ts#L1"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsOnboardingPlanRail",
      "name": "@farthershore/farthershore-js/components.FsOnboardingPlanRail",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/onboarding-plan-rail.d.ts#L43",
      "description": "The pre-subscription choose-a-plan rail (subscribe flow). UNGATED by\ndesign — the viewer has no roles yet (see the allowlist entry).",
      "signature": "declare const FsOnboardingPlanRail: typeof FsOnboardingPlanRailImpl__92c14436dcce;",
      "typeReferences": [
        {
          "name": "FsOnboardingPlanRailImpl__92c14436dcce",
          "source": "packages/farthershore-js/dist/components/onboarding-plan-rail.d.ts#L40"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsOnboardingPlanRailProps",
      "name": "@farthershore/farthershore-js/components.FsOnboardingPlanRailProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/onboarding-plan-rail.d.ts#L2",
      "description": "Public export FsOnboardingPlanRailProps; see its declaration and owning guide.",
      "signature": "export interface FsOnboardingPlanRailProps {\n    /** The resolve payload (plans + branding + featured plan id). */\n    boot: Bootstrap__ecb3d46aafde;\n    /** The org the subscription is being started for (rides the success /\n     *  cancel URLs and the onboarding call). */\n    selectedOrganizationId: string | null;\n    /** Free-plan inline activation succeeded — refresh /me and navigate. */\n    onActivated: () => void;\n    /** The subscribe call failed. The host receives BOTH the presentable message\n     *  and the original thrown `error`, because the two answer different\n     *  questions: the message is what to show, the error is what HAPPENED. A\n     *  host that needs to react differently to a retired plan id than to a\n     *  payment failure must read `error.code` — matching on the message text\n     *  makes that reaction silently dependent on platform copy. */\n    onError: (message: string, error: unknown) => void;\n    /** A free plan's optional one-time auto-created API key — store it for the\n     *  post-activation banner (shown exactly once, never in URLs). */\n    onAutoApiKey?: (autoApiKey: unknown) => void;\n    /** Paid-checkout success destination. Absolute or relative to the current\n     * page. Defaults to the current page, which keeps the SDK root\n     * router-agnostic. */\n    successUrl?: string;\n    /** Paid-checkout cancellation destination. Absolute or relative to the\n     * current page. Defaults to the current page. */\n    cancelUrl?: string;\n}",
      "typeReferences": [
        {
          "name": "Bootstrap__ecb3d46aafde",
          "source": "packages/farthershore-js/dist/types.d.ts#L294"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsPricing",
      "name": "@farthershore/farthershore-js/components.FsPricing",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/app.d.ts#L30",
      "description": "The landing's pricing section: heading chrome around the standalone\n`<PlansTable/>`.",
      "signature": "export declare function FsPricing({ className }?: {\n    className?: string;\n}): import(\"react\").JSX.Element;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsRequestAccess",
      "name": "@farthershore/farthershore-js/components.FsRequestAccess",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/access-control.d.ts#L97",
      "description": "Track T3 — the requester's view: pick a permission from the product's derived\ncatalog, add an optional note, and file a request. Shows the member's own\nopen/resolved requests with their status. Self-fetches the catalog + the\nmember's requests under <FartherShoreRoot>. Hidden when the product doesn't\nenable RBAC (the catalog read throws RBAC_NOT_ENABLED_BY_PRODUCT).",
      "signature": "export declare function FsRequestAccess({ className }?: FsRequestAccessProps): import(\"react\").JSX.Element | null;",
      "typeReferences": [
        {
          "name": "FsRequestAccessProps",
          "source": "packages/farthershore-js/dist/components/access-control.d.ts#L86"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsRequestAccessProps",
      "name": "@farthershore/farthershore-js/components.FsRequestAccessProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/access-control.d.ts#L86",
      "description": "Public export FsRequestAccessProps; see its declaration and owning guide.",
      "signature": "export interface FsRequestAccessProps {\n    /** Appended to the root card. */\n    className?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsRoleEditor",
      "name": "@farthershore/farthershore-js/components.FsRoleEditor",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/access-control.d.ts#L24",
      "description": "The Managed-RBAC role editor: org enforcement toggle, default-role picker,\nthe role list, and the create/edit editor whose permission checkboxes come\nfrom the product's DERIVED `fs.rbac.catalog()` (never authored). Self-fetches\nsettings/catalog/roles under <FartherShoreRoot>; renders nothing when the\nproduct doesn't enable RBAC or the caller can't read the config.",
      "signature": "export declare function FsRoleEditor({ className, canManage, onRolesChanged, }?: FsRoleEditorProps): import(\"react\").JSX.Element | null;",
      "typeReferences": [
        {
          "name": "FsRoleEditorProps",
          "source": "packages/farthershore-js/dist/components/access-control.d.ts#L5"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsRoleEditorProps",
      "name": "@farthershore/farthershore-js/components.FsRoleEditorProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/access-control.d.ts#L5",
      "description": "Public export FsRoleEditorProps; see its declaration and owning guide.",
      "signature": "export interface FsRoleEditorProps {\n    /** Appended to the root card. */\n    className?: string;\n    /** Whether the viewer may mutate settings/roles. Defaults to the signed-in\n     *  member's `team:manage_rbac` claim (`useFsAuth().hasPermission`). Pass an\n     *  explicit value to gate off a different signal (e.g. the caller's team\n     *  role). Non-managers see the config read-only; a 403 read hides it. */\n    canManage?: boolean;\n    /** Fired after any role/settings mutation so a sibling roster can refresh its\n     *  `availableRoles` + stale-key computation. */\n    onRolesChanged?: () => void;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsSignIn",
      "name": "@farthershore/farthershore-js/components.FsSignIn",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/sign-in.d.ts#L5",
      "description": "Public export FsSignIn; see its declaration and owning guide.",
      "signature": "export declare function FsSignIn({ className }?: FsSignInProps): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "FsSignInProps",
          "source": "packages/farthershore-js/dist/components/sign-in.d.ts#L1"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsSignInButton",
      "name": "@farthershore/farthershore-js/components.FsSignInButton",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auth.d.ts#L36",
      "description": "A managed sign-in button: Clerk → redirect to the primary-domain hosted\nsign-in (returning to the current page); persona → scrolls to the sign-in\nform. Style with className (defaults to the SDK CTA button).",
      "signature": "export declare function FsSignInButton({ className, children, }: {\n    className?: string;\n    children?: ReactNode;\n}): import(\"react\").JSX.Element;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsSignInProps",
      "name": "@farthershore/farthershore-js/components.FsSignInProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/sign-in.d.ts#L1",
      "description": "Public export FsSignInProps; see its declaration and owning guide.",
      "signature": "export interface FsSignInProps {\n    /** Appended to the root section. */\n    className?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsSignOutButton",
      "name": "@farthershore/farthershore-js/components.FsSignOutButton",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auth.d.ts#L41",
      "description": "A managed sign-out button (any strategy).",
      "signature": "export declare function FsSignOutButton({ className, children, }: {\n    className?: string;\n    children?: ReactNode;\n}): import(\"react\").JSX.Element;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsSplash",
      "name": "@farthershore/farthershore-js/components.FsSplash",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/splash.d.ts#L2",
      "description": "Full-viewport branded splash (product mark + name, gentle pulse).",
      "signature": "export declare function FsSplash(): import(\"react\").JSX.Element;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsSubscriberStatus",
      "name": "@farthershore/farthershore-js/components.FsSubscriberStatus",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/subscriber-status.d.ts#L9",
      "description": "Public export FsSubscriberStatus; see its declaration and owning guide.",
      "signature": "declare const FsSubscriberStatus: typeof FsSubscriberStatusImpl__98d87056de79;",
      "typeReferences": [
        {
          "name": "FsSubscriberStatusImpl__98d87056de79",
          "source": "packages/farthershore-js/dist/components/subscriber-status.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsSubscriberStatusProps",
      "name": "@farthershore/farthershore-js/components.FsSubscriberStatusProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/subscriber-status.d.ts#L1",
      "description": "Public export FsSubscriberStatusProps; see its declaration and owning guide.",
      "signature": "export interface FsSubscriberStatusProps {\n    /** Summary for compact headers, details for account cards, notices for\n     *  scheduled transitions / pending cancellation / active promos. */\n    variant?: \"summary\" | \"details\" | \"notices\";\n    /** Appended to the component root. */\n    className?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsTeam",
      "name": "@farthershore/farthershore-js/components.FsTeam",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/team.d.ts#L90",
      "description": "The one-tag team tab: the dev-portal template's internal /team management\nexperience (read-only banner + role editor + access-requests inbox + member\nroster + component-access policies) WITHOUT the invitation flow. Zero props\nunder <FartherShoreRoot>; `canManage`/`canRemove` override the claim-derived\ngates.",
      "signature": "declare const FsTeam: typeof FsTeamImpl__401952c13e59;",
      "typeReferences": [
        {
          "name": "FsTeamImpl__401952c13e59",
          "source": "packages/farthershore-js/dist/components/team.d.ts#L82"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsTeamAccessRequestsSection",
      "name": "@farthershore/farthershore-js/components.FsTeamAccessRequestsSection",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/team.d.ts#L56",
      "description": "The team tab's access-requests section: the managers' pending-request inbox\nwith approve/deny. Renders nothing for non-managers or non-RBAC products.",
      "signature": "declare const FsTeamAccessRequestsSection: typeof FsTeamAccessRequestsSectionImpl__5d99c180600c;",
      "typeReferences": [
        {
          "name": "FsTeamAccessRequestsSectionImpl__5d99c180600c",
          "source": "packages/farthershore-js/dist/components/team.d.ts#L51"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsTeamAccessRequestsSectionProps",
      "name": "@farthershore/farthershore-js/components.FsTeamAccessRequestsSectionProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/team.d.ts#L43",
      "description": "Public export FsTeamAccessRequestsSectionProps; see its declaration and owning guide.",
      "signature": "export interface FsTeamAccessRequestsSectionProps {\n    /** Appended to the section's root card. */\n    className?: string;\n    /** Whether the viewer may resolve requests. Defaults to the signed-in\n     *  member's `team:manage_rbac` claim (the inbox itself defaults to false, so\n     *  the section resolves the claim for it). */\n    canManage?: boolean;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsTeamComponentAccessSection",
      "name": "@farthershore/farthershore-js/components.FsTeamComponentAccessSection",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/team.d.ts#L70",
      "description": "The team tab's component-access section: per-component gate policies\n(required permission + gate mode). Self-gates on `team:manage_rbac` and\nhides on non-RBAC products, like the role editor.",
      "signature": "declare const FsTeamComponentAccessSection: typeof FsTeamComponentAccessSectionImpl__b91eefd936ec;",
      "typeReferences": [
        {
          "name": "FsTeamComponentAccessSectionImpl__b91eefd936ec",
          "source": "packages/farthershore-js/dist/components/team.d.ts#L64"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsTeamComponentAccessSectionProps",
      "name": "@farthershore/farthershore-js/components.FsTeamComponentAccessSectionProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/team.d.ts#L57",
      "description": "Public export FsTeamComponentAccessSectionProps; see its declaration and owning guide.",
      "signature": "export interface FsTeamComponentAccessSectionProps {\n    /** Appended to the section's root card. */\n    className?: string;\n    /** Whether the viewer may edit component policies. Omitted → the panel's own\n     *  self-gate (the `team:manage_rbac` claim; non-managers render nothing). */\n    canManage?: boolean;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsTeamMembersSection",
      "name": "@farthershore/farthershore-js/components.FsTeamMembersSection",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/team.d.ts#L42",
      "description": "The team tab's roster section: members with platform-role select,\nproduct-role assignment checkboxes, stale-role warnings, and remove.",
      "signature": "declare const FsTeamMembersSection: typeof FsTeamMembersSectionImpl__6330b8d89acb;",
      "typeReferences": [
        {
          "name": "FsTeamMembersSectionImpl__6330b8d89acb",
          "source": "packages/farthershore-js/dist/components/team.d.ts#L37"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsTeamMembersSectionProps",
      "name": "@farthershore/farthershore-js/components.FsTeamMembersSectionProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/team.d.ts#L22",
      "description": "Public export FsTeamMembersSectionProps; see its declaration and owning guide.",
      "signature": "export interface FsTeamMembersSectionProps {\n    /** Appended to the section's root card. */\n    className?: string;\n    /** Whether the viewer may change roles/assignments. Omitted → the roster's\n     *  own team-role derivation (OWNER/ADMIN). */\n    canManage?: boolean;\n    /** Whether the viewer may remove members. Omitted → the roster's own\n     *  derivation (OWNER only). */\n    canRemove?: boolean;\n    /** Heading text. Defaults to \"Team members\". */\n    title?: string;\n    /** Bump to force a roster refetch (wire a roles section's onRolesChanged to\n     *  a counter and pass it here). */\n    refreshSignal?: number;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsTeamProps",
      "name": "@farthershore/farthershore-js/components.FsTeamProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/team.d.ts#L71",
      "description": "Public export FsTeamProps; see its declaration and owning guide.",
      "signature": "export interface FsTeamProps {\n    /** Appended to the wrapper. */\n    className?: string;\n    /** Whether the viewer may manage the team. Defaults to the signed-in\n     *  member's `team:manage_rbac` claim; pass an explicit value to gate off a\n     *  different signal. Also decides the read-only banner. */\n    canManage?: boolean;\n    /** Whether the viewer may remove members. Defaults to the signed-in\n     *  member's `team:remove_member` claim. */\n    canRemove?: boolean;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsTeamRolesSection",
      "name": "@farthershore/farthershore-js/components.FsTeamRolesSection",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/team.d.ts#L21",
      "description": "The team tab's role-based-access section: the Managed-RBAC role editor\n(settings toggle + role list + permission matrix). Hides itself entirely\nwhen the editor does (non-RBAC product / caller can't read the config).",
      "signature": "declare const FsTeamRolesSection: typeof FsTeamRolesSectionImpl__5ad80c7e8f1f;",
      "typeReferences": [
        {
          "name": "FsTeamRolesSectionImpl__5ad80c7e8f1f",
          "source": "packages/farthershore-js/dist/components/team.d.ts#L15"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsTeamRolesSectionProps",
      "name": "@farthershore/farthershore-js/components.FsTeamRolesSectionProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/team.d.ts#L4",
      "description": "Public export FsTeamRolesSectionProps; see its declaration and owning guide.",
      "signature": "export interface FsTeamRolesSectionProps {\n    /** Appended to the section's root card. */\n    className?: string;\n    /** Whether the viewer may mutate settings/roles. Omitted → the editor's own\n     *  resolution (the `team:manage_rbac` claim, or a proven server-gated\n     *  load). */\n    canManage?: boolean;\n    /** Fired after any role/settings mutation (a sibling members section uses it\n     *  to refresh its product-role columns). */\n    onRolesChanged?: () => void;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsUsageEvents",
      "name": "@farthershore/farthershore-js/components.FsUsageEvents",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/usage-surfaces.d.ts#L71",
      "description": "Per-request usage events table (full column set, truthful status pill).\nSelf-gated on the same `usage_card` managed id — one policy knob governs\nevery usage surface.",
      "signature": "declare const FsUsageEvents: typeof FsUsageEventsImpl__c310f93c9cf0;",
      "typeReferences": [
        {
          "name": "FsUsageEventsImpl__c310f93c9cf0",
          "source": "packages/farthershore-js/dist/components/usage-surfaces.d.ts#L63"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsUsageEventsProps",
      "name": "@farthershore/farthershore-js/components.FsUsageEventsProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/usage-surfaces.d.ts#L45",
      "description": "Public export FsUsageEventsProps; see its declaration and owning guide.",
      "signature": "export interface FsUsageEventsProps {\n    events: UsageEvent__0652cabf737c[] | null;\n    /** Cap the rendered rows (the Overview shows the most recent few). */\n    limit?: number;\n    ariaLabel?: string;\n    /** Rendered instead of the table when there are no events. */\n    emptyState: ReactNode;\n    /** Show the full-page range selector and CSV export. Compact consumers omit it. */\n    showControls?: boolean;\n    /** Controlled selection; the host retains URL/router ownership. */\n    range?: UsageTimeRange;\n    onRangeChange?: (range: UsageTimeRange) => void;\n    /** Authoritative current billing-period bounds returned with usage. */\n    periodStart?: string | null;\n    periodEnd?: string | null;\n    /** Prefix for the downloaded file; defaults to `usage`. */\n    exportFilenamePrefix?: string;\n}",
      "typeReferences": [
        {
          "name": "UsageEvent__0652cabf737c",
          "source": "packages/farthershore-js/dist/types.d.ts#L679"
        },
        {
          "name": "UsageTimeRange",
          "source": "packages/farthershore-js/dist/components/usage-surfaces.d.ts#L44"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsUsageLimits",
      "name": "@farthershore/farthershore-js/components.FsUsageLimits",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/usage-limits.d.ts#L8",
      "description": "Public export FsUsageLimits; see its declaration and owning guide.",
      "signature": "declare const FsUsageLimits: typeof FsUsageLimitsImpl__c99c2cc3795d;",
      "typeReferences": [
        {
          "name": "FsUsageLimitsImpl__c99c2cc3795d",
          "source": "packages/farthershore-js/dist/components/usage-limits.d.ts#L7"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsUsageLimitsProps",
      "name": "@farthershore/farthershore-js/components.FsUsageLimitsProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/usage-limits.d.ts#L1",
      "description": "Public export FsUsageLimitsProps; see its declaration and owning guide.",
      "signature": "export interface FsUsageLimitsProps {\n    /** Appended to the root card. */\n    className?: string;\n    /** Heading text. Defaults to \"Usage limits\". */\n    title?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsUsageSummary",
      "name": "@farthershore/farthershore-js/components.FsUsageSummary",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/usage-surfaces.d.ts#L66",
      "description": "Plan-aware usage summary hero — the ONE presentation of \"your usage this\nperiod\". Self-gated on the `usage_card` managed id.",
      "signature": "declare const FsUsageSummary: typeof FsUsageSummaryImpl__fa0561bef1df;",
      "typeReferences": [
        {
          "name": "FsUsageSummaryImpl__fa0561bef1df",
          "source": "packages/farthershore-js/dist/components/usage-surfaces.d.ts#L15"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsUsageSummaryProps",
      "name": "@farthershore/farthershore-js/components.FsUsageSummaryProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/usage-surfaces.d.ts#L67",
      "description": "Public export FsUsageSummaryProps; see its declaration and owning guide.",
      "signature": "export type FsUsageSummaryProps = Parameters<typeof FsUsageSummaryImpl__fa0561bef1df>[0];",
      "typeReferences": [
        {
          "name": "FsUsageSummaryImpl__fa0561bef1df",
          "source": "packages/farthershore-js/dist/components/usage-surfaces.d.ts#L15"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.FsUserButton",
      "name": "@farthershore/farthershore-js/components.FsUserButton",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auth.d.ts#L100",
      "description": "The signed-in account control. Clerk mode → Clerk's <UserButton/> (avatar\nmenu with manage-account + sign-out) behind a loading skeleton; persona\nmode → null (persona chrome is host-routed — render your own pill).",
      "signature": "export declare function FsUserButton(): import(\"react\").JSX.Element | null;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.groupBusinessApiOperations",
      "name": "@farthershore/farthershore-js/components.groupBusinessApiOperations",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L136",
      "description": "Public export groupBusinessApiOperations; see its declaration and owning guide.",
      "signature": "export declare function groupBusinessApiOperations(operations: readonly BusinessApiOperationEntry[], tagOrder?: readonly string[]): Array<{\n    tag: string;\n    operations: BusinessApiOperationEntry[];\n}>;",
      "typeReferences": [
        {
          "name": "BusinessApiOperationEntry",
          "source": "packages/farthershore-js/dist/components/product-docs/api-reference.d.ts#L101"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.isPageVisibleForLanguage",
      "name": "@farthershore/farthershore-js/components.isPageVisibleForLanguage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L85",
      "description": "Whether a page is visible for the active language. A page with no\n`languages` (the common case) is universal — visible for every language and\nwhen no language is selected. A scoped page is visible only when its list\nincludes the active language (and is hidden when no language is selected,\nsince it was explicitly scoped).",
      "signature": "export declare function isPageVisibleForLanguage(page: DocsLanguageScopedPage, activeLanguage: string | null): boolean;",
      "typeReferences": [
        {
          "name": "DocsLanguageScopedPage",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L74"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.isStandaloneView",
      "name": "@farthershore/farthershore-js/components.isStandaloneView",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/docs-route.d.ts#L15",
      "description": "Public export isStandaloneView; see its declaration and owning guide.",
      "signature": "export declare function isStandaloneView(view?: string | string[]): boolean;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.LangBlock",
      "name": "@farthershore/farthershore-js/components.LangBlock",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L59",
      "description": "Render `children` only when the active docs language matches `lang` (a single\nid or a comma-separated allow-list). With no active language (single-language\n/ unprovided) NOTHING is rendered — `<LangBlock>` is inherently a\nmulti-language affordance, so it stays inert until a language is chosen.",
      "signature": "export declare function LangBlock({ lang, children }: LangBlockProps): import(\"react\").JSX.Element | null;",
      "typeReferences": [
        {
          "name": "LangBlockProps",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L48"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.LangBlockProps",
      "name": "@farthershore/farthershore-js/components.LangBlockProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L48",
      "description": "Public export LangBlockProps; see its declaration and owning guide.",
      "signature": "export type LangBlockProps = {\n    /** One language id or a comma-separated list (e.g. \"go,node\"). */\n    lang: string;\n    children?: ReactNode;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.LEGAL_ROUTE_PREFIX",
      "name": "@farthershore/farthershore-js/components.LEGAL_ROUTE_PREFIX",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/legal-route.d.ts#L1",
      "description": "Public export LEGAL_ROUTE_PREFIX; see its declaration and owning guide.",
      "signature": "declare const LEGAL_ROUTE_PREFIX = \"/legal\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.LegalConsentGate",
      "name": "@farthershore/farthershore-js/components.LegalConsentGate",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/legal-consent-gate.d.ts#L46",
      "description": "Public export LegalConsentGate; see its declaration and owning guide.",
      "signature": "export declare function LegalConsentGate(): import(\"react\").JSX.Element | null;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.legalDocHref",
      "name": "@farthershore/farthershore-js/components.legalDocHref",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/legal-route.d.ts#L3",
      "description": "Link to one legal document's page.",
      "signature": "export declare function legalDocHref(kind: string): string;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.LegalDocument",
      "name": "@farthershore/farthershore-js/components.LegalDocument",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/legal-document.d.ts#L26",
      "description": "Public export LegalDocument; see its declaration and owning guide.",
      "signature": "export declare function LegalDocument({ kind, className }: LegalDocumentProps): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "LegalDocumentProps",
          "source": "packages/farthershore-js/dist/components/legal-document.d.ts#L22"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.LegalDocumentProps",
      "name": "@farthershore/farthershore-js/components.LegalDocumentProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/legal-document.d.ts#L22",
      "description": "Public export LegalDocumentProps; see its declaration and owning guide.",
      "signature": "export interface LegalDocumentProps {\n    kind: LegalKind__db43d04bc941;\n    className?: string;\n}",
      "typeReferences": [
        {
          "name": "LegalKind__db43d04bc941",
          "source": "packages/farthershore-js/dist/components/product-docs/fetch-product-legal.d.ts#L1"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.LegalIndex",
      "name": "@farthershore/farthershore-js/components.LegalIndex",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/legal-index.d.ts#L12",
      "description": "Public export LegalIndex; see its declaration and owning guide.",
      "signature": "declare const LegalIndex: typeof LegalIndexImpl__19dbad318e95;",
      "typeReferences": [
        {
          "name": "LegalIndexImpl__19dbad318e95",
          "source": "packages/farthershore-js/dist/components/legal-index.d.ts#L11"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.legalIndexHref",
      "name": "@farthershore/farthershore-js/components.legalIndexHref",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/legal-route.d.ts#L5",
      "description": "Link to the legal index (every published document for the business).",
      "signature": "export declare function legalIndexHref(): string;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.LegalIndexProps",
      "name": "@farthershore/farthershore-js/components.LegalIndexProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/legal-index.d.ts#L3",
      "description": "Public export LegalIndexProps; see its declaration and owning guide.",
      "signature": "export interface LegalIndexProps {\n    /** Appended to the default list root. */\n    className?: string;\n    /** Host-owned chrome slot. Document discovery remains SDK-owned. */\n    renderItem?: (document: PublishedLegalDocument, index: number) => ReactNode;\n    /** Defaults to a plain not-published message. Pass `null` for no output. */\n    emptyState?: ReactNode;\n}",
      "typeReferences": [
        {
          "name": "PublishedLegalDocument",
          "source": "packages/farthershore-js/dist/components/legal-document.d.ts#L12"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.LegalMarkdown",
      "name": "@farthershore/farthershore-js/components.LegalMarkdown",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/markdown.d.ts#L56",
      "description": "Legal markdown — remark-gfm + heading anchors only, no custom component\nmap and no code cards (the SSR legal page rendered with remark-gfm +\nrehype-slug and nothing else).",
      "signature": "export declare function LegalMarkdown({ source }: {\n    source: string;\n}): import(\"react\").JSX.Element;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.LegalRoute",
      "name": "@farthershore/farthershore-js/components.LegalRoute",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/legal-route.d.ts#L6",
      "description": "Public export LegalRoute; see its declaration and owning guide.",
      "signature": "export type LegalRoute = {\n    view: \"index\";\n} | {\n    view: \"document\";\n    kind: string;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.LimitHandler",
      "name": "@farthershore/farthershore-js/components.LimitHandler",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/limit-boundary.d.ts#L5",
      "description": "Public export LimitHandler; see its declaration and owning guide.",
      "signature": "export interface LimitHandler {\n    /** Surface the global prompt for a caught plan-limit block. A no-op\n     *  when no {@link FsLimitBoundary} is mounted (so it's always safe to call). */\n    report(error: LimitLike__19863c6600b0): void;\n}",
      "typeReferences": [
        {
          "name": "LimitLike__19863c6600b0",
          "source": "packages/farthershore-js/dist/components/limit-boundary.d.ts#L4"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.LimitNotice",
      "name": "@farthershore/farthershore-js/components.LimitNotice",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/limit-notice.d.ts#L16",
      "description": "Exported with its own error boundary: a render throw here shows a contained\n\"couldn't be displayed\" box instead of unmounting the host's page. Wrapped in\nTHIS module rather than the barrel so `export { LimitNotice }` stays a pure\nre-export and the components barrel remains tree-shakeable.",
      "signature": "declare const LimitNotice: typeof LimitNoticeImpl__e753a55ffa58;",
      "typeReferences": [
        {
          "name": "LimitNoticeImpl__e753a55ffa58",
          "source": "packages/farthershore-js/dist/components/limit-notice.d.ts#L9"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.LimitNoticeProps",
      "name": "@farthershore/farthershore-js/components.LimitNoticeProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/limit-notice.d.ts#L1",
      "description": "Public export LimitNoticeProps; see its declaration and owning guide.",
      "signature": "export interface LimitNoticeProps {\n    /** The caught error to render. Anything that is not a usage-limit deny renders\n     *  null.\n     *  (it is a plan affordance, not one of the six usage-limit classes). */\n    error: unknown;\n    /** Appended to the root card. */\n    className?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.MANAGE_RBAC_PERMISSION",
      "name": "@farthershore/farthershore-js/components.MANAGE_RBAC_PERMISSION",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/access-control.d.ts#L4",
      "description": "The subscriber-management permission every /me/rbac/* route enforces\n(apps/core/src/routes/portal-customer/rbac.ts → `requirePermission(…,\n\"team:manage_rbac\")`). Used as the default editor gate.",
      "signature": "declare const MANAGE_RBAC_PERMISSION = \"team:manage_rbac\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.MarkdownErrorBoundary",
      "name": "@farthershore/farthershore-js/components.MarkdownErrorBoundary",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/markdown.d.ts#L32",
      "description": "Docs/legal render-error boundary — now a thin wrapper over the reusable\n{@link FsErrorBoundary }. Keeps the original single-arg `renderError(error)`\nsignature so existing call sites (the legal page) are unchanged.",
      "signature": "export declare function MarkdownErrorBoundary({ renderError, onError, children, }: {\n    renderError: (error: Error) => ReactNode;\n    onError?: (error: Error) => void;\n    children: ReactNode;\n}): import(\"react\").JSX.Element;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.MeterUsageRows",
      "name": "@farthershore/farthershore-js/components.MeterUsageRows",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/usage-surfaces.d.ts#L9",
      "description": "Plan-aware meter rows — the shared row presentation inside every usage\nsummary (portal Overview hero, Usage page, Billing current-plan card).\nPresentational: callers pass pre-built rows (`format.buildMeterUsageRows`).",
      "signature": "export declare function MeterUsageRows({ rows }: {\n    rows: MeterUsageRow__65f0c2813d76[];\n}): import(\"react\").JSX.Element | null;",
      "typeReferences": [
        {
          "name": "MeterUsageRow__65f0c2813d76",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L226"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.OnboardingView",
      "name": "@farthershore/farthershore-js/components.OnboardingView",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/onboarding-view.d.ts#L24",
      "description": "Public export OnboardingView; see its declaration and owning guide.",
      "signature": "export declare function OnboardingView({ children, signedOut, className, title, reconcileCheckout, onCheckoutReturnConsumed, }?: OnboardingViewProps): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "OnboardingViewProps",
          "source": "packages/farthershore-js/dist/components/onboarding-view.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.OnboardingViewProps",
      "name": "@farthershore/farthershore-js/components.OnboardingViewProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/onboarding-view.d.ts#L2",
      "description": "Public export OnboardingViewProps; see its declaration and owning guide.",
      "signature": "export interface OnboardingViewProps {\n    /** Rendered once the subscriber context resolves (the real app). */\n    children?: ReactNode;\n    /** Rendered when the user is signed in but has no subscriber yet (or is\n     *  signed out) — i.e. not the transient billing-setup state. Defaults to\n     *  null. */\n    signedOut?: ReactNode | ((context: {\n        refetch: () => void;\n    }) => ReactNode);\n    /** Appended to the transient-state card root. */\n    className?: string;\n    /** Heading for the transient setup state. Defaults to \"Setting up your\n     *  account\". */\n    title?: string;\n    /** Reconcile a paid checkout return before exposing onboarding again. The\n     * managed root sets this from its router-agnostic checkout marker. */\n    reconcileCheckout?: boolean;\n    /** Called after a successful checkout return has been reconciled and its\n     * marker removed. Managed roots use this to clear their in-memory marker so\n     * later organization switches do not replay checkout reconciliation. */\n    onCheckoutReturnConsumed?: () => void;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.OrgSwitcher",
      "name": "@farthershore/farthershore-js/components.OrgSwitcher",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/org-switcher.d.ts#L22",
      "description": "Exported with its own error boundary: a render throw here shows a contained\n\"couldn't be displayed\" box instead of unmounting the host's page. Wrapped in\nTHIS module rather than the barrel so `export { OrgSwitcher }` stays a pure\nre-export and the components barrel remains tree-shakeable.",
      "signature": "declare const OrgSwitcher: typeof OrgSwitcherImpl__e664bc10fc1b;",
      "typeReferences": [
        {
          "name": "OrgSwitcherImpl__e664bc10fc1b",
          "source": "packages/farthershore-js/dist/components/org-switcher.d.ts#L15"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.OrgSwitcherProps",
      "name": "@farthershore/farthershore-js/components.OrgSwitcherProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/org-switcher.d.ts#L2",
      "description": "Public export OrgSwitcherProps; see its declaration and owning guide.",
      "signature": "export interface OrgSwitcherProps {\n    /** Appended to the root. */\n    className?: string;\n    /** Override the org list (default: the SDK org context's organizations). */\n    contexts?: SubscriptionContext__55ff0ed7dfb5[];\n    /** Override the active selection (default: the SDK org context's). */\n    selectedOrganizationId?: string | null;\n    /** Compact rail variant (avatar-only trigger, side popover). */\n    collapsed?: boolean;\n    /** Own the switch (persistence + refresh). Default: the SDK org context's\n     *  `setOrganization` (cache-busting, persisted). */\n    onSelect?: (organizationId: string) => void;\n}",
      "typeReferences": [
        {
          "name": "SubscriptionContext__55ff0ed7dfb5",
          "source": "packages/farthershore-js/dist/types.d.ts#L955"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.parseBusinessDocsIndex",
      "name": "@farthershore/farthershore-js/components.parseBusinessDocsIndex",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L61",
      "description": "Public export parseBusinessDocsIndex; see its declaration and owning guide.",
      "signature": "export declare function parseBusinessDocsIndex(source: string): BusinessDocsIndex;",
      "typeReferences": [
        {
          "name": "BusinessDocsIndex",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L41"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.parseLegalRoute",
      "name": "@farthershore/farthershore-js/components.parseLegalRoute",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/legal-route.d.ts#L16",
      "description": "Parse a pathname into a legal route, or `null` when it is not one (so a\nhost router can fall through to its own pages).",
      "signature": "export declare function parseLegalRoute(pathname: string): LegalRoute | null;",
      "typeReferences": [
        {
          "name": "LegalRoute",
          "source": "packages/farthershore-js/dist/components/legal-route.d.ts#L6"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.PermissionGate",
      "name": "@farthershore/farthershore-js/components.PermissionGate",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/permission-gate.d.ts#L102",
      "description": "Reveal `children` only when the signed-in member's resolved permissions\ngrant the gate's permission. Resolving → aria-busy placeholder (no flash);\ndenied → per `mode` (hide / disable / readOnly / denied).",
      "signature": "export declare function PermissionGate({ permission, component, children, mode, fallback, allowSensitiveWithoutAuth, }: PermissionGateProps): import(\"react\").JSX.Element | null;",
      "typeReferences": [
        {
          "name": "PermissionGateProps",
          "source": "packages/farthershore-js/dist/components/permission-gate.d.ts#L49"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.PermissionGateProps",
      "name": "@farthershore/farthershore-js/components.PermissionGateProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/permission-gate.d.ts#L49",
      "description": "Public export PermissionGateProps; see its declaration and owning guide.",
      "signature": "export interface PermissionGateProps {\n    /** The required permission — a unified-grammar key (`<subject>:<verb>`,\n     *  e.g. `reports:write`, `apikey:read`; from the product's derived catalog\n     *  or the managed vocabulary). Omit when `component` is given (the policy\n     *  resolver supplies it); providing BOTH lets the explicit permission\n     *  override the resolved one. */\n    permission?: string;\n    /** A component id (`plans_table` / `custom:<slug>`): the permission AND the\n     *  default deny render come from the fail-closed component-policy resolver\n     *  (registration → subscriber overlay → managed default → derived; unknown\n     *  ids → denied). */\n    component?: string;\n    /** The subtree to reveal when the permission is granted. */\n    children?: ReactNode;\n    /**\n     * How the gate renders on DENY (the contracts gate-mode vocabulary):\n     *  - `hide` (default) — nothing at all: no placeholder, the layout reflows.\n     *  - `disable` — the subtree, genuinely inert: wrapped in a disabled\n     *    `<fieldset>` with `inert`, so form controls disable and nothing is\n     *    focusable/clickable (a REAL disable, not just styling).\n     *  - `readOnly` — the subtree with {@link usePermissionReadOnly} = true;\n     *    permission-aware components render non-editable views.\n     *  - `denied` — the `fallback` node when given, else `<AccessDenied>`\n     *    naming the missing permission.\n     * Defaults to the component policy's gateMode when `component` is given.\n     */\n    mode?: ComponentGateMode__052103626acf;\n    /** Custom denied content for `mode=\"denied\"` (typically `<AccessDenied\n     *  requiredPermission={…}>`); also used as the deny render if provided\n     *  with the default `hide` mode. */\n    fallback?: ReactNode;\n    /** Explicit development-only opt-in for rendering a sensitive component\n     *  under a bare provider (`skipAuth`). Defaults to false. */\n    allowSensitiveWithoutAuth?: boolean;\n}",
      "typeReferences": [
        {
          "name": "ComponentGateMode__052103626acf",
          "source": "packages/farthershore-js/dist/component-policy.d.ts#L5"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.PermissionGateStatus",
      "name": "@farthershore/farthershore-js/components.PermissionGateStatus",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/permission-gate.d.ts#L5",
      "description": "The gate's resolved state. `loading` until auth + the RBAC claim settle\n(no flash-of-denied-content); then `granted` or `denied`.",
      "signature": "export type PermissionGateStatus = \"loading\" | \"granted\" | \"denied\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.planAuthGuard",
      "name": "@farthershore/farthershore-js/components.planAuthGuard",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auth-guard.d.ts#L46",
      "description": "The pure auth-guard decision (no React, no router). While auth is loading →\n`loading`. Once loaded: a public surface (`requireAuth: false`) is always\n`allowed`; an auth-required surface is `allowed` for a signed-in user and\n`redirecting` (to `redirectTo` ?? \"/\") for a signed-out one. A signed-in\nuser missing `requirePermission` → `denied` (fallback, no redirect).\nExported for direct use + unit testing; `useAuthGuard` is the React wrapper.",
      "signature": "export declare function planAuthGuard(input: AuthGuardInput): AuthGuardDecision;",
      "typeReferences": [
        {
          "name": "AuthGuardDecision",
          "source": "packages/farthershore-js/dist/components/auth-guard.d.ts#L9"
        },
        {
          "name": "AuthGuardInput",
          "source": "packages/farthershore-js/dist/components/auth-guard.d.ts#L14"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.PlansTable",
      "name": "@farthershore/farthershore-js/components.PlansTable",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/plans-table.d.ts#L37",
      "description": "Exported with its own error boundary: a render throw here shows a contained\n\"couldn't be displayed\" box instead of unmounting the host's page. Wrapped in\nTHIS module rather than the barrel so `export { PlansTable }` stays a pure\nre-export and the components barrel remains tree-shakeable.",
      "signature": "declare const PlansTable: typeof PlansTableImpl__acc7f730968b;",
      "typeReferences": [
        {
          "name": "PlansTableImpl__acc7f730968b",
          "source": "packages/farthershore-js/dist/components/plans-table.d.ts#L30"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.PlansTableProps",
      "name": "@farthershore/farthershore-js/components.PlansTableProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/plans-table.d.ts#L3",
      "description": "Public export PlansTableProps; see its declaration and owning guide.",
      "signature": "export interface PlansTableProps {\n    /** Eligibility-scoped plan catalog, for example `/me.availablePlans`.\n     *  When omitted, the public product catalog from `usePlans()` is used. */\n    availablePlans?: Plan__3a8348415fe9[];\n    /** Current plan used to reduce `availablePlans` to upgrade-only choices.\n     *  Omit to retain the ordinary public-catalog behavior. */\n    currentPlan?: Plan__3a8348415fe9 | null;\n    /** Override the featured (\"Most Popular\") plan; defaults to the product's\n     *  configured featured plan. */\n    featuredPlanId?: string | null;\n    /** Appended to the plan-grid root. */\n    className?: string;\n    /** Render a custom card in place of the default `<PlanCard>`. `ctx` carries\n     *  `onSubscribe` so a custom card can still trigger checkout. */\n    renderRow?: (plan: Plan__3a8348415fe9, ctx: {\n        featured: boolean;\n        pending: boolean;\n        onSubscribe: () => void;\n        index: number;\n    }) => ReactNode;\n    /** Optional host-owned heading/chrome rendered only when rows exist. */\n    renderHeader?: (ctx: {\n        count: number;\n    }) => ReactNode;\n    /** Override the default no-plans message. Pass `null` to render nothing. */\n    emptyState?: ReactNode;\n}",
      "typeReferences": [
        {
          "name": "Plan__3a8348415fe9",
          "source": "packages/farthershore-js/dist/types.d.ts#L127"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.PricingPlanCard",
      "name": "@farthershore/farthershore-js/components.PricingPlanCard",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/pricing-plan-card.d.ts#L3",
      "description": "Public export PricingPlanCard; see its declaration and owning guide.",
      "signature": "export declare function PricingPlanCard({ plan, featured, action, docsLink, }: {\n    plan: Plan__3a8348415fe9;\n    featured: boolean;\n    action: ReactNode;\n    /** The \"see the docs\" link for usage-priced plans — pass the host router's\n     *  link component; defaults to a plain anchor at /docs. */\n    docsLink?: ReactNode;\n}): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "Plan__3a8348415fe9",
          "source": "packages/farthershore-js/dist/types.d.ts#L127"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.productDocsHref",
      "name": "@farthershore/farthershore-js/components.productDocsHref",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/docs-route.d.ts#L27",
      "description": "Public export productDocsHref; see its declaration and owning guide.",
      "signature": "export declare function productDocsHref(slug: string, defaultSlug?: string | null, view?: \"standalone\"): string;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.PublishedLegalDocument",
      "name": "@farthershore/farthershore-js/components.PublishedLegalDocument",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/legal-document.d.ts#L12",
      "description": "One published legal document, as declared in the builder's `legal/` index.",
      "signature": "export interface PublishedLegalDocument extends LegalDocumentReference__0e8dba55b6a6 {\n    kind: string;\n}",
      "typeReferences": [
        {
          "name": "LegalDocumentReference__0e8dba55b6a6",
          "source": "packages/farthershore-js/dist/types.d.ts#L61"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.RateLimitDisplay",
      "name": "@farthershore/farthershore-js/components.RateLimitDisplay",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/rate-limit-display.d.ts#L16",
      "description": "Exported with its own error boundary: a render throw here shows a contained\n\"couldn't be displayed\" box instead of unmounting the host's page. Wrapped in\nTHIS module rather than the barrel so `export { RateLimitDisplay }` stays a pure\nre-export and the components barrel remains tree-shakeable.",
      "signature": "declare const RateLimitDisplay: typeof RateLimitDisplayImpl__083c8437250b;",
      "typeReferences": [
        {
          "name": "RateLimitDisplayImpl__083c8437250b",
          "source": "packages/farthershore-js/dist/components/rate-limit-display.d.ts#L9"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.RateLimitDisplayProps",
      "name": "@farthershore/farthershore-js/components.RateLimitDisplayProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/rate-limit-display.d.ts#L1",
      "description": "Public export RateLimitDisplayProps; see its declaration and owning guide.",
      "signature": "export interface RateLimitDisplayProps {\n    /** Appended to the root card. */\n    className?: string;\n    /** Heading text. Defaults to \"API rate limit\". */\n    title?: string;\n    /** Warn when remaining requests drop to/below this. Defaults to 10. */\n    warnBelow?: number;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.registerComponent",
      "name": "@farthershore/farthershore-js/components.registerComponent",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/component-policy.d.ts#L67",
      "description": "Register a builder component's gate policy. Ids are namespaced\n`custom:<slug>` (managed ids are also accepted, letting a host re-declare a\nmanaged component's default gate). Throws on a malformed id — a typo'd\nregistration would otherwise silently resolve DENIED.",
      "signature": "export declare function registerComponent(registration: ComponentRegistration): void;",
      "typeReferences": [
        {
          "name": "ComponentRegistration",
          "source": "packages/farthershore-js/dist/component-policy.d.ts#L47"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.REMOVE_MEMBER_PERMISSION",
      "name": "@farthershore/farthershore-js/components.REMOVE_MEMBER_PERMISSION",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/team.d.ts#L3",
      "description": "The member-removal permission the roster's Remove action maps to (the\ntemplate's canRemove derivation).",
      "signature": "declare const REMOVE_MEMBER_PERMISSION = \"team:remove_member\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.RequestScopedFsAuth",
      "name": "@farthershore/farthershore-js/components.RequestScopedFsAuth",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auth.d.ts#L84",
      "description": "Override the managed-RBAC claim for one subtree with a request-local `/me`\nscope. This is for deliberate default-subscription surfaces (for example the\naudit log) that must not mutate the portal's shared organization selection.",
      "signature": "export declare function RequestScopedFsAuth({ organizationId, children, }: {\n    organizationId: string | null;\n    children: ReactNode;\n}): import(\"react\").JSX.Element;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.RequireAuth",
      "name": "@farthershore/farthershore-js/components.RequireAuth",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auth-guard.d.ts#L110",
      "description": "Reveal `children` only when the user is signed in (and, when\n`requirePermission` is set, holds that Managed-RBAC permission). While auth\nloads → `fallback` (aria-busy by default, no flash); signed-out →\n`fallback` and, if `onRedirect` is supplied, a call with the redirect\ntarget (the host navigates); permission-denied → `fallback` only (no\nredirect — the user is signed in, just under-permissioned). Self-managed\nunder `<FartherShoreRoot>`.",
      "signature": "export declare function RequireAuth({ children, fallback, requirePermission, redirectTo, onRedirect, }: RequireAuthProps): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "RequireAuthProps",
          "source": "packages/farthershore-js/dist/components/auth-guard.d.ts#L77"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.RequireAuthProps",
      "name": "@farthershore/farthershore-js/components.RequireAuthProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auth-guard.d.ts#L77",
      "description": "Public export RequireAuthProps; see its declaration and owning guide.",
      "signature": "export interface RequireAuthProps {\n    children?: ReactNode;\n    /** Rendered while loading, while redirecting (signed-out), or when a\n     *  `requirePermission` check denies. Defaults to an aria-busy placeholder\n     *  so assistive tech announces the pending state and there's no\n     *  flash-of-protected-content. */\n    fallback?: ReactNode;\n    /** A Managed-RBAC permission (`<route-id>:read|write`) the subtree\n     *  additionally requires (FAR-700). A signed-in user lacking it gets the\n     *  `fallback` (no redirect). Composes with the existing props: the\n     *  sign-in gate still runs first. UX ONLY — the gateway's `permission`\n     *  constraint is the security boundary, so a hidden control is a\n     *  convenience, never a defense. */\n    requirePermission?: string;\n    /** Where a signed-out user should go. Surfaced on the decision so a host\n     *  effect can navigate; `<RequireAuth>` itself never navigates. Defaults\n     *  to \"/\". */\n    redirectTo?: string;\n    /** Fired with the redirect target when the guard decides to redirect — the\n     *  host's navigation hook (router push). Optional: when omitted the component\n     *  just renders the fallback and the host can read the same decision via\n     *  `useAuthGuard`. */\n    onRedirect?: (redirectTo: string) => void;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.resolveActiveCollection",
      "name": "@farthershore/farthershore-js/components.resolveActiveCollection",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections.d.ts#L32",
      "description": "Resolve the active collection id following the precedence:\n  explicit route → stored → defaultCollection → collections[0] → null\n\nA candidate only wins when it is actually one of `collections` (an unknown\nroute segment or a stale stored value is ignored, falling through to the next\nsource). With no collections at all the result is `null` — the \"single\nbundle / no collections\" sentinel every consumer treats as \"render the one\nbundle, show no tab bar\".",
      "signature": "export declare function resolveActiveCollection(input: ResolveActiveCollectionInput): string | null;",
      "typeReferences": [
        {
          "name": "ResolveActiveCollectionInput",
          "source": "packages/farthershore-js/dist/components/docs-chrome/collections.d.ts#L12"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.ResolveActiveCollectionInput",
      "name": "@farthershore/farthershore-js/components.ResolveActiveCollectionInput",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections.d.ts#L12",
      "description": "Inputs to {@link resolveActiveCollection} — every source is optional.",
      "signature": "export type ResolveActiveCollectionInput = {\n    /** Explicit selection from the route (first path segment); highest precedence. */\n    explicit?: string | null;\n    /** Last persisted selection (scoped localStorage). */\n    stored?: string | null;\n    /** The doc's declared default collection. */\n    defaultCollection?: string | null;\n    /** The doc's full collection list. */\n    collections?: ReadonlyArray<DocsCollection> | null;\n};",
      "typeReferences": [
        {
          "name": "DocsCollection",
          "source": "packages/farthershore-js/dist/components/docs-chrome/collections.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.resolveActiveLanguage",
      "name": "@farthershore/farthershore-js/components.resolveActiveLanguage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L48",
      "description": "Resolve the active language id following the precedence:\n  explicit `?lang=`  →  stored  →  defaultLanguage  →  languages[0]  →  null\n\nA candidate only wins when it is actually one of `languages` (an unknown\n`?lang=` or a stale stored value is ignored, falling through to the next\nsource). With no languages at all the result is `null` — the \"no language\nconcept\" sentinel every consumer treats as \"render everything\".",
      "signature": "export declare function resolveActiveLanguage(input: ResolveActiveLanguageInput): string | null;",
      "typeReferences": [
        {
          "name": "ResolveActiveLanguageInput",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L29"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.ResolveActiveLanguageInput",
      "name": "@farthershore/farthershore-js/components.ResolveActiveLanguageInput",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L29",
      "description": "Inputs to {@link resolveActiveLanguage} — every source is optional.",
      "signature": "export type ResolveActiveLanguageInput = {\n    /** Explicit selection from the URL (`?lang=`); highest precedence. */\n    explicit?: string | null;\n    /** Last persisted selection (scoped localStorage). */\n    stored?: string | null;\n    /** The doc's declared default language. */\n    defaultLanguage?: string | null;\n    /** The doc's full language list. */\n    languages?: ReadonlyArray<DocsLanguage> | null;\n};",
      "typeReferences": [
        {
          "name": "DocsLanguage",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.resolveDocsMode",
      "name": "@farthershore/farthershore-js/components.resolveDocsMode",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/docs-mode.d.ts#L36",
      "description": "Public export resolveDocsMode; see its declaration and owning guide.",
      "signature": "export declare function resolveDocsMode(input: DocsModeInput): DocsMode;",
      "typeReferences": [
        {
          "name": "DocsMode",
          "source": "packages/farthershore-js/dist/components/product-docs/docs-mode.d.ts#L11"
        },
        {
          "name": "DocsModeInput",
          "source": "packages/farthershore-js/dist/components/product-docs/docs-mode.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.resolveSignInDestination",
      "name": "@farthershore/farthershore-js/components.resolveSignInDestination",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auth-guard.d.ts#L76",
      "description": "Sign-in is strategy-owned, not an application route. Test-persona sessions\nare opened by the CLI through the platform-owned bridge; Clerk owns its\nhosted redirect. Call `useFsAuth().signIn()` instead of navigating directly.",
      "signature": "export declare function resolveSignInDestination(strategy: AuthStrategy__ccafca0932db): string | null;",
      "typeReferences": [
        {
          "name": "AuthStrategy__ccafca0932db",
          "source": "packages/farthershore-js/dist/types.d.ts#L59"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.ResourceLimitUsageCard",
      "name": "@farthershore/farthershore-js/components.ResourceLimitUsageCard",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/resource-limit-usage-card.d.ts#L14",
      "description": "Exported with its own error boundary: a render throw here shows a contained\n\"couldn't be displayed\" box instead of unmounting the host's page. Wrapped in\nTHIS module rather than the barrel so `export { ResourceLimitUsageCard }` stays a pure\nre-export and the components barrel remains tree-shakeable.",
      "signature": "declare const ResourceLimitUsageCard: typeof ResourceLimitUsageCardImpl__b73d0d5d75dd;",
      "typeReferences": [
        {
          "name": "ResourceLimitUsageCardImpl__b73d0d5d75dd",
          "source": "packages/farthershore-js/dist/components/resource-limit-usage-card.d.ts#L7"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.ResourceLimitUsageCardProps",
      "name": "@farthershore/farthershore-js/components.ResourceLimitUsageCardProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/resource-limit-usage-card.d.ts#L1",
      "description": "Public export ResourceLimitUsageCardProps; see its declaration and owning guide.",
      "signature": "export interface ResourceLimitUsageCardProps {\n    /** Appended to the root card. */\n    className?: string;\n    /** Heading text. Defaults to \"Plan usage\". */\n    title?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.ResourcesPanel",
      "name": "@farthershore/farthershore-js/components.ResourcesPanel",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/resources-panel.d.ts#L21",
      "description": "Exported with its own error boundary: a render throw here shows a contained\n\"couldn't be displayed\" box instead of unmounting the host's page. Wrapped in\nTHIS module rather than the barrel so `export { ResourcesPanel }` stays a pure\nre-export and the components barrel remains tree-shakeable.",
      "signature": "declare const ResourcesPanel: typeof ResourcesPanelImpl__0ecc889f1253;",
      "typeReferences": [
        {
          "name": "ResourcesPanelImpl__0ecc889f1253",
          "source": "packages/farthershore-js/dist/components/resources-panel.d.ts#L14"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.ResourcesPanelProps",
      "name": "@farthershore/farthershore-js/components.ResourcesPanelProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/resources-panel.d.ts#L1",
      "description": "Public export ResourcesPanelProps; see its declaration and owning guide.",
      "signature": "export interface ResourcesPanelProps {\n    /** The declared resource name (e.g. \"widgets\"). */\n    resourceName: string;\n    /** Build the create payload (defaults to an empty object). */\n    makePayload?: () => unknown;\n    /** Render one record's summary (defaults to its id). */\n    renderItem?: (record: {\n        id: string;\n        payload: unknown;\n    }) => string;\n    /** Appended to the root card. */\n    className?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.RoutePanel",
      "name": "@farthershore/farthershore-js/components.RoutePanel",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/route-panel.d.ts#L11",
      "description": "Public export RoutePanel; see its declaration and owning guide.",
      "signature": "declare const RoutePanel: typeof RoutePanelImpl__b2819b22dcb3;",
      "typeReferences": [
        {
          "name": "RoutePanelImpl__b2819b22dcb3",
          "source": "packages/farthershore-js/dist/components/route-panel.d.ts#L10"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.RoutePanelProps",
      "name": "@farthershore/farthershore-js/components.RoutePanelProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/route-panel.d.ts#L4",
      "description": "Public export RoutePanelProps; see its declaration and owning guide.",
      "signature": "export interface RoutePanelProps {\n    /** Initial value for the path input. */\n    defaultPath?: string;\n    /** Appended to the root card. */\n    className?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.SafeDocsMarkdown",
      "name": "@farthershore/farthershore-js/components.SafeDocsMarkdown",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/markdown.d.ts#L47",
      "description": "Docs-page markdown with the SafeMDX behavior: a render throw shows the\nSSR error card instead of crashing the route. Key the component by page\nslug at the call site so the boundary resets on navigation.\n\n`components` (optional) is a builder override map merged OVER the managed\ndocs component map — so a builder can swap how a `<h2>`, `<a>`, `<code>`,\n`<table>`, etc. render while every un-overridden tag keeps its managed\nbehavior (heading anchors, host-router links, copy-able fenced code).",
      "signature": "export declare function SafeDocsMarkdown({ source, components, }: {\n    source: string;\n    components?: Components;\n}): import(\"react\").JSX.Element;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.selectLanguageTabs",
      "name": "@farthershore/farthershore-js/components.selectLanguageTabs",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L72",
      "description": "Partition `tabs` into language variants vs auxiliary tabs and keep only the\nactive language's variant (plus every aux tab), in original order.\n\nByte-identical guarantee: if there is ≤1 language tab, OR `activeLanguage`\nis `null`, the input is returned UNCHANGED (same array, same order) — a\nsingle-language / no-language page never sees filtering. Otherwise the\nactive-language tab is kept (falling back to the FIRST language tab when the\nactive language has no variant here, so the card is never blank), followed by\nall aux tabs.\n\nWhen `languages` is provided it is forwarded to {@link classifyTabLanguage}\nso that builder-declared languages (with custom aliases) are recognized.",
      "signature": "export declare function selectLanguageTabs<T extends DocsLanguageTab>(tabs: ReadonlyArray<T>, activeLanguage: string | null, languages?: ReadonlyArray<DocsLanguage>): ReadonlyArray<T>;",
      "typeReferences": [
        {
          "name": "DocsLanguage",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L2"
        },
        {
          "name": "DocsLanguageTab",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L50"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.SignedIn",
      "name": "@farthershore/farthershore-js/components.SignedIn",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auth.d.ts#L21",
      "description": "Renders children only when a user is signed in.",
      "signature": "export declare function SignedIn({ children }: {\n    children: ReactNode;\n}): import(\"react\").JSX.Element | null;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.SignedOut",
      "name": "@farthershore/farthershore-js/components.SignedOut",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auth.d.ts#L26",
      "description": "Renders children only when signed out (and auth has finished loading —\nnothing flashes during init).",
      "signature": "export declare function SignedOut({ children }: {\n    children: ReactNode;\n}): import(\"react\").JSX.Element | null;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.SpendCapControl",
      "name": "@farthershore/farthershore-js/components.SpendCapControl",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/spend-cap-control.d.ts#L14",
      "description": "Exported with its own error boundary: a render throw here shows a contained\n\"couldn't be displayed\" box instead of unmounting the host's page. Wrapped in\nTHIS module rather than the barrel so `export { SpendCapControl }` stays a pure\nre-export and the components barrel remains tree-shakeable.",
      "signature": "declare const SpendCapControl: typeof SpendCapControlImpl__efe6f2b0fd95;",
      "typeReferences": [
        {
          "name": "SpendCapControlImpl__efe6f2b0fd95",
          "source": "packages/farthershore-js/dist/components/spend-cap-control.d.ts#L7"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.SpendCapControlProps",
      "name": "@farthershore/farthershore-js/components.SpendCapControlProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/spend-cap-control.d.ts#L1",
      "description": "Public export SpendCapControlProps; see its declaration and owning guide.",
      "signature": "export interface SpendCapControlProps {\n    /** Appended to the root card. */\n    className?: string;\n    /** Heading text. Defaults to \"Monthly spend cap\". */\n    title?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.SpyHeading",
      "name": "@farthershore/farthershore-js/components.SpyHeading",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/nav-hooks.d.ts#L22",
      "description": "Minimal heading shape both renderers share (depth-tagged TOC entries).",
      "signature": "export type SpyHeading = {\n    id: string;\n    depth: number;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.TeamPanel",
      "name": "@farthershore/farthershore-js/components.TeamPanel",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/team-panel.d.ts#L14",
      "description": "Exported with its own error boundary: a render throw here shows a contained\n\"couldn't be displayed\" box instead of unmounting the host's page. Wrapped in\nTHIS module rather than the barrel so `export { TeamPanel }` stays a pure\nre-export and the components barrel remains tree-shakeable.",
      "signature": "declare const TeamPanel: typeof TeamPanelImpl__c348298e2aa6;",
      "typeReferences": [
        {
          "name": "TeamPanelImpl__c348298e2aa6",
          "source": "packages/farthershore-js/dist/components/team-panel.d.ts#L7"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.TeamPanelProps",
      "name": "@farthershore/farthershore-js/components.TeamPanelProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/team-panel.d.ts#L1",
      "description": "Public export TeamPanelProps; see its declaration and owning guide.",
      "signature": "export interface TeamPanelProps {\n    /** Appended to the root card. */\n    className?: string;\n    /** Heading text. Defaults to \"Team\". */\n    title?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.TrialBanner",
      "name": "@farthershore/farthershore-js/components.TrialBanner",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/trial-banner.d.ts#L17",
      "description": "Exported with its own error boundary: a render throw here shows a contained\n\"couldn't be displayed\" box instead of unmounting the host's page. Wrapped in\nTHIS module rather than the barrel so `export { TrialBanner }` stays a pure\nre-export and the components barrel remains tree-shakeable.",
      "signature": "declare const TrialBanner: typeof TrialBannerImpl__d471bab52484;",
      "typeReferences": [
        {
          "name": "TrialBannerImpl__d471bab52484",
          "source": "packages/farthershore-js/dist/components/trial-banner.d.ts#L10"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.TrialBannerProps",
      "name": "@farthershore/farthershore-js/components.TrialBannerProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/trial-banner.d.ts#L1",
      "description": "Public export TrialBannerProps; see its declaration and owning guide.",
      "signature": "export interface TrialBannerProps {\n    /** Appended to the root banner. */\n    className?: string;\n    /** Optional click handler for the call-to-action (e.g. open the plans page).\n     *  When omitted, no action button is rendered (banner is informational). */\n    onUpgrade?: () => void;\n    /** CTA label. Defaults to \"Upgrade now\". */\n    upgradeLabel?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.unregisterComponent",
      "name": "@farthershore/farthershore-js/components.unregisterComponent",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/component-policy.d.ts#L69",
      "description": "Remove a registration (host teardown / tests).",
      "signature": "export declare function unregisterComponent(id: string): void;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.UpgradePrompt",
      "name": "@farthershore/farthershore-js/components.UpgradePrompt",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/upgrade-prompt.d.ts#L52",
      "description": "Exported with its own error boundary: a render throw here shows a contained\n\"couldn't be displayed\" box instead of unmounting the host's page. Wrapped in\nTHIS module rather than the barrel so `export { UpgradePrompt }` stays a pure\nre-export and the components barrel remains tree-shakeable.",
      "signature": "declare const UpgradePrompt: typeof UpgradePromptImpl__8f7c125f9324;",
      "typeReferences": [
        {
          "name": "UpgradePromptImpl__8f7c125f9324",
          "source": "packages/farthershore-js/dist/components/upgrade-prompt.d.ts#L45"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.UpgradePromptProps",
      "name": "@farthershore/farthershore-js/components.UpgradePromptProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/upgrade-prompt.d.ts#L44",
      "description": "Public export UpgradePromptProps; see its declaration and owning guide.",
      "signature": "export type UpgradePromptProps = LimitUpgradePromptProps__0343e0f6f02c | DirectPlanUpgradePromptProps__956ae755c97f;",
      "typeReferences": [
        {
          "name": "DirectPlanUpgradePromptProps__956ae755c97f",
          "source": "packages/farthershore-js/dist/components/upgrade-prompt.d.ts#L25"
        },
        {
          "name": "LimitUpgradePromptProps__0343e0f6f02c",
          "source": "packages/farthershore-js/dist/components/upgrade-prompt.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.UsageCard",
      "name": "@farthershore/farthershore-js/components.UsageCard",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/usage.d.ts#L22",
      "description": "Exported with its own error boundary: a render throw here shows a contained\n\"couldn't be displayed\" box instead of unmounting the host's page. Wrapped in\nTHIS module rather than the barrel so `export { UsageCard }` stays a pure\nre-export and the components barrel remains tree-shakeable.",
      "signature": "declare const UsageCard: typeof UsageCardImpl__1cd3adcc9ade;",
      "typeReferences": [
        {
          "name": "UsageCardImpl__1cd3adcc9ade",
          "source": "packages/farthershore-js/dist/components/usage.d.ts#L15"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.UsageCardProps",
      "name": "@farthershore/farthershore-js/components.UsageCardProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/usage.d.ts#L7",
      "description": "Self-managed: with no props it resolves the subscriber's active plan from the\nsession itself. `activeCompiledPlanId` is an optional override.",
      "signature": "export interface UsageCardProps {\n    /** Override the subscriber's active plan (defaults from the session). */\n    activeCompiledPlanId?: string | null;\n    /** Appended to the root card. */\n    className?: string;\n    /** Render a custom row in place of the default `.fs-usage__row` markup. */\n    renderRow?: (row: MeterUsageRow__65f0c2813d76, index: number) => ReactNode;\n}",
      "typeReferences": [
        {
          "name": "MeterUsageRow__65f0c2813d76",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L226"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.UsageTimeRange",
      "name": "@farthershore/farthershore-js/components.UsageTimeRange",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/usage-surfaces.d.ts#L44",
      "description": "Public export UsageTimeRange; see its declaration and owning guide.",
      "signature": "export type UsageTimeRange = \"period\" | \"1d\" | \"7d\" | \"30d\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.useAuthGuard",
      "name": "@farthershore/farthershore-js/components.useAuthGuard",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auth-guard.d.ts#L70",
      "description": "React binding over {@link planAuthGuard}: reads the managed auth state\n(`useFsAuth`) and returns the decision. PURE — it does NOT navigate (the host\nowns routing); it only (optionally, as a side effect) stashes the return-to\ndeep link in sessionStorage on a redirecting decision so the host can restore\nit after sign-in. Must be used under `<FartherShoreRoot>` / `<FsAuthProvider>`.",
      "signature": "export declare function useAuthGuard(opts: UseAuthGuardOptions): AuthGuardDecision;",
      "typeReferences": [
        {
          "name": "AuthGuardDecision",
          "source": "packages/farthershore-js/dist/components/auth-guard.d.ts#L9"
        },
        {
          "name": "UseAuthGuardOptions",
          "source": "packages/farthershore-js/dist/components/auth-guard.d.ts#L47"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.UseAuthGuardOptions",
      "name": "@farthershore/farthershore-js/components.UseAuthGuardOptions",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/auth-guard.d.ts#L47",
      "description": "Public export UseAuthGuardOptions; see its declaration and owning guide.",
      "signature": "export interface UseAuthGuardOptions {\n    /** Whether the current surface requires authentication. */\n    requireAuth: boolean;\n    /** Where to send a signed-out user. Defaults to \"/\". */\n    redirectTo?: string;\n    /** A Managed-RBAC permission the surface additionally requires (FAR-700).\n     *  Checked via the managed `useFsAuth().hasPermission` — a signed-in user\n     *  lacking it resolves `denied` (fallback, no redirect). UX only; the edge\n     *  `permission` constraint is the security boundary. */\n    requirePermission?: string;\n    /** sessionStorage key under which the current location is stashed before a\n     *  redirect, so the host can restore the deep link after sign-in. When set\n     *  (and in a browser), the guard writes `location.pathname + search` on a\n     *  `redirecting` decision. Defaults to \"fs-return-to\"; pass null to disable. */\n    returnToKey?: string | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.useBusinessDocs",
      "name": "@farthershore/farthershore-js/components.useBusinessDocs",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs.d.ts#L36",
      "description": "Headless docs data hook (Tier 3) — fetches current `_index.yaml` → every\npage .mdx off `docsBaseUrl` (= boot.business.docsBaseUrl) through the\nsession-scoped fetch memo (fetchBusinessDocs), keyed by base/env so a\nstale resolution is never shown for the current key. Returns\n`{ loading, docs }` — `docs` is null while unpublished or after a fetch\nfailure. This is the single fetch that feeds every connector-fed docs\nsubcomponent.",
      "signature": "export declare function useBusinessDocs(docsBaseUrl: string | null, envName: string | null): {\n    loading: boolean;\n    docs: BusinessDocsData | null;\n};",
      "typeReferences": [
        {
          "name": "BusinessDocsData",
          "source": "packages/farthershore-js/dist/components/product-docs/fetch-product-docs.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.useBusinessDocsPage",
      "name": "@farthershore/farthershore-js/components.useBusinessDocsPage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/product-docs.d.ts#L126",
      "description": "The entire /docs page, headless (Tier 3): route parsing → bootstrap-fed\nfetch → embedded/standalone mode → ready/empty/loading state. This is\nEXACTLY what `<BusinessDocs/>` renders from — builders composing a custom\ndocs page get the same orchestration without re-deriving any of it.\nSide-effect-free beyond the data fetch: navigation (redirectTo), document\ntitle, and scroll behavior belong to the caller.",
      "signature": "export declare function useBusinessDocsPage(input?: BusinessDocsPageInput): BusinessDocsPageResult;",
      "typeReferences": [
        {
          "name": "BusinessDocsPageInput",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs.d.ts#L71"
        },
        {
          "name": "BusinessDocsPageResult",
          "source": "packages/farthershore-js/dist/components/product-docs/product-docs.d.ts#L88"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.useComponentGate",
      "name": "@farthershore/farthershore-js/components.useComponentGate",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/permission-gate.d.ts#L28",
      "description": "Resolve a COMPONENT id's gate: the fail-closed policy (permission + deny\nrender) plus its granted/denied status for the signed-in member.\nPresentational components resolve `granted` unconditionally; unknown ids or\ninvalid resolved policies deny regardless of permissions.",
      "signature": "export declare function useComponentGate(componentId: string): {\n    status: PermissionGateStatus;\n    granted: boolean;\n    policy: ResolvedComponentPolicy__89f6cd2cf9a4;\n};",
      "typeReferences": [
        {
          "name": "PermissionGateStatus",
          "source": "packages/farthershore-js/dist/components/permission-gate.d.ts#L5"
        },
        {
          "name": "ResolvedComponentPolicy__89f6cd2cf9a4",
          "source": "packages/farthershore-js/dist/component-policy.d.ts#L73"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.useDocsCollections",
      "name": "@farthershore/farthershore-js/components.useDocsCollections",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L12",
      "description": "Read the active docs collection. Unprovided → `{ activeCollection: null, … }`.",
      "signature": "export declare function useDocsCollections(): DocsCollectionsContextValue;",
      "typeReferences": [
        {
          "name": "DocsCollectionsContextValue",
          "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.useDocsCollectionsState",
      "name": "@farthershore/farthershore-js/components.useDocsCollectionsState",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L40",
      "description": "Derives the active-collection context value from the route: the URL segment\nis the source of truth (see `resolveActiveCollection` precedence), so there is\nno separate persisted state — a bare `/docs` falls back to `defaultCollection`\nthen `collections[0]`. `setCollection` invokes `onSelect` so the host\nnavigates; the resulting route change re-derives `activeCollection`. SSR-safe:\na pure derivation from props, no window access.",
      "signature": "export declare function useDocsCollectionsState(options: UseDocsCollectionsStateOptions): DocsCollectionsContextValue;",
      "typeReferences": [
        {
          "name": "DocsCollectionsContextValue",
          "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L2"
        },
        {
          "name": "UseDocsCollectionsStateOptions",
          "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L13"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.UseDocsCollectionsStateOptions",
      "name": "@farthershore/farthershore-js/components.UseDocsCollectionsStateOptions",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/collections-context.d.ts#L13",
      "description": "Public export UseDocsCollectionsStateOptions; see its declaration and owning guide.",
      "signature": "export type UseDocsCollectionsStateOptions = {\n    /** The doc's full collection list. */\n    collections: ReadonlyArray<DocsCollection>;\n    /** The doc's declared default collection. */\n    defaultCollection?: string | null;\n    /**\n     * The collection id encoded in the current route (first path segment). The\n     * URL is the source of truth for this route-bearing axis, so it wins;\n     * `defaultCollection` then `collections[0]` are the fallbacks for a bare\n     * `/docs`.\n     */\n    routeCollection?: string | null;\n    /**\n     * Called when the user picks a DIFFERENT collection, so the host can navigate\n     * to its landing page. Keeps this layer router-agnostic (no product-docs /\n     * router dependency); the route change is what actually flips the active tab.\n     */\n    onSelect?: (collection: DocsCollection) => void;\n};",
      "typeReferences": [
        {
          "name": "DocsCollection",
          "source": "packages/farthershore-js/dist/components/docs-chrome/collections.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.useDocsLanguage",
      "name": "@farthershore/farthershore-js/components.useDocsLanguage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L13",
      "description": "Read the active docs language. Unprovided → `{ activeLanguage: null, … }`.",
      "signature": "export declare function useDocsLanguage(): DocsLanguageContextValue;",
      "typeReferences": [
        {
          "name": "DocsLanguageContextValue",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.useDocsLanguageState",
      "name": "@farthershore/farthershore-js/components.useDocsLanguageState",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L33",
      "description": "Owns the active-language state for a docs surface: resolves the initial value\n(explicit `?lang=` → stored → defaultLanguage → languages[0] → null),\npersists changes to a scope-namespaced localStorage key, and reflects the\nchoice into `?lang=` (merging, never clobbering `?v=`/`?view=`). Returns the\ncontext value to feed `<DocsLanguageProvider>`.\n\nSSR-safe: the initial state ignores window on the server (resolves from the\ndeclared default/list only); the explicit/stored sources are merged on the\nclient in an effect, so the first hydration matches the server snapshot.",
      "signature": "export declare function useDocsLanguageState(options: UseDocsLanguageStateOptions): DocsLanguageContextValue;",
      "typeReferences": [
        {
          "name": "DocsLanguageContextValue",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L3"
        },
        {
          "name": "UseDocsLanguageStateOptions",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L14"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.UseDocsLanguageStateOptions",
      "name": "@farthershore/farthershore-js/components.UseDocsLanguageStateOptions",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/language-context.d.ts#L14",
      "description": "Public export UseDocsLanguageStateOptions; see its declaration and owning guide.",
      "signature": "export type UseDocsLanguageStateOptions = {\n    /** The doc's full language list. */\n    languages: ReadonlyArray<DocsLanguage>;\n    /** The doc's declared default language. */\n    defaultLanguage?: string | null;\n    /** Namespaces the localStorage key so different docs don't share a choice. */\n    scopeKey?: string | null;\n};",
      "typeReferences": [
        {
          "name": "DocsLanguage",
          "source": "packages/farthershore-js/dist/components/docs-chrome/language.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.useHeadingSpy",
      "name": "@farthershore/farthershore-js/components.useHeadingSpy",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/nav-hooks.d.ts#L35",
      "description": "Track which h2 (`depth === 2`) heading is currently in view, for the active\nsidebar sub-tree highlight. Observes every h2 element by id with a bottom\nroot-margin so a heading counts as \"active\" once it scrolls near the top,\nand seeds the active id to the first h2 so something is highlighted before\nthe first scroll. Re-runs when the heading set or `key` (the current slug)\nchanges. Returns `[activeHeadingId, setActiveHeadingId]` — the setter lets a\nsub-tree link mark itself active on click (both renderers do this).",
      "signature": "export declare function useHeadingSpy(headings: ReadonlyArray<SpyHeading>, key: string): [string | null, Dispatch<SetStateAction<string | null>>];",
      "typeReferences": [
        {
          "name": "SpyHeading",
          "source": "packages/farthershore-js/dist/components/docs-chrome/nav-hooks.d.ts#L22"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.useLegalConsent",
      "name": "@farthershore/farthershore-js/components.useLegalConsent",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/legal-consent-gate.d.ts#L8",
      "description": "Public export useLegalConsent; see its declaration and owning guide.",
      "signature": "export declare function useLegalConsent(): UseLegalConsentResult;",
      "typeReferences": [
        {
          "name": "UseLegalConsentResult",
          "source": "packages/farthershore-js/dist/components/legal-consent-gate.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.UseLegalConsentResult",
      "name": "@farthershore/farthershore-js/components.UseLegalConsentResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/legal-consent-gate.d.ts#L2",
      "description": "Public export UseLegalConsentResult; see its declaration and owning guide.",
      "signature": "export interface UseLegalConsentResult {\n    required: boolean;\n    documents: LegalDocumentStatus__f2d5a2d96393[];\n    accept(kinds: string[]): Promise<void>;\n    accepting: boolean;\n}",
      "typeReferences": [
        {
          "name": "LegalDocumentStatus__f2d5a2d96393",
          "source": "packages/farthershore-js/dist/types.d.ts#L67"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.useLegalConsentWizard",
      "name": "@farthershore/farthershore-js/components.useLegalConsentWizard",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/legal-consent-gate.d.ts#L45",
      "description": "Step-per-document consent state.\n\nSubmission is batched to the END: the accept API records the whole array in\none transaction with each document's version+contentHash pinned, so the set\nis accepted atomically and a mid-wizard content change fails the whole call\n(409) instead of leaving a half-consented subscriber. Closing mid-wizard\ntherefore records nothing and the gate simply reappears.",
      "signature": "export declare function useLegalConsentWizard(): UseLegalConsentWizardResult;",
      "typeReferences": [
        {
          "name": "UseLegalConsentWizardResult",
          "source": "packages/farthershore-js/dist/components/legal-consent-gate.d.ts#L9"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.UseLegalConsentWizardResult",
      "name": "@farthershore/farthershore-js/components.UseLegalConsentWizardResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/legal-consent-gate.d.ts#L9",
      "description": "Public export UseLegalConsentWizardResult; see its declaration and owning guide.",
      "signature": "export interface UseLegalConsentWizardResult {\n    /** One step per OUTSTANDING document (already-accepted and `none`-mode\n     *  documents never appear — someone who accepted terms and later gets a new\n     *  policy sees a one-step wizard for just that policy). */\n    steps: LegalDocumentStatus__f2d5a2d96393[];\n    index: number;\n    current: LegalDocumentStatus__f2d5a2d96393 | null;\n    /** Whether this step's required action has been taken (an `agree` document\n     *  needs its checkbox; an `acknowledge` document is satisfied by advancing). */\n    canAdvance: boolean;\n    isLast: boolean;\n    agreed: Record<string, boolean>;\n    setAgreed(kind: string, value: boolean): void;\n    back(): void;\n    /** Advance a step, or submit EVERY acceptance when on the last one. */\n    advance(): Promise<void>;\n    submitting: boolean;\n    error: string | null;\n    /** Which way the reader last moved, for hosts that animate the transition.\n     *  `null` on first render and after a restart — the SDK ships no CSS, so\n     *  this is exposed as state (and as `data-fs-legal-direction`) rather than\n     *  animated here. */\n    direction: \"forward\" | \"back\" | null;\n    /** What the primary control does on THIS step, so a host can style it\n     *  semantically instead of matching on label text. */\n    primaryAction: \"next\" | \"acknowledge\" | \"submit\";\n}",
      "typeReferences": [
        {
          "name": "LegalDocumentStatus__f2d5a2d96393",
          "source": "packages/farthershore-js/dist/types.d.ts#L67"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.useLegalDocument",
      "name": "@farthershore/farthershore-js/components.useLegalDocument",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/legal-document.d.ts#L10",
      "description": "Public export useLegalDocument; see its declaration and owning guide.",
      "signature": "export declare function useLegalDocument(kind: LegalKind__db43d04bc941): UseLegalDocumentResult;",
      "typeReferences": [
        {
          "name": "LegalKind__db43d04bc941",
          "source": "packages/farthershore-js/dist/components/product-docs/fetch-product-legal.d.ts#L1"
        },
        {
          "name": "UseLegalDocumentResult",
          "source": "packages/farthershore-js/dist/components/legal-document.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.UseLegalDocumentResult",
      "name": "@farthershore/farthershore-js/components.UseLegalDocumentResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/legal-document.d.ts#L3",
      "description": "Public export UseLegalDocumentResult; see its declaration and owning guide.",
      "signature": "export interface UseLegalDocumentResult {\n    loading: boolean;\n    url: string | null;\n    effectiveDate: string | null;\n    mdxSource: string | null;\n    notPublished: boolean;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.useLegalDocuments",
      "name": "@farthershore/farthershore-js/components.useLegalDocuments",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/legal-document.d.ts#L21",
      "description": "Every legal document the business publishes, in the order Core returns them\n(kind-ascending). Empty when the builder authored no `legal/` folder — a\nlegal document exists ONLY when authored, so surfaces that list documents\n(the footer, the `/legal` index) render nothing rather than inventing one.",
      "signature": "export declare function useLegalDocuments(): PublishedLegalDocument[];",
      "typeReferences": [
        {
          "name": "PublishedLegalDocument",
          "source": "packages/farthershore-js/dist/components/legal-document.d.ts#L12"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.useLimitHandler",
      "name": "@farthershore/farthershore-js/components.useLimitHandler",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/limit-boundary.d.ts#L24",
      "description": "The global limit handler. `report(err)` surfaces the boundary's prompt; with\nno boundary mounted it's a no-op, so wiring a `catch` to it is always safe:",
      "signature": "export declare function useLimitHandler(): LimitHandler;",
      "typeReferences": [
        {
          "name": "LimitHandler",
          "source": "packages/farthershore-js/dist/components/limit-boundary.d.ts#L5"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.useOpenGroups",
      "name": "@farthershore/farthershore-js/components.useOpenGroups",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/nav-hooks.d.ts#L20",
      "description": "Multi-open accordion state for docs nav groups. The group holding the current\npage (`activeGroupTitle`) opens by default, navigating to a page in another\ngroup ADDS that group (never collapsing one the reader opened), and the open\nset persists across the per-navigation shell remount via `openGroupsMemory`.\n\nOwn this ONCE per shell and share the result across the sidebar + mobile\ndrawer nav instances — two states writing the shared memory would race\nlast-writer-wins and drop a group opened in the other pane.",
      "signature": "export declare function useOpenGroups(activeGroupTitle: string | null): UseOpenGroupsResult;",
      "typeReferences": [
        {
          "name": "UseOpenGroupsResult",
          "source": "packages/farthershore-js/dist/components/docs-chrome/nav-hooks.d.ts#L4"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.UseOpenGroupsResult",
      "name": "@farthershore/farthershore-js/components.UseOpenGroupsResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/docs-chrome/nav-hooks.d.ts#L4",
      "description": "Public export UseOpenGroupsResult; see its declaration and owning guide.",
      "signature": "export type UseOpenGroupsResult = {\n    /** The currently-expanded group titles. */\n    openGroups: Set<string>;\n    /** Toggle one group open/closed (multi-open: never collapses the others). */\n    toggleGroup: (title: string) => void;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.usePermissionAction",
      "name": "@farthershore/farthershore-js/components.usePermissionAction",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/permission-gate.d.ts#L45",
      "description": "The gate state for a MUTATING control (button/form) — `allowed` when the\nmember's claim grants the write permission, `disabled` while it doesn't\n(loading, denied, or rendered inside a `readOnly` gate).\n\nAccepts a component id (`plans_table`, `custom:report-builder` — resolves\nthe policy's `writePermission`) or a bare permission key (anything with a\n`:`, e.g. `apikey:rotate`).",
      "signature": "export declare function usePermissionAction(componentIdOrPermission: string): {\n    allowed: boolean;\n    disabled: boolean;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.usePermissionGate",
      "name": "@farthershore/farthershore-js/components.usePermissionGate",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/permission-gate.d.ts#L17",
      "description": "Resolve a required permission against the signed-in member's claim.\nReturns `loading` until the auth layer AND the server-resolved permissions\nsettle, so consumers can hold a pending state instead of flashing a deny.",
      "signature": "export declare function usePermissionGate(permission: string): {\n    status: PermissionGateStatus;\n    /** Convenience: `status === \"granted\"`. */\n    granted: boolean;\n};",
      "typeReferences": [
        {
          "name": "PermissionGateStatus",
          "source": "packages/farthershore-js/dist/components/permission-gate.d.ts#L5"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.usePermissionReadOnly",
      "name": "@farthershore/farthershore-js/components.usePermissionReadOnly",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/permission-gate.d.ts#L35",
      "description": "Whether the nearest `<PermissionGate mode=\"readOnly\">` denied its\npermission — components render read-only affordances when true.",
      "signature": "export declare function usePermissionReadOnly(): boolean;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.withGate",
      "name": "@farthershore/farthershore-js/components.withGate",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/permission-gate.d.ts#L113",
      "description": "Wrap ANY component in a permission gate — the HOC form for builder\ncomponents and route elements. `componentIdOrPermission` follows the\n{@link usePermissionAction} convention: contains `:` → a bare permission;\notherwise a component id resolved through the policy resolver.\n\n```tsx\nconst GatedReports = withGate(ReportsPanel, \"custom:reports\");\n```",
      "signature": "export declare function withGate<C extends ComponentType<any>>(Component: C, componentIdOrPermission: string, opts?: {\n    mode?: ComponentGateMode__052103626acf;\n    fallback?: ReactNode;\n}): C;",
      "typeReferences": [
        {
          "name": "ComponentGateMode__052103626acf",
          "source": "packages/farthershore-js/dist/component-policy.d.ts#L5"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.components.withStandaloneView",
      "name": "@farthershore/farthershore-js/components.withStandaloneView",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/components",
      "source": "packages/farthershore-js/dist/components/product-docs/docs-route.d.ts#L16",
      "description": "Public export withStandaloneView; see its declaration and owning guide.",
      "signature": "export declare function withStandaloneView(path: string, standalone: boolean): string;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.AdaptiveThrottleError",
      "name": "@farthershore/farthershore-js/errors.AdaptiveThrottleError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L330",
      "description": "A {@link ProviderLimitError} for a `503 provider_throttled` — the ADAPTIVE\nupstream throttle (an LLM/API provider rate limit) the platform RELAYS. The\nreaction is `fallback`/`backoff_retry`; `.limitClass` is `adaptive`. Still a\nretryable throttle (`instanceof FartherShoreRateLimitedError` holds).",
      "signature": "export declare class AdaptiveThrottleError extends ProviderLimitError {\n    constructor(status: number, code: string, message: string, body: unknown, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot | null);\n}",
      "typeReferences": [
        {
          "name": "ProviderLimitError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L321"
        },
        {
          "name": "RateLimitSnapshot",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.ConcurrencyLimitError",
      "name": "@farthershore/farthershore-js/errors.ConcurrencyLimitError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L311",
      "description": "A {@link FartherShoreRateLimitedError} subclass for a `429\nconcurrency_limit_exceeded` (T7 — a customer/subscription \"wait for a slot\",\nNOT a 503; the platform/coordinator faults are the separate 503\n`concurrency_*_unavailable` codes). Too many requests in flight\nsimultaneously; it resolves as outstanding requests drain (no period), so the\nreaction is `queue`/`backoff_retry`. Still a retryable throttle (`instanceof\nFartherShoreRateLimitedError` holds). `.limitClass` is `concurrency`.",
      "signature": "export declare class ConcurrencyLimitError extends FartherShoreRateLimitedError {\n    constructor(status: number, code: string, message: string, body: unknown, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot | null);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreRateLimitedError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L288"
        },
        {
          "name": "RateLimitSnapshot",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.deriveLimitFacet",
      "name": "@farthershore/farthershore-js/errors.deriveLimitFacet",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L572",
      "description": "Fix #10 — derive the {@link LimitFacet} for a caught limit error: a THIN\nCOMPOSITION over the contracts class taxonomy ({@link classifyFsLimit }, via\nthe error's already-derived `.limitClass`) + the request lifecycle + the\nheadroom the deny reported. It does NOT re-derive the six classes — it reads\nthe class off the error and composes the reaction/retry/upgrade/headroom view\na UI renders. Returns null when the error is not a usage-limit deny.\n\nAccepts either a {@link LimitExceededError} (and its 413/spend subclasses) or\na {@link FartherShoreRateLimitedError} (and its concurrency/adaptive\nsubclasses) — both already carry `.limitClass`/`.envelope`.",
      "signature": "export declare function deriveLimitFacet(err: unknown): LimitFacet | null;",
      "typeReferences": [
        {
          "name": "LimitFacet",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L531"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.deriveObservedLimitDeny",
      "name": "@farthershore/farthershore-js/errors.deriveObservedLimitDeny",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L613",
      "description": "A5-amend (T11) — derive an {@link ObservedLimitDeny} from a caught error, or\nnull when the error is not a limit/throttle deny. PURE; safe on any value.\nForward-compat: an unknown class is preserved (null + `unknownLimitClass`),\nnever discarded. `now` is injectable for tests.",
      "signature": "export declare function deriveObservedLimitDeny(err: unknown, now?: () => number): ObservedLimitDeny | null;",
      "typeReferences": [
        {
          "name": "ObservedLimitDeny",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L580"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.FartherShoreAbortError",
      "name": "@farthershore/farthershore-js/errors.FartherShoreAbortError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L713",
      "description": "Thrown when a request was aborted (e.g. a React hook unmounted or its deps\nchanged before the request resolved). Callers/hooks should ignore it.",
      "signature": "export declare class FartherShoreAbortError extends FartherShoreError {\n    constructor(message?: string);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.FartherShoreApiError",
      "name": "@farthershore/farthershore-js/errors.FartherShoreApiError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L49",
      "description": "A non-2xx response from Core or the Gateway. Exposes:\n- `.status` — the HTTP status code;\n- `.code` — the platform error code from the `{ error: { code, message } }`\n  envelope (or a fallback when the envelope is absent);\n- `.body` — the parsed response body, for richer error detail.\n\nCallers commonly branch on `.status` — e.g. `401`/`403` (re-auth), `404`\n(treat as absent), `409` (conflict/retry) — rather than parsing the message.\n\nEvery instance also carries the throttle hints the gateway attaches when\npresent: `.retryAfterSeconds` (from `Retry-After`) and `.rateLimit` (from\n`X-RateLimit-Remaining` / `-Reset`). Both are null when the headers are\nabsent — a developer who does nothing still gets them transparently.",
      "signature": "export declare class FartherShoreApiError extends FartherShoreError {\n    readonly status: number;\n    readonly code: string;\n    readonly body: unknown;\n    /** Seconds to wait before retrying, parsed from `Retry-After`; null when the\n     *  response carried no `Retry-After`. */\n    readonly retryAfterSeconds: number | null;\n    /** The `X-RateLimit-Remaining` / `-Reset` snapshot, or null when absent. */\n    readonly rateLimit: RateLimitSnapshot | null;\n    /**\n     * Whether the request that produced this error actually carried an auth\n     * credential (a bearer was attached). Set by the transport AFTER the error is\n     * minted. A `401` with `authed === false` is a NEVER-authenticated visitor (a\n     * signed-out `/me` read sent no bearer) — the managed auth layer must treat it\n     * as a no-op, NOT a lapsed-session redirect. Defaults to `true` so any caller\n     * that doesn't thread the flag keeps the prior (always-fire) behaviour.\n     */\n    authed: boolean;\n    /**\n     * Whether a `401` on this request should trigger the MANAGED auth-layer\n     * recovery (the hosted-sign-in redirect / persona sign-out). Best-effort `/me`\n     * reads that already swallow a 401 (and render a signed-out/unsubscribed\n     * surface) set this `false`: re-authenticating an already signed-in user can\n     * never clear an authorization 401, so the redirect is futile and loops. Set\n     * by the transport from `CoreRequest.recoverAuth`. The config-level\n     * `onUnauthorized` + `onError` hooks STILL fire (observability is unaffected);\n     * only the managed reaction is gated. Defaults to `true` (always recover).\n     */\n    recoverAuth: boolean;\n    constructor(status: number, code: string, message: string, body: unknown, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot | null);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L2"
        },
        {
          "name": "RateLimitSnapshot",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.FartherShoreBillingNotConfiguredError",
      "name": "@farthershore/farthershore-js/errors.FartherShoreBillingNotConfiguredError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L508",
      "description": "A {@link FartherShoreApiError} for a `BILLING_NOT_CONFIGURED` deny — a\nTRANSIENT onboarding state where the plan's Stripe billing is still being set\nup (\"Plan billing is being set up. Please try again in a moment.\"). The\nsubscriber should see a retry affordance, not a hard error. `.transient` is\nalways true; pair with {@link isBillingNotConfigured} when you only have the\ncaught value.",
      "signature": "export declare class FartherShoreBillingNotConfiguredError extends FartherShoreApiError {\n    /** Always true — this is a \"setting up, retry shortly\" state. */\n    readonly transient: true;\n    constructor(status: number, code: string, message: string, body: unknown, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot | null);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreApiError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
        },
        {
          "name": "RateLimitSnapshot",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.FartherShoreConfigError",
      "name": "@farthershore/farthershore-js/errors.FartherShoreConfigError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L723",
      "description": "Thrown at client construction for invalid/missing config (e.g. no `coreUrl`,\nno global `fetch`).",
      "signature": "export declare class FartherShoreConfigError extends FartherShoreError {\n    constructor(message: string);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.FartherShoreError",
      "name": "@farthershore/farthershore-js/errors.FartherShoreError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L2",
      "description": "Public export FartherShoreError; see its declaration and owning guide.",
      "signature": "export declare class FartherShoreError extends Error {\n    constructor(message: string);\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.FartherShoreLifecycleBlockedError",
      "name": "@farthershore/farthershore-js/errors.FartherShoreLifecycleBlockedError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L444",
      "description": "A {@link FartherShoreApiError} for a subscription-lifecycle block — the\ngateway's `lifecycle_block` constraint denies the request (`403\nsubscription_inactive`) because the subscription is SUSPENDED / CANCELLED /\nINACTIVE (a failed payment, a cancellation, or an expired trial). `.suggestedAction`\ntells the app which remediation to surface: `restore` for a cancellation, else\n`billing-portal` to fix the payment method.",
      "signature": "export declare class FartherShoreLifecycleBlockedError extends FartherShoreApiError {\n    /** The remediation to point the subscriber at — `restore` (a cancellation can\n     *  be reversed) or `billing-portal` (a failed/expired payment must be fixed). */\n    readonly suggestedAction: RemediationAction;\n    constructor(status: number, code: string, message: string, body: unknown, suggestedAction: RemediationAction, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot | null);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreApiError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
        },
        {
          "name": "RateLimitSnapshot",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        },
        {
          "name": "RemediationAction",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L423"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.FartherShoreNetworkError",
      "name": "@farthershore/farthershore-js/errors.FartherShoreNetworkError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L707",
      "description": "A network-level failure (DNS, connection, CORS, abort).",
      "signature": "export declare class FartherShoreNetworkError extends FartherShoreError {\n    readonly cause?: unknown;\n    constructor(message: string, cause?: unknown);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.FartherShoreNotReadyError",
      "name": "@farthershore/farthershore-js/errors.FartherShoreNotReadyError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L718",
      "description": "Thrown when the client is used before `bootstrap()` has resolved the product\nit needs (e.g. a per-product call with no configured businessId).",
      "signature": "export declare class FartherShoreNotReadyError extends FartherShoreError {\n    constructor(message: string);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.FartherShorePlanOfferChangedError",
      "name": "@farthershore/farthershore-js/errors.FartherShorePlanOfferChangedError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L494",
      "description": "A {@link FartherShoreApiError} for a `409 PLAN_OFFER_CHANGED` — the caller\npassed an `offerFingerprint` (from `fs.plans.getPlanOffers()`) to\n`subscribe()` / `startOnboarding()`, and the target plan's ECONOMIC content\n(fee, meters, grants, trial, interval — never presentation) changed between\nrender and purchase. No checkout session was created and no state changed.\nRemedy: refetch `getPlanOffers()`, re-present the current price for consent,\nand retry with the fresh fingerprint.",
      "signature": "export declare class FartherShorePlanOfferChangedError extends FartherShoreApiError {\n    /** Always `refetch_offers` — refetch the plan offers and re-present the\n     *  current price before retrying. */\n    readonly suggestedAction: \"refetch_offers\";\n    constructor(status: number, code: string, message: string, body: unknown, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot | null);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreApiError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
        },
        {
          "name": "RateLimitSnapshot",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.FartherShoreRateLimitedError",
      "name": "@farthershore/farthershore-js/errors.FartherShoreRateLimitedError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L288",
      "description": "A {@link FartherShoreApiError} the caller should BACK OFF and retry — a rate\nlimit (`429`) or one of the transient throttle deny codes. `.retryAfterSeconds`\n(when the gateway sent `Retry-After`) is the hint for how long. Catch it to\nimplement a retry/backoff loop without re-parsing status codes.",
      "signature": "export declare class FartherShoreRateLimitedError extends FartherShoreApiError {\n    /** The semantic {@link FsLimitClass} when this throttle classifies to one\n     *  (`rate` / `concurrency` / `adaptive`), else null. */\n    readonly limitClass: FsLimitClass__2d5726601b87 | null;\n    /** The parsed `_fs` deny envelope when present. */\n    readonly envelope: FsDenyEnvelope | null;\n    /** The recommended client reaction (default `backoff_retry` for a throttle). */\n    readonly reaction: FsLimitReaction;\n    /** Whether the platform or an upstream provider decided the throttle. */\n    readonly limitOrigin: FsLimitOrigin;\n    /** The gateway decision id, when the `_fs` envelope carried one. */\n    readonly decisionId: string | null;\n    constructor(status: number, code: string, message: string, body: unknown, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot | null);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreApiError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
        },
        {
          "name": "FsDenyEnvelope",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L109"
        },
        {
          "name": "FsLimitClass__2d5726601b87",
          "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
        },
        {
          "name": "FsLimitOrigin",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
        },
        {
          "name": "FsLimitReaction",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
        },
        {
          "name": "RateLimitSnapshot",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.FartherShoreSubscriptionConflictError",
      "name": "@farthershore/farthershore-js/errors.FartherShoreSubscriptionConflictError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L468",
      "description": "A {@link FartherShoreApiError} for a `409 INVALID_STATE` from the\nonboarding/restore path — the subscriber already has a subscription that\nconflicts with the attempted action (the \"already subscribed — restore it\"\ncase). `.suggestedAction` is always `restore`: the remedy is\n`fs.billing.restoreSubscription()`.",
      "signature": "export declare class FartherShoreSubscriptionConflictError extends FartherShoreApiError {\n    /** Always `restore` — an existing subscription should be restored, not\n     *  re-created. */\n    readonly suggestedAction: \"restore\";\n    constructor(status: number, code: string, message: string, body: unknown, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot | null);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreApiError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
        },
        {
          "name": "RateLimitSnapshot",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.FS_SECURE_FETCH_ERROR_CODES",
      "name": "@farthershore/farthershore-js/errors.FS_SECURE_FETCH_ERROR_CODES",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L660",
      "description": "The direct-URL secure-fetch (`fs.fetch`) DENY vocabulary — the SDK's typed\nprojection of the gateway secret-inject wire codes so a builder catches a\nmeaningful `FartherShoreApiError.code`, not a raw 403/502. Each maps a family\nof gateway wire codes onto ONE stable SDK code:\n  - `VARIABLE_NOT_ALLOWED_HOST` ← `host_not_allowed` (403) — the target host\n    is not on the variable's allowlist (set at variable-create; the\n    provider-catalog auto-detect ran server-side).\n  - `MACHINE_KEY_FORBIDDEN` ← `api_key_cannot_use_secret_inject` (403) — a\n    machine/API-key (`fsk_`) caller may not use server-only secret injection;\n    it is a signed-in customer-session-only affordance.\n  - `UPSTREAM_ERROR` ← any `upstream_*` (502) — the upstream call was refused\n    or failed at the SSRF-safe forwarder (unreachable / not-https /\n    blocked-host / redirect-refused / invalid-url).\nBranch on these instead of parsing the message or status.",
      "signature": "declare const FS_SECURE_FETCH_ERROR_CODES: {\n    readonly VARIABLE_NOT_ALLOWED_HOST: \"VARIABLE_NOT_ALLOWED_HOST\";\n    readonly MACHINE_KEY_FORBIDDEN: \"MACHINE_KEY_FORBIDDEN\";\n    readonly UPSTREAM_ERROR: \"UPSTREAM_ERROR\";\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.FsDenyEnvelope",
      "name": "@farthershore/farthershore-js/errors.FsDenyEnvelope",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L109",
      "description": "The `_fs` deny envelope a limit deny body carries under the `_fs` key\n(`{ error, code, _fs: FsDenyEnvelope }`). A SUPERSET of {@link LimitDescriptor}:\na single self-describing block telling a client WHAT class of limit was hit,\nWHY, and what to DO — without re-deriving it from the wire code + status. A\nhand-mirror of the contracts `FsDenyEnvelope` (the published surface stays\ncontracts-free); the field set is bound to the source by the drift guard. The\noptional fields are absent when not known so the envelope stays byte-minimal.",
      "signature": "export interface FsDenyEnvelope {\n    /**\n     * The semantic class of limit hit — the primary axis clients branch on.\n     * `null` ONLY when the wire carried a `limitClass` string the SDK's closed\n     * mirror does NOT know (a FUTURE class added to contracts but not yet shipped\n     * in this bundle, T13). In that case the raw value is preserved on\n     * {@link unknownLimitClass} and the whole `_fs` block on {@link raw} so a\n     * client can still render + introspect the deny, while the SDK refuses to\n     * invent a known-class facet for it. A KNOWN class is always non-null.\n     */\n    limitClass: FsLimitClass__2d5726601b87 | null;\n    /**\n     * T13 — the raw `limitClass` string when it is NOT a member of the closed\n     * {@link FsLimitClass} mirror (a future/unknown class). Undefined for every\n     * known class. Lets a forward-compat client surface \"a `<unknownLimitClass>`\n     * limit was hit\" + a debug breadcrumb without the SDK guessing semantics.\n     */\n    unknownLimitClass?: string;\n    /**\n     * T13 — the raw `_fs` block exactly as it arrived on the wire, preserved for\n     * debugging/forwarding. Always present (even for a known class) so a developer\n     * can inspect fields this bundle's typed projection doesn't model yet.\n     */\n    raw?: Record<string, unknown>;\n    /** The limit's scope when known (e.g. `subscription`, `org`, `route`). */\n    scope?: string;\n    /** Actor facet for actor-scoped subscriber limits. Carries kind only; raw\n     *  actor ids must never be present in deny envelopes. */\n    actorScope?: \"member\" | \"service_account\";\n    /** The metered/resource dimension when known (e.g. `tokens`, `requests`). */\n    metric?: string;\n    /** Unix epoch ms when the limit window resets, when known. */\n    reset?: number;\n    /** Units remaining in the window at decision time, when known. */\n    remaining?: number;\n    /** Units already consumed in the window at decision time, when known. */\n    used?: number;\n    /** The cap value (the ceiling that was hit), when known. */\n    limit?: number;\n    /** True when retrying the SAME request can succeed (velocity/transient cap). */\n    retrySafe: boolean;\n    /** True when the caller must MODIFY the request (reduce size / change plan)\n     *  before it can succeed — the `capacity`/`spend` affordances. */\n    mustModify: boolean;\n    /** Provider-supplied reason verbatim, when relayed upstream (an `adaptive`\n     *  throttle). */\n    providerReason?: string;\n    /** Whether the platform or an upstream provider decided the limit. */\n    limitOrigin: FsLimitOrigin;\n    /** Human-facing next step for the END USER, when one applies. */\n    userAction?: string;\n    /** Human-facing next step for the DEVELOPER/operator, when one applies. */\n    devAction?: string;\n    /** The per-attempt request id (correlates with logs/traces). */\n    requestId?: string;\n    /** The gateway decision id (correlates with the usage event / audit). */\n    decisionId?: string;\n    /** Which exact constraint denied (projects from\n     *  `LimitDecision.blockingConstraintId`); present on a limit deny when known. */\n    blockingConstraintId?: string;\n    /** The recommended client reaction. */\n    reaction: FsLimitReaction;\n    /** Envelope schema version. Bumped on a NON-additive envelope change. */\n    envelopeVersion?: number;\n}",
      "typeReferences": [
        {
          "name": "FsLimitClass__2d5726601b87",
          "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
        },
        {
          "name": "FsLimitOrigin",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
        },
        {
          "name": "FsLimitReaction",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.FsLimitOrigin",
      "name": "@farthershore/farthershore-js/errors.FsLimitOrigin",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L96",
      "description": "Where a limit was decided. Mirrors the contracts `LimitOrigin` (`platform` —\na plan/entitlement limit the platform owns; `provider` — an upstream throttle\nthe platform relays).",
      "signature": "export type FsLimitOrigin = \"platform\" | \"provider\" | \"subscriber\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.FsLimitReaction",
      "name": "@farthershore/farthershore-js/errors.FsLimitReaction",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L99",
      "description": "What a client should DO about a limit deny — the recommended reaction.\nMirrors the contracts `LimitReaction`.",
      "signature": "export type FsLimitReaction = \"none\" | \"backoff_retry\" | \"wait_then_retry\" | \"queue\" | \"reduce_then_retry\" | \"fallback\" | \"upgrade\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.FsSecureFetchErrorCode",
      "name": "@farthershore/farthershore-js/errors.FsSecureFetchErrorCode",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L666",
      "description": "An `fs.fetch` secure-fetch deny code (see {@link FS_SECURE_FETCH_ERROR_CODES}).",
      "signature": "export type FsSecureFetchErrorCode = (typeof FS_SECURE_FETCH_ERROR_CODES)[keyof typeof FS_SECURE_FETCH_ERROR_CODES];",
      "typeReferences": [
        {
          "name": "FS_SECURE_FETCH_ERROR_CODES",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L660"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.isBillingNotConfigured",
      "name": "@farthershore/farthershore-js/errors.isBillingNotConfigured",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L517",
      "description": "True when an error is the transient `BILLING_NOT_CONFIGURED` onboarding state\n— a {@link FartherShoreBillingNotConfiguredError} (or any\n{@link FartherShoreApiError} carrying that `code`). A consumer can show a\n\"setting up — retry\" state instead of failing. Pure; safe on any value.",
      "signature": "export declare function isBillingNotConfigured(err: unknown): boolean;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.isRetryable",
      "name": "@farthershore/farthershore-js/errors.isRetryable",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L701",
      "description": "True when an error should be retried after a backoff.\n\nT10 — when a deny carries an `_fs` envelope, that envelope is AUTHORITATIVE:\nthe retry decision is driven by `_fs.reaction` / `_fs.retrySafe`, NEVER by raw\nstatus-code inference. This holds for KNOWN and UNKNOWN (T13) limit classes\nalike — a future class relayed on a 429 is retried only if its reaction\nexplicitly says so. So a non-retry-safe deny that happens to land on a\ntransient status (a `spend`/`upgrade` reaction on a 429) is NOT retried, and\nan unknown-class deny with `reaction:\"none\"` is NOT retried despite the\ntransient status.\n\nWithout an `_fs` envelope the legacy TRANSIENT heuristics apply (config.ts\nJSDoc: \"429 + transient 502/503/504 + network faults\"):\n  - a {@link FartherShoreNetworkError} (DNS/connection/CORS — a fresh attempt\n    may connect);\n  - any {@link FartherShoreApiError} at a transient status (429/502/503/504),\n    REGARDLESS of deny code — a plain 503 with `code:\"unknown\"` retries too;\n  - any {@link FartherShoreApiError} whose `code` is in the canonical\n    retryable deny set (the named throttle/dependency denies).\n\nPure; safe to call on any caught value. (Aborts are handled separately in the\nretry loop and never reach here as retryable.)",
      "signature": "export declare function isRetryable(err: unknown): boolean;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.isThrottled",
      "name": "@farthershore/farthershore-js/errors.isThrottled",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L705",
      "description": "True when an error is specifically a rate-limit/throttle the caller should\nback off on — a {@link FartherShoreRateLimitedError} or any\n{@link FartherShoreApiError} at status `429`. Pure.",
      "signature": "export declare function isThrottled(err: unknown): boolean;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.LimitDescriptor",
      "name": "@farthershore/farthershore-js/errors.LimitDescriptor",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L85",
      "description": "The machine-readable limit descriptor the gateway/core attach to a limit\ndeny body (`{ error: { code, message, limitCode, dimension, currentCapacity } }`).\nThe SDK turns this into an upgrade prompt — see {@link LimitExceededError}.",
      "signature": "export interface LimitDescriptor {\n    /** Stable identifier for the limit that was hit, e.g. `resource:widgets`. */\n    limitCode: string;\n    /** The metered/resource dimension, when known (e.g. `widgets`, `requests`). */\n    dimension: string | null;\n    /** The cap the subscriber is at, when known. */\n    currentCapacity: number | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.LimitExceededError",
      "name": "@farthershore/farthershore-js/errors.LimitExceededError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L206",
      "description": "A {@link FartherShoreApiError} that is specifically a plan-limit block — a\nresource quota (`402 resource_count_limit_exceeded`), a usage quota, a rate\nlimit, or a credit cap. Carries the {@link LimitDescriptor} so the app can\nresolve an upgrade target from the bootstrap catalog and prompt the user\n(see `useUpgrade` / `<UpgradePrompt>`).",
      "signature": "export declare class LimitExceededError extends FartherShoreApiError {\n    readonly limitCode: string;\n    readonly dimension: string | null;\n    readonly currentCapacity: number | null;\n    /** The semantic {@link FsLimitClass} of this limit — derived from the `_fs`\n     *  envelope when present, else from the wire code + limitCode + status\n     *  ({@link classifyFsLimit}). null only when nothing classifies it. */\n    readonly limitClass: FsLimitClass__2d5726601b87 | null;\n    /** The parsed `_fs` deny envelope, when the body carried one. The richer\n     *  source for the reaction/headroom fields below. */\n    readonly envelope: FsDenyEnvelope | null;\n    /** True when retrying the SAME request can succeed (a velocity/transient cap);\n     *  false when it never will (a spend cap / oversized request). */\n    readonly retrySafe: boolean;\n    /** True when the caller must MODIFY the request before it can succeed (a\n     *  `capacity` ceiling or `spend` cap). */\n    readonly mustModify: boolean;\n    /** The recommended client reaction. */\n    readonly reaction: FsLimitReaction;\n    /** Whether the platform or an upstream provider decided the limit. */\n    readonly limitOrigin: FsLimitOrigin;\n    /** The gateway decision id (correlates with the usage event / audit), when\n     *  the `_fs` envelope carried one. */\n    readonly decisionId: string | null;\n    /** When the limit window resets, when known (from the `_fs` envelope `reset`,\n     *  unix-epoch ms, else the `X-RateLimit-Reset` snapshot). */\n    readonly reset: Date | null;\n    /** Units remaining in the window at decision time, when known. */\n    readonly remaining: number | null;\n    /** Units already consumed in the window at decision time, when known. */\n    readonly used: number | null;\n    /** The cap value hit, when known. */\n    readonly limit: number | null;\n    constructor(status: number, code: string, message: string, body: unknown, descriptor: LimitDescriptor, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot | null);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreApiError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
        },
        {
          "name": "FsDenyEnvelope",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L109"
        },
        {
          "name": "FsLimitClass__2d5726601b87",
          "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
        },
        {
          "name": "FsLimitOrigin",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
        },
        {
          "name": "FsLimitReaction",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
        },
        {
          "name": "LimitDescriptor",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L85"
        },
        {
          "name": "RateLimitSnapshot",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.LimitFacet",
      "name": "@farthershore/farthershore-js/errors.LimitFacet",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L531",
      "description": "The fully-resolved facet of a limit deny — the single object a UI branches on.\nComposes the semantic {@link FsLimitClass} with the REQUEST LIFECYCLE\n(retry-safe? must the request be modified? can a plan change resolve it?) and\nthe HEADROOM (remaining/used/limit/reset) the deny reported.",
      "signature": "export interface LimitFacet {\n    /** The semantic class — the primary axis a UI branches on. */\n    limitClass: FsLimitClass__2d5726601b87;\n    /** The recommended client reaction (from the `_fs` envelope, else a\n     *  per-class default). */\n    reaction: FsLimitReaction;\n    /** Whether the platform or an upstream provider decided the limit. */\n    limitOrigin: FsLimitOrigin;\n    /** True when retrying the SAME request can succeed (rate/concurrency/adaptive\n     *  are retry-safe; quota/spend/capacity are not). */\n    retrySafe: boolean;\n    /** True when the caller must MODIFY the request (capacity) or change the plan\n     *  (spend) before it can succeed. */\n    mustModify: boolean;\n    /** True ONLY for the upgrade-affording classes (`quota` / `spend`). Drives\n     *  whether a UI mounts the upgrade prompt — capacity's \"bigger model\"\n     *  is a SEPARATE affordance, NOT an upgrade. */\n    canUpgrade: boolean;\n    /** When the limit window resets, when known. */\n    reset: Date | null;\n    /** Units remaining in the window at decision time, when known. */\n    remaining: number | null;\n    /** Units already consumed, when known. */\n    used: number | null;\n    /** The cap value hit, when known. */\n    limit: number | null;\n    /** The gateway decision id, when known. */\n    decisionId: string | null;\n}",
      "typeReferences": [
        {
          "name": "FsLimitClass__2d5726601b87",
          "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
        },
        {
          "name": "FsLimitOrigin",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
        },
        {
          "name": "FsLimitReaction",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.makeApiError",
      "name": "@farthershore/farthershore-js/errors.makeApiError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L643",
      "description": "Build the right API error for a non-2xx response, minted on the platform's\ncanonical deny vocabulary so callers can `catch` the specific subclass:\n\n  - {@link LimitExceededError} (and its 413/spend subclasses\n    {@link RequestTooLargeError} / {@link SpendLimitError}) — the body carries\n    a limit descriptor on a limit status (`isDenyLimitStatus` ≡ contracts\n    DENY_LIMIT_STATUSES = 402/403/413/429). The most specific/actionable case\n    wins (a descriptor-bearing 429 stays a LimitExceededError).\n  - {@link ConcurrencyLimitError} (429 customer wait-for-slot, T7) /\n    {@link AdaptiveThrottleError} (503 provider relay) — the two retryable\n    throttle subclasses, dispatched off `concurrency_limit_exceeded` /\n    `provider_throttled` regardless of whether a descriptor is present.\n  - {@link FartherShoreLifecycleBlockedError} — a lifecycle-block deny\n    (`subscription_inactive`); carries a restore-vs-billing-portal suggestion.\n  - {@link FartherShoreSubscriptionConflictError} — `409` + `INVALID_STATE`\n    (the onboarding \"already subscribed — restore it\" path).\n  - {@link FartherShoreBillingNotConfiguredError} — `BILLING_NOT_CONFIGURED`\n    (the transient \"billing is being set up, retry\" onboarding state).\n  - {@link FartherShoreRateLimitedError} — a retryable/throttle deny code OR\n    status `429`. The 503-FAMILY does NOT mint a LimitExceededError; the\n    transient 503 throttles surface here as retryable instead.\n  - {@link FartherShoreApiError} — everything else.\n\nHeader-derived throttle hints (`Retry-After`, `X-RateLimit-*`) are parsed once\nand threaded onto whichever class is minted. Used at the single non-2xx throw\nsite for each transport so core + gateway surface errors uniformly. `headers`\nis optional so legacy callers still compile (hints default to null).",
      "signature": "export declare function makeApiError(status: number, code: string, message: string, body: unknown, headers?: Headers | null): FartherShoreApiError;",
      "typeReferences": [
        {
          "name": "FartherShoreApiError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.mapSecureFetchErrorCode",
      "name": "@farthershore/farthershore-js/errors.mapSecureFetchErrorCode",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L676",
      "description": "Map a gateway secret-inject wire `code` onto the stable {@link * FsSecureFetchErrorCode}, or null when the wire code is not a secure-fetch\ndeny (leave the code untouched — a limit/throttle deny still classifies via\nits own path). The `upstream_` PREFIX is matched so every SSRF-forwarder\nrefusal (`upstream_unreachable`, `upstream_not_https`, `upstream_blocked_host`,\n`upstream_redirect_refused`, `upstream_invalid_url`, `upstream_timeout`, …)\ncollapses to one `UPSTREAM_ERROR` a builder can catch. Pure.",
      "signature": "export declare function mapSecureFetchErrorCode(code: string): FsSecureFetchErrorCode | null;",
      "typeReferences": [
        {
          "name": "FsSecureFetchErrorCode",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L666"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.ObservedLimitDeny",
      "name": "@farthershore/farthershore-js/errors.ObservedLimitDeny",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L580",
      "description": "A5-amend (T11) — a snapshot of a single OBSERVED limit/throttle deny, captured\nas it leaves the transport. The ADVISORY input to `useLimitStatus()`: the\nfreshest known RECENT deny (NOT a live poll — the gateway stays authoritative).\nProvider-neutral; forward-compat (an unknown future class keeps `limitClass`\nnull + the raw value on `unknownLimitClass`, never crashing — T13).",
      "signature": "export interface ObservedLimitDeny {\n    /** The semantic class, or null for an UNKNOWN/future class (T13). */\n    limitClass: FsLimitClass__2d5726601b87 | null;\n    /** The raw `limitClass` string when it is outside the closed mirror (T13). */\n    unknownLimitClass?: string;\n    /** The recommended client reaction. */\n    reaction: FsLimitReaction;\n    /** Whether the platform or an upstream provider decided the deny. */\n    limitOrigin: FsLimitOrigin;\n    /** The provider-supplied reason verbatim, when this relayed an upstream\n     *  throttle (an adaptive deny). */\n    providerReason: string | null;\n    /** When the limit window resets, when known. */\n    reset: Date | null;\n    /** Units remaining in the window at decision time, when known. */\n    remaining: number | null;\n    /** The cap value hit, when known. */\n    limit: number | null;\n    /** The HTTP status of the deny. */\n    status: number;\n    /** The wire `code` of the deny. */\n    code: string;\n    /** The gateway decision id, when known. */\n    decisionId: string | null;\n    /** Wall-clock instant (epoch ms) the deny was observed — drives staleness. */\n    observedAt: number;\n}",
      "typeReferences": [
        {
          "name": "FsLimitClass__2d5726601b87",
          "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
        },
        {
          "name": "FsLimitOrigin",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
        },
        {
          "name": "FsLimitReaction",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.parseFsDenyEnvelope",
      "name": "@farthershore/farthershore-js/errors.parseFsDenyEnvelope",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L188",
      "description": "Parse the `_fs` deny envelope off a deny body, or null when absent/invalid.\nReads the block under the `_fs` key (the gateway/core stamp it there).\n\nFORWARD-COMPAT (T13): the closed {@link FsLimitClass} mirror can lag contracts\nby a release, so a deny carrying a `limitClass` this bundle does NOT know must\nNOT be discarded — that would silently drop the reaction/origin/headroom\nsignal a forward-compat client needs. Instead the typed `limitClass` is set to\n`null`, the raw value is preserved on `unknownLimitClass`, and the whole `_fs`\nblock is preserved on `raw`. A `reaction` outside the closed set degrades to\n`none` (never auto-retry on an unknown intent). The ONLY hard requirement to\nrecognize an envelope is a string `limitClass` present — everything else is\nbest-effort. Pure; safe on any value.",
      "signature": "export declare function parseFsDenyEnvelope(body: unknown): FsDenyEnvelope | null;",
      "typeReferences": [
        {
          "name": "FsDenyEnvelope",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L109"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.parseLimitDescriptor",
      "name": "@farthershore/farthershore-js/errors.parseLimitDescriptor",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L524",
      "description": "Extract a {@link LimitDescriptor} from a deny body, or null if absent.\nHandles both shapes: nested `{ error: { limitCode, … } }` (core resource\nlimits, proxied raw through the gateway) and flat `{ error, code, limitCode,\n… }` (gateway compute limits — quota/rate-limit).",
      "signature": "export declare function parseLimitDescriptor(body: unknown): LimitDescriptor | null;",
      "typeReferences": [
        {
          "name": "LimitDescriptor",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L85"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.parseRateLimit",
      "name": "@farthershore/farthershore-js/errors.parseRateLimit",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L22",
      "description": "Parse the gateway's `X-RateLimit-Remaining` / `X-RateLimit-Reset` headers\ninto a {@link RateLimitSnapshot}, or null when neither is present. Pure +\nSSR-safe (no `window`).",
      "signature": "export declare function parseRateLimit(headers: Headers | null): RateLimitSnapshot | null;",
      "typeReferences": [
        {
          "name": "RateLimitSnapshot",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.parseRetryAfterSeconds",
      "name": "@farthershore/farthershore-js/errors.parseRetryAfterSeconds",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L18",
      "description": "Parse a `Retry-After` header value to seconds. Supports the two RFC forms —\na non-negative integer (\"120\") and an HTTP-date — and returns null for a\nmissing/unparseable value or a date in the past. Pure + SSR-safe.",
      "signature": "export declare function parseRetryAfterSeconds(value: string | null): number | null;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.PermissionDeniedError",
      "name": "@farthershore/farthershore-js/errors.PermissionDeniedError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L354",
      "description": "A {@link FartherShoreApiError} for a Managed-RBAC permission deny — the\ngateway's `permission` constraint denied the request (`403\npermission_denied`) because the credential's permission claim did not\nsatisfy the matched route's required `<subject>:<verb>`. `.permission`\ncarries the missing permission (when the deny envelope names it) so an app\ncan tell the user EXACTLY what they lack and offer a request-access flow.\nThis is the RBAC axis: a permission deny is about WHO you are, not WHAT plan\nyou're on, so it never routes to an upsell.",
      "signature": "export declare class PermissionDeniedError extends FartherShoreApiError {\n    /** The missing `<subject>:<verb>` permission, or null when the deny\n     *  envelope didn't name it. */\n    readonly permission: string | null;\n    constructor(status: number, code: string, message: string, body: unknown, permission: string | null, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot | null);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreApiError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
        },
        {
          "name": "RateLimitSnapshot",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.ProviderLimitError",
      "name": "@farthershore/farthershore-js/errors.ProviderLimitError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L321",
      "description": "A {@link FartherShoreRateLimitedError} subclass for a throttle the platform is\nRELAYING from an upstream PROVIDER (`.limitOrigin === \"provider\"`) — the cap\nis the provider's, not a plan limit, so the platform can't raise it; the only\naffordances are back-off / fallback, never an upgrade. The base class for the\n503 adaptive throttle below.",
      "signature": "export declare class ProviderLimitError extends FartherShoreRateLimitedError {\n    constructor(status: number, code: string, message: string, body: unknown, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot | null);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreRateLimitedError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L288"
        },
        {
          "name": "RateLimitSnapshot",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.RateLimitSnapshot",
      "name": "@farthershore/farthershore-js/errors.RateLimitSnapshot",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L8",
      "description": "Parsed `X-RateLimit-*` snapshot the gateway attaches to throttle responses.\nThe gateway emits `X-RateLimit-Remaining` + `X-RateLimit-Reset` but NOT\n`X-RateLimit-Limit`, so there is deliberately no `limit` field.",
      "signature": "export interface RateLimitSnapshot {\n    /** Requests left in the current window, or null when the header is absent. */\n    remaining: number | null;\n    /** When the window resets, or null when the header is absent. The\n     *  `X-RateLimit-Reset` value is unix-epoch SECONDS. */\n    resetAt: Date | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.RemediationAction",
      "name": "@farthershore/farthershore-js/errors.RemediationAction",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L423",
      "description": "A subscriber-facing remediation a blocked request points the user toward.\n`restore` lifts a scheduled/active cancellation (no new payment); `billing-portal`\nopens the Stripe Customer Portal to fix a failed/expired payment method.",
      "signature": "export type RemediationAction = \"restore\" | \"billing-portal\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.RequestTooLargeError",
      "name": "@farthershore/farthershore-js/errors.RequestTooLargeError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L258",
      "description": "A {@link LimitExceededError} subclass for a `413 request_too_large` — the\nper-request CAPACITY ceiling (payload/token footprint exceeds a per-request\ncap). `instanceof LimitExceededError` STILL holds (it IS a limit affordance),\nbut the reaction is `mustModify` (`reduce_then_retry`): retrying the same\nbytes never helps, so it must NOT drive an upgrade prompt. `.limitClass` is\n`capacity`.",
      "signature": "export declare class RequestTooLargeError extends LimitExceededError {\n    constructor(status: number, code: string, message: string, body: unknown, descriptor: LimitDescriptor, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot | null);\n}",
      "typeReferences": [
        {
          "name": "LimitDescriptor",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L85"
        },
        {
          "name": "LimitExceededError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L206"
        },
        {
          "name": "RateLimitSnapshot",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.RequiredSubjectKind",
      "name": "@farthershore/farthershore-js/errors.RequiredSubjectKind",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L363",
      "description": "Which SUBJECT KIND a route requires — the consumer-principal (D2) axis. A\n`member` route wants a person's credential (a user session or a PERSONAL\nkey); a `service` route wants an org-owned service-account key.",
      "signature": "export type RequiredSubjectKind = \"member\" | \"service\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.SpendLimitError",
      "name": "@farthershore/farthershore-js/errors.SpendLimitError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L267",
      "description": "A {@link LimitExceededError} subclass for a `402` SPEND cap — a monetary\nceiling (available funding / spend cap) was hit. `instanceof LimitExceededError`\nSTILL holds (it is an upgrade affordance — `resolveUpgrade` offers a higher\nplan). `.limitClass` is `spend`.",
      "signature": "export declare class SpendLimitError extends LimitExceededError {\n    constructor(status: number, code: string, message: string, body: unknown, descriptor: LimitDescriptor, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot | null);\n}",
      "typeReferences": [
        {
          "name": "LimitDescriptor",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L85"
        },
        {
          "name": "LimitExceededError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L206"
        },
        {
          "name": "RateLimitSnapshot",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.SubjectRequiredError",
      "name": "@farthershore/farthershore-js/errors.SubjectRequiredError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L394",
      "description": "A {@link FartherShoreApiError} for a route SUBJECT-KIND requirement deny — the\ngateway rejected the request (`403 member_subject_required` /\n`service_subject_required`) because the route declares `requireMember()` /\n`requireService()` and the resolved principal was the wrong kind. `.required`\ntells you which kind the route wants, so a portal can render the fix in a word\n(\"this action needs a personal key\" / \"…a service-account key\") WITHOUT\nstring-matching the raw envelope.\n\nDistinct from {@link PermissionDeniedError}: that is about WHICH permission you\nlack (the RBAC verb axis); this is about WHAT KIND of credential you presented\n(the subject axis). A member calling a service-only route isn't missing a\npermission — they're using the wrong kind of key, so the remedy is switching\ncredentials, never an upsell or an access request.",
      "signature": "export declare class SubjectRequiredError extends FartherShoreApiError {\n    /** The subject kind the route requires (`member` | `service`). */\n    readonly required: RequiredSubjectKind;\n    constructor(status: number, code: string, message: string, body: unknown, required: RequiredSubjectKind, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot | null);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreApiError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
        },
        {
          "name": "RateLimitSnapshot",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        },
        {
          "name": "RequiredSubjectKind",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L363"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.errors.SurfaceNotAllowedError",
      "name": "@farthershore/farthershore-js/errors.SurfaceNotAllowedError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/errors",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L417",
      "description": "A {@link FartherShoreApiError} for a route surface deny — the\ngateway rejected the request (`403 surface_not_allowed`) because the\nroute's `surfaces` excludes the caller's surface. This is not a missing\npermission: the remedy is using a surface the route exposes, not an upsell or\naccess request. A hidden route returns a plain 404 instead.",
      "signature": "export declare class SurfaceNotAllowedError extends FartherShoreApiError {\n    constructor(status: number, code: string, message: string, body: unknown, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot | null);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreApiError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
        },
        {
          "name": "RateLimitSnapshot",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.AccessRequest",
      "name": "@farthershore/farthershore-js/react.AccessRequest",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1061",
      "description": "A Notion-minimal access request (`/me/access-requests`). Track T3 —\napproval AUTO-GRANTS the permission onto the requester's direct grants.",
      "signature": "export interface AccessRequest {\n    id: string;\n    /** External identity id of the requesting member. */\n    requestedBy: string;\n    /** The requested permission (unified `<subject>:<verb>` grammar). */\n    permission: string;\n    note?: string | null;\n    /** PENDING | APPROVED | DENIED. */\n    status: string;\n    resolvedBy?: string | null;\n    resolvedAt?: string | null;\n    createdAt: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ActiveServiceAccountCreateResponse",
      "name": "@farthershore/farthershore-js/react.ActiveServiceAccountCreateResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L465",
      "description": "Public export ActiveServiceAccountCreateResponse; see its declaration and owning guide.",
      "signature": "export interface ActiveServiceAccountCreateResponse {\n    status: \"ACTIVE\";\n    serviceAccountId: string;\n    apiKeyId: string;\n    keyPrefix: string;\n    /** One-time plaintext secret. */\n    plaintext: string;\n    requestedPermissions: string[];\n    grantedPermissions: string[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ActiveServiceAccountUpdateResponse",
      "name": "@farthershore/farthershore-js/react.ActiveServiceAccountUpdateResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L486",
      "description": "Public export ActiveServiceAccountUpdateResponse; see its declaration and owning guide.",
      "signature": "export interface ActiveServiceAccountUpdateResponse {\n    status: \"ACTIVE\";\n    serviceAccountId: string;\n    requestedPermissions: string[];\n    grantedPermissions: string[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ApiKey",
      "name": "@farthershore/farthershore-js/react.ApiKey",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L347",
      "description": "Public export ApiKey; see its declaration and owning guide.",
      "signature": "export interface ApiKey {\n    id: string;\n    keyPrefix: string;\n    label: string | null;\n    /** Normalized lowercase, e.g. \"active\" | \"revoked\". */\n    status: string;\n    createdAt: string;\n    lastUsedAt: string | null;\n    revokedAt: string | null;\n    /** Consumer-principal (D2): the key's subject kind — a PERSONAL key mints a\n     *  member subject, a SERVICE key an org-owned service account. Always present\n     *  (Core's `ApiKey.kind` is a NOT NULL column). */\n    kind: ApiKeyKind;\n    /** PERSONAL — the bound member's stable `Membership.id` (identity + permission\n     *  source). Null for service keys / when the API omits it. */\n    memberId: string | null;\n    /** SERVICE — the org-owned `ServiceAccount.id` the key attaches to. Null for\n     *  personal keys / when the API omits it. */\n    serviceAccountId: string | null;\n    /** SERVICE — the bound service account's display name, when the API returns\n     *  it (the list groups service keys by account under this label). */\n    serviceAccountName: string | null;\n    /** Provenance: which member MINTED the key (audit only; may differ from the\n     *  bound member when an admin mints a personal key for someone — D2a). Null\n     *  for pre-attribution keys. */\n    createdBy: string | null;\n}",
      "typeReferences": [
        {
          "name": "ApiKeyKind",
          "source": "packages/farthershore-js/dist/types.d.ts#L346"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ApiKeyKind",
      "name": "@farthershore/farthershore-js/react.ApiKeyKind",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L346",
      "description": "Consumer-principal (D2): which stable identity an API key credentials.\n`PERSONAL` binds to a member (perms = the member's live roles ∩ the key's\nrestrictions; auto-revoked when the member leaves). `SERVICE` attaches to a\nnamed org-owned service account (admin-gated; survives offboarding).",
      "signature": "export type ApiKeyKind = \"PERSONAL\" | \"SERVICE\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ApiKeysResult",
      "name": "@farthershore/farthershore-js/react.ApiKeysResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L15",
      "description": "Public export ApiKeysResult; see its declaration and owning guide.",
      "signature": "export interface ApiKeysResult extends AsyncResult<ApiKey[]> {\n    create(input?: {\n        label?: string;\n        scopes?: string[];\n        roleKeys?: string[];\n        restrictedPermissions?: string[];\n        /** Generic API-key creation is member-owned. */\n        kind?: \"PERSONAL\";\n        /** PERSONAL — mint FOR this member (`Membership.id`); admin-gated (D2a). */\n        memberId?: string;\n    }): Promise<CreatedApiKey>;\n    revoke(keyId: string): Promise<void>;\n    rotate(keyId: string): Promise<CreatedApiKey>;\n}",
      "typeReferences": [
        {
          "name": "ApiKey",
          "source": "packages/farthershore-js/dist/types.d.ts#L347"
        },
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "CreatedApiKey",
          "source": "packages/farthershore-js/dist/types.d.ts#L375"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ApprovedServiceAccountCreateResponse",
      "name": "@farthershore/farthershore-js/react.ApprovedServiceAccountCreateResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L493",
      "description": "Public export ApprovedServiceAccountCreateResponse; see its declaration and owning guide.",
      "signature": "export interface ApprovedServiceAccountCreateResponse {\n    status: \"ACTIVE\";\n    operation: \"CREATE\";\n    serviceAccountId: string;\n    apiKeyId: string;\n    /** One-time plaintext secret. */\n    plaintext: string;\n    grantedPermissions: string[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ApprovedServiceAccountUpdateResponse",
      "name": "@farthershore/farthershore-js/react.ApprovedServiceAccountUpdateResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L502",
      "description": "Public export ApprovedServiceAccountUpdateResponse; see its declaration and owning guide.",
      "signature": "export interface ApprovedServiceAccountUpdateResponse {\n    status: \"ACTIVE\";\n    operation: \"UPDATE\";\n    serviceAccountId: string;\n    grantedPermissions: string[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ApproveServiceAccountInput",
      "name": "@farthershore/farthershore-js/react.ApproveServiceAccountInput",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L451",
      "description": "Public export ApproveServiceAccountInput; see its declaration and owning guide.",
      "signature": "export interface ApproveServiceAccountInput {\n    /** Omit to approve the complete original request. */\n    grantedPermissions?: string[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.AsyncResult",
      "name": "@farthershore/farthershore-js/react.AsyncResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14",
      "description": "The React-ecosystem-familiar result shape every data hook returns (the\nsame vocabulary TanStack Query / SWR consumers already know). `isError`/\n`isSuccess` are DERIVED, never independently settable:\n  - `isError`   = `error != null`\n  - `isSuccess` = `!isLoading && error == null && data != null`\n`queryKey` is a stable per-hook identity array (resource name + the\nmeaningful scope/args) — not consumed internally today, but a caller-facing\nhandle for external cache/devtools integration.",
      "signature": "export interface AsyncResult<T> {\n    data: T | null;\n    error: Error | null;\n    /** True while the read is in flight (initial load or a refetch). */\n    isLoading: boolean;\n    /** `error != null`. */\n    isError: boolean;\n    /** `!isLoading && error == null && data != null`. */\n    isSuccess: boolean;\n    /** Re-run the async function. AWAITABLE (W4): the returned promise resolves\n     *  when a run STARTED AFTER this call has COMMITTED its result (fresh data\n     *  or error visible on `.data`/`.error`) — the primitive mutation helpers\n     *  use to hold \"reconciling\" state until the authoritative refetch lands.\n     *  Generation-bound: a superseded/stale run's settlement can never release\n     *  it; only the commit of a newer run does (settled from a commit-phase\n     *  effect, so the awaited continuation always observes the new snapshot).\n     *  It never rejects (a failed read surfaces on `.error`, not the waiter).\n     *  Called after unmount it resolves immediately (documented no-op — there\n     *  is no read to wait for). Fire-and-forget callers can ignore it. */\n    refetch: () => Promise<void>;\n    /** Stable identity for this read: `[resource, ...scope/args]`. */\n    queryKey: readonly unknown[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.AsyncState",
      "name": "@farthershore/farthershore-js/react.AsyncState",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-async.d.ts#L1",
      "description": "Public export AsyncState; see its declaration and owning guide.",
      "signature": "export interface AsyncState<T> {\n    data: T | null;\n    loading: boolean;\n    error: Error | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.AuditLogEntry",
      "name": "@farthershore/farthershore-js/react.AuditLogEntry",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1074",
      "description": "Public export AuditLogEntry; see its declaration and owning guide.",
      "signature": "export interface AuditLogEntry {\n    id: string;\n    createdAt: string;\n    action: string;\n    decision?: \"ALLOW\" | \"DENY\" | null;\n    actorType?: string | null;\n    actorUserId?: string | null;\n    /** Friendly display name for a user actor (subscriber / builder / maker),\n     *  resolved server-side from the actor's Clerk user id. Null for non-user\n     *  actors (gateway / admin_service) or unknown ids — render `actorUserId`\n     *  as the fallback. */\n    actorName?: string | null;\n    payloadJson?: Record<string, unknown> | null;\n    [k: string]: unknown;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.AuditLogFilters",
      "name": "@farthershore/farthershore-js/react.AuditLogFilters",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L232",
      "description": "The filters {@link useAuditLogs} / {@link usePaginatedAuditLogs} accept.\nMirrors {@link AuditLogsResource.list } (the resource already forwards every\nfield) so changing any one refetches.",
      "signature": "export interface AuditLogFilters {\n    action?: string;\n    actorUserId?: string;\n    decision?: \"ALLOW\" | \"DENY\";\n    from?: string;\n    to?: string;\n    cursor?: string;\n    limit?: number;\n    /**\n     * Request-local workspace override. `null` omits the organization header and\n     * therefore reads the user's default subscription; it never mutates the\n     * provider's selected workspace.\n     */\n    organizationId?: string | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.AuditLogPage",
      "name": "@farthershore/farthershore-js/react.AuditLogPage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1089",
      "description": "Public export AuditLogPage; see its declaration and owning guide.",
      "signature": "export interface AuditLogPage {\n    items: AuditLogEntry[];\n    nextCursor: string | null;\n}",
      "typeReferences": [
        {
          "name": "AuditLogEntry",
          "source": "packages/farthershore-js/dist/types.d.ts#L1074"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.AuthCtx",
      "name": "@farthershore/farthershore-js/react.AuthCtx",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/mounted-context.d.ts#L6",
      "description": "Managed auth state, published by `<FsAuthProvider>`.",
      "signature": "declare const AuthCtx: import(\"react\").Context<FsAuth | null>;",
      "typeReferences": [
        {
          "name": "FsAuth",
          "source": "packages/farthershore-js/dist/react/mounted-types.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.AuthStrategy",
      "name": "@farthershore/farthershore-js/react.AuthStrategy",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L59",
      "description": "Public export AuthStrategy; see its declaration and owning guide.",
      "signature": "export type AuthStrategy = \"clerk\" | \"test-personas\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.AutoApiKeyError",
      "name": "@farthershore/farthershore-js/react.AutoApiKeyError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1097",
      "description": "A partial-success auto-key failure: the subscriber activated but Core could\nnot mint the first API key. Mirrors core's `autoApiKeyError` ({@code\ncheckout.ts}). The caller should prompt the user to create a key manually\nrather than silently dropping the signal.",
      "signature": "export interface AutoApiKeyError {\n    code: string;\n    message: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.BillingResult",
      "name": "@farthershore/farthershore-js/react.BillingResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L108",
      "description": "Public export BillingResult; see its declaration and owning guide.",
      "signature": "export interface BillingResult extends AsyncResult<Subscription | null> {\n    openBillingPortal(input?: {\n        returnUrl?: string;\n    }): Promise<{\n        url: string;\n    }>;\n    /** Cancel the subscription — free ends immediately, paid is scheduled on\n     *  the provider for the period boundary (`cancelsAt`). Optional `reason`\n     *  (churn analytics) threads to Core. Always refreshes the local\n     *  subscription read: the cancel HAPPENED either way. */\n    cancel(input?: {\n        reason?: string;\n    }): Promise<CancelSubscriptionResult>;\n    /** Buy more prepaid balance — returns the provider checkout URL to send the\n     *  subscriber to. Nothing is funded until they complete it, so this does NOT\n     *  refresh the local read. */\n    addFunds(input: {\n        amountCents: number;\n        requestId?: string;\n        successUrl?: string;\n        cancelUrl?: string;\n    }): Promise<{\n        checkoutUrl: string;\n    }>;\n    /** Reverse a scheduled cancel — the platform lifts `cancel_at_period_end`\n     *  (paid) or flips a CANCELLED free sub back to ACTIVE. Always refreshes the\n     *  local subscription read: the restore HAPPENED either way. */\n    restore(): Promise<RestoreSubscriptionResult>;\n    /** Change plan inline or schedule it according to product policy. */\n    changePlan(input: {\n        compiledPlanId: string;\n    }): Promise<ChangePlanResult>;\n    /** Set/clear the subscriber's monthly spend cap (cents; null clears). Refreshes\n     *  the local subscription read. STORED-not-ENFORCED — see {@link useSpendCap}. */\n    setSpendCap(input: {\n        maxMonthlySpendCents: number | null;\n    }): Promise<SpendCapResult__395300e78371>;\n}",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "CancelSubscriptionResult",
          "source": "packages/farthershore-js/dist/types.d.ts#L1122"
        },
        {
          "name": "ChangePlanResult",
          "source": "packages/farthershore-js/dist/types.d.ts#L1144"
        },
        {
          "name": "RestoreSubscriptionResult",
          "source": "packages/farthershore-js/dist/types.d.ts#L1134"
        },
        {
          "name": "SpendCapResult__395300e78371",
          "source": "packages/farthershore-js/dist/resources/billing.d.ts#L5"
        },
        {
          "name": "Subscription",
          "source": "packages/farthershore-js/dist/types.d.ts#L739"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.BillPreview",
      "name": "@farthershore/farthershore-js/react.BillPreview",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1284",
      "description": "Public export BillPreview; see its declaration and owning guide.",
      "signature": "export type BillPreview = TransparentBillPreview | OpaqueBillPreview;",
      "typeReferences": [
        {
          "name": "OpaqueBillPreview",
          "source": "packages/farthershore-js/dist/types.d.ts#L1277"
        },
        {
          "name": "TransparentBillPreview",
          "source": "packages/farthershore-js/dist/types.d.ts#L1257"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.BillPreviewAllowance",
      "name": "@farthershore/farthershore-js/react.BillPreviewAllowance",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1198",
      "description": "A funding allowance (balance bucket) with nanodollar balances —\ntransparent disclosure only.",
      "signature": "export interface BillPreviewAllowance {\n    /** Bucket source kind (e.g. `included`, `prepaid`, `promo`). */\n    kind: string;\n    /** Bucket lifecycle state — Core's `BucketState`, verbatim. */\n    state: BucketState;\n    /** Nanodollars, decimal strings (null = unavailable). */\n    remainingNanos: NanosAmount;\n    heldNanos: NanosAmount;\n    consumedNanos: NanosAmount;\n    /** ISO timestamp, or null when the allowance does not expire. */\n    expiresAt: string | null;\n}",
      "typeReferences": [
        {
          "name": "BucketState",
          "source": "packages/farthershore-js/dist/types.d.ts#L1184"
        },
        {
          "name": "NanosAmount",
          "source": "packages/farthershore-js/dist/types.d.ts#L1179"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.BillPreviewUsageRating",
      "name": "@farthershore/farthershore-js/react.BillPreviewUsageRating",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1251",
      "description": "Served usage this cycle that `totals` does NOT account for.\n\n`totals.ratedNanos` sums POSTED charges only, so usage that is metered but\nnot yet priced — or that can no longer be priced at all — contributes\nnothing to it. Rendering that as `$0` asserts \"you owe nothing\" when the\ntruthful statement is \"we have not priced this yet\". Render this instead of\nletting a confident zero stand.\n\n`pendingEventCount` drains on its own; `unratableEventCount` will not without\noperator action.",
      "signature": "export interface BillPreviewUsageRating {\n    pendingEventCount: number;\n    unratableEventCount: number;\n    /** ISO instant of the oldest unaccounted event, or null when there is none. */\n    oldestUnratedServedAt: string | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.BillPreviewWindow",
      "name": "@farthershore/farthershore-js/react.BillPreviewWindow",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1186",
      "description": "One rating window's engine-exact recognized total.",
      "signature": "export interface BillPreviewWindow {\n    windowId: string;\n    /** ISO timestamps. */\n    windowStart: string;\n    windowEnd: string;\n    /** Rated charges the engine recognized in this window. */\n    chargeCount: number;\n    /** Nanodollars, decimal string (null = unavailable). */\n    ratedNanos: NanosAmount;\n}",
      "typeReferences": [
        {
          "name": "NanosAmount",
          "source": "packages/farthershore-js/dist/types.d.ts#L1179"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.BootCtx",
      "name": "@farthershore/farthershore-js/react.BootCtx",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/mounted-context.d.ts#L4",
      "description": "Resolved bootstrap, published by `<FartherShoreRoot>`.",
      "signature": "declare const BootCtx: import(\"react\").Context<Bootstrap | null>;",
      "typeReferences": [
        {
          "name": "Bootstrap",
          "source": "packages/farthershore-js/dist/types.d.ts#L294"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.Bootstrap",
      "name": "@farthershore/farthershore-js/react.Bootstrap",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L294",
      "description": "What `fs.bootstrap()` returns — everything a generated/managed frontend needs\nto discover the business it's running for AND render its catalog: the full\nplan list (pricing model and included quotas), business meters, docs /\nlegal origins, and the featured-plan pointer.",
      "signature": "export interface Bootstrap {\n    /** Wire schema version of the resolve DTO this bootstrap was decoded from\n     *  (CC5). Additive negotiation hook; legacy payloads (no version) decode as\n     *  `1`. Informational today — the SDK reads every shape tolerantly. */\n    schemaVersion: number;\n    business: Business;\n    environment: EnvironmentInfo | null;\n    branding: Branding;\n    /** The business's available/purchasable plans (empty when none are\n     *  published). The single source the plans/pricing UI renders from. */\n    plans: Plan[];\n    /** The business's active custom-frontend release hash, or null. Informational\n     *  (diagnostics) — V0 serving is host-keyed at the edge. */\n    frontendReleaseHash: string | null;\n    /** Available module keys derived from the plan set (non-empty once plans exist):\n     *  e.g. \"billing\", \"usage-quota\", \"docs\", \"legal\". */\n    availableModules: string[];\n    /** The business's declared counted-resource catalog (W5.1). Empty when the\n     *  business declares none. */\n    declaredResources: DeclaredResource[];\n}",
      "typeReferences": [
        {
          "name": "Branding",
          "source": "packages/farthershore-js/dist/types.d.ts#L2"
        },
        {
          "name": "Business",
          "source": "packages/farthershore-js/dist/types.d.ts#L23"
        },
        {
          "name": "DeclaredResource",
          "source": "packages/farthershore-js/dist/types.d.ts#L282"
        },
        {
          "name": "EnvironmentInfo",
          "source": "packages/farthershore-js/dist/types.d.ts#L85"
        },
        {
          "name": "Plan",
          "source": "packages/farthershore-js/dist/types.d.ts#L127"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.Branding",
      "name": "@farthershore/farthershore-js/react.Branding",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L2",
      "description": "Public export Branding; see its declaration and owning guide.",
      "signature": "export interface Branding {\n    displayName: string;\n    /** Square brand mark (favicon / nav mark). */\n    iconUrl: string | null;\n    /** Horizontal text logo (wordmark) — rendered in place of the displayName\n     *  text when set. Most products only have an icon. */\n    logoUrl: string | null;\n    /** Marketing/header description for the business, when set. */\n    description: string | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.BucketState",
      "name": "@farthershore/farthershore-js/react.BucketState",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1184",
      "description": "Lifecycle state of a funding allowance (balance bucket) — mirrors Core's\n`BucketState` (Prisma) verbatim. `AVAILABLE` is the live, spendable\nstate; `EXPIRY_PENDING` is still spendable but about to expire; `PENDING`\nis not yet spendable; `FROZEN` / `EXPIRED` / `CANCELLED` are not spendable.",
      "signature": "export type BucketState = \"PENDING\" | \"AVAILABLE\" | \"EXPIRY_PENDING\" | \"FROZEN\" | \"EXPIRED\" | \"CANCELLED\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.Business",
      "name": "@farthershore/farthershore-js/react.Business",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L23",
      "description": "Public export Business; see its declaration and owning guide.",
      "signature": "export interface Business {\n    id: string;\n    /** Subdomain slug (the first label of the gateway/portal host). */\n    slug: string;\n    name: string;\n    description: string | null;\n    branding: Branding;\n    /** Gateway origin host for builder-feature calls (the business `runtimeHostname`). */\n    gatewayHost: string;\n    /** Public portal host. */\n    portalHost: string;\n    /** R2 public origin + business prefix where MDX docs live, or null when the\n     *  platform has no docs origin configured (local dev). The `/docs` view\n     *  concatenates the doc filename onto this. */\n    docsBaseUrl: string | null;\n    /** R2 public origin + business prefix for per-business legal MDX\n     *  (terms / privacy), or null. The legal view falls back to the platform\n     *  terms notice when null. */\n    legalBaseUrl: string | null;\n    /** Versioned legal documents declared by the business, keyed by extensible\n     *  kind (`terms`, `privacy`, custom kinds). URLs are public CDN MDX objects. */\n    legal?: {\n        documents: Record<string, LegalDocumentReference>;\n    };\n    /** Platform-owned docs visibility flag. When `false` the portal /docs\n     *  surface is suppressed (nav item hidden, route 404s) regardless of\n     *  whether `docsBaseUrl` is set. Absent on older Core payloads — the SDK\n     *  defaults this to `true` (backward-compatible). */\n    docsEnabled: boolean;\n    /** Immutable `CompiledPlan.id` of the featured plan, or null. Used to render\n     *  the \"Most Popular\" treatment in the plans UI. */\n    featuredCompiledPlanId: string | null;\n    /** Business-level meter definitions — the dimension catalog used to label\n     *  usage rows. Empty when the business declares no meters. */\n    meters: Meter[];\n}",
      "typeReferences": [
        {
          "name": "Branding",
          "source": "packages/farthershore-js/dist/types.d.ts#L2"
        },
        {
          "name": "LegalDocumentReference",
          "source": "packages/farthershore-js/dist/types.d.ts#L61"
        },
        {
          "name": "Meter",
          "source": "packages/farthershore-js/dist/types.d.ts#L15"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.CancelSubscriptionResult",
      "name": "@farthershore/farthershore-js/react.CancelSubscriptionResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1122",
      "description": "`POST /me/cancel` — the platform performs the cancel: free subs end\nimmediately, paid subs are scheduled on the provider for the end of the\ncurrent billing period. There is no hosted-page hand-off: the caller gets\na typed result back, and `cancelsAt` is the boundary the provider\nanswered with (null when it reported none, or for an immediate free\ncancel). NEVER invented client-side.",
      "signature": "export interface CancelSubscriptionResult {\n    subscription?: unknown;\n    /** ISO instant the subscription ends, or null. */\n    cancelsAt: string | null;\n    raw: unknown;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ChangePlanResult",
      "name": "@farthershore/farthershore-js/react.ChangePlanResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1144",
      "description": "`POST /me/change-plan` — Core decides inline-apply vs checkout vs portal\nredirect; all three surfaces normalized onto one shape.",
      "signature": "export interface ChangePlanResult {\n    subscription?: unknown;\n    checkoutUrl?: string | null;\n    portalRedirect?: {\n        url: string;\n    } | null;\n    raw: unknown;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ComponentAccessPolicyRow",
      "name": "@farthershore/farthershore-js/react.ComponentAccessPolicyRow",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L945",
      "description": "One per-subscriber component-gate override row (`GET /me`\n`componentAccessPolicies`) — shape-matches the contracts\n`ComponentAccessPolicyDto`.",
      "signature": "export interface ComponentAccessPolicyRow {\n    /** A managed component id or a `custom:<slug>` key. */\n    componentKey: string;\n    /** Override render-gate permission, or null → component default. */\n    requiredPermission: string | null;\n    /** Override deny render (`hide|disable|readOnly|denied`), or null →\n     *  component default. */\n    gateMode: string | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.CooldownResult",
      "name": "@farthershore/farthershore-js/react.CooldownResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-limits.d.ts#L9",
      "description": "Public export CooldownResult; see its declaration and owning guide.",
      "signature": "export interface CooldownResult {\n    /** Whole seconds left until the cooldown elapses; 0 once it has. */\n    secondsRemaining: number;\n    /** True while `secondsRemaining > 0`. */\n    active: boolean;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.CreatedApiKey",
      "name": "@farthershore/farthershore-js/react.CreatedApiKey",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L375",
      "description": "Returned ONLY by create/rotate — carries the full secret, shown once.",
      "signature": "export interface CreatedApiKey extends ApiKey {\n    /** The full key. The platform never returns it again — store it now. */\n    secret: string;\n}",
      "typeReferences": [
        {
          "name": "ApiKey",
          "source": "packages/farthershore-js/dist/types.d.ts#L347"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.createFsFetcher",
      "name": "@farthershore/farthershore-js/react.createFsFetcher",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/query-adapter.d.ts#L21",
      "description": "An SWR-compatible fetcher bound to a client:\n`(integrationId, path, opts?) => Promise<Response>`. Delegates to\n`fs.integration(id).fetch`, so the named integration contract is available\nas a plain fetcher function:\n\n  const fetcher = createFsFetcher(fs);\n  useSWR([\"stripe-charges\", \"/v1/charges\"], ([id, path]) => fetcher(id, path));",
      "signature": "export declare function createFsFetcher(client: FartherShoreClient__e4fe174a542f): (integrationId: string, path: string, opts?: FsFetchOptions__62afbd421e0f) => Promise<Response>;",
      "typeReferences": [
        {
          "name": "FartherShoreClient__e4fe174a542f",
          "source": "packages/farthershore-js/dist/client.d.ts#L36"
        },
        {
          "name": "FsFetchOptions__62afbd421e0f",
          "source": "packages/farthershore-js/dist/fetch.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.CreateServiceAccountInput",
      "name": "@farthershore/farthershore-js/react.CreateServiceAccountInput",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L441",
      "description": "Public export CreateServiceAccountInput; see its declaration and owning guide.",
      "signature": "export interface CreateServiceAccountInput {\n    name: string;\n    requestedPermissions: NonEmptyPermissionList;\n    scopes?: string[];\n    usageLimit?: ServiceAccountUsageLimitRequest;\n}",
      "typeReferences": [
        {
          "name": "NonEmptyPermissionList",
          "source": "packages/farthershore-js/dist/types.d.ts#L440"
        },
        {
          "name": "ServiceAccountUsageLimitRequest",
          "source": "packages/farthershore-js/dist/types.d.ts#L399"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.CreateUsageLimitInput",
      "name": "@farthershore/farthershore-js/react.CreateUsageLimitInput",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L604",
      "description": "Strict POST body: immutable subject + quantity, one value lane, and a\ncoherent BLOCK/NOTIFY threshold.",
      "signature": "export type CreateUsageLimitInput = UsageLimitSubject & UsageLimitValue & UsageLimitCreateMode__f16ef2d50497 & {\n    quantity: string;\n};",
      "typeReferences": [
        {
          "name": "UsageLimitCreateMode__f16ef2d50497",
          "source": "packages/farthershore-js/dist/types.d.ts#L595"
        },
        {
          "name": "UsageLimitSubject",
          "source": "packages/farthershore-js/dist/types.d.ts#L570"
        },
        {
          "name": "UsageLimitValue",
          "source": "packages/farthershore-js/dist/types.d.ts#L563"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.DeclaredResource",
      "name": "@farthershore/farthershore-js/react.DeclaredResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L282",
      "description": "A product-declared counted resource (W5.1 / P-RESCATALOG). The product's\ncatalog of `product.resource(...)` declarations, surfaced so a generated /\nmanaged frontend can discover what resources exist and render their usage\nWITHOUT a per-plan lookup.\n\n- `scope: 'subscription'` — counted once per subscription (the common case).\n- `scope: 'subject'` — counted per subject (e.g. per `project`), with\n  `subjectType` naming the subject; pass `{ subjectId }` to the resource\n  verbs so the count keys on that subject.\n\n`cap` is the per-plan ceiling read from the active plan's\n`resourceLimits[name]` (the bare resource name — NOT prefixed). It's\n`number` (a numeric cap), `true` is treated as unlimited (left undefined),\nand `null`/absent means uncapped/unknown.",
      "signature": "export interface DeclaredResource {\n    name: string;\n    display?: string;\n    scope: \"subscription\" | \"subject\";\n    subjectType?: string;\n    /** Per-plan cap for this resource, when a plan declares one (numeric only). */\n    cap?: number | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.EnvironmentInfo",
      "name": "@farthershore/farthershore-js/react.EnvironmentInfo",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L85",
      "description": "Public export EnvironmentInfo; see its declaration and owning guide.",
      "signature": "export interface EnvironmentInfo {\n    id: string;\n    name: string;\n    slug: string;\n    /** Which sign-in flow the portal should drive: Clerk (production) or a\n     *  platform-owned persona browser session (preview/test envs). */\n    authStrategy: AuthStrategy;\n    /** Env branch name (preview/test envs), or null for production scope. */\n    branch: string | null;\n    /** Billing provider mode for the env: \"test\" (no real money) or \"live\".\n     *  Null when the resolve was production-scoped (no env block). The plans UI\n     *  surfaces a \"Test mode\" badge when this is \"test\". */\n    stripeMode: string | null;\n}",
      "typeReferences": [
        {
          "name": "AuthStrategy",
          "source": "packages/farthershore-js/dist/types.d.ts#L59"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.FartherShoreAbortError",
      "name": "@farthershore/farthershore-js/react.FartherShoreAbortError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L713",
      "description": "Thrown when a request was aborted (e.g. a React hook unmounted or its deps\nchanged before the request resolved). Callers/hooks should ignore it.",
      "signature": "export declare class FartherShoreAbortError extends FartherShoreError__8dbed6dcc500 {\n    constructor(message?: string);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreError__8dbed6dcc500",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.FartherShoreProvider",
      "name": "@farthershore/farthershore-js/react.FartherShoreProvider",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/provider.d.ts#L13",
      "description": "Provides one Farther Shore client to the tree. Mount once at the app root.",
      "signature": "export declare function FartherShoreProvider({ client, config, children, }: FartherShoreProviderProps): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "FartherShoreProviderProps",
          "source": "packages/farthershore-js/dist/react/provider.d.ts#L4"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.FartherShoreProviderProps",
      "name": "@farthershore/farthershore-js/react.FartherShoreProviderProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/provider.d.ts#L4",
      "description": "Public export FartherShoreProviderProps; see its declaration and owning guide.",
      "signature": "export interface FartherShoreProviderProps {\n    /** A pre-built client (preferred — you own its config + lifetime). */\n    client?: FartherShoreClient__e4fe174a542f;\n    /** Or a config to build one internally. Pass a STABLE object (module-level /\n     *  memoized) so the client isn't recreated every render. */\n    config?: FartherShoreConfig__a72de6f5938f;\n    children: ReactNode;\n}",
      "typeReferences": [
        {
          "name": "FartherShoreClient__e4fe174a542f",
          "source": "packages/farthershore-js/dist/client.d.ts#L36"
        },
        {
          "name": "FartherShoreConfig__a72de6f5938f",
          "source": "packages/farthershore-js/dist/config.d.ts#L95"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.FsAuth",
      "name": "@farthershore/farthershore-js/react.FsAuth",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/mounted-types.d.ts#L2",
      "description": "Public export FsAuth; see its declaration and owning guide.",
      "signature": "export interface FsAuth {\n    strategy: AuthStrategy;\n    /** False while auth is initializing (Clerk JS loading / first session read). */\n    loaded: boolean;\n    /** True while the page is navigating to the primary domain for the silent\n     *  SSO handshake (an `#fs-sso`-hinted load) — hosts keep their splash up. */\n    pendingSsoRedirect: boolean;\n    signedIn: boolean;\n    /** Clerk → redirect to the primary hosted sign-in (returning here);\n     *  persona → scroll to CLI login guidance. */\n    signIn(): void;\n    /** Clerk → redirect to the primary hosted sign-UP (returning here). Use this\n     *  for \"Get started\"/\"Sign up\" CTAs; `signIn()` is for \"Log in\". Strategies\n     *  with no separate registration flow (persona, mock) alias it to signIn. */\n    signUp(): void;\n    signOut(): Promise<void>;\n    /** The signed-in user, normalized to {@link FsAuthUser} (Clerk OR persona),\n     *  or null when signed out. */\n    user: FsAuthUser | null;\n    /** Re-read the session (persona only; Clerk pushes its own state). */\n    refresh(): void;\n    /** Managed-RBAC product-role keys assigned to the signed-in user\n     *  (FAR-700), server-resolved from `GET /me` — the SDK never decodes\n     *  tokens client-side. `[]` while auth/permissions load and when signed\n     *  out. */\n    roles: string[];\n    /** The user's resolved permission strings (`<route-id>:read|write`\n     *  grammar). Personal orgs / RBAC-off products resolve to `[\"*\"]` (full\n     *  access). `[]` while loading / signed out. */\n    permissions: string[];\n    /**\n     * Whether the signed-in user's permissions grant `key` under the unified\n     * grammar (`*` / `<subject>:*` / exact — no verb-class widening). Returns\n     * `false` while permissions load and when signed out.\n     *\n     * ⚠️ UX ONLY — hide affordances with it, but the gateway's `permission`\n     * constraint is the security boundary: a request the user isn't permitted\n     * to make is denied at the edge regardless of what the client renders.\n     */\n    hasPermission(key: string): boolean;\n    /** Per-subscriber ComponentAccessPolicy override rows from `GET /me`\n     *  (Wave 5) — consumed by the component-policy resolver so `<PermissionGate\n     *  component=…>` and self-gated SDK components apply the subscriber's\n     *  governed overrides. `[]` while loading / signed out / no overrides. */\n    componentPolicies: ComponentAccessPolicyRow[];\n    /**\n     * True once the Managed-RBAC claim has settled: the `/me` read answered\n     * (or failed → deny-defaults locked in), or the viewer is signed out /\n     * auth finished loading without a session. While false, permission-gated\n     * UI should render a pending placeholder instead of flashing a deny —\n     * `usePermissionGate` consumes this so `<PermissionGate>` never flickers.\n     */\n    authzLoaded: boolean;\n}",
      "typeReferences": [
        {
          "name": "AuthStrategy",
          "source": "packages/farthershore-js/dist/types.d.ts#L59"
        },
        {
          "name": "ComponentAccessPolicyRow",
          "source": "packages/farthershore-js/dist/types.d.ts#L945"
        },
        {
          "name": "FsAuthUser",
          "source": "packages/farthershore-js/dist/types.d.ts#L789"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.FsAuthUser",
      "name": "@farthershore/farthershore-js/react.FsAuthUser",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L789",
      "description": "A normalized identity for the signed-in user — the same shape whether it\ncomes from Clerk or Core's safe test-persona session view. The persona\ncredential remains in an HttpOnly cookie and is never present in `raw`.",
      "signature": "export interface FsAuthUser {\n    /** Stable user/subscription id, or null when unknown. */\n    id: string | null;\n    firstName: string | null;\n    lastName: string | null;\n    /** Display name — Clerk's `fullName`, else `first last`, else null. */\n    fullName: string | null;\n    /** Primary email — Clerk's `primaryEmailAddress.emailAddress` (nested) or a\n     *  flat `email`, else null. */\n    email: string | null;\n    imageUrl: string | null;\n    /** The original Clerk user or safe persona identity view, untouched. */\n    raw: unknown;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.fsQueryOptions",
      "name": "@farthershore/farthershore-js/react.fsQueryOptions",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/query-adapter.d.ts#L39",
      "description": "Builders returning TanStack-Query-compatible `{ queryKey, queryFn }` plain\nobjects for the SDK's main resource reads (keys, usage, billing, plans,\n`me`, business). `queryKey` mirrors the Task-4 hook shape: `[resource,\nbusinessId, organizationId, ...args]` (module-level reads that don't vary\nby org — `plans`, `business` — omit the trailing `null` organizationId\nsegment, matching their hook counterparts `usePlans`/`useBusiness`).\n\nNot every resource is covered here — this targets the reads apps most\ncommonly wire into an external cache. For anything else, build the same\nshape inline:\n\n  { queryKey: [\"myThing\", fs.context.businessId, id], queryFn: () => fs.resources(\"things\").get(id) }\n\nor reach for {@link FartherShoreClient.resources} directly via\n`fsQueryOptions(fs).resource(name)` / `.resourceItem(name, id)` below.",
      "signature": "export declare function fsQueryOptions(client: FartherShoreClient__e4fe174a542f): {\n    keys: {\n        list: () => FsQueryOptions<Awaited<ReturnType<typeof client.keys.list>>>;\n    };\n    usage: {\n        snapshot: (range?: UsageRange__216cd12bcfd1) => FsQueryOptions<Awaited<ReturnType<typeof client.usage.snapshot>>>;\n    };\n    billing: {\n        subscription: () => FsQueryOptions<Awaited<ReturnType<typeof client.billing.subscription>>>;\n    };\n    plans: {\n        list: () => FsQueryOptions<Awaited<ReturnType<typeof client.plans.list>>>;\n    };\n    me: () => FsQueryOptions<Awaited<ReturnType<typeof client.me>>>;\n    business: {\n        get: () => FsQueryOptions<Awaited<ReturnType<typeof client.business.get>>>;\n    };\n    /** A product-declared, quota-counted resource's list (rides the gateway).\n     *  Generic escape hatch for resources beyond the named builders above. */\n    resource: <T = unknown>(name: string) => FsQueryOptions<ResourceRecord__87f0c814eb51<T>[]>;\n    /** A single record of a product-declared resource by id. */\n    resourceItem: <T = unknown>(name: string, id: string) => FsQueryOptions<ResourceRecord__87f0c814eb51<T>>;\n};",
      "typeReferences": [
        {
          "name": "FartherShoreClient__e4fe174a542f",
          "source": "packages/farthershore-js/dist/client.d.ts#L36"
        },
        {
          "name": "FsQueryOptions",
          "source": "packages/farthershore-js/dist/react/query-adapter.d.ts#L8"
        },
        {
          "name": "ResourceRecord__87f0c814eb51",
          "source": "packages/farthershore-js/dist/resources/resources.d.ts#L10"
        },
        {
          "name": "UsageRange__216cd12bcfd1",
          "source": "packages/farthershore-js/dist/resources/usage.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.FsQueryOptions",
      "name": "@farthershore/farthershore-js/react.FsQueryOptions",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/query-adapter.d.ts#L8",
      "description": "A TanStack-Query-compatible plain object: `{ queryKey, queryFn }`. Every\nbuilder below returns this shape structurally — it is never imported from\n`@tanstack/react-query`, so no runtime dependency is created.",
      "signature": "export interface FsQueryOptions<T> {\n    queryKey: readonly unknown[];\n    queryFn: () => Promise<T>;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.GatewayContextToken",
      "name": "@farthershore/farthershore-js/react.GatewayContextToken",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L803",
      "description": "Public export GatewayContextToken; see its declaration and owning guide.",
      "signature": "export interface GatewayContextToken {\n    /** Short-lived `fsc_` bearer accepted by the Gateway for this subscriber. */\n    token: string;\n    /** ISO timestamp when the token expires. */\n    expiresAt: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.LegalAcceptance",
      "name": "@farthershore/farthershore-js/react.LegalAcceptance",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L80",
      "description": "Public export LegalAcceptance; see its declaration and owning guide.",
      "signature": "export interface LegalAcceptance {\n    kind: string;\n    version: string;\n    contentHash: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.LegalConsentStatus",
      "name": "@farthershore/farthershore-js/react.LegalConsentStatus",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L76",
      "description": "Public export LegalConsentStatus; see its declaration and owning guide.",
      "signature": "export interface LegalConsentStatus {\n    required: boolean;\n    documents: LegalDocumentStatus[];\n}",
      "typeReferences": [
        {
          "name": "LegalDocumentStatus",
          "source": "packages/farthershore-js/dist/types.d.ts#L67"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.LegalDocumentAcceptanceMode",
      "name": "@farthershore/farthershore-js/react.LegalDocumentAcceptanceMode",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L60",
      "description": "Public export LegalDocumentAcceptanceMode; see its declaration and owning guide.",
      "signature": "export type LegalDocumentAcceptanceMode = \"agree\" | \"acknowledge\" | \"none\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.LegalDocumentReference",
      "name": "@farthershore/farthershore-js/react.LegalDocumentReference",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L61",
      "description": "Public export LegalDocumentReference; see its declaration and owning guide.",
      "signature": "export interface LegalDocumentReference {\n    title: string;\n    url: string;\n    acceptanceMode: LegalDocumentAcceptanceMode;\n    effectiveDate?: string;\n}",
      "typeReferences": [
        {
          "name": "LegalDocumentAcceptanceMode",
          "source": "packages/farthershore-js/dist/types.d.ts#L60"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.LegalDocumentStatus",
      "name": "@farthershore/farthershore-js/react.LegalDocumentStatus",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L67",
      "description": "Public export LegalDocumentStatus; see its declaration and owning guide.",
      "signature": "export interface LegalDocumentStatus extends LegalDocumentReference {\n    kind: string;\n    version: string;\n    contentHash: string;\n    consentLabel?: string;\n    changeNote?: string;\n    accepted: boolean;\n    acceptedAt?: string;\n}",
      "typeReferences": [
        {
          "name": "LegalDocumentReference",
          "source": "packages/farthershore-js/dist/types.d.ts#L61"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.LimitStatus",
      "name": "@farthershore/farthershore-js/react.LimitStatus",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-limit-status.d.ts#L44",
      "description": "The proactive, advisory limit-state snapshot. Provider-neutral; stale-prone.\nEvery field is best-effort from what the SDK has already observed.",
      "signature": "export interface LimitStatus {\n    /** Always true — this surface is ADVISORY; the gateway stays authoritative.\n     *  A UI must not use it as a hard gate, only a hint. */\n    advisory: true;\n    /** How current the picture is:\n     *   - `fresh`   — a live rate budget and/or a RECENT deny is informing it;\n     *   - `stale`   — only an OLD deny is known (older than `staleAfterMs`);\n     *   - `unknown` — nothing observed yet. */\n    freshness: \"fresh\" | \"stale\" | \"unknown\";\n    /** The live rate budget (the freshest signal). */\n    rate: LimitStatusRate;\n    /** The most-recent observed limit/throttle deny, or null when none seen. */\n    lastDeny: LimitStatusLastDeny | null;\n    /** True when the most-recent deny is a CONCURRENCY saturation (\"wait for a\n     *  slot\") that hasn't aged out — a hint to throttle outbound concurrency. */\n    concurrencySaturated: boolean;\n    /** True when the most-recent deny is an upstream PROVIDER throttle (adaptive /\n     *  provider-origin) that hasn't aged out — a hint to back off / fall back. */\n    providerThrottled: boolean;\n    /** When the current advisory cooldown ends (the soonest of the rate-budget\n     *  reset and the last deny's reset), or null when none is known. */\n    cooldownUntil: Date | null;\n}",
      "typeReferences": [
        {
          "name": "LimitStatusLastDeny",
          "source": "packages/farthershore-js/dist/react/use-limit-status.d.ts#L14"
        },
        {
          "name": "LimitStatusRate",
          "source": "packages/farthershore-js/dist/react/use-limit-status.d.ts#L4"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.LimitStatusLastDeny",
      "name": "@farthershore/farthershore-js/react.LimitStatusLastDeny",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-limit-status.d.ts#L14",
      "description": "The last-observed deny facet (recent, advisory).",
      "signature": "export interface LimitStatusLastDeny {\n    /** The semantic class, or null for an UNKNOWN/future class (T13). */\n    limitClass: FsLimitClass__2d5726601b87 | null;\n    /** The raw class string when outside the closed mirror (T13). */\n    unknownLimitClass?: string;\n    /** The recommended client reaction. */\n    reaction: FsLimitReaction__06a9e09be641;\n    /** Platform vs provider origin. */\n    limitOrigin: FsLimitOrigin__1d4de1805fa7;\n    /** The provider-supplied reason verbatim, when relayed (adaptive deny). */\n    providerReason: string | null;\n    /** When the limit window resets, when known. */\n    reset: Date | null;\n    /** Units remaining at decision time, when known. */\n    remaining: number | null;\n    /** The cap hit, when known. */\n    limit: number | null;\n    /** The deny's HTTP status. */\n    status: number;\n    /** The deny's wire code. */\n    code: string;\n    /** The gateway decision id, when known. */\n    decisionId: string | null;\n    /** Wall-clock instant (epoch ms) the deny was observed. */\n    observedAt: number;\n}",
      "typeReferences": [
        {
          "name": "FsLimitClass__2d5726601b87",
          "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
        },
        {
          "name": "FsLimitOrigin__1d4de1805fa7",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
        },
        {
          "name": "FsLimitReaction__06a9e09be641",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.LimitStatusRate",
      "name": "@farthershore/farthershore-js/react.LimitStatusRate",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-limit-status.d.ts#L4",
      "description": "The live rate-budget facet of the limit picture (from `X-RateLimit-*`).",
      "signature": "export interface LimitStatusRate {\n    /** Requests left in the current window, or null when unknown. */\n    remaining: number | null;\n    /** When the window resets, or null when unknown. */\n    resetAt: Date | null;\n    /** True when the budget is KNOWN to be exhausted (`remaining <= 0`) — the next\n     *  call would 429. Conservative: an unknown budget never saturates. */\n    saturated: boolean;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.Meter",
      "name": "@farthershore/farthershore-js/react.Meter",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L15",
      "description": "A business-level meter definition (the dimension catalog used to label/format\nusage). Mirrors the wire `MeterDefinition`; only the display-relevant fields\nare surfaced.",
      "signature": "export interface Meter {\n    /** Stable dimension key (e.g. \"requests\", \"tokens\"). */\n    key: string;\n    /** Human-friendly label for the dimension. */\n    display: string;\n    /** Optional unit suffix (e.g. \"ms\", \"tokens\"). */\n    unit?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.NanosAmount",
      "name": "@farthershore/farthershore-js/react.NanosAmount",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1179",
      "description": "A nanodollar amount off the wire: Core's decimal-integer STRING, or `null`\nwhen the wire value was malformed (non-integer, non-string, missing). The\nreader never coerces a malformed amount to `\"0\"` — a `null` renders as\n\"unavailable\", never as `$0`. Format non-null values with\n`format.formatNanos` (bigint) — never `Number()`.",
      "signature": "export type NanosAmount = string | null;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.NonEmptyPermissionList",
      "name": "@farthershore/farthershore-js/react.NonEmptyPermissionList",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L440",
      "description": "A service-account authority request must contain at least one permission.",
      "signature": "export type NonEmptyPermissionList = [string, ...string[]];",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.NotificationPreferences",
      "name": "@farthershore/farthershore-js/react.NotificationPreferences",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1164",
      "description": "The subscriber's full notification-preference state\n(`GET /portal/businesses/:id/me/notification-preferences`). Email is the only\nnotifiable channel, so a preference is a single email OPT-OUT:\n - `master === true` suppresses EVERY category's email;\n - `categories[category] === true` additionally mutes a single category.\n\nEmail is suppressed for an event iff the master opts out OR the event's\ncategory opts out. Category keys are the contracts notification categories\n(`billing`, `usage`, …) — kept as a plain string map so the SDK stays\ncontracts-free; the UI joins them to `NOTIFICATION_CATEGORY_META`.",
      "signature": "export interface NotificationPreferences {\n    master: boolean;\n    categories: Record<string, boolean>;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.NotificationPreferencesPatch",
      "name": "@farthershore/farthershore-js/react.NotificationPreferencesPatch",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1170",
      "description": "The PATCH body — a PARTIAL patch of the master and/or any categories. Only\nthe master/categories present change; omit the rest. Send only the delta.",
      "signature": "export interface NotificationPreferencesPatch {\n    master?: boolean;\n    categories?: Record<string, boolean>;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.NotificationPreferencesResult",
      "name": "@farthershore/farthershore-js/react.NotificationPreferencesResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L221",
      "description": "Public export NotificationPreferencesResult; see its declaration and owning guide.",
      "signature": "export interface NotificationPreferencesResult extends AsyncResult<NotificationPreferences> {\n    /** Apply a PARTIAL patch (send only what changed) and refetch on success. */\n    update(patch: NotificationPreferencesPatch): Promise<NotificationPreferences>;\n}",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "NotificationPreferences",
          "source": "packages/farthershore-js/dist/types.d.ts#L1164"
        },
        {
          "name": "NotificationPreferencesPatch",
          "source": "packages/farthershore-js/dist/types.d.ts#L1170"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.OffsetPage",
      "name": "@farthershore/farthershore-js/react.OffsetPage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L535",
      "description": "Public export OffsetPage; see its declaration and owning guide.",
      "signature": "export interface OffsetPage<T> {\n    data: T[];\n    pagination: {\n        limit: number;\n        offset: number;\n        hasMore: boolean;\n    };\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.OnboardingResult",
      "name": "@farthershore/farthershore-js/react.OnboardingResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1104",
      "description": "`POST /onboarding` result: paid plans hand back `checkoutUrl` (note: NOT\n`url` like checkout-session); free plans activate inline and may include a\none-time auto-created API key (drives the auto-key banner).",
      "signature": "export interface OnboardingResult {\n    checkoutUrl?: string | null;\n    subscriber?: unknown;\n    /** One-time full key secret when Core auto-creates the first key. */\n    autoApiKey?: string | {\n        secret?: string;\n    } | null;\n    /** Set when the first-key mint failed AFTER the subscriber became active —\n     *  surfaced (not swallowed) so the client can tell the user. */\n    autoApiKeyError?: AutoApiKeyError | null;\n    raw: unknown;\n}",
      "typeReferences": [
        {
          "name": "AutoApiKeyError",
          "source": "packages/farthershore-js/dist/types.d.ts#L1097"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.OpaqueAllowanceDisplay",
      "name": "@farthershore/farthershore-js/react.OpaqueAllowanceDisplay",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1215",
      "description": "Opaque allowance display — NEVER carries a nanodollar amount. Either the\nplan-authored display units (`multiplier`: the allowance is\n`allowanceUnits` units, remaining/consumed are fractional units of it) or,\nwhen the plan authored no display, the consumption fraction in basis\npoints.",
      "signature": "export type OpaqueAllowanceDisplay = {\n    kind: \"multiplier\";\n    /** Authored allowance in display units (e.g. 5 for a \"5x\" plan). */\n    allowanceUnits: number;\n    /** Remaining allowance in display units, 2 decimals, as a string. */\n    remainingUnits: string;\n    /** Consumed allowance in display units, 2 decimals, as a string. */\n    consumedUnits: string;\n} | {\n    kind: \"fraction\";\n    /** Consumed share of the allowance in basis points (0..10000). */\n    consumedBasisPoints: number;\n    /** Remaining share of the allowance in basis points (0..10000). */\n    remainingBasisPoints: number;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.OpaqueBillPreview",
      "name": "@farthershore/farthershore-js/react.OpaqueBillPreview",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1277",
      "description": "Opaque plans return allowance shape ONLY — nothing a subscriber could\ndivide by a known request count to recover the per-unit rate. Amounts owed\nsurface through the invoice, not the preview.",
      "signature": "export interface OpaqueBillPreview {\n    currency: string;\n    disclosure: \"opaque\";\n    /** The plan's recurring fee, in cents. */\n    recurringFeeCents: number;\n    allowances: OpaqueBillPreviewAllowance[];\n}",
      "typeReferences": [
        {
          "name": "OpaqueBillPreviewAllowance",
          "source": "packages/farthershore-js/dist/types.d.ts#L1232"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.OpaqueBillPreviewAllowance",
      "name": "@farthershore/farthershore-js/react.OpaqueBillPreviewAllowance",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1232",
      "description": "A funding allowance under opaque disclosure — kind / state / expiry plus\nthe authored display; no amounts.",
      "signature": "export interface OpaqueBillPreviewAllowance {\n    kind: string;\n    /** Bucket lifecycle state — Core's `BucketState`, verbatim. */\n    state: BucketState;\n    expiresAt: string | null;\n    display: OpaqueAllowanceDisplay;\n}",
      "typeReferences": [
        {
          "name": "BucketState",
          "source": "packages/farthershore-js/dist/types.d.ts#L1184"
        },
        {
          "name": "OpaqueAllowanceDisplay",
          "source": "packages/farthershore-js/dist/types.d.ts#L1215"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.OrganizationContextValue",
      "name": "@farthershore/farthershore-js/react.OrganizationContextValue",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/organization-context.d.ts#L3",
      "description": "Public export OrganizationContextValue; see its declaration and owning guide.",
      "signature": "export interface OrganizationContextValue {\n    /** The active org id (null = the user's default subscription / signed out). */\n    organizationId: string | null;\n    /** The requested scope: undefined auto-selects a workspace, null is the\n     * explicit default subscription, and a string names one workspace. */\n    organizationSelection: string | null | undefined;\n    /** The orgs through which the user holds a subscription to this product. */\n    organizations: SubscriptionContext[];\n    /** Switch the active org. Writes through to the client (token + read-cache\n     *  bust via setOrganizationId), the persisted store, AND this context — so\n     *  every hook depending on the reactive id refetches under the new scope. */\n    setOrganization(organizationId: string | null): void;\n    /** True while the org list is still loading. */\n    loading: boolean;\n    /** Last workspace-list error, distinct from a legitimate empty list. */\n    error: Error | null;\n    /** Re-read workspace membership after authentication changes. Awaitable so\n     * readiness gates never expose onboarding from a pre-auth empty snapshot. */\n    refetchOrganizations(): Promise<void>;\n}",
      "typeReferences": [
        {
          "name": "SubscriptionContext",
          "source": "packages/farthershore-js/dist/types.d.ts#L955"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.OrganizationProvider",
      "name": "@farthershore/farthershore-js/react.OrganizationProvider",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/organization-context.d.ts#L35",
      "description": "Holds the reactive active-org id for the tree. Seeds from the client's\ncurrent scope (which the client restored from the persisted store at boot),\nthen reconciles against the real subscription contexts once they load via the\nsingle {@link resolveSelectedOrganizationId } path — so a stale persisted id\nthat no longer names a held subscription falls back to the server default.\n\nMounted by <FartherShoreProvider>; you normally never render this directly.",
      "signature": "export declare function OrganizationProvider({ children }: OrganizationProviderProps): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "OrganizationProviderProps",
          "source": "packages/farthershore-js/dist/react/organization-context.d.ts#L23"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.OrganizationProviderProps",
      "name": "@farthershore/farthershore-js/react.OrganizationProviderProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/organization-context.d.ts#L23",
      "description": "Public export OrganizationProviderProps; see its declaration and owning guide.",
      "signature": "export interface OrganizationProviderProps {\n    children: ReactNode;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.PaginatedAuditLogsResult",
      "name": "@farthershore/farthershore-js/react.PaginatedAuditLogsResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L251",
      "description": "Public export PaginatedAuditLogsResult; see its declaration and owning guide.",
      "signature": "export interface PaginatedAuditLogsResult {\n    /** All items accumulated across the pages loaded so far (deduped by id). */\n    items: AuditLogEntry[];\n    loading: boolean;\n    error: Error | null;\n    /** True while a `loadMore()` page is in flight (distinct from the initial\n     *  `loading`). */\n    loadingMore: boolean;\n    /** True when the server reported another cursor — i.e. `loadMore()` will\n     *  fetch more. */\n    hasMore: boolean;\n    /** Append the next page (the \"Load older\" UX). No-op while a fetch is in\n     *  flight or when there is no next cursor. */\n    loadMore(): void;\n    /** Discard accumulated pages and re-fetch from the first page. */\n    reset(): void;\n}",
      "typeReferences": [
        {
          "name": "AuditLogEntry",
          "source": "packages/farthershore-js/dist/types.d.ts#L1074"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.PendingServiceAccountApproval",
      "name": "@farthershore/farthershore-js/react.PendingServiceAccountApproval",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L521",
      "description": "Public export PendingServiceAccountApproval; see its declaration and owning guide.",
      "signature": "export interface PendingServiceAccountApproval {\n    id: string;\n    operation: ServiceAccountApprovalOperation;\n    serviceAccountId: string;\n    requestedBy: string;\n    requestedPermissions: string[];\n    excessPermissions: string[];\n    createdAt: string;\n    serviceAccount: {\n        name: string;\n        /** Frozen grants that stay active for a pending UPDATE. */\n        grantedPermissions: string[];\n    };\n}",
      "typeReferences": [
        {
          "name": "ServiceAccountApprovalOperation",
          "source": "packages/farthershore-js/dist/types.d.ts#L382"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.PendingServiceAccountCreateResponse",
      "name": "@farthershore/farthershore-js/react.PendingServiceAccountCreateResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L455",
      "description": "Public export PendingServiceAccountCreateResponse; see its declaration and owning guide.",
      "signature": "export interface PendingServiceAccountCreateResponse {\n    status: \"PENDING\";\n    serviceAccountId: string;\n    approvalId: string;\n    requestedPermissions: string[];\n    /** A pending create has no live credential or frozen authority. */\n    grantedPermissions: [];\n    excessPermissions: string[];\n    eligibleApproverIds: string[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.PendingServiceAccountUpdateResponse",
      "name": "@farthershore/farthershore-js/react.PendingServiceAccountUpdateResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L476",
      "description": "Public export PendingServiceAccountUpdateResponse; see its declaration and owning guide.",
      "signature": "export interface PendingServiceAccountUpdateResponse {\n    status: \"PENDING\";\n    serviceAccountId: string;\n    approvalId: string;\n    /** Frozen grants that remain active while approval is pending. */\n    activePermissions: string[];\n    requestedPermissions: string[];\n    excessPermissions: string[];\n    eligibleApproverIds: string[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.persistOrganizationId",
      "name": "@farthershore/farthershore-js/react.persistOrganizationId",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/organization.d.ts#L47",
      "description": "Persist the active-org selection. Passing null deliberately persists the\nuser's default subscription rather than clearing the selection; this keeps\n`setOrganizationId(null)` durable across reloads. Best-effort: a storage\nfailure (SSR / quota / privacy mode) is swallowed.",
      "signature": "export declare function persistOrganizationId(organizationId: string | null): void;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.PersonaAuthSession",
      "name": "@farthershore/farthershore-js/react.PersonaAuthSession",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L334",
      "description": "Safe, non-secret view of a server-owned test-persona browser session.",
      "signature": "export interface PersonaAuthSession {\n    kind: \"test-persona\";\n    personaId: string;\n    userId: string;\n    organizationId: string | null;\n    displayName: string | null;\n    expiresAt: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.PinnedUsageRowsResult",
      "name": "@farthershore/farthershore-js/react.PinnedUsageRowsResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L189",
      "description": "Public export PinnedUsageRowsResult; see its declaration and owning guide.",
      "signature": "export interface PinnedUsageRowsResult {\n    /** Usage rows built from the subscriber's PINNED plan display surface. */\n    rows: MeterUsageRow__65f0c2813d76[];\n    loading: boolean;\n    error: Error | null;\n}",
      "typeReferences": [
        {
          "name": "MeterUsageRow__65f0c2813d76",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L226"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.Plan",
      "name": "@farthershore/farthershore-js/react.Plan",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L127",
      "description": "A purchasable/available plan in the product catalog. Mirrors core's\n`PortalPlan` (declared kind + recurring billing shape) so the template can\nrender the plan card, included quotas, and a subscribe button. Money for\nusage lives ONLY in the bill preview ({@link BillPreview}).",
      "signature": "export interface Plan {\n    /** Immutable `CompiledPlan.id` — the pointer passed to `subscribe()`. */\n    id: string;\n    key: string;\n    name: string;\n    description: string | null;\n    /**\n     * The builder's DECLARED plan kind. `\"free\"` is the free tier — a FLOOR,\n     * not an option: subscribers are auto-enrolled on it at sign-up and fall\n     * back to it when a paid plan is cancelled, so `<PlansTable>` and every\n     * other plan-card surface hides it rather than offering it as a choice.\n     * Read this field — do NOT infer it from a zero recurring fee, which is\n     * also true of `usage` plans that bill usage.\n     */\n    kind: PlanKind;\n    /** Recurring fee, in cents (0 for free / usage plans). */\n    recurringFeeCents: number;\n    /** Billing cadence for the recurring fee + metered usage — `\"month\"`\n     *  (default) or `\"year\"` (annual). Lets a pricing card render \"$X/yr\" vs\n     *  \"$X/mo\" and badge annual tiers. Defaults to `\"month\"` when the wire DTO\n     *  omits it (the platform omits the key for monthly plans). */\n    billingInterval: \"month\" | \"year\";\n    /** ISO 4217 currency of every money field on the plan. REQUIRED in the\n     *  normalized model — defaults to `\"USD\"` when the wire DTO omits it (the\n     *  USD-only platform omits the key today). */\n    currency: string;\n    /** Free-trial length in days (0 = no trial). */\n    trialDays: number;\n    /** Optional monthly spend cap, in cents. */\n    maxMonthlySpendCents: number | null;\n    /** Optional minimum monthly spend floor, in cents. */\n    minMonthlySpendCents: number | null;\n    /** Structural metered dimensions (no money). Empty for non-metered plans. */\n    meters: PlanMeter[];\n    /** Quota + rate-limit rules. Month-window rules are the included allowances. */\n    limits: PlanLimit[];\n    /** Optional builder-authored feature bullets shown on the plan card. */\n    planDetails: string[];\n    /** Control-plane resource limits — `key → maxCount` caps (webhooks: 5)\n     *  such as api_keys or webhooks. Empty when the\n     *  plan declares none. */\n    resourceLimits: Record<string, number>;\n    /**\n     * The plan's PUBLIC catalog terms for metered usage — the price list a buyer\n     * needs to compare plans, projected by Core from the served commercial\n     * release. `null` when the plan binds no catalog, when the served release\n     * carries no matching pricing policy, or when the builder declared\n     * `fs.disclosure.opaque`; card surfaces fall back to \"priced per the\n     * catalog\" and a docs pointer in that case.\n     *\n     * This is the only place on the SDK's plan model where per-unit money lives,\n     * and it is NOT an exception to the rule the rest of this module states: a\n     * pricing catalog is a PUBLISHED commerce term the builder authored for\n     * everyone, whereas a subscriber's rated usage, funding draw-down and\n     * projected bill remain exclusive to Core's bill preview. The SDK still\n     * derives NO money: it renders these rates, it never multiplies them by a\n     * usage count.\n     */\n    pricingDisplay: PlanPricingDisplay | null;\n}",
      "typeReferences": [
        {
          "name": "PlanKind",
          "source": "packages/farthershore-js/dist/types.d.ts#L108"
        },
        {
          "name": "PlanLimit",
          "source": "packages/farthershore-js/dist/types.d.ts#L111"
        },
        {
          "name": "PlanMeter",
          "source": "packages/farthershore-js/dist/types.d.ts#L103"
        },
        {
          "name": "PlanPricingDisplay",
          "source": "packages/farthershore-js/dist/types.d.ts#L248"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.PlanFunding",
      "name": "@farthershore/farthershore-js/react.PlanFunding",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L232",
      "description": "Funding that pays for rated usage before anything is owed.",
      "signature": "export interface PlanFunding {\n    kind: \"included\" | \"promo\" | \"referral\" | \"prepaid\";\n    /** Face value in minor units of {@link PlanPricingDisplay.currency}. */\n    amountMinor: number;\n    /** Whether the bucket refreshes each billing period. */\n    recurs: boolean;\n    /** The builder's authored marketing framing: the bucket is `factor`x of a\n     *  `baseMinor` base. The base is `amountMinor / factor` by construction, so\n     *  the label cannot misstate the allowance. */\n    display: {\n        kind: \"multiplier\";\n        factor: number;\n        baseMinor: number;\n    } | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.PlanKind",
      "name": "@farthershore/farthershore-js/react.PlanKind",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L108",
      "description": "The builder's DECLARED plan kind (`plan.kind.*` in the Business SDK):\n`free` | `flat` | `usage` | `prepaid` | `hybrid` | `trial` | `custom`.\nEvery card decision (badge, picker, hiding the free floor) reads it —\nnothing is inferred from shape.",
      "signature": "export type PlanKind = PlanKindWire__a95f9171680c;",
      "typeReferences": [
        {
          "name": "PlanKindWire__a95f9171680c",
          "source": "packages/farthershore-js/dist/generated/catalog-types.d.ts#L25"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.PlanLimit",
      "name": "@farthershore/farthershore-js/react.PlanLimit",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L111",
      "description": "A named rate-limit / quota rule on a plan. `window.name === \"month\"` rules\nare the included-quota allowances the usage card renders against.",
      "signature": "export interface PlanLimit {\n    dimension: string;\n    window: {\n        type: \"named\";\n        name: string;\n    } | {\n        type: \"custom\";\n        seconds: number;\n    };\n    capacity: number;\n    enforcement?: \"enforce\" | \"track\";\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.PlanMeter",
      "name": "@farthershore/farthershore-js/react.PlanMeter",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L103",
      "description": "A structural metered dimension on a plan — `{ dimension, kind? }`, NO\nmoney. Rates, allowances, and the projected bill come from the bill-preview\nAPI ({@link BillPreview}), never from the plan. Wire-faithful — the public\n`PlanMeter` name re-exports the codegenned `PlanMeterWire`.",
      "signature": "export type PlanMeter = PlanMeterWire__47c3d2492e8a;",
      "typeReferences": [
        {
          "name": "PlanMeterWire__47c3d2492e8a",
          "source": "packages/farthershore-js/dist/generated/catalog-types.d.ts#L17"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.PlanPricingDisplay",
      "name": "@farthershore/farthershore-js/react.PlanPricingDisplay",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L248",
      "description": "PUBLIC commerce terms for a plan's metered usage.",
      "signature": "export interface PlanPricingDisplay {\n    /** The pricing policy key the plan's `usagePricing` binds. */\n    pricingPolicyKey: string;\n    /** Meter the policy rates. */\n    meterKey: string;\n    /** ISO 4217 currency of every amount below. */\n    currency: string;\n    /** How the plan binds the catalog. `fixed_version` plans pin `version`. */\n    binding: {\n        kind: \"current\" | \"current_with_contract_terms\" | \"fixed_version\";\n        version: number | null;\n    };\n    /** Rates in deterministic precedence order, most specific first. */\n    rules: PricingRule[];\n    /** Funding buckets declared on the plan, in authored order. */\n    funding: PlanFunding[];\n    /** What happens when funding runs out: `block` stops requests, `overage`\n     *  keeps serving at the catalog, `prepaid` is the wallet shape. */\n    exhaustion: \"block\" | \"overage\" | \"prepaid\" | null;\n}",
      "typeReferences": [
        {
          "name": "PlanFunding",
          "source": "packages/farthershore-js/dist/types.d.ts#L232"
        },
        {
          "name": "PricingRule",
          "source": "packages/farthershore-js/dist/types.d.ts#L206"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.PlansResult",
      "name": "@farthershore/farthershore-js/react.PlansResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L172",
      "description": "The product's plan catalog + the subscribe/checkout mutation. The data is\nthe same plan list `bootstrap()` resolves; `subscribe()` starts checkout.",
      "signature": "export interface PlansResult extends AsyncResult<Plan[]> {\n    subscribe(input: SubscribeInput__62c7cb21d77a): Promise<SubscribeResult__4b2d9557cede>;\n    /** The onboarding-view purchase path (`POST /onboarding`) — paid → checkoutUrl,\n     *  free → inline activation (possibly with a one-time autoApiKey). */\n    startOnboarding(input?: StartOnboardingInput__af7cf0dea526): Promise<OnboardingResult>;\n}",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "OnboardingResult",
          "source": "packages/farthershore-js/dist/types.d.ts#L1104"
        },
        {
          "name": "Plan",
          "source": "packages/farthershore-js/dist/types.d.ts#L127"
        },
        {
          "name": "StartOnboardingInput__af7cf0dea526",
          "source": "packages/farthershore-js/dist/resources/plans.d.ts#L27"
        },
        {
          "name": "SubscribeInput__62c7cb21d77a",
          "source": "packages/farthershore-js/dist/resources/plans.d.ts#L5"
        },
        {
          "name": "SubscribeResult__4b2d9557cede",
          "source": "packages/farthershore-js/dist/resources/plans.d.ts#L44"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.PricingAmount",
      "name": "@farthershore/farthershore-js/react.PricingAmount",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L190",
      "description": "A catalog rate in currency-per-unit. Carries the EXACT reduced rational\nalongside its decimal projection because rates like 1/3 have no finite\ndecimal form — render `decimal`, compare `num`/`den`.",
      "signature": "export interface PricingAmount {\n    num: string;\n    den: string;\n    /** `num / den` long-divided; exact where the expansion terminates. */\n    decimal: string;\n    /** True when `decimal` was truncated because the rational does not terminate. */\n    rounded: boolean;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.PricingRule",
      "name": "@farthershore/farthershore-js/react.PricingRule",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L206",
      "description": "One PUBLIC catalog rule, projected for display. `backendQuoted` rules are\nnever projected — a bound the backend quotes against is not a price.",
      "signature": "export type PricingRule = {\n    /** Stable catalog-entry key — the builder's semantic rule id. */\n    key: string;\n    /** Measure this rule prices (`pages`, `tokens`). There is no per-measure\n     *  display name anywhere in the commerce manifest, so the unit label a card\n     *  shows is derived from this key. */\n    measurementKey: string;\n    /** Catalog-item namespace, when the rule is provider/model scoped. */\n    item: {\n        provider: string;\n        model: string;\n        modality?: string;\n    } | null;\n    /** Dimension conditions that select this rule (`mode = ocr`). */\n    where: Array<{\n        dimensionKey: string;\n        value: string;\n    }>;\n} & ({\n    kind: \"perUnit\";\n    amount: PricingAmount;\n} | {\n    kind: \"graduated\" | \"volume\";\n    tiers: PricingTier[];\n});",
      "typeReferences": [
        {
          "name": "PricingAmount",
          "source": "packages/farthershore-js/dist/types.d.ts#L190"
        },
        {
          "name": "PricingTier",
          "source": "packages/farthershore-js/dist/types.d.ts#L200"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.PricingTier",
      "name": "@farthershore/farthershore-js/react.PricingTier",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L200",
      "description": "One bracket of a tiered catalog rule. `upTo` is the inclusive cumulative\nupper bound as a decimal string, `null` on the open-ended final tier.",
      "signature": "export interface PricingTier {\n    upTo: string | null;\n    amount: PricingAmount;\n}",
      "typeReferences": [
        {
          "name": "PricingAmount",
          "source": "packages/farthershore-js/dist/types.d.ts#L190"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.PromoCodeKind",
      "name": "@farthershore/farthershore-js/react.PromoCodeKind",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L812",
      "description": "Promo-code flavour on an applied subscriber promo. Mirrors the wire\n`PromoCodeKind` (`percent_off` | `amount_off` | `free_months`); kept as an\nopen union so a producer-side addition doesn't break the typed read.",
      "signature": "export type PromoCodeKind = \"percent_off\" | \"amount_off\" | \"free_months\" | (string & {});",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.RbacCatalogEntry",
      "name": "@farthershore/farthershore-js/react.RbacCatalogEntry",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1053",
      "description": "One derived-catalog entry (`GET /me/rbac/catalog`): the permissions a\nproduct's routes make grantable, grouped by route subject. Never authored —\nderived from the product's accepted spec.",
      "signature": "export interface RbacCatalogEntry {\n    subject: string;\n    /** Optional display title for the subject. */\n    title?: string;\n    permissions: string[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.RbacRole",
      "name": "@farthershore/farthershore-js/react.RbacRole",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1035",
      "description": "One configurable role (`/me/rbac/roles`), template-seeded or custom.",
      "signature": "export interface RbacRole {\n    roleKey: string;\n    name: string;\n    /** Permission strings in the `<subject>:read|write` grammar, or `\"*\"`. */\n    permissions: string[];\n    /** \"ACCOUNT\" rows are the membership-tier enforcement source: their\n     *  permissions are editable but their identity is fixed — no rename,\n     *  delete, default assignment, or credential binding. Absent ⇒ \"CUSTOM\". */\n    kind?: \"CUSTOM\" | \"ACCOUNT\";\n    /** ACCOUNT rows only: the full subscriber vocabulary — the editable\n     *  option set (restoring a removed verb needs the catalog, not just the\n     *  row's current grants). */\n    vocabulary?: string[];\n    createdAt?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.RbacRoleSummary",
      "name": "@farthershore/farthershore-js/react.RbacRoleSummary",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1023",
      "description": "One assignable role, as listed on `GET /me/team` (`availableRoles`).",
      "signature": "export interface RbacRoleSummary {\n    roleKey: string;\n    name: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.RbacSettings",
      "name": "@farthershore/farthershore-js/react.RbacSettings",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1028",
      "description": "Org-level Managed-RBAC settings (`GET|PUT /me/rbac/settings`).",
      "signature": "export interface RbacSettings {\n    /** Whether role permissions are enforced for this org's user tokens. */\n    enabled: boolean;\n    /** Role auto-assigned to members with no explicit assignment. */\n    defaultRoleKey?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.readPersistedOrganizationId",
      "name": "@farthershore/farthershore-js/react.readPersistedOrganizationId",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/organization.d.ts#L40",
      "description": "The persisted active-org id, or null when the user chose the default\nsubscription, no selection is stored, or storage is unavailable (SSR).",
      "signature": "export declare function readPersistedOrganizationId(): string | null;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ReadScope",
      "name": "@farthershore/farthershore-js/react.ReadScope",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/scope.d.ts#L4",
      "description": "The composed read scope: the client, its resolved businessId, and the\nreactive active-org id.",
      "signature": "export interface ReadScope {\n    /** The client from context (see {@link useFartherShore}). */\n    fs: FartherShoreClient__e4fe174a542f;\n    /** The client's resolved business id (`fs.context.businessId`), or null\n     *  before `bootstrap()`/`resolve()` has discovered it. */\n    businessId: string | null;\n    /** The reactive active-org id (see {@link useReactiveOrganizationId}). Null\n     *  outside an `<OrganizationProvider>` or when no org is selected. */\n    organizationId: string | null;\n}",
      "typeReferences": [
        {
          "name": "FartherShoreClient__e4fe174a542f",
          "source": "packages/farthershore-js/dist/client.d.ts#L36"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.RequestPrecheck",
      "name": "@farthershore/farthershore-js/react.RequestPrecheck",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-limits.d.ts#L33",
      "description": "Public export RequestPrecheck; see its declaration and owning guide.",
      "signature": "export interface RequestPrecheck {\n    /** True when the live rate-limit budget says the next gateway call would be\n     *  throttled (remaining is known and 0) — disable the action / queue it. */\n    blocked: boolean;\n    /** Requests left in the current window, or null when unknown. */\n    remaining: number | null;\n    /** When the window resets, or null when unknown. */\n    resetAt: Date | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.resolveSelectedOrganizationId",
      "name": "@farthershore/farthershore-js/react.resolveSelectedOrganizationId",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/organization.d.ts#L29",
      "description": "Resolve the active organization id from the available subscription contexts,\nwith a documented precedence (W9.1c). This is the SINGLE resolution path —\nused at client boot AND by `<OrgSwitcher>` — so \"which org am I in?\" has one\nanswer everywhere.\n\nPrecedence (first match wins):\n  1. `requested`        — an explicit caller/persisted choice. `null` means\n                          the user's default subscription (no organization\n                          header) and is preserved as such. A string wins\n                          only if it still names a real context; a stale\n                          persisted id falls through to the defaults.\n  2. entitled context — prefer active compiled customer access. If the server's\n                        selection is entitled it wins; otherwise use the\n                        first entitled workspace. This prevents a signed-\n                          in customer from landing in an empty personal org\n                        while their entitled team workspace is available.\n  3. server-default     — `selectedOrganizationId` then `defaultOrganizationId`\n                          reported on the contexts payload, IF it names a\n                          real context.\n  4. `isDefault` flag   — the first context flagged `isDefault`.\n  5. first              — the first context in the list.\n\nReturns `null` when there are no contexts at all (signed out / no\nsubscriptions), or when the caller explicitly requests the user's default\nsubscription (no `x-fs-organization-id` header).",
      "signature": "export declare function resolveSelectedOrganizationId(contexts: SubscriptionContextsResult | null | undefined, requested?: string | null): string | null;",
      "typeReferences": [
        {
          "name": "SubscriptionContextsResult",
          "source": "packages/farthershore-js/dist/types.d.ts#L968"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.resolveUpgrade",
      "name": "@farthershore/farthershore-js/react.resolveUpgrade",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-upgrade.d.ts#L27",
      "description": "Pick the cheapest upgrade for a plan-limit block ({@link LimitExceededError}).\n\nFor a LIMIT, with a known dimension, the cheapest more-expensive plan that\nACTUALLY RAISES that dimension's cap — never a plan whose cap equals or\nundercuts the current one (that would be a false \"raise to N\" promise).\nReturns null when no costlier plan raises the dimension, so the UI can render\na neutral \"contact support\" message instead. The next-tier fallback (with\nraisesTo:null) is reserved for the compiled-ordinal case where the dimension\ncan't be named.\n\nThe invariant holds: only ever recommend a HIGHER plan — never a\nsame-price/cheaper sibling.",
      "signature": "export declare function resolveUpgrade(error: UpgradeResolvable, currentPlan: Plan | null, plans: Plan[]): UpgradeTarget | null;",
      "typeReferences": [
        {
          "name": "Plan",
          "source": "packages/farthershore-js/dist/types.d.ts#L127"
        },
        {
          "name": "UpgradeResolvable",
          "source": "packages/farthershore-js/dist/react/use-upgrade.d.ts#L12"
        },
        {
          "name": "UpgradeTarget",
          "source": "packages/farthershore-js/dist/react/use-upgrade.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ResourcesListResult",
      "name": "@farthershore/farthershore-js/react.ResourcesListResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L301",
      "description": "Public export ResourcesListResult; see its declaration and owning guide.",
      "signature": "export interface ResourcesListResult<T = unknown> extends AsyncResult<ResourceRecord__87f0c814eb51<T>[]> {\n    /** Create a record — throws `LimitExceededError` at the plan cap. */\n    create(payload: T): Promise<ResourceRecord__87f0c814eb51<T>>;\n    /** Replace a record's payload. */\n    update(id: string, payload: T): Promise<ResourceRecord__87f0c814eb51<T>>;\n    /** Delete a record (frees one unit of the quota). */\n    remove(id: string): Promise<void>;\n}",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "ResourceRecord__87f0c814eb51",
          "source": "packages/farthershore-js/dist/resources/resources.d.ts#L10"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.RestoreSubscriptionResult",
      "name": "@farthershore/farthershore-js/react.RestoreSubscriptionResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1134",
      "description": "`POST /me/restore` — the platform performs the un-cancel: a paid sub's\nscheduled `cancel_at_period_end` is lifted on the provider, a free\nCANCELLED sub is flipped back to ACTIVE inline. Like cancel, there is no\nhosted-page hand-off — the caller gets the subscription back, and\n`cancelAtPeriodEnd` on it is what the platform read AFTER the un-cancel.\nA `false` here is the proof the notice should be gone.",
      "signature": "export interface RestoreSubscriptionResult {\n    subscription?: unknown;\n    /** The platform's post-restore reading. `false` is the success signal; the\n     *  field is `null` only when Core's response carried no subscription state\n     *  to read it from — never guessed. */\n    cancelAtPeriodEnd: boolean | null;\n    raw: unknown;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ServiceAccount",
      "name": "@farthershore/farthershore-js/react.ServiceAccount",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L425",
      "description": "Repeatable metadata for a managed, organization-owned service account.",
      "signature": "export interface ServiceAccount {\n    id: string;\n    name: string;\n    state: ServiceAccountProvisioningState;\n    requestedPermissions: string[];\n    grantedPermissions: string[];\n    createdBy: string | null;\n    approvedBy: string | null;\n    createdAt: string;\n    activatedAt: string | null;\n    revokedAt: string | null;\n    usageLimits?: ServiceAccountUsageLimitRequest[];\n    credentialApprovals: ServiceAccountApprovalSummary[];\n}",
      "typeReferences": [
        {
          "name": "ServiceAccountApprovalSummary",
          "source": "packages/farthershore-js/dist/types.d.ts#L383"
        },
        {
          "name": "ServiceAccountProvisioningState",
          "source": "packages/farthershore-js/dist/types.d.ts#L380"
        },
        {
          "name": "ServiceAccountUsageLimitRequest",
          "source": "packages/farthershore-js/dist/types.d.ts#L399"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ServiceAccountApprovalOperation",
      "name": "@farthershore/farthershore-js/react.ServiceAccountApprovalOperation",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L382",
      "description": "Whether an approval creates a new account or replaces an active grant snapshot.",
      "signature": "export type ServiceAccountApprovalOperation = \"CREATE\" | \"UPDATE\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ServiceAccountApprovalResponse",
      "name": "@farthershore/farthershore-js/react.ServiceAccountApprovalResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L508",
      "description": "Public export ServiceAccountApprovalResponse; see its declaration and owning guide.",
      "signature": "export type ServiceAccountApprovalResponse = ApprovedServiceAccountCreateResponse | ApprovedServiceAccountUpdateResponse;",
      "typeReferences": [
        {
          "name": "ApprovedServiceAccountCreateResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L493"
        },
        {
          "name": "ApprovedServiceAccountUpdateResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L502"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ServiceAccountApprovalSummary",
      "name": "@farthershore/farthershore-js/react.ServiceAccountApprovalSummary",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L383",
      "description": "Public export ServiceAccountApprovalSummary; see its declaration and owning guide.",
      "signature": "export interface ServiceAccountApprovalSummary {\n    id: string;\n    operation: ServiceAccountApprovalOperation;\n    requestedBy: string;\n    requestedPermissions: string[];\n    excessPermissions: string[];\n    createdAt: string;\n}",
      "typeReferences": [
        {
          "name": "ServiceAccountApprovalOperation",
          "source": "packages/farthershore-js/dist/types.d.ts#L382"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ServiceAccountCreateResponse",
      "name": "@farthershore/farthershore-js/react.ServiceAccountCreateResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L475",
      "description": "Public export ServiceAccountCreateResponse; see its declaration and owning guide.",
      "signature": "export type ServiceAccountCreateResponse = ActiveServiceAccountCreateResponse | PendingServiceAccountCreateResponse;",
      "typeReferences": [
        {
          "name": "ActiveServiceAccountCreateResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L465"
        },
        {
          "name": "PendingServiceAccountCreateResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L455"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ServiceAccountDenyResponse",
      "name": "@farthershore/farthershore-js/react.ServiceAccountDenyResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L518",
      "description": "Public export ServiceAccountDenyResponse; see its declaration and owning guide.",
      "signature": "export interface ServiceAccountDenyResponse {\n    status: \"DENIED\";\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ServiceAccountProvisioningData",
      "name": "@farthershore/farthershore-js/react.ServiceAccountProvisioningData",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L30",
      "description": "Public export ServiceAccountProvisioningData; see its declaration and owning guide.",
      "signature": "export interface ServiceAccountProvisioningData {\n    accounts: ServiceAccount[];\n    approvals: PendingServiceAccountApproval[];\n}",
      "typeReferences": [
        {
          "name": "PendingServiceAccountApproval",
          "source": "packages/farthershore-js/dist/types.d.ts#L521"
        },
        {
          "name": "ServiceAccount",
          "source": "packages/farthershore-js/dist/types.d.ts#L425"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ServiceAccountProvisioningState",
      "name": "@farthershore/farthershore-js/react.ServiceAccountProvisioningState",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L380",
      "description": "Durable provisioning state for an organization-owned service account.",
      "signature": "export type ServiceAccountProvisioningState = \"PENDING\" | \"ACTIVE\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ServiceAccountRotationResponse",
      "name": "@farthershore/farthershore-js/react.ServiceAccountRotationResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L509",
      "description": "Public export ServiceAccountRotationResponse; see its declaration and owning guide.",
      "signature": "export interface ServiceAccountRotationResponse {\n    status: \"ACTIVE\";\n    serviceAccountId: string;\n    revokedKeyId: string;\n    apiKeyId: string;\n    /** One-time replacement secret. */\n    plaintext: string;\n    grantedPermissions: string[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ServiceAccountsResult",
      "name": "@farthershore/farthershore-js/react.ServiceAccountsResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L39",
      "description": "Managed service-account lifecycle. Reads accounts and the caller's eligible\napprovals together so every mutation can refresh both views atomically from\nthe component's perspective.",
      "signature": "export interface ServiceAccountsResult extends AsyncResult<ServiceAccountProvisioningData> {\n    create(input: CreateServiceAccountInput): Promise<ServiceAccountCreateResponse>;\n    update(serviceAccountId: string, input: UpdateServiceAccountInput): Promise<ServiceAccountUpdateResponse>;\n    rotate(serviceAccountId: string): Promise<ServiceAccountRotationResponse>;\n    revoke(serviceAccountId: string): Promise<void>;\n    approve(approvalId: string, input?: ApproveServiceAccountInput): Promise<ServiceAccountApprovalResponse>;\n    deny(approvalId: string): Promise<ServiceAccountDenyResponse>;\n}",
      "typeReferences": [
        {
          "name": "ApproveServiceAccountInput",
          "source": "packages/farthershore-js/dist/types.d.ts#L451"
        },
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "CreateServiceAccountInput",
          "source": "packages/farthershore-js/dist/types.d.ts#L441"
        },
        {
          "name": "ServiceAccountApprovalResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L508"
        },
        {
          "name": "ServiceAccountCreateResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L475"
        },
        {
          "name": "ServiceAccountDenyResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L518"
        },
        {
          "name": "ServiceAccountProvisioningData",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L30"
        },
        {
          "name": "ServiceAccountRotationResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L509"
        },
        {
          "name": "ServiceAccountUpdateResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L492"
        },
        {
          "name": "UpdateServiceAccountInput",
          "source": "packages/farthershore-js/dist/types.d.ts#L447"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ServiceAccountUpdateResponse",
      "name": "@farthershore/farthershore-js/react.ServiceAccountUpdateResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L492",
      "description": "Public export ServiceAccountUpdateResponse; see its declaration and owning guide.",
      "signature": "export type ServiceAccountUpdateResponse = ActiveServiceAccountUpdateResponse | PendingServiceAccountUpdateResponse;",
      "typeReferences": [
        {
          "name": "ActiveServiceAccountUpdateResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L486"
        },
        {
          "name": "PendingServiceAccountUpdateResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L476"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ServiceAccountUsageLimitMode",
      "name": "@farthershore/farthershore-js/react.ServiceAccountUsageLimitMode",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L391",
      "description": "Public export ServiceAccountUsageLimitMode; see its declaration and owning guide.",
      "signature": "export type ServiceAccountUsageLimitMode = \"BLOCK\" | \"NOTIFY\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.ServiceAccountUsageLimitRequest",
      "name": "@farthershore/farthershore-js/react.ServiceAccountUsageLimitRequest",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L399",
      "description": "Discriminated to mirror `portalServiceAccountUsageLimitRequestSchema` exactly\n(contracts): a NOTIFY limit REQUIRES `notifyAtPct`; a BLOCK limit forbids it;\nexactly one of `limitUnits`/`limitCents` is set. This keeps the public type as\nstrict as its Zod validator — invalid mode/threshold combos are compile errors,\nnot just runtime 400s. Parity is pinned by `service-account-contract-drift.test.ts`.",
      "signature": "export type ServiceAccountUsageLimitRequest = {\n    quantity: string;\n    limitUnits: number;\n    limitCents?: never;\n    mode: \"BLOCK\";\n    notifyAtPct?: never;\n} | {\n    quantity: string;\n    limitUnits: number;\n    limitCents?: never;\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n} | {\n    quantity: string;\n    limitUnits?: never;\n    limitCents: number;\n    mode: \"BLOCK\";\n    notifyAtPct?: never;\n} | {\n    quantity: string;\n    limitUnits?: never;\n    limitCents: number;\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.Session",
      "name": "@farthershore/farthershore-js/react.Session",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L326",
      "description": "Public export Session; see its declaration and owning guide.",
      "signature": "export interface Session {\n    authenticated: boolean;\n    subscriber: Subscriber | null;\n    /** Verified browser-session identity. Present only for a server-owned test\n     * persona cookie; Clerk sessions expose their user through the Clerk bridge. */\n    authSession: PersonaAuthSession | null;\n}",
      "typeReferences": [
        {
          "name": "PersonaAuthSession",
          "source": "packages/farthershore-js/dist/types.d.ts#L334"
        },
        {
          "name": "Subscriber",
          "source": "packages/farthershore-js/dist/types.d.ts#L315"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.SessionResult",
      "name": "@farthershore/farthershore-js/react.SessionResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L11",
      "description": "Public export SessionResult; see its declaration and owning guide.",
      "signature": "export interface SessionResult extends AsyncResult<Session> {\n    signOut(): Promise<void>;\n}",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "Session",
          "source": "packages/farthershore-js/dist/types.d.ts#L326"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.SpendCapResultHook",
      "name": "@farthershore/farthershore-js/react.SpendCapResultHook",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L151",
      "description": "The subscriber's current monthly spend cap (cents), or null when none is set\n/ signed out (P-SPENDCAP-READ). Reads the cap surfaced on the `/me` context.\n`setSpendCap` writes it and the cap re-reads. CAVEAT: STORED-not-ENFORCED\ntoday — UI copy must not promise hard spend enforcement.",
      "signature": "export interface SpendCapResultHook extends AsyncResult<number | null> {\n    setSpendCap(input: {\n        maxMonthlySpendCents: number | null;\n    }): Promise<SpendCapResult__395300e78371>;\n}",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "SpendCapResult__395300e78371",
          "source": "packages/farthershore-js/dist/resources/billing.d.ts#L5"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.Subscriber",
      "name": "@farthershore/farthershore-js/react.Subscriber",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L315",
      "description": "Public export Subscriber; see its declaration and owning guide.",
      "signature": "export interface Subscriber {\n    /** Lifecycle status (e.g. ONBOARDING | ACTIVE | SUSPENDED). */\n    status: string | null;\n    /** Denormalized plan key for display. */\n    planKey: string | null;\n    /** Immutable CompiledPlan id currently active for this subscriber. */\n    compiledPlanId: string | null;\n    /** True only after the selected environment's gateway has the exact active\n     * subscription projection. */\n    gatewayReady?: boolean;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.SubscriberActivePromo",
      "name": "@farthershore/farthershore-js/react.SubscriberActivePromo",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L815",
      "description": "An active promotional code applied to a subscriber. Mirrors core's\n`PortalSubscriberContext.subscriber.activePromo`.",
      "signature": "export interface SubscriberActivePromo {\n    id: string;\n    code: string;\n    kind: PromoCodeKind;\n    /** Discount magnitude (percent or cents, per `kind`), or null/absent. */\n    amount?: number | null;\n    /** How many billing periods the promo applies for. */\n    durationMonths: number;\n    /** ISO timestamp the promo stops applying, or null. */\n    activeUntil?: string | null;\n    /** ISO timestamp the promo was applied, or null. */\n    appliedAt?: string | null;\n}",
      "typeReferences": [
        {
          "name": "PromoCodeKind",
          "source": "packages/farthershore-js/dist/types.d.ts#L812"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.SubscriberContext",
      "name": "@farthershore/farthershore-js/react.SubscriberContext",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L897",
      "description": "Full `GET /me` context: the subscriber (null = signed-in user has no\nsubscriber record for the selected org → onboarding) plus the\neligibility-scoped plan list (NOT identical to the public catalog).",
      "signature": "export interface SubscriberContext {\n    subscriber: SubscriberDetail | null;\n    availablePlans: Plan[];\n    /**\n     * E1 — the subscriber's PINNED plan, resolved server-side from the\n     * subscription's pinned CompiledPlan version (NOT the catalog head — a\n     * pinned older version may not appear in `availablePlans` at all).\n     *\n     * Tri-state for old-Core back-compat:\n     *   - `Plan`      — resolved pinned plan.\n     *   - `null`      — Core resolved it: there IS no pinned plan (no\n     *                   subscription). Do NOT fall back to guessing.\n     *   - `undefined` — the wire field was ABSENT (pre-E1 Core). Only here may\n     *                   a consumer fall back to matching `availablePlans` by\n     *                   `subscriber.compiledPlanId` (deprecated path).\n     */\n    currentPlan?: Plan | null;\n    /** Managed-RBAC product-role keys assigned to the CALLER within the org\n     *  (FAR-698/FAR-700). Server-resolved on `GET /me` — the same row-backed\n     *  source the gateway-token mint uses; the SDK never decodes tokens.\n     *  Empty for pre-RBAC responses. */\n    roles: string[];\n    /** The caller's resolved permission strings (`<subject>:read|write`\n     *  grammar). `[\"*\"]` means Managed RBAC is off or the caller is an OWNER;\n     *  personal-org members receive the same resolved permission sets as team-org\n     *  members. Client-side gating over these is UX ONLY — the gateway's\n     *  `permission` constraint is the security boundary. */\n    permissions: string[];\n    /** Reviewed product permissions explicitly denied by the subscriber's\n     * effective roles. Present on current Core responses. */\n    deniedPermissions?: string[];\n    /** Current product permissions that were not reviewed by the effective\n     * roles and therefore inherit the safe product-evolution default of allow.\n     * Platform/account permissions are never included. */\n    unassignedProductPermissions?: string[];\n    /** Per-subscriber ComponentAccessPolicy override rows (Permissions Kernel,\n     *  Wave 5) — `{componentKey, requiredPermission, gateMode}` as core emits\n     *  them. Consumed by the SDK's component-policy resolver; `[]` when the\n     *  subscriber has no overrides (or on older responses). */\n    componentAccessPolicies: ComponentAccessPolicyRow[];\n    /** Current legal acceptance state for this subscriber/org, when served by\n     *  Core. Absent on older responses. */\n    legalConsent?: LegalConsentStatus;\n    raw: unknown;\n}",
      "typeReferences": [
        {
          "name": "ComponentAccessPolicyRow",
          "source": "packages/farthershore-js/dist/types.d.ts#L945"
        },
        {
          "name": "LegalConsentStatus",
          "source": "packages/farthershore-js/dist/types.d.ts#L76"
        },
        {
          "name": "Plan",
          "source": "packages/farthershore-js/dist/types.d.ts#L127"
        },
        {
          "name": "SubscriberDetail",
          "source": "packages/farthershore-js/dist/types.d.ts#L859"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.SubscriberDetail",
      "name": "@farthershore/farthershore-js/react.SubscriberDetail",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L859",
      "description": "Rich subscriber detail from `GET /me` — superset of {@link Subscriber} with\nthe lifecycle/billing fields the account pages render. Extra Core fields ride\nalong untyped.",
      "signature": "export interface SubscriberDetail {\n    id?: string;\n    status: string | null;\n    planKey: string | null;\n    compiledPlanId: string | null;\n    /** True only after the selected environment's gateway has the exact active\n     * subscription projection. */\n    gatewayReady?: boolean;\n    /** Resource limits on the subscriber's pinned plan, not the latest catalog. */\n    resourceLimits?: Record<string, number>;\n    /** Per-dimension meter map (`dimension → unit`) on the subscriber's PINNED\n     *  compiled plan — the billing shape the subscriber is actually on. */\n    dimensions?: Record<string, number>;\n    /** The ordered list of meter dimensions the usage tab should display,\n     *  authored by the pinned plan. `rules[].d` indexes into this array. */\n    displayDims?: string[];\n    /** Pinned-plan rate-limit / quota allowances (the source of truth for\n     *  included quotas — see {@link SubscriberPinnedRule}). */\n    rules?: SubscriberPinnedRule[];\n    /** Stripe-driven lifecycle (e.g. ACTIVE | TRIALING | PAST_DUE | CANCELLED). */\n    subscriptionLifecycle?: string | null;\n    /** Stripe-synced trial end (ISO) — drives the trial banner countdown. */\n    trialEndsAt?: string | null;\n    /** True when a paid cancel is scheduled for period end (\"Renew\" un-schedules). */\n    cancelAtPeriodEnd?: boolean | null;\n    /** A scheduled plan transition (downgrades apply at period end). */\n    scheduledTransition?: SubscriberScheduledTransition | null;\n    /** An active promotional code applied to the subscription, when present. */\n    activePromo?: SubscriberActivePromo | null;\n    /** P-SPENDCAP-READ (W6.4) — the subscriber-set monthly spend cap, in cents,\n     *  or null when none is set. STORED-not-ENFORCED today (held in\n     *  `Subscription.customMetadata`, pending the rate-limit migration). */\n    maxMonthlySpendCents?: number | null;\n    [k: string]: unknown;\n}",
      "typeReferences": [
        {
          "name": "SubscriberActivePromo",
          "source": "packages/farthershore-js/dist/types.d.ts#L815"
        },
        {
          "name": "SubscriberPinnedRule",
          "source": "packages/farthershore-js/dist/types.d.ts#L848"
        },
        {
          "name": "SubscriberScheduledTransition",
          "source": "packages/farthershore-js/dist/types.d.ts#L832"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.SubscriberPinnedRule",
      "name": "@farthershore/farthershore-js/react.SubscriberPinnedRule",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L848",
      "description": "One pinned-plan display rule from `GET /me` (`subscriber.rules`). A\nrate-limit / quota allowance in the compiled-entitlement compact form:\n`d` = dimension index, `w` = window seconds, `c` = capacity. The usage card\nreads the `month`-window (`w === 2592000`) rules as the included quotas the\nsubscriber is ACTUALLY billed under — not the latest catalog meter list,\nwhich may have drifted from the subscriber's pinned plan.",
      "signature": "export interface SubscriberPinnedRule {\n    /** Dimension index into `displayDims`. */\n    d: number;\n    /** Window length in seconds (a 30-day month is 2592000). */\n    w: number;\n    /** Capacity (the included allowance for the window). */\n    c: number;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.SubscriberScheduledTransition",
      "name": "@farthershore/farthershore-js/react.SubscriberScheduledTransition",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L832",
      "description": "A scheduled plan transition on a subscriber. Mirrors core's\n`PortalSubscriberContext.subscriber.scheduledTransition` — richer than\n{@link SubscriptionScheduledTransition} (carries the resolved plan name +\ntype).",
      "signature": "export interface SubscriberScheduledTransition {\n    compiledPlanId: string | null;\n    planName: string | null;\n    planType: string | null;\n    /** ISO timestamp the transition takes effect. */\n    effectiveAt: string;\n    /** Movement direction (`CANCEL` | `UPGRADE` | `DOWNGRADE` | `SIDEGRADE`),\n     *  open to producer-side additions. */\n    kind: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.Subscription",
      "name": "@farthershore/farthershore-js/react.Subscription",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L739",
      "description": "The consumer's current subscription for this product. Mirrors core's\n`PortalSubscriptionDto` (lifecycle + billing state + scheduled transition)\nmapped to the SDK's camelCase domain convention. The widened fields degrade\nto safe defaults when the wire DTO is lean (`null` / `false`).",
      "signature": "export interface Subscription {\n    id: string;\n    /** Display lifecycle status (e.g. ACTIVE | TRIALING | PAST_DUE). Falls back\n     *  across `status` / `lifecycle` on the wire. */\n    status: string;\n    planKey: string | null;\n    planName: string | null;\n    /** Owning product id, or null when absent on a lean DTO. */\n    businessId: string | null;\n    /** Immutable `CompiledPlan.id` currently active, or null. */\n    compiledPlanId: string | null;\n    /** Richer lifecycle string straight off the row (may equal `status`). */\n    lifecycle: string | null;\n    /** Payment health (`ok` | `past_due` | `incomplete` | …), or null when the\n     *  DTO doesn't carry it (free subs). */\n    paymentHealth: string | null;\n    /** ISO start of the current billing period, or null. */\n    currentPeriodStart: string | null;\n    /** ISO end of the current billing period, or null. */\n    currentPeriodEnd: string | null;\n    /** True when a paid cancel is scheduled for period end. */\n    cancelAtPeriodEnd: boolean;\n    /** ISO trial end — drives the trial countdown. */\n    trialEndsAt: string | null;\n    /** ISO timestamp the subscription was canceled, or null. */\n    canceledAt: string | null;\n    /** A scheduled plan transition, or null when none is pending. */\n    scheduledTransition: SubscriptionScheduledTransition | null;\n    /** Whether the subscriber has a Stripe customer (can open the billing\n     *  portal). Free subs that never touched Stripe are `false`. */\n    canManageInStripe: boolean;\n    /**\n     * Whether there is actually something here to cancel — SERVER-DECIDED.\n     *\n     * A subscription on a `free`-kind plan has no paid, Stripe-managed\n     * subscription behind it, so \"cancel\" has no meaning. The client cannot work\n     * this out on its own (the portal DTO always carries a real subscription id,\n     * so \"nothing to cancel\" looks identical to a lean wire body), which is why\n     * core answers it.\n     *\n     * `null` means the server did not say — treated as CANCELLABLE so an older\n     * core never strands a paying subscriber with no way to cancel.\n     */\n    cancellable: boolean | null;\n    /** The full platform subscription DTO (large + evolving) for advanced reads. */\n    raw: unknown;\n}",
      "typeReferences": [
        {
          "name": "SubscriptionScheduledTransition",
          "source": "packages/farthershore-js/dist/types.d.ts#L726"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.SubscriptionContext",
      "name": "@farthershore/farthershore-js/react.SubscriptionContext",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L955",
      "description": "One org through which the user holds a subscription to this product.",
      "signature": "export interface SubscriptionContext {\n    organizationId: string;\n    /** Org display name — matches core's wire field (`name`, NOT\n     *  `organizationName`; see apps/core/src/routes/portal-customer/shared.ts). */\n    name?: string | null;\n    isDefault?: boolean;\n    /** Existing subscriber row for this business/org pair. A non-null value\n     * means this workspace already owns customer state for the product. */\n    subscriberId?: string | null;\n    /** Authoritative active-plan entitlement for the selected environment. */\n    hasEntitlement?: boolean;\n    [k: string]: unknown;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.SubscriptionContextsResult",
      "name": "@farthershore/farthershore-js/react.SubscriptionContextsResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L968",
      "description": "Public export SubscriptionContextsResult; see its declaration and owning guide.",
      "signature": "export interface SubscriptionContextsResult {\n    contexts: SubscriptionContext[];\n    defaultOrganizationId: string;\n    selectedOrganizationId: string | null;\n}",
      "typeReferences": [
        {
          "name": "SubscriptionContext",
          "source": "packages/farthershore-js/dist/types.d.ts#L955"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.SubscriptionScheduledTransition",
      "name": "@farthershore/farthershore-js/react.SubscriptionScheduledTransition",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L726",
      "description": "A scheduled plan transition on a subscription (downgrades apply at period\nend). Mirrors core's `PortalSubscriptionDto.scheduledTransition`.",
      "signature": "export interface SubscriptionScheduledTransition {\n    /** Immutable `CompiledPlan.id` the subscription moves to, or null. */\n    compiledPlanId: string | null;\n    /** ISO timestamp the transition takes effect, or null. */\n    effectiveAt: string | null;\n    /** Movement direction (`CANCEL` | `UPGRADE` | `DOWNGRADE` | `SIDEGRADE`),\n     *  open to producer-side additions. */\n    kind: string | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.TeamInvitation",
      "name": "@farthershore/farthershore-js/react.TeamInvitation",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L999",
      "description": "A pending subscriber-team invitation (`GET|POST /me/team/invites`).",
      "signature": "export interface TeamInvitation {\n    id: string;\n    email: string;\n    role: TeamRole;\n    /** Managed-RBAC product roles granted on accept. */\n    businessRoleKeys: string[];\n    status: string;\n    invitedByExternalId?: string | null;\n    expiresAt: string;\n    createdAt: string;\n}",
      "typeReferences": [
        {
          "name": "TeamRole",
          "source": "packages/farthershore-js/dist/types.d.ts#L973"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.TeamInvitationAccepted",
      "name": "@farthershore/farthershore-js/react.TeamInvitationAccepted",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1017",
      "description": "Result of accepting an invitation.",
      "signature": "export interface TeamInvitationAccepted {\n    membershipId: string;\n    role: TeamRole;\n    businessRoleKeys: string[];\n}",
      "typeReferences": [
        {
          "name": "TeamRole",
          "source": "packages/farthershore-js/dist/types.d.ts#L973"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.TeamInvitationCreated",
      "name": "@farthershore/farthershore-js/react.TeamInvitationCreated",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1012",
      "description": "The one-time create response: the invitation plus the raw token (delivered\nby email; surfaced here once for the off-app / no-provider path).",
      "signature": "export interface TeamInvitationCreated extends TeamInvitation {\n    token: string;\n    emailSent: boolean;\n}",
      "typeReferences": [
        {
          "name": "TeamInvitation",
          "source": "packages/farthershore-js/dist/types.d.ts#L999"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.TeamListResult",
      "name": "@farthershore/farthershore-js/react.TeamListResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L990",
      "description": "Team read result — `ok:false` (with `error`) drives the read-only banner.",
      "signature": "export interface TeamListResult {\n    ok: boolean;\n    members: TeamMember[];\n    /** The org's assignable Managed-RBAC role list (FAR-698) — what the\n     *  per-member role multi-select offers. Empty when RBAC is unused. */\n    availableRoles?: RbacRoleSummary[];\n    error?: string;\n}",
      "typeReferences": [
        {
          "name": "RbacRoleSummary",
          "source": "packages/farthershore-js/dist/types.d.ts#L1023"
        },
        {
          "name": "TeamMember",
          "source": "packages/farthershore-js/dist/types.d.ts#L974"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.TeamMember",
      "name": "@farthershore/farthershore-js/react.TeamMember",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L974",
      "description": "Public export TeamMember; see its declaration and owning guide.",
      "signature": "export interface TeamMember {\n    id: string;\n    userExternalId: string;\n    role: TeamRole;\n    /** Managed-RBAC product-role keys assigned to this member (FAR-698).\n     *  Absent on pre-RBAC responses. */\n    businessRoleKeys?: string[];\n    /** Assigned keys whose role row no longer exists (deleted roles leave\n     *  assignments in place — resolution ignores them). Drives the portal's\n     *  stale-role warning. */\n    staleRoleKeys?: string[];\n    createdAt?: string;\n    updatedAt?: string;\n    [k: string]: unknown;\n}",
      "typeReferences": [
        {
          "name": "TeamRole",
          "source": "packages/farthershore-js/dist/types.d.ts#L973"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.TeamResult",
      "name": "@farthershore/farthershore-js/react.TeamResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L212",
      "description": "Public export TeamResult; see its declaration and owning guide.",
      "signature": "export interface TeamResult extends AsyncResult<TeamListResult> {\n    updateRole(membershipId: string, role: TeamRole): Promise<TeamMember>;\n    remove(membershipId: string): Promise<void>;\n    /** Set-replace a member's Managed-RBAC product-role assignment (FAR-700);\n     *  `[]` clears it. Refetches the list on success. UX only — the edge\n     *  `permission` constraint is the security boundary. */\n    assignRoles(membershipId: string, roles: string[]): Promise<TeamMember>;\n}",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "TeamListResult",
          "source": "packages/farthershore-js/dist/types.d.ts#L990"
        },
        {
          "name": "TeamMember",
          "source": "packages/farthershore-js/dist/types.d.ts#L974"
        },
        {
          "name": "TeamRole",
          "source": "packages/farthershore-js/dist/types.d.ts#L973"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.TeamRole",
      "name": "@farthershore/farthershore-js/react.TeamRole",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L973",
      "description": "Public export TeamRole; see its declaration and owning guide.",
      "signature": "export type TeamRole = \"OWNER\" | \"ADMIN\" | \"VIEWER\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.TransparentBillPreview",
      "name": "@farthershore/farthershore-js/react.TransparentBillPreview",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L1257",
      "description": "Public export TransparentBillPreview; see its declaration and owning guide.",
      "signature": "export interface TransparentBillPreview {\n    currency: string;\n    disclosure: \"transparent\";\n    /** The plan's recurring fee, in cents. */\n    recurringFeeCents: number;\n    /** Per-rating-window engine totals. */\n    windows: BillPreviewWindow[];\n    totals: {\n        /** Nanodollars, decimal strings (null = unavailable). */\n        ratedNanos: NanosAmount;\n        fundedNanos: NanosAmount;\n        receivableNanos: NanosAmount;\n    };\n    allowances: BillPreviewAllowance[];\n    /** All-zero counts mean `totals` IS the whole bill. */\n    usageRating: BillPreviewUsageRating;\n}",
      "typeReferences": [
        {
          "name": "BillPreviewAllowance",
          "source": "packages/farthershore-js/dist/types.d.ts#L1198"
        },
        {
          "name": "BillPreviewUsageRating",
          "source": "packages/farthershore-js/dist/types.d.ts#L1251"
        },
        {
          "name": "BillPreviewWindow",
          "source": "packages/farthershore-js/dist/types.d.ts#L1186"
        },
        {
          "name": "NanosAmount",
          "source": "packages/farthershore-js/dist/types.d.ts#L1179"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UpdateServiceAccountInput",
      "name": "@farthershore/farthershore-js/react.UpdateServiceAccountInput",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L447",
      "description": "Public export UpdateServiceAccountInput; see its declaration and owning guide.",
      "signature": "export interface UpdateServiceAccountInput {\n    requestedPermissions?: NonEmptyPermissionList;\n    usageLimit?: ServiceAccountUsageLimitRequest | null;\n}",
      "typeReferences": [
        {
          "name": "NonEmptyPermissionList",
          "source": "packages/farthershore-js/dist/types.d.ts#L440"
        },
        {
          "name": "ServiceAccountUsageLimitRequest",
          "source": "packages/farthershore-js/dist/types.d.ts#L399"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UpdateUsageLimitInput",
      "name": "@farthershore/farthershore-js/react.UpdateUsageLimitInput",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L637",
      "description": "Strict PUT body. Scope, subject, and quantity are immutable; at least one\nvalue or mode/threshold field is required.",
      "signature": "export type UpdateUsageLimitInput = (UsageLimitUpdateValue__e8f19d3e563b & UsageLimitUpdateMode__0a6925ca669e) | (UsageLimitNoUpdateValue__cd3ce2b61e4f & UsageLimitExplicitUpdateMode__577df72501b7) | (UsageLimitNoUpdateValue__cd3ce2b61e4f & {\n    mode?: never;\n    notifyAtPct: number | null;\n});",
      "typeReferences": [
        {
          "name": "UsageLimitExplicitUpdateMode__577df72501b7",
          "source": "packages/farthershore-js/dist/types.d.ts#L628"
        },
        {
          "name": "UsageLimitNoUpdateValue__cd3ce2b61e4f",
          "source": "packages/farthershore-js/dist/types.d.ts#L614"
        },
        {
          "name": "UsageLimitUpdateMode__0a6925ca669e",
          "source": "packages/farthershore-js/dist/types.d.ts#L618"
        },
        {
          "name": "UsageLimitUpdateValue__e8f19d3e563b",
          "source": "packages/farthershore-js/dist/types.d.ts#L607"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UpgradeResolvable",
      "name": "@farthershore/farthershore-js/react.UpgradeResolvable",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-upgrade.d.ts#L12",
      "description": "What `resolveUpgrade` accepts — a plan-limit block (`dimension` +\n`currentCapacity`, optionally its `limitClass`).",
      "signature": "export type UpgradeResolvable = Pick<LimitExceededError__7844c601e6fd, \"dimension\" | \"currentCapacity\" | \"limitClass\"> | Pick<LimitExceededError__7844c601e6fd, \"dimension\" | \"currentCapacity\">;",
      "typeReferences": [
        {
          "name": "LimitExceededError__7844c601e6fd",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L206"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UpgradeTarget",
      "name": "@farthershore/farthershore-js/react.UpgradeTarget",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-upgrade.d.ts#L3",
      "description": "Public export UpgradeTarget; see its declaration and owning guide.",
      "signature": "export interface UpgradeTarget {\n    /** The plan to upgrade to (pass `plan.id` to `billing.changePlan`). */\n    plan: Plan;\n    /** The new cap for the offending dimension, or null when unlimited/unknown.\n     */\n    raisesTo: number | null;\n}",
      "typeReferences": [
        {
          "name": "Plan",
          "source": "packages/farthershore-js/dist/types.d.ts#L127"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.USAGE_LIMIT_SCOPES",
      "name": "@farthershore/farthershore-js/react.USAGE_LIMIT_SCOPES",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L546",
      "description": "Public, contracts-free projection of the Stage 1 portal usage-limit DTOs.\nExact parity is pinned in `test/usage-limits.test.ts`; the private contracts\nworkspace package must never leak into this published SDK's declarations.",
      "signature": "declare const USAGE_LIMIT_SCOPES: readonly [\"ORG\", \"MEMBER\", \"SERVICE_ACCOUNT\"];",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.USAGE_LIMIT_STRATEGIES",
      "name": "@farthershore/farthershore-js/react.USAGE_LIMIT_STRATEGIES",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L553",
      "description": "Public export USAGE_LIMIT_STRATEGIES; see its declaration and owning guide.",
      "signature": "declare const USAGE_LIMIT_STRATEGIES: readonly [\"fixed_window\", \"sliding_window\"];",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.USAGE_TRAFFIC_CLASSES",
      "name": "@farthershore/farthershore-js/react.USAGE_TRAFFIC_CLASSES",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L650",
      "description": "Public export USAGE_TRAFFIC_CLASSES; see its declaration and owning guide.",
      "signature": "declare const USAGE_TRAFFIC_CLASSES: readonly [\"customer_operation\", \"control_plane\", \"admin_internal\", \"background_job\", \"webhook\", \"healthcheck\", \"unclassified\"];",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageBillingBasis",
      "name": "@farthershore/farthershore-js/react.UsageBillingBasis",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L649",
      "description": "Whether usage is billed as a pure request COUNT or weighted USAGE. Drives the\nmeter label (\"Requests\" vs \"Usage\"); computed server-side.",
      "signature": "export type UsageBillingBasis = \"requests\" | \"usage\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageChargeableOutcomes",
      "name": "@farthershore/farthershore-js/react.UsageChargeableOutcomes",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L654",
      "description": "Public export UsageChargeableOutcomes; see its declaration and owning guide.",
      "signature": "export type UsageChargeableOutcomes = \"success_only\" | \"success_and_partial\" | \"attempted\" | \"trusted_actual_usage_only\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageData",
      "name": "@farthershore/farthershore-js/react.UsageData",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L59",
      "description": "Public export UsageData; see its declaration and owning guide.",
      "signature": "export interface UsageData {\n    summary: UsageSummary;\n    events: UsageEvent[];\n    /** Whether the `requests` total reads as an event COUNT (\"requests\") or a\n     *  weighted unit SUM (\"usage\") — drives the Requests-vs-Usage display so a\n     *  per-call meter doesn't mislabel a summed total as a request count. */\n    billingBasis: UsageBillingBasis;\n    /** True when `summary` is an EXACT period total; false when it's a bounded\n     *  sample (the UI flags \"approximate\"). */\n    exact: boolean;\n    /** Event count behind the `summary` total over the period. */\n    sampledEvents: number;\n    /** ISO bounds of the period the `summary` covers, or null. */\n    periodStart: string | null;\n    periodEnd: string | null;\n    /** Aggregated advisory UsagePolicy from the freshest event, or null. */\n    usagePolicy: UsagePolicyAdvisory | null;\n}",
      "typeReferences": [
        {
          "name": "UsageBillingBasis",
          "source": "packages/farthershore-js/dist/types.d.ts#L649"
        },
        {
          "name": "UsageEvent",
          "source": "packages/farthershore-js/dist/types.d.ts#L679"
        },
        {
          "name": "UsagePolicyAdvisory",
          "source": "packages/farthershore-js/dist/types.d.ts#L655"
        },
        {
          "name": "UsageSummary",
          "source": "packages/farthershore-js/dist/types.d.ts#L645"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageEvent",
      "name": "@farthershore/farthershore-js/react.UsageEvent",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L679",
      "description": "Public export UsageEvent; see its declaration and owning guide.",
      "signature": "export interface UsageEvent {\n    id: string;\n    timestamp: string;\n    operation: string;\n    apiKeyPrefix: string | null;\n    statusCode: number | null;\n    status: \"success\" | \"error\";\n    /** Event kind (e.g. \"api\"); shown as the row Type. */\n    type: string | null;\n    latencyMs: number | null;\n    /** Canonical per-event meter values, keyed by product-declared meter. */\n    dimensions: UsageEventDimensions;\n    /** Compatibility aliases for common legacy portal displays. */\n    requests: number | null;\n    tokens: number | null;\n    /** Advisory UsagePolicy state confirmed or relayed by the gateway/core. The\n     *  frontend decides nothing from this; it is only for rendering stale-tolerant\n     *  labels, cooldowns, and prompts. */\n    usagePolicy?: UsagePolicyAdvisory;\n}",
      "typeReferences": [
        {
          "name": "UsageEventDimensions",
          "source": "packages/farthershore-js/dist/types.d.ts#L646"
        },
        {
          "name": "UsagePolicyAdvisory",
          "source": "packages/farthershore-js/dist/types.d.ts#L655"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageEventDimensions",
      "name": "@farthershore/farthershore-js/react.UsageEventDimensions",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L646",
      "description": "Public export UsageEventDimensions; see its declaration and owning guide.",
      "signature": "export type UsageEventDimensions = Record<string, number | null>;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageLimit",
      "name": "@farthershore/farthershore-js/react.UsageLimit",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L580",
      "description": "Public export UsageLimit; see its declaration and owning guide.",
      "signature": "export type UsageLimit = UsageLimitSubject & UsageLimitValue & {\n    id: string;\n    quantity: string;\n    mode: UsageLimitMode;\n    period: \"BILLING_PERIOD\";\n    /** Present only for NOTIFY rows. */\n    notifyAtPct?: number;\n    ceiling: UsageLimitCeiling;\n    /** Present when the edge accounts this limit on a non-default window. */\n    effectiveWindow?: UsageLimitEffectiveWindow;\n    createdBy: string | null;\n    createdAt: string;\n    updatedAt: string;\n};",
      "typeReferences": [
        {
          "name": "UsageLimitCeiling",
          "source": "packages/farthershore-js/dist/types.d.ts#L549"
        },
        {
          "name": "UsageLimitEffectiveWindow",
          "source": "packages/farthershore-js/dist/types.d.ts#L559"
        },
        {
          "name": "UsageLimitMode",
          "source": "packages/farthershore-js/dist/types.d.ts#L548"
        },
        {
          "name": "UsageLimitSubject",
          "source": "packages/farthershore-js/dist/types.d.ts#L570"
        },
        {
          "name": "UsageLimitValue",
          "source": "packages/farthershore-js/dist/types.d.ts#L563"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageLimitCeiling",
      "name": "@farthershore/farthershore-js/react.UsageLimitCeiling",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L549",
      "description": "Public export UsageLimitCeiling; see its declaration and owning guide.",
      "signature": "export interface UsageLimitCeiling {\n    limitUnits?: number;\n    limitCents?: number;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageLimitDeleteResult",
      "name": "@farthershore/farthershore-js/react.UsageLimitDeleteResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L641",
      "description": "Public export UsageLimitDeleteResult; see its declaration and owning guide.",
      "signature": "export interface UsageLimitDeleteResult {\n    id: string;\n    deleted: true;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageLimitEffectiveWindow",
      "name": "@farthershore/farthershore-js/react.UsageLimitEffectiveWindow",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L559",
      "description": "READ-ONLY: how the limit is actually accounted at the edge. Builder-owned\n(inherited from the plan's own rule for the dimension); a `sliding_window`\nmakes the ceiling a rolling horizon of the period's length instead of one\nthat resets at the period boundary. Never writable by the subscriber.",
      "signature": "export interface UsageLimitEffectiveWindow {\n    strategy: UsageLimitStrategy;\n    periodSeconds: number;\n}",
      "typeReferences": [
        {
          "name": "UsageLimitStrategy",
          "source": "packages/farthershore-js/dist/types.d.ts#L554"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageLimitListResponse",
      "name": "@farthershore/farthershore-js/react.UsageLimitListResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L594",
      "description": "Public export UsageLimitListResponse; see its declaration and owning guide.",
      "signature": "export type UsageLimitListResponse = OffsetPage<UsageLimit>;",
      "typeReferences": [
        {
          "name": "OffsetPage",
          "source": "packages/farthershore-js/dist/types.d.ts#L535"
        },
        {
          "name": "UsageLimit",
          "source": "packages/farthershore-js/dist/types.d.ts#L580"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageLimitMode",
      "name": "@farthershore/farthershore-js/react.UsageLimitMode",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L548",
      "description": "Public export UsageLimitMode; see its declaration and owning guide.",
      "signature": "export type UsageLimitMode = \"BLOCK\" | \"NOTIFY\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageLimitProfile",
      "name": "@farthershore/farthershore-js/react.UsageLimitProfile",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L653",
      "description": "Public export UsageLimitProfile; see its declaration and owning guide.",
      "signature": "export type UsageLimitProfile = \"customer_usage\" | \"business_capacity\" | \"control_plane\" | \"admin_internal\" | \"platform_abuse_only\" | \"healthcheck\" | \"none\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageLimitScope",
      "name": "@farthershore/farthershore-js/react.UsageLimitScope",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L547",
      "description": "Public export UsageLimitScope; see its declaration and owning guide.",
      "signature": "export type UsageLimitScope = (typeof USAGE_LIMIT_SCOPES)[number];",
      "typeReferences": [
        {
          "name": "USAGE_LIMIT_SCOPES",
          "source": "packages/farthershore-js/dist/types.d.ts#L546"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageLimitsResult",
      "name": "@farthershore/farthershore-js/react.UsageLimitsResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L53",
      "description": "Subscriber-managed per-actor usage limits. Every successful mutation waits\nfor its authoritative list refetch to commit before its promise resolves.",
      "signature": "export interface UsageLimitsResult extends AsyncResult<UsageLimit[]> {\n    create(input: CreateUsageLimitInput): Promise<UsageLimit>;\n    update(limitId: string, input: UpdateUsageLimitInput): Promise<UsageLimit>;\n    remove(limitId: string): Promise<void>;\n}",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "CreateUsageLimitInput",
          "source": "packages/farthershore-js/dist/types.d.ts#L604"
        },
        {
          "name": "UpdateUsageLimitInput",
          "source": "packages/farthershore-js/dist/types.d.ts#L637"
        },
        {
          "name": "UsageLimit",
          "source": "packages/farthershore-js/dist/types.d.ts#L580"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageLimitStrategy",
      "name": "@farthershore/farthershore-js/react.UsageLimitStrategy",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L554",
      "description": "Public export UsageLimitStrategy; see its declaration and owning guide.",
      "signature": "export type UsageLimitStrategy = (typeof USAGE_LIMIT_STRATEGIES)[number];",
      "typeReferences": [
        {
          "name": "USAGE_LIMIT_STRATEGIES",
          "source": "packages/farthershore-js/dist/types.d.ts#L553"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageLimitSubject",
      "name": "@farthershore/farthershore-js/react.UsageLimitSubject",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L570",
      "description": "Public export UsageLimitSubject; see its declaration and owning guide.",
      "signature": "export type UsageLimitSubject = {\n    scope: \"ORG\";\n    subjectId?: never;\n} | {\n    scope: \"MEMBER\";\n    subjectId: string;\n} | {\n    scope: \"SERVICE_ACCOUNT\";\n    subjectId: string;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageLimitValue",
      "name": "@farthershore/farthershore-js/react.UsageLimitValue",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L563",
      "description": "Public export UsageLimitValue; see its declaration and owning guide.",
      "signature": "export type UsageLimitValue = {\n    limitUnits: number;\n    limitCents?: never;\n} | {\n    limitCents: number;\n    limitUnits?: never;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsagePolicyAdvisory",
      "name": "@farthershore/farthershore-js/react.UsagePolicyAdvisory",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L655",
      "description": "Public export UsagePolicyAdvisory; see its declaration and owning guide.",
      "signature": "export interface UsagePolicyAdvisory {\n    /** Gateway-resolved policy id, when the usage payload includes one. */\n    usagePolicyId: string | null;\n    /** Known traffic class; null when a newer gateway sends a class this SDK\n     *  does not know yet. See `unknownTrafficClass` for the preserved raw value. */\n    trafficClass: UsageTrafficClass | null;\n    unknownTrafficClass?: string;\n    policySource: UsagePolicySource | null;\n    limitProfile: UsageLimitProfile | null;\n    customerBillable: boolean | null;\n    providerCostTracked: boolean | null;\n    chargeableOutcomes: UsageChargeableOutcomes | null;\n    meterKey: string | null;\n    cooldownResetAt: number | null;\n    retryAfterSeconds: number | null;\n    freeButLimited: boolean;\n    providerCost: boolean;\n    upgradePrompt: boolean;\n    creditPrompt: boolean;\n    genericMessage: string;\n    /** Raw gateway/core policy fields. Preserved for forward-compatible UIs and\n     *  debugging; advisory only and never an enforcement input. */\n    raw: Record<string, unknown>;\n}",
      "typeReferences": [
        {
          "name": "UsageChargeableOutcomes",
          "source": "packages/farthershore-js/dist/types.d.ts#L654"
        },
        {
          "name": "UsageLimitProfile",
          "source": "packages/farthershore-js/dist/types.d.ts#L653"
        },
        {
          "name": "UsagePolicySource",
          "source": "packages/farthershore-js/dist/types.d.ts#L652"
        },
        {
          "name": "UsageTrafficClass",
          "source": "packages/farthershore-js/dist/types.d.ts#L651"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsagePolicyData",
      "name": "@farthershore/farthershore-js/react.UsagePolicyData",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L94",
      "description": "Public export UsagePolicyData; see its declaration and owning guide.",
      "signature": "export type UsagePolicyData = UsageData;",
      "typeReferences": [
        {
          "name": "UsageData",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L59"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsagePolicySource",
      "name": "@farthershore/farthershore-js/react.UsagePolicySource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L652",
      "description": "Public export UsagePolicySource; see its declaration and owning guide.",
      "signature": "export type UsagePolicySource = \"declared\" | \"inherited\" | \"defaulted\" | \"inferred\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageSnapshot",
      "name": "@farthershore/farthershore-js/react.UsageSnapshot",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L701",
      "description": "A single round-trip's worth of usage: per-dimension totals, the recent\nevents, and the billing basis.",
      "signature": "export interface UsageSnapshot {\n    summary: UsageSummary;\n    events: UsageEvent[];\n    billingBasis: UsageBillingBasis;\n    /** Whether `summary` is an EXACT total over the whole period (`true`, the\n     *  DB-side aggregate) or an approximation from a bounded event sample\n     *  (`false`). A `false` here means the UI should flag the figure as\n     *  approximate. Defaults to `true` (additive — older Cores omit it). */\n    exact: boolean;\n    /** Number of usage events the `summary` total was computed from over the\n     *  period. With `exact: true` this is the true event count; with\n     *  `exact: false` it's the sampled (capped) count. */\n    sampledEvents: number;\n    /** ISO start of the period the `summary` covers (the resolved `from`), or\n     *  null when the Core doesn't report it. */\n    periodStart: string | null;\n    /** ISO end of the period the `summary` covers (the resolved `to`), or null\n     *  when the Core doesn't report it. */\n    periodEnd: string | null;\n    /** Aggregated advisory policy state from the freshest event in this snapshot.\n     *  Null when no event carries policy metadata. */\n    usagePolicy: UsagePolicyAdvisory | null;\n}",
      "typeReferences": [
        {
          "name": "UsageBillingBasis",
          "source": "packages/farthershore-js/dist/types.d.ts#L649"
        },
        {
          "name": "UsageEvent",
          "source": "packages/farthershore-js/dist/types.d.ts#L679"
        },
        {
          "name": "UsagePolicyAdvisory",
          "source": "packages/farthershore-js/dist/types.d.ts#L655"
        },
        {
          "name": "UsageSummary",
          "source": "packages/farthershore-js/dist/types.d.ts#L645"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageSummary",
      "name": "@farthershore/farthershore-js/react.UsageSummary",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L645",
      "description": "Public export UsageSummary; see its declaration and owning guide.",
      "signature": "export type UsageSummary = Record<string, number>;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UsageTrafficClass",
      "name": "@farthershore/farthershore-js/react.UsageTrafficClass",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/types.d.ts#L651",
      "description": "Public export UsageTrafficClass; see its declaration and owning guide.",
      "signature": "export type UsageTrafficClass = (typeof USAGE_TRAFFIC_CLASSES)[number];",
      "typeReferences": [
        {
          "name": "USAGE_TRAFFIC_CLASSES",
          "source": "packages/farthershore-js/dist/types.d.ts#L650"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useApiKeys",
      "name": "@farthershore/farthershore-js/react.useApiKeys",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L29",
      "description": "Public export useApiKeys; see its declaration and owning guide.",
      "signature": "export declare function useApiKeys(): ApiKeysResult;",
      "typeReferences": [
        {
          "name": "ApiKeysResult",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L15"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useAsync",
      "name": "@farthershore/farthershore-js/react.useAsync",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-async.d.ts#L51",
      "description": "A small data-fetching primitive the hooks share: tracks {data, isLoading,\nerror}, re-runs when `deps` change or `refetch()` is called, and ignores a\nresolution after unmount/dep-change (no setState-after-unmount). The `fn`\nreceives an {@link AbortSignal} that fires on unmount/dep-change/refetch, so\nthe stale in-flight read is cancelled rather than left to resolve.\n\n`queryKey` is the stable per-hook identity array a caller passes through to\nthe returned result (e.g. `[\"apiKeys\", businessId, orgId]`) — `useAsync`\ndoes not derive it from `deps` (deps often carry non-serializable values\nlike the client instance), so each hook builds its own.",
      "signature": "export declare function useAsync<T>(fn: (signal: AbortSignal) => Promise<T>, deps: readonly unknown[], queryKey: readonly unknown[]): AsyncResult<T>;",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useAuditLogs",
      "name": "@farthershore/farthershore-js/react.useAuditLogs",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L250",
      "description": "Subscriber audit log, refetched when the (serialized) filters change — now\nincluding `from`/`to`/`actorUserId` (W9.1d), which the resource already\nforwards. Also re-runs on an org switch (reactive scope).",
      "signature": "export declare function useAuditLogs(filters?: AuditLogFilters): AsyncResult<AuditLogPage>;",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "AuditLogFilters",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L232"
        },
        {
          "name": "AuditLogPage",
          "source": "packages/farthershore-js/dist/types.d.ts#L1089"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useBilling",
      "name": "@farthershore/farthershore-js/react.useBilling",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L146",
      "description": "Public export useBilling; see its declaration and owning guide.",
      "signature": "export declare function useBilling(): BillingResult;",
      "typeReferences": [
        {
          "name": "BillingResult",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L108"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useBillPreview",
      "name": "@farthershore/farthershore-js/react.useBillPreview",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L169",
      "description": "The subscriber's current-window bill preview (`GET /me/bill-preview`) —\nCore-computed through the same rating engine + ledger state as invoicing.\nHonors `disclosure`: `transparent` carries windows / totals / nanodollar\nallowance balances; `opaque` carries allowance shape only. Nanodollar fields\nare decimal STRINGS — render with `format.formatNanos`, never `Number()`.\n\nQuery key `[\"billPreview\", businessId, organizationId]`. Re-reads whenever\nan entitlement mutation busts the read cache (subscribe / change plan /\ncancel / restore / migrate — the same wake `useBilling` / `useMe` get), and\non org switch.",
      "signature": "export declare function useBillPreview(): AsyncResult<BillPreview>;",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "BillPreview",
          "source": "packages/farthershore-js/dist/types.d.ts#L1284"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useBoot",
      "name": "@farthershore/farthershore-js/react.useBoot",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/mounted-context.d.ts#L9",
      "description": "The resolved Bootstrap. Children of `<FartherShoreRoot>` render only after\nresolve succeeds, so this never suspends or returns null.",
      "signature": "export declare function useBoot(): Bootstrap;",
      "typeReferences": [
        {
          "name": "Bootstrap",
          "source": "packages/farthershore-js/dist/types.d.ts#L294"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useBootstrap",
      "name": "@farthershore/farthershore-js/react.useBootstrap",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L5",
      "description": "Public export useBootstrap; see its declaration and owning guide.",
      "signature": "export declare function useBootstrap(): AsyncResult<Bootstrap>;",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "Bootstrap",
          "source": "packages/farthershore-js/dist/types.d.ts#L294"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useBusiness",
      "name": "@farthershore/farthershore-js/react.useBusiness",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L6",
      "description": "Public export useBusiness; see its declaration and owning guide.",
      "signature": "export declare function useBusiness(): AsyncResult<Business>;",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "Business",
          "source": "packages/farthershore-js/dist/types.d.ts#L23"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useCooldown",
      "name": "@farthershore/farthershore-js/react.useCooldown",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-limits.d.ts#L32",
      "description": "A live cooldown countdown. Given a `Retry-After` (relative seconds) and/or a\n`resetAt` (absolute instant), returns the whole seconds remaining, ticking\ndown each second until it reaches 0. SSR-safe: the first render computes a\nstatic snapshot and the interval only starts after mount. The target is\nrecomputed when the inputs change, so feeding it a fresh caught error resets\nthe countdown.",
      "signature": "export declare function useCooldown(options?: UseCooldownOptions): CooldownResult;",
      "typeReferences": [
        {
          "name": "CooldownResult",
          "source": "packages/farthershore-js/dist/react/use-limits.d.ts#L9"
        },
        {
          "name": "UseCooldownOptions",
          "source": "packages/farthershore-js/dist/react/use-limits.d.ts#L15"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UseCooldownOptions",
      "name": "@farthershore/farthershore-js/react.UseCooldownOptions",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-limits.d.ts#L15",
      "description": "Public export UseCooldownOptions; see its declaration and owning guide.",
      "signature": "export interface UseCooldownOptions {\n    /** A `Retry-After` value — seconds (number) or the raw header string. Wins\n     *  over `resetAt` when both are present. */\n    retryAfterSeconds?: number | string | null;\n    /** An absolute reset instant — a Date or unix-epoch ms. */\n    resetAt?: Date | number | null;\n    /** Injectable clock for tests (defaults to Date.now). */\n    now?: () => number;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useDeclaredResources",
      "name": "@farthershore/farthershore-js/react.useDeclaredResources",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L10",
      "description": "The product's declared counted-resource catalog (W5.1) — name + label +\nscope + per-plan cap. Resolved from `bootstrap()`, so it joins the memoized\nresolve round-trip (no extra fetch).",
      "signature": "export declare function useDeclaredResources(): AsyncResult<DeclaredResource[]>;",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "DeclaredResource",
          "source": "packages/farthershore-js/dist/types.d.ts#L282"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useEntitlements",
      "name": "@farthershore/farthershore-js/react.useEntitlements",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L285",
      "description": "The current subscriber's enforced limit map from the pinned plan version.\nReads the same cached `/me` snapshot\n`useMe()` does — signed-out callers resolve to empty maps (so gate UI can\nrender disabled/upsell without a separate auth guard).",
      "signature": "export declare function useEntitlements(): AsyncResult<EntitlementSnapshot__78b1daa335cc>;",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "EntitlementSnapshot__78b1daa335cc",
          "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useFartherShore",
      "name": "@farthershore/farthershore-js/react.useFartherShore",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/provider.d.ts#L15",
      "description": "The client from context. Throws if used outside a provider.",
      "signature": "export declare function useFartherShore(): FartherShoreClient__e4fe174a542f;",
      "typeReferences": [
        {
          "name": "FartherShoreClient__e4fe174a542f",
          "source": "packages/farthershore-js/dist/client.d.ts#L36"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useFetch",
      "name": "@farthershore/farthershore-js/react.useFetch",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/use-fetch.d.ts#L15",
      "description": "Fetch through a named integration, reactively. Re-runs when the\nintegration id, path, or meaningful options change. The common case is one\nline:\n\n  const { data, isLoading } = useFetch(\"weather\", \"/v1/forecast\", {});\n\n`select` maps the raw `Response` to `T` (default: `res.json()`). Pass a custom\n`select` for non-JSON upstreams (`(res) => res.text()`).",
      "signature": "export declare function useFetch<T = unknown>(integrationId: string, path: string, opts: Omit<FsFetchOptions__62afbd421e0f, \"signal\">, select?: (res: Response) => Promise<T>): UseFetchResult<T>;",
      "typeReferences": [
        {
          "name": "FsFetchOptions__62afbd421e0f",
          "source": "packages/farthershore-js/dist/fetch.d.ts#L3"
        },
        {
          "name": "UseFetchResult",
          "source": "packages/farthershore-js/dist/use-fetch.d.ts#L4"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UseFetchResult",
      "name": "@farthershore/farthershore-js/react.UseFetchResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/use-fetch.d.ts#L4",
      "description": "The resolved secure-fetch hook state — the ecosystem resource-hook shape.",
      "signature": "export type UseFetchResult<T> = AsyncResult<T>;",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useFsAuth",
      "name": "@farthershore/farthershore-js/react.useFsAuth",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/mounted-context.d.ts#L10",
      "description": "Public export useFsAuth; see its declaration and owning guide.",
      "signature": "export declare function useFsAuth(): FsAuth;",
      "typeReferences": [
        {
          "name": "FsAuth",
          "source": "packages/farthershore-js/dist/react/mounted-types.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useLimitState",
      "name": "@farthershore/farthershore-js/react.useLimitState",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-limits.d.ts#L8",
      "description": "Resolve the {@link LimitFacet} for a caught limit error — the single object a\nUI branches on (class, reaction, retry-safe, must-modify, can-upgrade,\nheadroom). Returns null when `err` is not a usage-limit deny. Memoized on the\nerror identity, so it's stable across renders for the same caught value.",
      "signature": "export declare function useLimitState(err: unknown): LimitFacet__c540ead8fd1d | null;",
      "typeReferences": [
        {
          "name": "LimitFacet__c540ead8fd1d",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L531"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useLimitStatus",
      "name": "@farthershore/farthershore-js/react.useLimitStatus",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-limit-status.d.ts#L85",
      "description": "Read the proactive, ADVISORY limit-state snapshot (T11). Subscribes to the\nclient's live rate-budget store AND the last-deny store (both via\n`useSyncExternalStore`), so any `fs.route` call — a successful one that carries\n`X-RateLimit-*`, or a deny — updates every `useLimitStatus()` in the tree.\nSSR-safe (the server snapshot is the empty/unknown state).\n\nAdvisory by construction: the gateway remains authoritative for the actual\ndecision. Use it to PRE-WARN a UI (a \"you're near your limit\" banner, a\ndisabled submit while saturated), never as a hard gate.",
      "signature": "export declare function useLimitStatus(options?: UseLimitStatusOptions): LimitStatus;",
      "typeReferences": [
        {
          "name": "LimitStatus",
          "source": "packages/farthershore-js/dist/react/use-limit-status.d.ts#L44"
        },
        {
          "name": "UseLimitStatusOptions",
          "source": "packages/farthershore-js/dist/react/use-limit-status.d.ts#L67"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UseLimitStatusOptions",
      "name": "@farthershore/farthershore-js/react.UseLimitStatusOptions",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-limit-status.d.ts#L67",
      "description": "Public export UseLimitStatusOptions; see its declaration and owning guide.",
      "signature": "export interface UseLimitStatusOptions {\n    /** A deny older than this (ms) reads as `stale` and stops driving the\n     *  saturation/throttle flags. Default 60000 (1 min). */\n    staleAfterMs?: number;\n    /** Injectable clock (tests). Defaults to Date.now. */\n    now?: () => number;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useMe",
      "name": "@farthershore/farthershore-js/react.useMe",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L181",
      "description": "Full subscriber context (`GET /me`) — lifecycle, trial, scheduled\ntransition, eligibility-scoped plans. Null = onboarding.",
      "signature": "export declare function useMe(options?: {\n    /** Request-local scope. `null` omits the organization header without\n     * changing the provider's selected workspace. */\n    organizationId?: string | null;\n}): AsyncResult<SubscriberContext | null>;",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "SubscriberContext",
          "source": "packages/farthershore-js/dist/types.d.ts#L897"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useNotificationPreferences",
      "name": "@farthershore/farthershore-js/react.useNotificationPreferences",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L228",
      "description": "The subscriber's per-category notification preferences (opt-out model).\nReads on mount + org switch; `update()` patches and refetches. Non-degrading:\na read failure surfaces on `.error` (drives the page's error state).",
      "signature": "export declare function useNotificationPreferences(): NotificationPreferencesResult;",
      "typeReferences": [
        {
          "name": "NotificationPreferencesResult",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L221"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useOptionalFsAuth",
      "name": "@farthershore/farthershore-js/react.useOptionalFsAuth",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/mounted-context.d.ts#L13",
      "description": "Like {@link useFsAuth} but null outside the managed auth layer — lets\ncomponents degrade instead of throwing when mounted without a Root.",
      "signature": "export declare function useOptionalFsAuth(): FsAuth | null;",
      "typeReferences": [
        {
          "name": "FsAuth",
          "source": "packages/farthershore-js/dist/react/mounted-types.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useOrganization",
      "name": "@farthershore/farthershore-js/react.useOrganization",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/organization-context.d.ts#L45",
      "description": "The active org, the org list, and the switcher (W9.1a). Reactive: switching\nvia `setOrganization` re-runs every data hook (they depend on the reactive\norg id) under the new scope, and persists across reloads.\n\nReturns a stable shape even outside an <OrganizationProvider> (i.e. when only\na bare <FartherShoreProvider> hasn't mounted the org layer) so callers don't\nneed a guard — `organizationId` is null and `setOrganization` is a no-op.",
      "signature": "export declare function useOrganization(): OrganizationContextValue;",
      "typeReferences": [
        {
          "name": "OrganizationContextValue",
          "source": "packages/farthershore-js/dist/react/organization-context.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.usePaginatedAuditLogs",
      "name": "@farthershore/farthershore-js/react.usePaginatedAuditLogs",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L278",
      "description": "Audit log with ACCUMULATING cursor pagination (W9.1d) — the \"Load older\" UX.\nUnlike {@link useAuditLogs} (which REPLACES the page when the cursor changes),\n`loadMore()` APPENDS the next page to `items`, deduping by entry id (so a row\nthat straddles a page boundary isn't shown twice). The first page (and a full\nreset) re-runs whenever the non-cursor filters — or the active org — change.\n\n`filters.cursor` is ignored here: pagination is owned internally (the first\npage starts uncursored; `loadMore` advances from the server's `nextCursor`).",
      "signature": "export declare function usePaginatedAuditLogs(filters?: Omit<AuditLogFilters, \"cursor\">): PaginatedAuditLogsResult;",
      "typeReferences": [
        {
          "name": "AuditLogFilters",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L232"
        },
        {
          "name": "PaginatedAuditLogsResult",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L251"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.usePinnedPlan",
      "name": "@farthershore/farthershore-js/react.usePinnedPlan",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L186",
      "description": "Public export usePinnedPlan; see its declaration and owning guide.",
      "signature": "export declare function usePinnedPlan(): {\n    plan: Plan | null | undefined;\n};",
      "typeReferences": [
        {
          "name": "Plan",
          "source": "packages/farthershore-js/dist/types.d.ts#L127"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.usePinnedUsageRows",
      "name": "@farthershore/farthershore-js/react.usePinnedUsageRows",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L206",
      "description": "Usage rows derived from the subscriber's PINNED plan (`GET /me`'s\n`displayDims` + `rules`) rather than the latest catalog meter list — so the\n\"used / N included\" figures match the entitlement the subscriber is actually\nbilled under, even after the product's catalog drifts.\n\nCombines {@link useUsage} (the exact period summary + basis) with\n{@link useMe} (the pinned display surface) and {@link useBusiness} (meter\nlabels/units). A drop-in alternative to the catalog-derived rows\n{@link UsageCard } builds by default; optional, no new required dev step.",
      "signature": "export declare function usePinnedUsageRows(range?: {\n    from?: string;\n    to?: string;\n}): PinnedUsageRowsResult;",
      "typeReferences": [
        {
          "name": "PinnedUsageRowsResult",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L189"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.usePlans",
      "name": "@farthershore/farthershore-js/react.usePlans",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L178",
      "description": "Public export usePlans; see its declaration and owning guide.",
      "signature": "export declare function usePlans(): PlansResult;",
      "typeReferences": [
        {
          "name": "PlansResult",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L172"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useReadScope",
      "name": "@farthershore/farthershore-js/react.useReadScope",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/scope.d.ts#L40",
      "description": "The reactive read scope shared by every org-scoped data hook: the client,\nits businessId, and the active org id from the org context (W9.1a).\n\n**Custom hooks that read org-scoped data must use this** instead of calling\n`useFartherShore()` directly — folding `organizationId` (and `businessId`)\ninto a hook's dep array / queryKey is what makes an org switch auto-refetch\n(the client reference itself is stable, so `[fs]` alone never reacts, and a\nqueryKey built without `businessId`/`organizationId` can collide across\nscopes). Example:\n\n```ts\nfunction useMyResource() {\n  const { fs, businessId, organizationId } = useReadScope();\n  return useAsync(\n    (signal) => fs.resources(\"widgets\").list({ signal }),\n    [fs, businessId, organizationId],\n    [\"widgets\", businessId, organizationId],\n  );\n}\n```\n\n`organizationId` is null outside an `<OrganizationProvider>` (a bare\nprovider tree behaves exactly as before — it just never reacts to a\nswitch).",
      "signature": "export declare function useReadScope(): ReadScope;",
      "typeReferences": [
        {
          "name": "ReadScope",
          "source": "packages/farthershore-js/dist/react/scope.d.ts#L4"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useReconcileAfterCheckout",
      "name": "@farthershore/farthershore-js/react.useReconcileAfterCheckout",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-reconcile.d.ts#L27",
      "description": "Reconcile the subscriber lifecycle after returning from a Stripe Checkout.\nPolls `me()` (cache-busted, backed off) until ACTIVE/TRIALING or a timeout.\n\n`enabled` (default true) lets a page mount the hook unconditionally but only\nstart the loop when it knows it just returned from checkout (e.g. a\n`?checkout=success` query flag).",
      "signature": "export declare function useReconcileAfterCheckout(options?: ReconcileOptions__bcd46321c900 & {\n    enabled?: boolean;\n}): UseReconcileAfterCheckoutResult;",
      "typeReferences": [
        {
          "name": "ReconcileOptions__bcd46321c900",
          "source": "packages/farthershore-js/dist/reconcile.d.ts#L3"
        },
        {
          "name": "UseReconcileAfterCheckoutResult",
          "source": "packages/farthershore-js/dist/react/use-reconcile.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UseReconcileAfterCheckoutResult",
      "name": "@farthershore/farthershore-js/react.UseReconcileAfterCheckoutResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-reconcile.d.ts#L3",
      "description": "Public export UseReconcileAfterCheckoutResult; see its declaration and owning guide.",
      "signature": "export interface UseReconcileAfterCheckoutResult {\n    /** True while the poll loop is running. */\n    reconciling: boolean;\n    /** True once the lifecycle settled; false until then (and if it timed out). */\n    settled: boolean;\n    /** True once the current reconciliation attempt has finished, whether it\n     * settled, timed out, or failed. False before its effect starts and while it\n     * is running. */\n    finished: boolean;\n    /** The freshest subscriber detail read, or null. */\n    subscriber: SubscriberDetail | null;\n    /** A `me()` throw during the loop, or null. */\n    error: Error | null;\n    /** Re-run the reconciliation (e.g. a manual \"still pending? retry\" button). */\n    retry: () => void;\n}",
      "typeReferences": [
        {
          "name": "SubscriberDetail",
          "source": "packages/farthershore-js/dist/types.d.ts#L859"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useRequestPrecheck",
      "name": "@farthershore/farthershore-js/react.useRequestPrecheck",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-limits.d.ts#L49",
      "description": "A cheap, reactive precheck over the live `X-RateLimit-*` budget (the most\nrecent gateway response). Lets a UI disable a submit / show a cooldown BEFORE\nspending a round trip that would just 429. Conservative: `blocked` is only\ntrue when the remaining count is KNOWN to be 0 — an unknown budget never\nblocks (the request proceeds and the response carries the real verdict).",
      "signature": "export declare function useRequestPrecheck(): RequestPrecheck;",
      "typeReferences": [
        {
          "name": "RequestPrecheck",
          "source": "packages/farthershore-js/dist/react/use-limits.d.ts#L33"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useResource",
      "name": "@farthershore/farthershore-js/react.useResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L329",
      "description": "A single record of a product-declared resource (W5.3): wraps\n`fs.resources(name).get(id)`. A 404 resolves to `null` (the record doesn't\nexist) rather than an error, so callers branch on `data === null`. Re-runs\nwhen `name`/`id` change.",
      "signature": "export declare function useResource<T = unknown>(name: string, id: string): AsyncResult<ResourceRecord__87f0c814eb51<T> | null>;",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "ResourceRecord__87f0c814eb51",
          "source": "packages/farthershore-js/dist/resources/resources.d.ts#L10"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useResourceCap",
      "name": "@farthershore/farthershore-js/react.useResourceCap",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-upgrade.d.ts#L36",
      "description": "The current plan's cap for a dimension (resource limit or quota), or null\nwhen unknown / unlimited. Drives the `n / max` display in `<ResourcesPanel>`.",
      "signature": "export declare function useResourceCap(dimension: string): number | null;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useResourceLimitUsage",
      "name": "@farthershore/farthershore-js/react.useResourceLimitUsage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L292",
      "description": "Per-resource `{ limit, current }` for the pinned plan — the \"N of M\"\nsurface (e.g. api_keys: 3 of 5). The LIMIT side lives in the `/me`\nsnapshot, but `current` is a live count, so this reads the dedicated\n`/me/resource-limit-usage` route. Signed-out / no subscription → an empty map.",
      "signature": "export declare function useResourceLimitUsage(): AsyncResult<ResourceLimitUsageMap__cc534f1c9f18>;",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "ResourceLimitUsageMap__cc534f1c9f18",
          "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L15"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useResourcesList",
      "name": "@farthershore/farthershore-js/react.useResourcesList",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L322",
      "description": "List + mutate a product-declared, quota-counted resource (rides the gateway,\nwhich diverts to core). `create` surfaces `LimitExceededError` at the cap —\npair with `<UpgradePrompt>`.\n\nW5.3 — mutations are OPTIMISTIC: create/update return the authoritative record\nfrom core, so the local list reconciles immediately (insert / patch / drop)\nWITHOUT a full refetch, then the next dep-change/refresh reconciles against\nthe server. A mutation that throws (e.g. a cap deny) never touches the list.\nThe overlay resets on a scope change (org/resource) and prunes entries the\nrefetched server list already reflects, so it can never leak across scopes or\npermanently mask a server change (B3).",
      "signature": "export declare function useResourcesList<T = unknown>(name: string): ResourcesListResult<T>;",
      "typeReferences": [
        {
          "name": "ResourcesListResult",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L301"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useResourceUsage",
      "name": "@farthershore/farthershore-js/react.useResourceUsage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L335",
      "description": "Authoritative `{ count, cap }` usage for a product-declared resource (W5.2) —\nreads core (the system of record), so it works for backend-managed resources\nthe SDK can't `list()`. Signed-out / no subscription → `{ count: 0, cap: null }`.",
      "signature": "export declare function useResourceUsage(name: string): AsyncResult<ResourceUsage__40697d865d06>;",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "ResourceUsage__40697d865d06",
          "source": "packages/farthershore-js/dist/resources/resources.d.ts#L21"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useRouteRateLimit",
      "name": "@farthershore/farthershore-js/react.useRouteRateLimit",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L300",
      "description": "The live `X-RateLimit-*` budget observed on the most recent `fs.route` gateway\ncall (W8.5) — `{ remaining, resetAt }`, or null until the first gateway\nresponse carried the headers. Subscribes to the client's rate-limit store\n(via `useSyncExternalStore`), so any `fs.route.get/getWithMeta` updates every\n`<RateLimitDisplay>` in the tree. SSR-safe (the server snapshot is null).",
      "signature": "export declare function useRouteRateLimit(): RateLimitSnapshot__934527ed940b | null;",
      "typeReferences": [
        {
          "name": "RateLimitSnapshot__934527ed940b",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useServiceAccounts",
      "name": "@farthershore/farthershore-js/react.useServiceAccounts",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L47",
      "description": "Public export useServiceAccounts; see its declaration and owning guide.",
      "signature": "export declare function useServiceAccounts(options?: {\n    /** Skip protected reads until the caller's service-account RBAC claim settles. */\n    enabled?: boolean;\n}): ServiceAccountsResult;",
      "typeReferences": [
        {
          "name": "ServiceAccountsResult",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L39"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useSession",
      "name": "@farthershore/farthershore-js/react.useSession",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L14",
      "description": "Public export useSession; see its declaration and owning guide.",
      "signature": "export declare function useSession(): SessionResult;",
      "typeReferences": [
        {
          "name": "SessionResult",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L11"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useSpendCap",
      "name": "@farthershore/farthershore-js/react.useSpendCap",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L156",
      "description": "Public export useSpendCap; see its declaration and owning guide.",
      "signature": "export declare function useSpendCap(): SpendCapResultHook;",
      "typeReferences": [
        {
          "name": "SpendCapResultHook",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L151"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useSubscriptionContexts",
      "name": "@farthershore/farthershore-js/react.useSubscriptionContexts",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L211",
      "description": "Multi-org subscription contexts (the org switcher's data).",
      "signature": "export declare function useSubscriptionContexts(strict?: boolean): AsyncResult<SubscriptionContextsResult>;",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "SubscriptionContextsResult",
          "source": "packages/farthershore-js/dist/types.d.ts#L968"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useTeam",
      "name": "@farthershore/farthershore-js/react.useTeam",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L220",
      "description": "Public export useTeam; see its declaration and owning guide.",
      "signature": "export declare function useTeam(): TeamResult;",
      "typeReferences": [
        {
          "name": "TeamResult",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L212"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useUpgrade",
      "name": "@farthershore/farthershore-js/react.useUpgrade",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-upgrade.d.ts#L38",
      "description": "Catalog-aware upgrade resolver. `resolve(error)` is stable once loaded.",
      "signature": "export declare function useUpgrade(): UseUpgradeResult;",
      "typeReferences": [
        {
          "name": "UseUpgradeResult",
          "source": "packages/farthershore-js/dist/react/use-upgrade.d.ts#L28"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.UseUpgradeResult",
      "name": "@farthershore/farthershore-js/react.UseUpgradeResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/use-upgrade.d.ts#L28",
      "description": "Public export UseUpgradeResult; see its declaration and owning guide.",
      "signature": "export interface UseUpgradeResult {\n    loading: boolean;\n    resolve(error: UpgradeResolvable): UpgradeTarget | null;\n}",
      "typeReferences": [
        {
          "name": "UpgradeResolvable",
          "source": "packages/farthershore-js/dist/react/use-upgrade.d.ts#L12"
        },
        {
          "name": "UpgradeTarget",
          "source": "packages/farthershore-js/dist/react/use-upgrade.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useUsage",
      "name": "@farthershore/farthershore-js/react.useUsage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L77",
      "description": "Public export useUsage; see its declaration and owning guide.",
      "signature": "export declare function useUsage(range?: {\n    from?: string;\n    to?: string;\n}): AsyncResult<UsageData>;",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "UsageData",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L59"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useUsageLimits",
      "name": "@farthershore/farthershore-js/react.useUsageLimits",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L58",
      "description": "Public export useUsageLimits; see its declaration and owning guide.",
      "signature": "export declare function useUsageLimits(): UsageLimitsResult;",
      "typeReferences": [
        {
          "name": "UsageLimitsResult",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L53"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useUsagePolicy",
      "name": "@farthershore/farthershore-js/react.useUsagePolicy",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L98",
      "description": "Advisory UsagePolicy state for rendering billable/free/limited/provider-cost\nlabels and cooldown prompts. It is an alias over the usage snapshot so older\nCores simply produce `usagePolicy: null`.",
      "signature": "export declare function useUsagePolicy(range?: {\n    from?: string;\n    to?: string;\n}): AsyncResult<UsagePolicyData>;",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "UsagePolicyData",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L94"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useUsageState",
      "name": "@farthershore/farthershore-js/react.useUsageState",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L104",
      "description": "Back-compat ergonomic name for UI code that thinks in terms of current usage\nstate rather than the policy object. Advisory; decides nothing.",
      "signature": "export declare function useUsageState(range?: {\n    from?: string;\n    to?: string;\n}): AsyncResult<UsagePolicyData>;",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "UsagePolicyData",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L94"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.react.useUsageSummary",
      "name": "@farthershore/farthershore-js/react.useUsageSummary",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/react",
      "source": "packages/farthershore-js/dist/react/hooks.d.ts#L90",
      "description": "The usage SUMMARY only — the quota counter — without the recent-activity\nfeed.\n\n`useUsage()` returns both in one request, which means the Postgres-backed\ncounter waits on an R2 SQL scan of the event archive. A surface that renders\nonly the counter should use this hook and let the feed load beside it, so the\nnumber never has to flash a placeholder zero first.",
      "signature": "export declare function useUsageSummary(range?: {\n    from?: string;\n    to?: string;\n}): AsyncResult<UsageData>;",
      "typeReferences": [
        {
          "name": "AsyncResult",
          "source": "packages/farthershore-js/dist/react/use-async.d.ts#L14"
        },
        {
          "name": "UsageData",
          "source": "packages/farthershore-js/dist/react/hooks.d.ts#L59"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.AccountSurface",
      "name": "@farthershore/farthershore-js.AccountSurface",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/account.d.ts#L179",
      "description": "Public export AccountSurface; see its declaration and owning guide.",
      "signature": "export interface AccountSurface {\n    /** The full subscriber context (`GET /me`): lifecycle, trial, scheduled\n     *  transition, and the eligibility-scoped `availablePlans`. Null when signed\n     *  out / no subscriber for the selected org — never throws for those.\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle); the read is unmount-safe\n     *  via the hook's active-flag and bounded by the cache TTL. */\n    me(opts?: {\n        signal?: AbortSignal;\n        /**\n         * `null` intentionally reads the user's default subscription without an\n         * organization header. `undefined` preserves the selected workspace.\n         */\n        organizationId?: string | null;\n    }): Promise<SubscriberContext | null>;\n    acceptLegal(acceptances: LegalAcceptance__cc2291cc0442[]): Promise<void>;\n    organizations: OrganizationsResource;\n    team: TeamResource;\n    rbac: RbacResource;\n    notifications: NotificationsResource;\n    auditLogs: AuditLogsResource;\n}",
      "typeReferences": [
        {
          "name": "AuditLogsResource",
          "source": "packages/farthershore-js/dist/resources/account.d.ts#L142"
        },
        {
          "name": "LegalAcceptance__cc2291cc0442",
          "source": "packages/farthershore-js/dist/types.d.ts#L80"
        },
        {
          "name": "NotificationsResource",
          "source": "packages/farthershore-js/dist/resources/account.d.ts#L169"
        },
        {
          "name": "OrganizationsResource",
          "source": "packages/farthershore-js/dist/resources/account.d.ts#L3"
        },
        {
          "name": "RbacResource",
          "source": "packages/farthershore-js/dist/resources/account.d.ts#L65"
        },
        {
          "name": "SubscriberContext",
          "source": "packages/farthershore-js/dist/types.d.ts#L897"
        },
        {
          "name": "TeamResource",
          "source": "packages/farthershore-js/dist/resources/account.d.ts#L13"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ActiveServiceAccountCreateResponse",
      "name": "@farthershore/farthershore-js.ActiveServiceAccountCreateResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L465",
      "description": "Public export ActiveServiceAccountCreateResponse; see its declaration and owning guide.",
      "signature": "export interface ActiveServiceAccountCreateResponse {\n    status: \"ACTIVE\";\n    serviceAccountId: string;\n    apiKeyId: string;\n    keyPrefix: string;\n    /** One-time plaintext secret. */\n    plaintext: string;\n    requestedPermissions: string[];\n    grantedPermissions: string[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ActiveServiceAccountUpdateResponse",
      "name": "@farthershore/farthershore-js.ActiveServiceAccountUpdateResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L486",
      "description": "Public export ActiveServiceAccountUpdateResponse; see its declaration and owning guide.",
      "signature": "export interface ActiveServiceAccountUpdateResponse {\n    status: \"ACTIVE\";\n    serviceAccountId: string;\n    requestedPermissions: string[];\n    grantedPermissions: string[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ApiKey",
      "name": "@farthershore/farthershore-js.ApiKey",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L347",
      "description": "Public export ApiKey; see its declaration and owning guide.",
      "signature": "export interface ApiKey {\n    id: string;\n    keyPrefix: string;\n    label: string | null;\n    /** Normalized lowercase, e.g. \"active\" | \"revoked\". */\n    status: string;\n    createdAt: string;\n    lastUsedAt: string | null;\n    revokedAt: string | null;\n    /** Consumer-principal (D2): the key's subject kind — a PERSONAL key mints a\n     *  member subject, a SERVICE key an org-owned service account. Always present\n     *  (Core's `ApiKey.kind` is a NOT NULL column). */\n    kind: ApiKeyKind;\n    /** PERSONAL — the bound member's stable `Membership.id` (identity + permission\n     *  source). Null for service keys / when the API omits it. */\n    memberId: string | null;\n    /** SERVICE — the org-owned `ServiceAccount.id` the key attaches to. Null for\n     *  personal keys / when the API omits it. */\n    serviceAccountId: string | null;\n    /** SERVICE — the bound service account's display name, when the API returns\n     *  it (the list groups service keys by account under this label). */\n    serviceAccountName: string | null;\n    /** Provenance: which member MINTED the key (audit only; may differ from the\n     *  bound member when an admin mints a personal key for someone — D2a). Null\n     *  for pre-attribution keys. */\n    createdBy: string | null;\n}",
      "typeReferences": [
        {
          "name": "ApiKeyKind",
          "source": "packages/farthershore-js/dist/types.d.ts#L346"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ApiKeyKind",
      "name": "@farthershore/farthershore-js.ApiKeyKind",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L346",
      "description": "Consumer-principal (D2): which stable identity an API key credentials.\n`PERSONAL` binds to a member (perms = the member's live roles ∩ the key's\nrestrictions; auto-revoked when the member leaves). `SERVICE` attaches to a\nnamed org-owned service account (admin-gated; survives offboarding).",
      "signature": "export type ApiKeyKind = \"PERSONAL\" | \"SERVICE\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ApprovedServiceAccountCreateResponse",
      "name": "@farthershore/farthershore-js.ApprovedServiceAccountCreateResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L493",
      "description": "Public export ApprovedServiceAccountCreateResponse; see its declaration and owning guide.",
      "signature": "export interface ApprovedServiceAccountCreateResponse {\n    status: \"ACTIVE\";\n    operation: \"CREATE\";\n    serviceAccountId: string;\n    apiKeyId: string;\n    /** One-time plaintext secret. */\n    plaintext: string;\n    grantedPermissions: string[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ApprovedServiceAccountUpdateResponse",
      "name": "@farthershore/farthershore-js.ApprovedServiceAccountUpdateResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L502",
      "description": "Public export ApprovedServiceAccountUpdateResponse; see its declaration and owning guide.",
      "signature": "export interface ApprovedServiceAccountUpdateResponse {\n    status: \"ACTIVE\";\n    operation: \"UPDATE\";\n    serviceAccountId: string;\n    grantedPermissions: string[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ApproveServiceAccountInput",
      "name": "@farthershore/farthershore-js.ApproveServiceAccountInput",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L451",
      "description": "Public export ApproveServiceAccountInput; see its declaration and owning guide.",
      "signature": "export interface ApproveServiceAccountInput {\n    /** Omit to approve the complete original request. */\n    grantedPermissions?: string[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.AuditLogEntry",
      "name": "@farthershore/farthershore-js.AuditLogEntry",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1074",
      "description": "Public export AuditLogEntry; see its declaration and owning guide.",
      "signature": "export interface AuditLogEntry {\n    id: string;\n    createdAt: string;\n    action: string;\n    decision?: \"ALLOW\" | \"DENY\" | null;\n    actorType?: string | null;\n    actorUserId?: string | null;\n    /** Friendly display name for a user actor (subscriber / builder / maker),\n     *  resolved server-side from the actor's Clerk user id. Null for non-user\n     *  actors (gateway / admin_service) or unknown ids — render `actorUserId`\n     *  as the fallback. */\n    actorName?: string | null;\n    payloadJson?: Record<string, unknown> | null;\n    [k: string]: unknown;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.AuditLogPage",
      "name": "@farthershore/farthershore-js.AuditLogPage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1089",
      "description": "Public export AuditLogPage; see its declaration and owning guide.",
      "signature": "export interface AuditLogPage {\n    items: AuditLogEntry[];\n    nextCursor: string | null;\n}",
      "typeReferences": [
        {
          "name": "AuditLogEntry",
          "source": "packages/farthershore-js/dist/types.d.ts#L1074"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.AuditLogsResource",
      "name": "@farthershore/farthershore-js.AuditLogsResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/account.d.ts#L142",
      "description": "Public export AuditLogsResource; see its declaration and owning guide.",
      "signature": "export interface AuditLogsResource {\n    /** Cursor-paged subscriber audit log (decision ALLOW|DENY, limit ≤ 200).\n     *  Degrades to an empty page on error, like the SSR page. */\n    list(filters?: {\n        action?: string;\n        actorUserId?: string;\n        decision?: \"ALLOW\" | \"DENY\";\n        from?: string;\n        to?: string;\n        cursor?: string;\n        limit?: number;\n        signal?: AbortSignal;\n        /**\n         * `null` intentionally reads the user's default subscription without an\n         * organization header. `undefined` preserves the selected workspace.\n         */\n        organizationId?: string | null;\n    }): Promise<AuditLogPage>;\n}",
      "typeReferences": [
        {
          "name": "AuditLogPage",
          "source": "packages/farthershore-js/dist/types.d.ts#L1089"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.AuthResource",
      "name": "@farthershore/farthershore-js.AuthResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/auth.d.ts#L3",
      "description": "Public export AuthResource; see its declaration and owning guide.",
      "signature": "export interface AuthResource {\n    /** The current session (authenticated identity + a light subscriber slice).\n     * Resolves to `{ authenticated: false }` on 401/403 rather than throwing.\n     * Test-persona identity comes from Core's verified HttpOnly cookie; no\n     * persona bearer is exposed to browser JavaScript. */\n    getSession(opts?: {\n        signal?: AbortSignal;\n    }): Promise<Session>;\n    /** Revoke the server-owned persona browser session and clear local auth\n     * caches. Clerk-strategy environments continue to sign out via Clerk. */\n    signOut(): Promise<void>;\n    /** Set a session bearer directly (for example, Clerk's session token). */\n    setToken(token: string | null): void;\n    /** Mint a short-lived Gateway bearer from the current authenticated browser\n     * session. In persona environments Core authenticates this with the\n     * same-origin HttpOnly cookie. */\n    gatewayContextToken(opts?: {\n        signal?: AbortSignal;\n        refresh?: boolean;\n    }): Promise<GatewayContextToken>;\n}",
      "typeReferences": [
        {
          "name": "GatewayContextToken",
          "source": "packages/farthershore-js/dist/types.d.ts#L803"
        },
        {
          "name": "Session",
          "source": "packages/farthershore-js/dist/types.d.ts#L326"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.AuthStrategy",
      "name": "@farthershore/farthershore-js.AuthStrategy",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L59",
      "description": "Public export AuthStrategy; see its declaration and owning guide.",
      "signature": "export type AuthStrategy = \"clerk\" | \"test-personas\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.AutoApiKeyError",
      "name": "@farthershore/farthershore-js.AutoApiKeyError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1097",
      "description": "A partial-success auto-key failure: the subscriber activated but Core could\nnot mint the first API key. Mirrors core's `autoApiKeyError` ({@code\ncheckout.ts}). The caller should prompt the user to create a key manually\nrather than silently dropping the signal.",
      "signature": "export interface AutoApiKeyError {\n    code: string;\n    message: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.BillingResource",
      "name": "@farthershore/farthershore-js.BillingResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/billing.d.ts#L13",
      "description": "Public export BillingResource; see its declaration and owning guide.",
      "signature": "export interface BillingResource {\n    /** The consumer's current subscription for this product, or null.\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle); the read is unmount-safe\n     *  via the hook's active-flag and bounded by the cache TTL. */\n    subscription(opts?: {\n        signal?: AbortSignal;\n    }): Promise<Subscription | null>;\n    /** Open the Stripe-hosted billing portal (payment method + invoices). Returns\n     *  the URL to navigate to. This is also how invoices are viewed in V0. */\n    openBillingPortal(input?: {\n        returnUrl?: string;\n    }): Promise<{\n        url: string;\n    }>;\n    /** Cancel the current subscription. Free subs cancel inline; paid subs are\n     *  scheduled on the provider for the end of the current billing period and\n     *  the result carries the `cancelsAt` boundary. `reason` is recorded for\n     *  churn analytics. */\n    cancelSubscription(input?: {\n        reason?: string;\n    }): Promise<CancelSubscriptionResult>;\n    /** Buy more prepaid balance. Starts a provider checkout for `amountCents`\n     *  and returns the URL to send the subscriber to. Core gates this on\n     *  `invoice:pay` and refuses (`INVALID_STATE`) for a plan that declares no\n     *  prepaid funding. `requestId` is the idempotency handle — pass the SAME\n     *  uuid to retry one intent; omit it and the SDK mints one per call. */\n    addFunds(input: {\n        amountCents: number;\n        requestId?: string;\n        successUrl?: string;\n        cancelUrl?: string;\n    }): Promise<{\n        checkoutUrl: string;\n    }>;\n    /** Reverse a scheduled cancel — the platform lifts `cancel_at_period_end`\n     *  on the provider (paid) or flips a CANCELLED free sub back to ACTIVE. The\n     *  result carries the platform's POST-restore `cancelAtPeriodEnd` so a\n     *  caller can render the outcome instead of assuming it. */\n    restoreSubscription(): Promise<RestoreSubscriptionResult>;\n    /** Change an existing subscription to another plan. Core applies or\n     *  schedules the transition according to the product's policy. */\n    changePlan(input: {\n        compiledPlanId: string;\n    }): Promise<ChangePlanResult>;\n    /** Set (or clear, with `null`) the subscriber's monthly spend cap (in cents).\n     *  PATCHes `/me/spend-cap`. CAVEAT: the cap is currently STORED-not-ENFORCED\n     *  (held in subscription metadata pending the rate-limit migration) — do NOT\n     *  present this as a hard spend limit in UI copy. */\n    setSpendCap(input: {\n        maxMonthlySpendCents: number | null;\n    }): Promise<SpendCapResult>;\n    /** Read the subscriber's current monthly spend cap (in cents), or null when\n     *  none is set / signed out. P-SPENDCAP-READ — reads the additive\n     *  `subscriber.maxMonthlySpendCents` surfaced on the `/me` context (no new\n     *  route). Joins the memoized `/me` read.\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached `/me` fetch (the cache owns the fetch lifecycle); the read is\n     *  unmount-safe via the hook's active-flag and bounded by the cache TTL. */\n    getSpendCap(opts?: {\n        signal?: AbortSignal;\n    }): Promise<number | null>;\n    /** The subscriber's current-window bill preview (`GET /me/bill-preview`) —\n     *  computed by Core through the SAME rating engine + ledger state as\n     *  invoicing, so preview === invoice by construction. Honors the plan's\n     *  `spendPolicy.disclosure`: `transparent` carries windows / totals /\n     *  nanodollar allowance balances; `opaque` carries allowance shape only (no\n     *  amounts). Nanodollar fields are decimal STRINGS — format them with\n     *  `format.formatNanos`, never `Number()`. Read-through cached; every\n     *  entitlement mutation (subscribe / change plan / cancel / restore /\n     *  migrate) busts it. Signed-out / no subscription → Core serves an empty\n     *  transparent preview.\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle). */\n    getBillPreview(opts?: {\n        signal?: AbortSignal;\n    }): Promise<BillPreview>;\n}",
      "typeReferences": [
        {
          "name": "BillPreview",
          "source": "packages/farthershore-js/dist/types.d.ts#L1284"
        },
        {
          "name": "CancelSubscriptionResult",
          "source": "packages/farthershore-js/dist/types.d.ts#L1122"
        },
        {
          "name": "ChangePlanResult",
          "source": "packages/farthershore-js/dist/types.d.ts#L1144"
        },
        {
          "name": "RestoreSubscriptionResult",
          "source": "packages/farthershore-js/dist/types.d.ts#L1134"
        },
        {
          "name": "SpendCapResult",
          "source": "packages/farthershore-js/dist/resources/billing.d.ts#L5"
        },
        {
          "name": "Subscription",
          "source": "packages/farthershore-js/dist/types.d.ts#L739"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.BillPreview",
      "name": "@farthershore/farthershore-js.BillPreview",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1284",
      "description": "Public export BillPreview; see its declaration and owning guide.",
      "signature": "export type BillPreview = TransparentBillPreview | OpaqueBillPreview;",
      "typeReferences": [
        {
          "name": "OpaqueBillPreview",
          "source": "packages/farthershore-js/dist/types.d.ts#L1277"
        },
        {
          "name": "TransparentBillPreview",
          "source": "packages/farthershore-js/dist/types.d.ts#L1257"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.BillPreviewAllowance",
      "name": "@farthershore/farthershore-js.BillPreviewAllowance",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1198",
      "description": "A funding allowance (balance bucket) with nanodollar balances —\ntransparent disclosure only.",
      "signature": "export interface BillPreviewAllowance {\n    /** Bucket source kind (e.g. `included`, `prepaid`, `promo`). */\n    kind: string;\n    /** Bucket lifecycle state — Core's `BucketState`, verbatim. */\n    state: BucketState;\n    /** Nanodollars, decimal strings (null = unavailable). */\n    remainingNanos: NanosAmount;\n    heldNanos: NanosAmount;\n    consumedNanos: NanosAmount;\n    /** ISO timestamp, or null when the allowance does not expire. */\n    expiresAt: string | null;\n}",
      "typeReferences": [
        {
          "name": "BucketState",
          "source": "packages/farthershore-js/dist/types.d.ts#L1184"
        },
        {
          "name": "NanosAmount",
          "source": "packages/farthershore-js/dist/types.d.ts#L1179"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.BillPreviewWindow",
      "name": "@farthershore/farthershore-js.BillPreviewWindow",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1186",
      "description": "One rating window's engine-exact recognized total.",
      "signature": "export interface BillPreviewWindow {\n    windowId: string;\n    /** ISO timestamps. */\n    windowStart: string;\n    windowEnd: string;\n    /** Rated charges the engine recognized in this window. */\n    chargeCount: number;\n    /** Nanodollars, decimal string (null = unavailable). */\n    ratedNanos: NanosAmount;\n}",
      "typeReferences": [
        {
          "name": "NanosAmount",
          "source": "packages/farthershore-js/dist/types.d.ts#L1179"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.Bootstrap",
      "name": "@farthershore/farthershore-js.Bootstrap",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L294",
      "description": "What `fs.bootstrap()` returns — everything a generated/managed frontend needs\nto discover the business it's running for AND render its catalog: the full\nplan list (pricing model and included quotas), business meters, docs /\nlegal origins, and the featured-plan pointer.",
      "signature": "export interface Bootstrap {\n    /** Wire schema version of the resolve DTO this bootstrap was decoded from\n     *  (CC5). Additive negotiation hook; legacy payloads (no version) decode as\n     *  `1`. Informational today — the SDK reads every shape tolerantly. */\n    schemaVersion: number;\n    business: Business;\n    environment: EnvironmentInfo | null;\n    branding: Branding;\n    /** The business's available/purchasable plans (empty when none are\n     *  published). The single source the plans/pricing UI renders from. */\n    plans: Plan[];\n    /** The business's active custom-frontend release hash, or null. Informational\n     *  (diagnostics) — V0 serving is host-keyed at the edge. */\n    frontendReleaseHash: string | null;\n    /** Available module keys derived from the plan set (non-empty once plans exist):\n     *  e.g. \"billing\", \"usage-quota\", \"docs\", \"legal\". */\n    availableModules: string[];\n    /** The business's declared counted-resource catalog (W5.1). Empty when the\n     *  business declares none. */\n    declaredResources: DeclaredResource[];\n}",
      "typeReferences": [
        {
          "name": "Branding",
          "source": "packages/farthershore-js/dist/types.d.ts#L2"
        },
        {
          "name": "Business",
          "source": "packages/farthershore-js/dist/types.d.ts#L23"
        },
        {
          "name": "DeclaredResource",
          "source": "packages/farthershore-js/dist/types.d.ts#L282"
        },
        {
          "name": "EnvironmentInfo",
          "source": "packages/farthershore-js/dist/types.d.ts#L85"
        },
        {
          "name": "Plan",
          "source": "packages/farthershore-js/dist/types.d.ts#L127"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.Branding",
      "name": "@farthershore/farthershore-js.Branding",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L2",
      "description": "Public export Branding; see its declaration and owning guide.",
      "signature": "export interface Branding {\n    displayName: string;\n    /** Square brand mark (favicon / nav mark). */\n    iconUrl: string | null;\n    /** Horizontal text logo (wordmark) — rendered in place of the displayName\n     *  text when set. Most products only have an icon. */\n    logoUrl: string | null;\n    /** Marketing/header description for the business, when set. */\n    description: string | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.BucketState",
      "name": "@farthershore/farthershore-js.BucketState",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1184",
      "description": "Lifecycle state of a funding allowance (balance bucket) — mirrors Core's\n`BucketState` (Prisma) verbatim. `AVAILABLE` is the live, spendable\nstate; `EXPIRY_PENDING` is still spendable but about to expire; `PENDING`\nis not yet spendable; `FROZEN` / `EXPIRED` / `CANCELLED` are not spendable.",
      "signature": "export type BucketState = \"PENDING\" | \"AVAILABLE\" | \"EXPIRY_PENDING\" | \"FROZEN\" | \"EXPIRED\" | \"CANCELLED\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.Business",
      "name": "@farthershore/farthershore-js.Business",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L23",
      "description": "Public export Business; see its declaration and owning guide.",
      "signature": "export interface Business {\n    id: string;\n    /** Subdomain slug (the first label of the gateway/portal host). */\n    slug: string;\n    name: string;\n    description: string | null;\n    branding: Branding;\n    /** Gateway origin host for builder-feature calls (the business `runtimeHostname`). */\n    gatewayHost: string;\n    /** Public portal host. */\n    portalHost: string;\n    /** R2 public origin + business prefix where MDX docs live, or null when the\n     *  platform has no docs origin configured (local dev). The `/docs` view\n     *  concatenates the doc filename onto this. */\n    docsBaseUrl: string | null;\n    /** R2 public origin + business prefix for per-business legal MDX\n     *  (terms / privacy), or null. The legal view falls back to the platform\n     *  terms notice when null. */\n    legalBaseUrl: string | null;\n    /** Versioned legal documents declared by the business, keyed by extensible\n     *  kind (`terms`, `privacy`, custom kinds). URLs are public CDN MDX objects. */\n    legal?: {\n        documents: Record<string, LegalDocumentReference__0e8dba55b6a6>;\n    };\n    /** Platform-owned docs visibility flag. When `false` the portal /docs\n     *  surface is suppressed (nav item hidden, route 404s) regardless of\n     *  whether `docsBaseUrl` is set. Absent on older Core payloads — the SDK\n     *  defaults this to `true` (backward-compatible). */\n    docsEnabled: boolean;\n    /** Immutable `CompiledPlan.id` of the featured plan, or null. Used to render\n     *  the \"Most Popular\" treatment in the plans UI. */\n    featuredCompiledPlanId: string | null;\n    /** Business-level meter definitions — the dimension catalog used to label\n     *  usage rows. Empty when the business declares no meters. */\n    meters: Meter[];\n}",
      "typeReferences": [
        {
          "name": "Branding",
          "source": "packages/farthershore-js/dist/types.d.ts#L2"
        },
        {
          "name": "LegalDocumentReference__0e8dba55b6a6",
          "source": "packages/farthershore-js/dist/types.d.ts#L61"
        },
        {
          "name": "Meter",
          "source": "packages/farthershore-js/dist/types.d.ts#L15"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.BusinessResource",
      "name": "@farthershore/farthershore-js.BusinessResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/business.d.ts#L2",
      "description": "Public export BusinessResource; see its declaration and owning guide.",
      "signature": "export interface BusinessResource {\n    /** The business this frontend is running for (resolved via bootstrap). */\n    get(): Promise<Business>;\n    /** The business's declared counted-resource catalog (W5.1) — name + label +\n     *  scope + per-plan cap. The same list `bootstrap()` resolves. */\n    resources(): Promise<DeclaredResource[]>;\n}",
      "typeReferences": [
        {
          "name": "Business",
          "source": "packages/farthershore-js/dist/types.d.ts#L23"
        },
        {
          "name": "DeclaredResource",
          "source": "packages/farthershore-js/dist/types.d.ts#L282"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.CancelSubscriptionResult",
      "name": "@farthershore/farthershore-js.CancelSubscriptionResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1122",
      "description": "`POST /me/cancel` — the platform performs the cancel: free subs end\nimmediately, paid subs are scheduled on the provider for the end of the\ncurrent billing period. There is no hosted-page hand-off: the caller gets\na typed result back, and `cancelsAt` is the boundary the provider\nanswered with (null when it reported none, or for an immediate free\ncancel). NEVER invented client-side.",
      "signature": "export interface CancelSubscriptionResult {\n    subscription?: unknown;\n    /** ISO instant the subscription ends, or null. */\n    cancelsAt: string | null;\n    raw: unknown;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ChangePlanResult",
      "name": "@farthershore/farthershore-js.ChangePlanResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1144",
      "description": "`POST /me/change-plan` — Core decides inline-apply vs checkout vs portal\nredirect; all three surfaces normalized onto one shape.",
      "signature": "export interface ChangePlanResult {\n    subscription?: unknown;\n    checkoutUrl?: string | null;\n    portalRedirect?: {\n        url: string;\n    } | null;\n    raw: unknown;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.classifyFsLimit",
      "name": "@farthershore/farthershore-js.classifyFsLimit",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/deny-codes.d.ts#L75",
      "description": "Classify a usage-limit deny into its {@link FsLimitClass}, or `null` when the\ndeny is NOT a usage-limit affordance. PURE + total. Hand-mirror of the\ncontracts `classifyLimit(wireCode, limitCode, status)` — the same switch,\nsame status guard. A class added/dropped or a mapping changed in contracts is\ncaught by the per-class sweep in `test/deny-codes-drift.test.ts`.",
      "signature": "export declare function classifyFsLimit(wireCode: string, limitCode: string | null, status: number): FsLimitClass | null;",
      "typeReferences": [
        {
          "name": "FsLimitClass",
          "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.COMPONENT_GATE_MODES",
      "name": "@farthershore/farthershore-js.COMPONENT_GATE_MODES",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/component-policy.d.ts#L4",
      "description": "The single gate-mode vocabulary — a faithful copy of the contracts\n`COMPONENT_GATE_MODES` (vocabulary-equality-tested in test/).",
      "signature": "declare const COMPONENT_GATE_MODES: readonly [\"hide\", \"disable\", \"readOnly\", \"denied\"];",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ComponentAccessPolicyRow",
      "name": "@farthershore/farthershore-js.ComponentAccessPolicyRow",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L945",
      "description": "One per-subscriber component-gate override row (`GET /me`\n`componentAccessPolicies`) — shape-matches the contracts\n`ComponentAccessPolicyDto`.",
      "signature": "export interface ComponentAccessPolicyRow {\n    /** A managed component id or a `custom:<slug>` key. */\n    componentKey: string;\n    /** Override render-gate permission, or null → component default. */\n    requiredPermission: string | null;\n    /** Override deny render (`hide|disable|readOnly|denied`), or null →\n     *  component default. */\n    gateMode: string | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ComponentGateMode",
      "name": "@farthershore/farthershore-js.ComponentGateMode",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/component-policy.d.ts#L5",
      "description": "Public export ComponentGateMode; see its declaration and owning guide.",
      "signature": "export type ComponentGateMode = (typeof COMPONENT_GATE_MODES)[number];",
      "typeReferences": [
        {
          "name": "COMPONENT_GATE_MODES",
          "source": "packages/farthershore-js/dist/component-policy.d.ts#L4"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ComponentPermissionDefault",
      "name": "@farthershore/farthershore-js.ComponentPermissionDefault",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/component-policy.d.ts#L10",
      "description": "A managed default entry — faithful copy of the contracts\n`ComponentPermissionDefault` shape.",
      "signature": "export interface ComponentPermissionDefault {\n    permission: string | null;\n    writePermission?: string;\n    presentational?: true;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ComponentRegistration",
      "name": "@farthershore/farthershore-js.ComponentRegistration",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/component-policy.d.ts#L47",
      "description": "Public export ComponentRegistration; see its declaration and owning guide.",
      "signature": "export interface ComponentRegistration {\n    /** A `custom:<slug>` key (builder components) or a managed id (to override\n     *  a managed default host-side). */\n    id: string;\n    /** Render-gate permission. Omit to fall through to overlay/managed/derived\n     *  resolution. */\n    permission?: string;\n    /** Mutating-affordance permission; derived `<subject>:write` otherwise. */\n    writePermission?: string;\n    /** Default deny render for this component. */\n    gateMode?: ComponentGateMode;\n    /** Renders ungated by design. Explicit only — never inferred. */\n    presentational?: boolean;\n}",
      "typeReferences": [
        {
          "name": "ComponentGateMode",
          "source": "packages/farthershore-js/dist/component-policy.d.ts#L5"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.CoreRequest",
      "name": "@farthershore/farthershore-js.CoreRequest",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/http.d.ts#L3",
      "description": "Public export CoreRequest; see its declaration and owning guide.",
      "signature": "export interface CoreRequest {\n    method: \"GET\" | \"POST\" | \"PATCH\" | \"PUT\" | \"DELETE\";\n    path: string;\n    query?: Record<string, string | number | undefined | null>;\n    body?: unknown;\n    /** Caller-stable retry identity for durable mutation replay. */\n    idempotencyKey?: string;\n    /** \"session\" attaches the consumer session bearer; \"none\" is for public\n     *  endpoints (resolve/discover). Defaults to \"session\". */\n    auth?: \"session\" | \"none\";\n    /** When `false`, a tolerated `401` on this (authed) read does NOT trigger the\n     *  managed auth-layer recovery (`onUnauthorizedManaged` — the hosted-sign-in\n     *  redirect / persona sign-out). Use for best-effort `/me` reads that already\n     *  swallow a 401 and render a signed-out/unsubscribed surface: re-authing an\n     *  already signed-in user can't clear an authorization 401, so the redirect is\n     *  futile and loops. `onUnauthorized` (config hook) + `onError` still fire.\n     *  Defaults to `true` (a lapsed authed session still bounces to recovery). */\n    recoverAuth?: boolean;\n    /** Abort signal — when it fires (e.g. a React hook unmounts or its deps\n     *  change), the in-flight read rejects with {@link FartherShoreAbortError}. */\n    signal?: AbortSignal;\n    /**\n     * Per-request organization scope. `undefined` inherits the client selection;\n     * `null` deliberately omits the organization header without changing that\n     * shared selection. Use this for APIs whose documented default-subscription\n     * read is intentionally independent of the workspace currently shown in the\n     * rest of the portal.\n     */\n    organizationId?: string | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.CreatedApiKey",
      "name": "@farthershore/farthershore-js.CreatedApiKey",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L375",
      "description": "Returned ONLY by create/rotate — carries the full secret, shown once.",
      "signature": "export interface CreatedApiKey extends ApiKey {\n    /** The full key. The platform never returns it again — store it now. */\n    secret: string;\n}",
      "typeReferences": [
        {
          "name": "ApiKey",
          "source": "packages/farthershore-js/dist/types.d.ts#L347"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.createFartherShoreClient",
      "name": "@farthershore/farthershore-js.createFartherShoreClient",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/client.d.ts#L211",
      "description": "Create a {@link FartherShoreClient}. Zero-config: on a platform-served portal\nno config is needed at all — the edge injects `window.__FS_CONFIG__` with the\nenvironment's Core URL (and Clerk connection), `portalHost` defaults to\n`window.location.host`, and the business is discovered at\n{@link FartherShoreClient.bootstrap}. Those reads are LAZY (never at\nconstruction — only when something is actually resolved, e.g. the first\nrequest), so `createFartherShoreClient()` never throws.\n\nThe optional `config` carries only builder-facing options\n({@link FartherShoreConfig}: `getToken`, `organizationId`, `mock`, `fetch`,\n`retry`, the error hooks). Platform-infrastructure knobs\n(coreUrl/portalHost/businessId/gatewayUrl/environmentId) are intentionally NOT\naccepted here — the platform supplies them at the edge. They are STRIPPED at\nruntime (not merely rejected by TypeScript, which only catches object\nliterals), so a plain-JS or `as any` caller physically cannot set them through\nthis entry point. A harness that must target a non-prod environment uses\n`createFartherShoreClientWithPlatformConfig` from\n`@farthershore/farthershore-js/internal`.",
      "signature": "export declare function createFartherShoreClient(config?: FartherShoreConfig): FartherShoreClient;",
      "typeReferences": [
        {
          "name": "FartherShoreClient",
          "source": "packages/farthershore-js/dist/client.d.ts#L36"
        },
        {
          "name": "FartherShoreConfig",
          "source": "packages/farthershore-js/dist/config.d.ts#L95"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.CreateServiceAccountInput",
      "name": "@farthershore/farthershore-js.CreateServiceAccountInput",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L441",
      "description": "Public export CreateServiceAccountInput; see its declaration and owning guide.",
      "signature": "export interface CreateServiceAccountInput {\n    name: string;\n    requestedPermissions: NonEmptyPermissionList__ca911cbb6fa0;\n    scopes?: string[];\n    usageLimit?: ServiceAccountUsageLimitRequest__f255b800fa4e;\n}",
      "typeReferences": [
        {
          "name": "NonEmptyPermissionList__ca911cbb6fa0",
          "source": "packages/farthershore-js/dist/types.d.ts#L440"
        },
        {
          "name": "ServiceAccountUsageLimitRequest__f255b800fa4e",
          "source": "packages/farthershore-js/dist/types.d.ts#L399"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.CreateUsageLimitInput",
      "name": "@farthershore/farthershore-js.CreateUsageLimitInput",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L604",
      "description": "Strict POST body: immutable subject + quantity, one value lane, and a\ncoherent BLOCK/NOTIFY threshold.",
      "signature": "export type CreateUsageLimitInput = UsageLimitSubject & UsageLimitValue & UsageLimitCreateMode__f16ef2d50497 & {\n    quantity: string;\n};",
      "typeReferences": [
        {
          "name": "UsageLimitCreateMode__f16ef2d50497",
          "source": "packages/farthershore-js/dist/types.d.ts#L595"
        },
        {
          "name": "UsageLimitSubject",
          "source": "packages/farthershore-js/dist/types.d.ts#L570"
        },
        {
          "name": "UsageLimitValue",
          "source": "packages/farthershore-js/dist/types.d.ts#L563"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.CUSTOM_COMPONENT_KEY_PATTERN",
      "name": "@farthershore/farthershore-js.CUSTOM_COMPONENT_KEY_PATTERN",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/component-policy.d.ts#L44",
      "description": "Faithful copy of the contracts `CUSTOM_COMPONENT_KEY_PATTERN` — the slug\nbudget matches the custom-subject grammar (≤32) so the derived permission\nsubject is always declarable.",
      "signature": "declare const CUSTOM_COMPONENT_KEY_PATTERN: RegExp;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.DateFormatOptions",
      "name": "@farthershore/farthershore-js.DateFormatOptions",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L146",
      "description": "Optional date-formatting options. Defaults: en-US, medium date style.",
      "signature": "export interface DateFormatOptions {\n    /** BCP-47 locale. Default \"en-US\". */\n    locale?: string;\n    /** `Intl.DateTimeFormat` date style. Default \"medium\". */\n    dateStyle?: \"full\" | \"long\" | \"medium\" | \"short\";\n    /** `Intl.DateTimeFormat` time style. Omitted by default (date only). */\n    timeStyle?: \"full\" | \"long\" | \"medium\" | \"short\";\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.DeclaredResource",
      "name": "@farthershore/farthershore-js.DeclaredResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L282",
      "description": "A product-declared counted resource (W5.1 / P-RESCATALOG). The product's\ncatalog of `product.resource(...)` declarations, surfaced so a generated /\nmanaged frontend can discover what resources exist and render their usage\nWITHOUT a per-plan lookup.\n\n- `scope: 'subscription'` — counted once per subscription (the common case).\n- `scope: 'subject'` — counted per subject (e.g. per `project`), with\n  `subjectType` naming the subject; pass `{ subjectId }` to the resource\n  verbs so the count keys on that subject.\n\n`cap` is the per-plan ceiling read from the active plan's\n`resourceLimits[name]` (the bare resource name — NOT prefixed). It's\n`number` (a numeric cap), `true` is treated as unlimited (left undefined),\nand `null`/absent means uncapped/unknown.",
      "signature": "export interface DeclaredResource {\n    name: string;\n    display?: string;\n    scope: \"subscription\" | \"subject\";\n    subjectType?: string;\n    /** Per-plan cap for this resource, when a plan declares one (numeric only). */\n    cap?: number | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.defaultGateModeFor",
      "name": "@farthershore/farthershore-js.defaultGateModeFor",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/component-policy.d.ts#L38",
      "description": "FAITHFUL COPY of contracts `defaultGateModeFor` (Subscriber-RBAC R5) — the\ngate mode used when NOTHING configured one. Non-sensitive components render\nan explicit AccessDenied (`\"denied\"`) instead of silently vanishing; the\nsensitive set keeps `\"hide\"` (their existence is the confidential fact).\nParity is pinned in test/component-policy-parity.test.ts.",
      "signature": "export declare function defaultGateModeFor(componentId: string): \"hide\" | \"denied\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.downloadCsv",
      "name": "@farthershore/farthershore-js.downloadCsv",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/csv.d.ts#L43",
      "description": "Trigger a browser download of `csv` as `filename`. DOM side-effect — a no-op\noutside the browser (SSR-safe). Components call this; pure callers stick to\nthe string builders above.",
      "signature": "export declare function downloadCsv(csv: string, filename: string): void;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.EntitlementSnapshot",
      "name": "@farthershore/farthershore-js.EntitlementSnapshot",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L3",
      "description": "Public export EntitlementSnapshot; see its declaration and owning guide.",
      "signature": "export interface EntitlementSnapshot {\n    /** True when an ACTIVE subscriber context backed this snapshot. */\n    hasSubscriber: boolean;\n    /** Resource limits on the current subscriber's pinned plan. */\n    resourceLimits: Record<string, number>;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.EntitlementsResource",
      "name": "@farthershore/farthershore-js.EntitlementsResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L16",
      "description": "Public export EntitlementsResource; see its declaration and owning guide.",
      "signature": "export interface EntitlementsResource {\n    /** Read the current subscriber's entitlement maps. Signed-out users get\n     *  empty maps so app code can render disabled/upsell states without a\n     *  separate auth guard. */\n    snapshot(): Promise<EntitlementSnapshot>;\n    /** Numeric resource limit, or null when absent. */\n    resourceLimit(key: string): Promise<number | null>;\n    /** Per-resource `{ limit, current }` for the pinned plan (`N of M`). The\n     *  LIMIT side lives in the `/me` snapshot, but `current` is a live count, so\n     *  this reads the dedicated `/me/resource-limit-usage` route. Read-through cached\n     *  (the cache owns the fetch lifecycle, like the other `/me` reads — no\n     *  per-caller signal). Signed-out / no subscription → an empty map. */\n    resourceLimitUsage(): Promise<ResourceLimitUsageMap>;\n}",
      "typeReferences": [
        {
          "name": "EntitlementSnapshot",
          "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L3"
        },
        {
          "name": "ResourceLimitUsageMap",
          "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L15"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.EnvironmentInfo",
      "name": "@farthershore/farthershore-js.EnvironmentInfo",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L85",
      "description": "Public export EnvironmentInfo; see its declaration and owning guide.",
      "signature": "export interface EnvironmentInfo {\n    id: string;\n    name: string;\n    slug: string;\n    /** Which sign-in flow the portal should drive: Clerk (production) or a\n     *  platform-owned persona browser session (preview/test envs). */\n    authStrategy: AuthStrategy;\n    /** Env branch name (preview/test envs), or null for production scope. */\n    branch: string | null;\n    /** Billing provider mode for the env: \"test\" (no real money) or \"live\".\n     *  Null when the resolve was production-scoped (no env block). The plans UI\n     *  surfaces a \"Test mode\" badge when this is \"test\". */\n    stripeMode: string | null;\n}",
      "typeReferences": [
        {
          "name": "AuthStrategy",
          "source": "packages/farthershore-js/dist/types.d.ts#L59"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.escapeCsvCell",
      "name": "@farthershore/farthershore-js.escapeCsvCell",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/csv.d.ts#L23",
      "description": "Escape one CSV cell — with the spreadsheet formula-injection guard.\n\nOnly primitive scalars carry meaning in a CSV cell; objects coerce to a\nmisleading `[object Object]`, so non-primitives (and null/undefined) render as\nan empty cell.\n\nFORMULA-INJECTION (OWASP): a value that LEADS with a formula trigger\n(`= + -",
      "signature": "export declare function escapeCsvCell(value: unknown): string;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.FartherShoreApiError",
      "name": "@farthershore/farthershore-js.FartherShoreApiError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L49",
      "description": "A non-2xx response from Core or the Gateway. Exposes:\n- `.status` — the HTTP status code;\n- `.code` — the platform error code from the `{ error: { code, message } }`\n  envelope (or a fallback when the envelope is absent);\n- `.body` — the parsed response body, for richer error detail.\n\nCallers commonly branch on `.status` — e.g. `401`/`403` (re-auth), `404`\n(treat as absent), `409` (conflict/retry) — rather than parsing the message.\n\nEvery instance also carries the throttle hints the gateway attaches when\npresent: `.retryAfterSeconds` (from `Retry-After`) and `.rateLimit` (from\n`X-RateLimit-Remaining` / `-Reset`). Both are null when the headers are\nabsent — a developer who does nothing still gets them transparently.",
      "signature": "export declare class FartherShoreApiError extends FartherShoreError {\n    readonly status: number;\n    readonly code: string;\n    readonly body: unknown;\n    /** Seconds to wait before retrying, parsed from `Retry-After`; null when the\n     *  response carried no `Retry-After`. */\n    readonly retryAfterSeconds: number | null;\n    /** The `X-RateLimit-Remaining` / `-Reset` snapshot, or null when absent. */\n    readonly rateLimit: RateLimitSnapshot__934527ed940b | null;\n    /**\n     * Whether the request that produced this error actually carried an auth\n     * credential (a bearer was attached). Set by the transport AFTER the error is\n     * minted. A `401` with `authed === false` is a NEVER-authenticated visitor (a\n     * signed-out `/me` read sent no bearer) — the managed auth layer must treat it\n     * as a no-op, NOT a lapsed-session redirect. Defaults to `true` so any caller\n     * that doesn't thread the flag keeps the prior (always-fire) behaviour.\n     */\n    authed: boolean;\n    /**\n     * Whether a `401` on this request should trigger the MANAGED auth-layer\n     * recovery (the hosted-sign-in redirect / persona sign-out). Best-effort `/me`\n     * reads that already swallow a 401 (and render a signed-out/unsubscribed\n     * surface) set this `false`: re-authenticating an already signed-in user can\n     * never clear an authorization 401, so the redirect is futile and loops. Set\n     * by the transport from `CoreRequest.recoverAuth`. The config-level\n     * `onUnauthorized` + `onError` hooks STILL fire (observability is unaffected);\n     * only the managed reaction is gated. Defaults to `true` (always recover).\n     */\n    recoverAuth: boolean;\n    constructor(status: number, code: string, message: string, body: unknown, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot__934527ed940b | null);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L2"
        },
        {
          "name": "RateLimitSnapshot__934527ed940b",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.FartherShoreClient",
      "name": "@farthershore/farthershore-js.FartherShoreClient",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/client.d.ts#L36",
      "description": "Public export FartherShoreClient; see its declaration and owning guide.",
      "signature": "export interface FartherShoreClient {\n    /** The client's resolved runtime context (coreUrl, portalHost, businessId,\n     *  auth/scoping state, …). `coreUrl`/`portalHost` are LAZY getters — reading\n     *  them performs the `window.__FS_CONFIG__`/`location.host` resolution\n     *  (`coreUrl` falls back to the production platform); everything else is a\n     *  live snapshot of the client's current state. Mainly for\n     *  introspection/tests — prefer the typed resources for actual calls. */\n    readonly context: ClientContext__d9dbf3313290;\n    /** Resolve + cache the business/env/gateway for the current portal host. Safe\n     *  to call repeatedly (memoized). */\n    bootstrap(): Promise<Bootstrap>;\n    /** Set the consumer API key used for Gateway feature calls. */\n    setApiKey(key: string | null): void;\n    /** Set the Core session bearer directly (e.g. from the Clerk browser SDK). */\n    setSessionToken(token: string | null): void;\n    /** Install/replace a live token source resolved per request (short-lived\n     *  Clerk JWTs). `<FartherShoreRoot>` wires this automatically in Clerk\n     *  environments; pass null to uninstall. */\n    setTokenProvider(provider: (() => string | null | Promise<string | null>) | null): void;\n    /** Rescope subsequent Core calls to an owning org (the multi-org\n     *  subscription-context switcher) — sets the `x-fs-organization-id` header.\n     *  Pass null to return to the user's default subscription. Self-persists the\n     *  choice (restored at the next client creation). */\n    setOrganizationId(organizationId: string | null): void;\n    /** The active org id scoping Core calls, or null (the user's default\n     *  subscription). At boot this reflects the persisted choice restored from\n     *  storage; the React org provider seeds its reactive state from it. */\n    getOrganizationId(): string | null;\n    /** Imperative organization scope as an external store. This keeps a mounted\n     * React provider in sync when an application calls `setOrganizationId()`\n     * directly rather than using the managed org switcher. */\n    readonly organizationScope?: {\n        subscribe(listener: () => void): () => void;\n    };\n    /** Install/replace the global 401 reaction (fired by the transport on a 401\n     *  for an authed call). `<FartherShoreRoot>` / `<FsAuthProvider>` wire this\n     *  automatically for managed mid-session recovery (persona sign-out / Clerk\n     *  refresh); pass null to uninstall. A config-level `onUnauthorized` still\n     *  fires first. */\n    setOnUnauthorized(handler: ((err: FartherShoreApiError) => void) | null): void;\n    /** Drop every cached Core read (and the short-lived gateway context token), so\n     *  the next `me()` / list call goes to the network. Use after an out-of-band\n     *  state change the SDK can't observe — e.g. polling `me()` for webhook lag to\n     *  settle after returning from a Stripe Checkout (see `reconcileAfterCheckout`). */\n    invalidate(): void;\n    /** The last `X-RateLimit-*` snapshot observed on any `fs.route` gateway call,\n     *  with a subscribe primitive — the external store behind `useRouteRateLimit()`\n     *  (W8.5). `get()` is null until the first gateway response carried the\n     *  headers; `subscribe` notifies on every change. */\n    readonly rateLimit: {\n        get(): RateLimitSnapshot__934527ed940b | null;\n        subscribe(listener: () => void): () => void;\n    };\n    /** A5-amend (T11) — the last LIMIT/throttle deny observed leaving the\n     *  transport, with a subscribe primitive — the external store behind\n     *  `useLimitStatus()`. ADVISORY (the freshest known RECENT deny, not a live\n     *  poll — the gateway stays authoritative). `get()` is null until the first\n     *  limit deny is observed; `subscribe` notifies on every change. */\n    readonly limitState: {\n        get(): ObservedLimitDeny__ff379deca309 | null;\n        subscribe(listener: () => void): () => void;\n    };\n    /** Read-cache invalidation as an external store. `subscribe` fires when a\n     *  change invalidates what is ALREADY on screen: a new session/identity\n     *  (`setSessionToken`, sign-in/sign-out) or a moved entitlement (any billing\n     *  or plan action, and `invalidate()`).\n     *\n     *  It deliberately does NOT fire on an org switch (org-scoped hooks refetch\n     *  from their own deps) or on an ordinary resource mutation (the hook that\n     *  performed it refetches itself).\n     *\n     *  Every `useAsync`-backed hook subscribes automatically, so built-in hooks\n     *  and custom ones written against `useAsync` already refetch. Use this\n     *  directly only for state held OUTSIDE a hook (a store, an imperative cache\n     *  of your own) that must be invalidated in step with ours. */\n    readonly readCache: {\n        subscribe(listener: () => void): () => void;\n    };\n    /** The business this frontend runs for (resolved via bootstrap). */\n    readonly business: BusinessResource;\n    /** Consumer session: current identity, server-owned persona logout, and\n     * short-lived Gateway context-token minting. */\n    readonly auth: AuthResource;\n    /** The consumer's API keys (list / create / revoke / rotate). */\n    readonly keys: KeysResource;\n    /** Per-dimension usage totals + recent events for this business. */\n    readonly usage: UsageResource;\n    /** Subscriber-managed per-actor usage limits. */\n    readonly usageLimits: UsageLimitsResource;\n    /** The consumer's subscription and Stripe billing portal. */\n    readonly billing: BillingResource;\n    /** The business's plan catalog + the subscribe/checkout flow. */\n    readonly plans: PlansResource;\n    /** Full subscriber context (`GET /me`): lifecycle, trial, scheduled\n     *  transition, eligibility-scoped plans. Null when signed out / no\n     *  subscriber. */\n    me(opts?: {\n        signal?: AbortSignal;\n        /** `null` omits the organization header without changing the shared\n         * client selection; `undefined` uses that selection. */\n        organizationId?: string | null;\n    }): Promise<SubscriberContext | null>;\n    /** Record legal-document acceptances for the current subscriber/org. */\n    acceptLegal(acceptances: LegalAcceptance__cc2291cc0442[]): Promise<void>;\n    /** Multi-org subscription contexts (the org switcher's data). */\n    readonly organizations: OrganizationsResource;\n    /** Team management on the current subscription. */\n    readonly team: TeamResource;\n    /** Managed-RBAC management on the current subscription (settings, the\n     *  derived permission catalog, role CRUD) — team-org OWNER/ADMIN only.\n     *  Configures UX + minted-token claims; the EDGE `permission` constraint\n     *  is the security boundary. */\n    readonly rbac: RbacResource;\n    /** The subscriber's per-category notification preferences (opt-out model):\n     *  `get` the current state, `update` a partial patch. */\n    readonly notifications: NotificationsResource;\n    /** The subscriber-side audit log (cursor-paged). */\n    readonly auditLogs: AuditLogsResource;\n    /** Current subscriber entitlement maps from the pinned plan version. */\n    readonly entitlements: EntitlementsResource;\n    /** Navigation-intent data warmers — see {@link PrefetchSurface}. */\n    readonly prefetch: PrefetchSurface__2b22bd2b6c45;\n    /**\n     * One-line, zero-config calls to your business's enforced gateway — host,\n     * auth, surface, and businessId all auto-resolved from the hosted context.\n     * `fs.route.post(\"/forecast\", { city })`. Limit responses surface as\n     * `LimitExceededError` so the upgrade prompt works on any call.\n     */\n    readonly route: RouteResource;\n    /**\n     * Typed CRUD over a product-declared, quota-counted resource. Rides the\n     * gateway (which diverts to core, the system of record); `create` throws\n     * `LimitExceededError` at the plan cap. `fs.resources(\"widgets\").list()`.\n     */\n    resources<T = unknown>(name: string): ResourcesResource<T>;\n    /** Bound named-integration helper: `fs.integration(\"clerk-admin\").fetch(...)`. */\n    integration(id: string): ManagedIntegration;\n    /**\n     * Generic authenticated Core call — the escape hatch for platform endpoints\n     * the typed resources don't model yet (e.g. a product's `/me/team`,\n     * `/me/audit-logs`). The Core counterpart to {@link invoke}:\n     * it attaches the session bearer + the host/env/org scoping headers and maps\n     * non-2xx to {@link FartherShoreApiError}, exactly like the typed resources —\n     * the caller only supplies the path and the response type. Prefer a typed\n     * resource (`fs.usage`, `fs.keys`, …) when one exists.\n     */\n    core<T>(req: CoreRequest): Promise<T>;\n}",
      "typeReferences": [
        {
          "name": "AuditLogsResource",
          "source": "packages/farthershore-js/dist/resources/account.d.ts#L142"
        },
        {
          "name": "AuthResource",
          "source": "packages/farthershore-js/dist/resources/auth.d.ts#L3"
        },
        {
          "name": "BillingResource",
          "source": "packages/farthershore-js/dist/resources/billing.d.ts#L13"
        },
        {
          "name": "Bootstrap",
          "source": "packages/farthershore-js/dist/types.d.ts#L294"
        },
        {
          "name": "BusinessResource",
          "source": "packages/farthershore-js/dist/resources/business.d.ts#L2"
        },
        {
          "name": "ClientContext__d9dbf3313290",
          "source": "packages/farthershore-js/dist/config.d.ts#L183"
        },
        {
          "name": "CoreRequest",
          "source": "packages/farthershore-js/dist/http.d.ts#L3"
        },
        {
          "name": "EntitlementsResource",
          "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L16"
        },
        {
          "name": "FartherShoreApiError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
        },
        {
          "name": "KeysResource",
          "source": "packages/farthershore-js/dist/resources/keys.d.ts#L3"
        },
        {
          "name": "LegalAcceptance__cc2291cc0442",
          "source": "packages/farthershore-js/dist/types.d.ts#L80"
        },
        {
          "name": "ManagedIntegration",
          "source": "packages/farthershore-js/dist/integrations.d.ts#L6"
        },
        {
          "name": "NotificationsResource",
          "source": "packages/farthershore-js/dist/resources/account.d.ts#L169"
        },
        {
          "name": "ObservedLimitDeny__ff379deca309",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L580"
        },
        {
          "name": "OrganizationsResource",
          "source": "packages/farthershore-js/dist/resources/account.d.ts#L3"
        },
        {
          "name": "PlansResource",
          "source": "packages/farthershore-js/dist/resources/plans.d.ts#L61"
        },
        {
          "name": "PrefetchSurface__2b22bd2b6c45",
          "source": "packages/farthershore-js/dist/client.d.ts#L24"
        },
        {
          "name": "RateLimitSnapshot__934527ed940b",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        },
        {
          "name": "RbacResource",
          "source": "packages/farthershore-js/dist/resources/account.d.ts#L65"
        },
        {
          "name": "ResourcesResource",
          "source": "packages/farthershore-js/dist/resources/resources.d.ts#L25"
        },
        {
          "name": "RouteResource",
          "source": "packages/farthershore-js/dist/resources/route.d.ts#L15"
        },
        {
          "name": "SubscriberContext",
          "source": "packages/farthershore-js/dist/types.d.ts#L897"
        },
        {
          "name": "TeamResource",
          "source": "packages/farthershore-js/dist/resources/account.d.ts#L13"
        },
        {
          "name": "UsageLimitsResource",
          "source": "packages/farthershore-js/dist/resources/usage-limits.d.ts#L3"
        },
        {
          "name": "UsageResource",
          "source": "packages/farthershore-js/dist/resources/usage.d.ts#L7"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.FartherShoreConfig",
      "name": "@farthershore/farthershore-js.FartherShoreConfig",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/config.d.ts#L95",
      "description": "The builder-facing client config — the ONLY shape `createFartherShoreClient`\naccepts. Every field here is something a builder legitimately owns at the app\nlayer: their session provider, their org scope, their fetch impl, mock mode,\nobservability hooks. It contains NO platform-infrastructure knobs.\n\nPlatform routing/plumbing (`coreUrl`, `portalHost`, `businessId`,\n`gatewayUrl`, `environmentId`) is deliberately absent: the edge injects it via\n`window.__FS_CONFIG__` and the SDK discovers the rest at `bootstrap()`, so a\nbuilder calls `createFartherShoreClient()` with zero config. Our own harnesses\nthat must steer a client at a non-prod environment use the internal channel\n({@link FartherShorePlatformConfig} via\n`@farthershore/farthershore-js/internal`) — never this type.",
      "signature": "export interface FartherShoreConfig {\n    /** Owning org id for org-owned subscriptions (the `x-fs-organization-id`\n     *  header / `organizationId` query). Usually set at runtime via\n     *  `fs.setOrganizationId()` / the managed org switcher rather than here. */\n    organizationId?: string | null;\n    /** The consumer API key (`fsk_…`) used to authenticate Gateway feature calls.\n     *  Settable later via `fs.setApiKey()`. */\n    apiKey?: string;\n    /** Session token provider for Core calls. Clerk browser sessions use this;\n     *  test personas use the platform's same-origin HttpOnly cookie instead. */\n    getToken?: TokenProvider;\n    /** Injectable fetch (tests / non-browser runtimes). Defaults to global fetch. */\n    fetch?: FetchLike;\n    /** Automatic-retry policy for transient failures (429 + transient 502/503/504\n     *  + network faults). Retry is ON by default; this only tunes/opts out. See\n     *  {@link RetryConfig}. */\n    retry?: RetryConfig__bec25563219c;\n    /** Optional global hook fired (before the error is thrown) on EVERY non-2xx /\n     *  network failure that leaves the transport. Observability only — it does not\n     *  swallow the error. Default behaviour is unchanged when unset. */\n    onError?: (err: FartherShoreApiError | unknown) => void;\n    /** Optional global hook fired (before throw) when the error is a\n     *  {@link LimitExceededError} — a single place to surface an upgrade prompt. */\n    onLimitExceeded?: (err: LimitExceededError) => void;\n    /** Optional global hook fired (before throw) on a `401` — a single place to\n     *  trigger re-auth. */\n    onUnauthorized?: (err: FartherShoreApiError) => void;\n    /** Render a local portal with deterministic placeholder data and no live\n     *  backend/auth. Also enabled by `window.__FS_CONFIG__.mock === true`. */\n    mock?: boolean;\n}",
      "typeReferences": [
        {
          "name": "FartherShoreApiError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
        },
        {
          "name": "FetchLike",
          "source": "packages/farthershore-js/dist/config.d.ts#L2"
        },
        {
          "name": "LimitExceededError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L206"
        },
        {
          "name": "RetryConfig__bec25563219c",
          "source": "packages/farthershore-js/dist/config.d.ts#L13"
        },
        {
          "name": "TokenProvider",
          "source": "packages/farthershore-js/dist/config.d.ts#L80"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.FartherShoreConfigError",
      "name": "@farthershore/farthershore-js.FartherShoreConfigError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L723",
      "description": "Thrown at client construction for invalid/missing config (e.g. no `coreUrl`,\nno global `fetch`).",
      "signature": "export declare class FartherShoreConfigError extends FartherShoreError {\n    constructor(message: string);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.FartherShoreError",
      "name": "@farthershore/farthershore-js.FartherShoreError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L2",
      "description": "Public export FartherShoreError; see its declaration and owning guide.",
      "signature": "export declare class FartherShoreError extends Error {\n    constructor(message: string);\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.FartherShoreRateLimitedError",
      "name": "@farthershore/farthershore-js.FartherShoreRateLimitedError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L288",
      "description": "A {@link FartherShoreApiError} the caller should BACK OFF and retry — a rate\nlimit (`429`) or one of the transient throttle deny codes. `.retryAfterSeconds`\n(when the gateway sent `Retry-After`) is the hint for how long. Catch it to\nimplement a retry/backoff loop without re-parsing status codes.",
      "signature": "export declare class FartherShoreRateLimitedError extends FartherShoreApiError {\n    /** The semantic {@link FsLimitClass} when this throttle classifies to one\n     *  (`rate` / `concurrency` / `adaptive`), else null. */\n    readonly limitClass: FsLimitClass | null;\n    /** The parsed `_fs` deny envelope when present. */\n    readonly envelope: FsDenyEnvelope__adf7ef9f2448 | null;\n    /** The recommended client reaction (default `backoff_retry` for a throttle). */\n    readonly reaction: FsLimitReaction__06a9e09be641;\n    /** Whether the platform or an upstream provider decided the throttle. */\n    readonly limitOrigin: FsLimitOrigin__1d4de1805fa7;\n    /** The gateway decision id, when the `_fs` envelope carried one. */\n    readonly decisionId: string | null;\n    constructor(status: number, code: string, message: string, body: unknown, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot__934527ed940b | null);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreApiError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
        },
        {
          "name": "FsDenyEnvelope__adf7ef9f2448",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L109"
        },
        {
          "name": "FsLimitClass",
          "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
        },
        {
          "name": "FsLimitOrigin__1d4de1805fa7",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
        },
        {
          "name": "FsLimitReaction__06a9e09be641",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
        },
        {
          "name": "RateLimitSnapshot__934527ed940b",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.FetchLike",
      "name": "@farthershore/farthershore-js.FetchLike",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/config.d.ts#L2",
      "description": "Public export FetchLike; see its declaration and owning guide.",
      "signature": "export type FetchLike = typeof fetch;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.format",
      "name": "@farthershore/farthershore-js.format",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/format/index.d.ts#L1",
      "description": "Public export format; see its declaration and owning guide.",
      "signature": "export { describePlanKind__bc89a2a76f27, selectAutoEnrollPlan__91fe58a3dbee, formatPlanPrice__fc05951fffba, planPriceHeadline__3b389a69aee5, formatPlanPriceDetail__ce62e738fa5f, describePlanSummary__1087c6d6f26e, sortPlansForDisplay__accee323738d, filterSelectablePlans__491d00098a7d, presentPlanPrice__dbe194aa1865, formatCents__0834b254bd71, formatNanos__88e9bbf170bb, formatDate__eb204cfcfad9, formatMinimumSpend__703e50763b9b, entitlementBullets__777c9056ecca, labelResourceLimitKey__6d50ec5c1da1, synthesizePlanFeatures__42c0175e6f51, synthesizePlanFeaturesLean__5ee4c35cee39, quotaLines__aba5f4afb4f1, quotaForDimension__765de95b18ad, computeProgressBar__e4819393223f, buildRateLimits__5220b52a303e, formatRateLimitText__902f4a94c331, isTokenBusiness__5fb93c023117, buildPrimaryUsage__a1cfc1e9cdb3, buildDimensionBreakdown__f82446dddd7c, buildMeterUsageRows__dd03e7a0a916, buildPinnedMeterUsageRows__fd3dc232bb17, subscriptionStatusChip__c2e919e840ee, trialDaysRemaining__a42e758e8e6c, paymentHealth__82ab0e675721, pluralizeUnit__54c9aa5d8d69, unitSuffix__0244077a537f, usagePeriodLabel__e8ab92f06f5c, buildResourceLimitRows__f08613820468, formatPlanLimitWindow__d3866d671c3e, describePlanLimit__44aef0cd7254, catalogPricingLines__c7aab05ab71a, formatCatalogRate__1c4069e5c4b5, formatCatalogRule__8f5b591f982d, formatCatalogFunding__e3d315174586, formatCatalogExhaustion__22106a32de44, prepaidFundingBucket__c3b93630376c, prepaidBalanceNanos__82cd3a195fcf, catalogRuleQualifier__43f6b05ea45d, singularizeMeasure__4920b2d3814d, } from \"./catalog-display.js\";\nexport { planRequiresCheckoutActivation__895e488c9dd3, resolvePlanTransitionRoute__704c66191ea4, isCheckoutOnlyTransitionError__ed7cb1b92a62, describePlanChangeError__6199fc9db841, logPlanChangeError__b74061738e9e, } from \"./plan-transition.js\";\nexport { humanizeMeasureKey__87b59e8494f9, formatMeasureBreakdown__d29c7c37d4b8, } from \"./usage-labels.js\";\nexport { getScheduledTransitionCopy__d0d68b298653, getSubscriberPromoCopy__a02fd2e64736, getSubscriberStatusPresentation__3d2be580d857, humanizeSubscriberStatus__a8dba22c416c, } from \"./subscriber-lifecycle.js\";\n//# sourceMappingURL=index.d.ts.map",
      "typeReferences": [
        {
          "name": "buildDimensionBreakdown__f82446dddd7c",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L253"
        },
        {
          "name": "buildMeterUsageRows__dd03e7a0a916",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L266"
        },
        {
          "name": "buildPinnedMeterUsageRows__fd3dc232bb17",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L291"
        },
        {
          "name": "buildPrimaryUsage__a1cfc1e9cdb3",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L254"
        },
        {
          "name": "buildRateLimits__5220b52a303e",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L255"
        },
        {
          "name": "buildResourceLimitRows__f08613820468",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L354"
        },
        {
          "name": "catalogPricingLines__c7aab05ab71a",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L412"
        },
        {
          "name": "catalogRuleQualifier__43f6b05ea45d",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L380"
        },
        {
          "name": "computeProgressBar__e4819393223f",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L222"
        },
        {
          "name": "describePlanChangeError__6199fc9db841",
          "source": "packages/farthershore-js/dist/format/plan-transition.d.ts#L43"
        },
        {
          "name": "describePlanKind__bc89a2a76f27",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L33"
        },
        {
          "name": "describePlanLimit__44aef0cd7254",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L320"
        },
        {
          "name": "describePlanSummary__1087c6d6f26e",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L91"
        },
        {
          "name": "entitlementBullets__777c9056ecca",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L173"
        },
        {
          "name": "filterSelectablePlans__491d00098a7d",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L124"
        },
        {
          "name": "formatCatalogExhaustion__22106a32de44",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L402"
        },
        {
          "name": "formatCatalogFunding__e3d315174586",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L388"
        },
        {
          "name": "formatCatalogRate__1c4069e5c4b5",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L368"
        },
        {
          "name": "formatCatalogRule__8f5b591f982d",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L383"
        },
        {
          "name": "formatCents__0834b254bd71",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L134"
        },
        {
          "name": "formatDate__eb204cfcfad9",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L160"
        },
        {
          "name": "formatMeasureBreakdown__d29c7c37d4b8",
          "source": "packages/farthershore-js/dist/format/usage-labels.d.ts#L17"
        },
        {
          "name": "formatMinimumSpend__703e50763b9b",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L162"
        },
        {
          "name": "formatNanos__88e9bbf170bb",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L144"
        },
        {
          "name": "formatPlanLimitWindow__d3866d671c3e",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L317"
        },
        {
          "name": "formatPlanPrice__fc05951fffba",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L69"
        },
        {
          "name": "formatPlanPriceDetail__ce62e738fa5f",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L89"
        },
        {
          "name": "formatRateLimitText__902f4a94c331",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L256"
        },
        {
          "name": "getScheduledTransitionCopy__d0d68b298653",
          "source": "packages/farthershore-js/dist/format/subscriber-lifecycle.d.ts#L32"
        },
        {
          "name": "getSubscriberPromoCopy__a02fd2e64736",
          "source": "packages/farthershore-js/dist/format/subscriber-lifecycle.d.ts#L33"
        },
        {
          "name": "getSubscriberStatusPresentation__3d2be580d857",
          "source": "packages/farthershore-js/dist/format/subscriber-lifecycle.d.ts#L34"
        },
        {
          "name": "humanizeMeasureKey__87b59e8494f9",
          "source": "packages/farthershore-js/dist/format/usage-labels.d.ts#L10"
        },
        {
          "name": "humanizeSubscriberStatus__a8dba22c416c",
          "source": "packages/farthershore-js/dist/format/subscriber-lifecycle.d.ts#L31"
        },
        {
          "name": "isCheckoutOnlyTransitionError__ed7cb1b92a62",
          "source": "packages/farthershore-js/dist/format/plan-transition.d.ts#L36"
        },
        {
          "name": "isTokenBusiness__5fb93c023117",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L252"
        },
        {
          "name": "labelResourceLimitKey__6d50ec5c1da1",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L166"
        },
        {
          "name": "logPlanChangeError__b74061738e9e",
          "source": "packages/farthershore-js/dist/format/plan-transition.d.ts#L45"
        },
        {
          "name": "paymentHealth__82ab0e675721",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L342"
        },
        {
          "name": "planPriceHeadline__3b389a69aee5",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L84"
        },
        {
          "name": "planRequiresCheckoutActivation__895e488c9dd3",
          "source": "packages/farthershore-js/dist/format/plan-transition.d.ts#L16"
        },
        {
          "name": "pluralizeUnit__54c9aa5d8d69",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L195"
        },
        {
          "name": "prepaidBalanceNanos__82cd3a195fcf",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L400"
        },
        {
          "name": "prepaidFundingBucket__c3b93630376c",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L80"
        },
        {
          "name": "presentPlanPrice__dbe194aa1865",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L63"
        },
        {
          "name": "quotaForDimension__765de95b18ad",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L220"
        },
        {
          "name": "quotaLines__aba5f4afb4f1",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L212"
        },
        {
          "name": "resolvePlanTransitionRoute__704c66191ea4",
          "source": "packages/farthershore-js/dist/format/plan-transition.d.ts#L22"
        },
        {
          "name": "selectAutoEnrollPlan__91fe58a3dbee",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L12"
        },
        {
          "name": "singularizeMeasure__4920b2d3814d",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L376"
        },
        {
          "name": "sortPlansForDisplay__accee323738d",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L94"
        },
        {
          "name": "subscriptionStatusChip__c2e919e840ee",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L305"
        },
        {
          "name": "synthesizePlanFeatures__42c0175e6f51",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L180"
        },
        {
          "name": "synthesizePlanFeaturesLean__5ee4c35cee39",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L187"
        },
        {
          "name": "trialDaysRemaining__a42e758e8e6c",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L311"
        },
        {
          "name": "unitSuffix__0244077a537f",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L201"
        },
        {
          "name": "usagePeriodLabel__e8ab92f06f5c",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L210"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.FS_DENY_CODES",
      "name": "@farthershore/farthershore-js.FS_DENY_CODES",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/deny-codes.d.ts#L4",
      "description": "Every canonical gateway deny wire `code` (mirrors\n`GATEWAY_DENY_CODES` keys in `@farthershore/contracts`). Branch on\n`FartherShoreApiError.code` against these.",
      "signature": "declare const FS_DENY_CODES: {\n    readonly limit_allocator_unavailable: \"limit_allocator_unavailable\";\n    readonly limit_exceeded: \"limit_exceeded\";\n    readonly rate_limited: \"rate_limited\";\n    readonly credit_exhausted: \"credit_exhausted\";\n    readonly credit_state_unavailable: \"credit_state_unavailable\";\n    readonly enforcement_denied: \"enforcement_denied\";\n    readonly route_not_enabled: \"route_not_enabled\";\n    readonly invalid_entitlement_shape: \"invalid_entitlement_shape\";\n    readonly unsupported_constraint_schema: \"unsupported_constraint_schema\";\n    readonly enforcement_error: \"enforcement_error\";\n    readonly enforcement_dependency_unavailable: \"enforcement_dependency_unavailable\";\n    readonly admission_descriptor_unavailable: \"admission_descriptor_unavailable\";\n    readonly admission_descriptor_no_admissible_tuple: \"admission_descriptor_no_admissible_tuple\";\n    readonly invalid_admission_knob: \"invalid_admission_knob\";\n    readonly admission_bound_exceeded: \"admission_bound_exceeded\";\n    readonly commercial_release_unprovable: \"commercial_release_unprovable\";\n    readonly concurrency_limit_exceeded: \"concurrency_limit_exceeded\";\n    readonly concurrency_context_unavailable: \"concurrency_context_unavailable\";\n    readonly concurrency_coordinator_unavailable: \"concurrency_coordinator_unavailable\";\n    readonly key_expired: \"key_expired\";\n    readonly credential_revoked: \"credential_revoked\";\n    readonly credential_rotated: \"credential_rotated\";\n    readonly credential_env_reset: \"credential_env_reset\";\n    readonly permission_denied: \"permission_denied\";\n    readonly permission_unresolved: \"permission_unresolved\";\n    readonly geo_context_unavailable: \"geo_context_unavailable\";\n    readonly geo_blocked: \"geo_blocked\";\n    readonly geo_not_allowed: \"geo_not_allowed\";\n    readonly resource_count_limit_exceeded: \"resource_count_limit_exceeded\";\n    readonly post_stream_overspend: \"post_stream_overspend\";\n    readonly request_too_large: \"request_too_large\";\n    readonly resolver_rate_limited: \"resolver_rate_limited\";\n    readonly resolver_unavailable: \"resolver_unavailable\";\n    readonly credential_resolver_miss_rate_limited: \"credential_resolver_miss_rate_limited\";\n    readonly provider_throttled: \"provider_throttled\";\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.FS_DENY_LIMIT_STATUSES",
      "name": "@farthershore/farthershore-js.FS_DENY_LIMIT_STATUSES",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/deny-codes.d.ts#L57",
      "description": "HTTP statuses that, with a limit descriptor present, mint a limit/upgrade\naffordance (LimitExceededError) SDK-side. Mirrors `DENY_LIMIT_STATUSES`.",
      "signature": "declare const FS_DENY_LIMIT_STATUSES: readonly [402, 403, 413, 429];",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.FS_LIMIT_CLASSES",
      "name": "@farthershore/farthershore-js.FS_LIMIT_CLASSES",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/deny-codes.d.ts#L63",
      "description": "The closed set of usage-limit classes. Mirrors the contracts `LimitClass`.",
      "signature": "declare const FS_LIMIT_CLASSES: readonly [\"quota\", \"rate\", \"concurrency\", \"capacity\", \"spend\", \"adaptive\"];",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.FsAuthUser",
      "name": "@farthershore/farthershore-js.FsAuthUser",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L789",
      "description": "A normalized identity for the signed-in user — the same shape whether it\ncomes from Clerk or Core's safe test-persona session view. The persona\ncredential remains in an HttpOnly cookie and is never present in `raw`.",
      "signature": "export interface FsAuthUser {\n    /** Stable user/subscription id, or null when unknown. */\n    id: string | null;\n    firstName: string | null;\n    lastName: string | null;\n    /** Display name — Clerk's `fullName`, else `first last`, else null. */\n    fullName: string | null;\n    /** Primary email — Clerk's `primaryEmailAddress.emailAddress` (nested) or a\n     *  flat `email`, else null. */\n    email: string | null;\n    imageUrl: string | null;\n    /** The original Clerk user or safe persona identity view, untouched. */\n    raw: unknown;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.FsDenyCode",
      "name": "@farthershore/farthershore-js.FsDenyCode",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/deny-codes.d.ts#L42",
      "description": "A canonical gateway deny wire code.",
      "signature": "export type FsDenyCode = (typeof FS_DENY_CODES)[keyof typeof FS_DENY_CODES];",
      "typeReferences": [
        {
          "name": "FS_DENY_CODES",
          "source": "packages/farthershore-js/dist/deny-codes.d.ts#L4"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.FsDenyLimitStatus",
      "name": "@farthershore/farthershore-js.FsDenyLimitStatus",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/deny-codes.d.ts#L58",
      "description": "Public export FsDenyLimitStatus; see its declaration and owning guide.",
      "signature": "export type FsDenyLimitStatus = (typeof FS_DENY_LIMIT_STATUSES)[number];",
      "typeReferences": [
        {
          "name": "FS_DENY_LIMIT_STATUSES",
          "source": "packages/farthershore-js/dist/deny-codes.d.ts#L57"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.FsFetchOptions",
      "name": "@farthershore/farthershore-js.FsFetchOptions",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/fetch.d.ts#L3",
      "description": "Options for {@link fsFetch}.",
      "signature": "export interface FsFetchOptions {\n    /** HTTP method for the upstream call. Defaults to `GET`. */\n    method?: string;\n    /** Browser-controlled headers. The named integration allowlists them. */\n    headers?: Record<string, string>;\n    /** Browser-controlled query parameters. The named integration allowlists\n     * each name; secret injection parameters remain server-owned. */\n    query?: Record<string, string>;\n    /** Optional, explicitly typed request body. The named integration's bounded\n     * body declaration is enforced by the gateway. */\n    body?: {\n        kind: \"json\";\n        value: unknown;\n    } | {\n        kind: \"text\";\n        value: string;\n    };\n    /** Abort signal — cancels the in-flight secure fetch (and the token mint). */\n    signal?: AbortSignal;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.FsLimitClass",
      "name": "@farthershore/farthershore-js.FsLimitClass",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65",
      "description": "The semantic class a usage-limit deny falls into. Mirrors `LimitClass`.",
      "signature": "export type FsLimitClass = (typeof FS_LIMIT_CLASSES)[number];",
      "typeReferences": [
        {
          "name": "FS_LIMIT_CLASSES",
          "source": "packages/farthershore-js/dist/deny-codes.d.ts#L63"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.FsRuntimeConfig",
      "name": "@farthershore/farthershore-js.FsRuntimeConfig",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/config.d.ts#L47",
      "description": "Platform-injected runtime config. Portals served through the Farther Shore\nedge get a `window.__FS_CONFIG__` script injected into their HTML (the\nsite-shell worker's inject-meta pass), carrying the per-environment platform\nvalues — so a portal bundle ships env-agnostic and `createFartherShoreClient()`\nworks with zero config. For standalone clients and platform harnesses,\nexplicit config wins over injected values. In a managed portal the shell's\nsame-origin route is authoritative and explicit Core overrides are ignored.",
      "signature": "export interface FsRuntimeConfig {\n    /**\n     * Set only by the Farther Shore site shell. A managed portal must never use\n     * the SDK's standalone production fallback: it has to receive a valid\n     * same-environment Core route from that shell.\n     */\n    managedPortal?: boolean;\n    /** Platform Core base URL for this environment. */\n    coreUrl?: string;\n    /** Clerk connection for clerk-strategy environments (public values). */\n    clerk?: {\n        publishableKey?: string;\n        signInUrl?: string;\n        /** Hosted sign-UP page. Optional: the SDK derives it from `signInUrl` when\n         *  the edge does not inject one. */\n        signUpUrl?: string;\n        satelliteDomain?: string;\n    };\n    /** The business this portal serves; injected by the edge, else discovered\n     *  by bootstrap(). */\n    businessId?: string;\n    /** The serving edge proxies `/_fs/api/*` to core, so requests should go\n     *  SAME-ORIGIN. See {@link resolveCoreUrl}. */\n    coreProxy?: boolean;\n    /** Local placeholder-data mode for generated portals. */\n    mock?: boolean;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.FsSecureFetchEnvelope",
      "name": "@farthershore/farthershore-js.FsSecureFetchEnvelope",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/fetch.d.ts#L27",
      "description": "The validated envelope the SDK sends. A hand-mirror of the\n`@farthershore/contracts` `SecureFetchEnvelope` — the published SDK bundle\nstays contracts-free (see deny-codes.ts), and the parity is pinned by the\ntest-only drift guard `test/secure-fetch-envelope-drift.test.ts`.",
      "signature": "export interface FsSecureFetchEnvelope {\n    integrationId: string;\n    path: string;\n    method: string;\n    headers?: Record<string, string>;\n    query?: Record<string, string>;\n    body?: {\n        kind: \"json\";\n        value: unknown;\n    } | {\n        kind: \"text\";\n        value: string;\n    };\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.GatewayContextToken",
      "name": "@farthershore/farthershore-js.GatewayContextToken",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L803",
      "description": "Public export GatewayContextToken; see its declaration and owning guide.",
      "signature": "export interface GatewayContextToken {\n    /** Short-lived `fsc_` bearer accepted by the Gateway for this subscriber. */\n    token: string;\n    /** ISO timestamp when the token expires. */\n    expiresAt: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.hasPortalAccess",
      "name": "@farthershore/farthershore-js.hasPortalAccess",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/format/subscriber-lifecycle.d.ts#L18",
      "description": "Whether a subscriber's lifecycle grants access to the authenticated portal\nsurfaces. WHERE to send someone without access is the builder's routing\ndecision; WHETHER they have it is platform semantics, so the rule lives here\n— beside the lifecycle copy it moves in lockstep with. A new lifecycle state\nchanges both in one file instead of drifting across every builder repo.\n\nNot a formatter, so it is exported flat from the package root rather than\nthrough the `format` namespace.",
      "signature": "export declare function hasPortalAccess(subscriber: SubscriberDetail | null | undefined): boolean;",
      "typeReferences": [
        {
          "name": "SubscriberDetail",
          "source": "packages/farthershore-js/dist/types.d.ts#L859"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.integrationUrl",
      "name": "@farthershore/farthershore-js.integrationUrl",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/integrations.d.ts#L19",
      "description": "Same-origin named integration base URL.",
      "signature": "export declare function integrationUrl(id: string): string;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.isComponentGateMode",
      "name": "@farthershore/farthershore-js.isComponentGateMode",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/component-policy.d.ts#L7",
      "description": "True iff `mode` is a member of {@link COMPONENT_GATE_MODES}.",
      "signature": "export declare function isComponentGateMode(mode: string): mode is ComponentGateMode;",
      "typeReferences": [
        {
          "name": "ComponentGateMode",
          "source": "packages/farthershore-js/dist/component-policy.d.ts#L5"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.isCustomComponentKey",
      "name": "@farthershore/farthershore-js.isCustomComponentKey",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/component-policy.d.ts#L46",
      "description": "True iff `id` is a well-formed builder-custom component key.",
      "signature": "export declare function isCustomComponentKey(id: string): boolean;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.isDenyLimitStatus",
      "name": "@farthershore/farthershore-js.isDenyLimitStatus",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/deny-codes.d.ts#L61",
      "description": "True when a status is in the limit/upgrade-affording taxonomy. Mirrors the\ncontracts `isDenyLimitStatus`.",
      "signature": "export declare function isDenyLimitStatus(status: number): status is FsDenyLimitStatus;",
      "typeReferences": [
        {
          "name": "FsDenyLimitStatus",
          "source": "packages/farthershore-js/dist/deny-codes.d.ts#L58"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.isFsLimitClass",
      "name": "@farthershore/farthershore-js.isFsLimitClass",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/deny-codes.d.ts#L67",
      "description": "Guard: is `value` a member of the closed {@link FsLimitClass} set?",
      "signature": "export declare function isFsLimitClass(value: string): value is FsLimitClass;",
      "typeReferences": [
        {
          "name": "FsLimitClass",
          "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.isSensitiveComponentKey",
      "name": "@farthershore/farthershore-js.isSensitiveComponentKey",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/component-policy.d.ts#L40",
      "description": "True iff `id` names a confidentiality-sensitive managed component.",
      "signature": "export declare function isSensitiveComponentKey(id: string): boolean;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.isValidPermissionRequirement",
      "name": "@farthershore/farthershore-js.isValidPermissionRequirement",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/permissions.d.ts#L12",
      "description": "Whether `permission` is a canonical permission requirement.\nThe grammar accepts the bare global wildcard `*`, or any non-empty subject\nand non-empty verb separated by the first `:`. Route-derived subjects may\ncontain dots, spaces, slashes, and additional colons.\n\nThis is a contracts-free mirror of `@farthershore/authz`'s\n`parsePermission`. Keep it local so the published SDK does not acquire an\n`@farthershore/authz` runtime dependency; the test-only parity guard imports\nthe parser through a devDependency.",
      "signature": "export declare function isValidPermissionRequirement(permission: string | null | undefined): permission is string;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.KeysResource",
      "name": "@farthershore/farthershore-js.KeysResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/keys.d.ts#L3",
      "description": "Public export KeysResource; see its declaration and owning guide.",
      "signature": "export interface KeysResource {\n    /** The consumer's API keys for this product (secrets are never returned). */\n    list(opts?: {\n        signal?: AbortSignal;\n    }): Promise<ApiKey[]>;\n    /**\n     * Create a key. The returned `secret` is shown ONCE.\n     *\n     * Consumer-principal (D2): this generic route creates PERSONAL member keys.\n     * Managed service credentials use the canonical `serviceAccounts` lifecycle,\n     * which can return PENDING without creating a secret.\n     *\n     * `roleKeys` binds the key to org RBAC roles (live-bound: a role edit reaches\n     * the key without reprovisioning); `restrictedPermissions` optionally narrows\n     * the bound roles to a Stripe-style subset. Both are grantable only within\n     * the creator's own permissions — the backend 403s an over-reaching binding.\n     * (PERSONAL keys ignore `roleKeys` — their perms track the bound member.)\n     */\n    create(input?: {\n        label?: string;\n        scopes?: string[];\n        roleKeys?: string[];\n        restrictedPermissions?: string[];\n        kind?: \"PERSONAL\";\n        /** PERSONAL — mint FOR this member (their `Membership.id`); admin-gated. */\n        memberId?: string;\n    }): Promise<CreatedApiKey>;\n    /** Permanently revoke a key by id. */\n    revoke(keyId: string): Promise<void>;\n    /** Rotate a key — revokes the old and returns a new `secret` (shown once). */\n    rotate(keyId: string): Promise<CreatedApiKey>;\n    /** Canonical managed service-account provisioning and approval lifecycle. */\n    readonly serviceAccounts: ServiceAccountsResource;\n}",
      "typeReferences": [
        {
          "name": "ApiKey",
          "source": "packages/farthershore-js/dist/types.d.ts#L347"
        },
        {
          "name": "CreatedApiKey",
          "source": "packages/farthershore-js/dist/types.d.ts#L375"
        },
        {
          "name": "ServiceAccountsResource",
          "source": "packages/farthershore-js/dist/resources/keys.d.ts#L53"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.LimitExceededError",
      "name": "@farthershore/farthershore-js.LimitExceededError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/errors/index.d.ts#L206",
      "description": "A {@link FartherShoreApiError} that is specifically a plan-limit block — a\nresource quota (`402 resource_count_limit_exceeded`), a usage quota, a rate\nlimit, or a credit cap. Carries the {@link LimitDescriptor} so the app can\nresolve an upgrade target from the bootstrap catalog and prompt the user\n(see `useUpgrade` / `<UpgradePrompt>`).",
      "signature": "export declare class LimitExceededError extends FartherShoreApiError {\n    readonly limitCode: string;\n    readonly dimension: string | null;\n    readonly currentCapacity: number | null;\n    /** The semantic {@link FsLimitClass} of this limit — derived from the `_fs`\n     *  envelope when present, else from the wire code + limitCode + status\n     *  ({@link classifyFsLimit}). null only when nothing classifies it. */\n    readonly limitClass: FsLimitClass | null;\n    /** The parsed `_fs` deny envelope, when the body carried one. The richer\n     *  source for the reaction/headroom fields below. */\n    readonly envelope: FsDenyEnvelope__adf7ef9f2448 | null;\n    /** True when retrying the SAME request can succeed (a velocity/transient cap);\n     *  false when it never will (a spend cap / oversized request). */\n    readonly retrySafe: boolean;\n    /** True when the caller must MODIFY the request before it can succeed (a\n     *  `capacity` ceiling or `spend` cap). */\n    readonly mustModify: boolean;\n    /** The recommended client reaction. */\n    readonly reaction: FsLimitReaction__06a9e09be641;\n    /** Whether the platform or an upstream provider decided the limit. */\n    readonly limitOrigin: FsLimitOrigin__1d4de1805fa7;\n    /** The gateway decision id (correlates with the usage event / audit), when\n     *  the `_fs` envelope carried one. */\n    readonly decisionId: string | null;\n    /** When the limit window resets, when known (from the `_fs` envelope `reset`,\n     *  unix-epoch ms, else the `X-RateLimit-Reset` snapshot). */\n    readonly reset: Date | null;\n    /** Units remaining in the window at decision time, when known. */\n    readonly remaining: number | null;\n    /** Units already consumed in the window at decision time, when known. */\n    readonly used: number | null;\n    /** The cap value hit, when known. */\n    readonly limit: number | null;\n    constructor(status: number, code: string, message: string, body: unknown, descriptor: LimitDescriptor__01693492a147, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot__934527ed940b | null);\n}",
      "typeReferences": [
        {
          "name": "FartherShoreApiError",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
        },
        {
          "name": "FsDenyEnvelope__adf7ef9f2448",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L109"
        },
        {
          "name": "FsLimitClass",
          "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
        },
        {
          "name": "FsLimitOrigin__1d4de1805fa7",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
        },
        {
          "name": "FsLimitReaction__06a9e09be641",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
        },
        {
          "name": "LimitDescriptor__01693492a147",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L85"
        },
        {
          "name": "RateLimitSnapshot__934527ed940b",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.MANAGED_COMPONENT_DEFAULTS",
      "name": "@farthershore/farthershore-js.MANAGED_COMPONENT_DEFAULTS",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/component-policy.d.ts#L18",
      "description": "FAITHFUL COPY of `@farthershore/contracts` `componentPermissionDefaults`\n(parity-tested in test/component-policy-parity.test.ts — the shipped SDK\nbundle must stay contracts-free).",
      "signature": "declare const MANAGED_COMPONENT_DEFAULTS: Readonly<Record<string, ComponentPermissionDefault>>;",
      "typeReferences": [
        {
          "name": "ComponentPermissionDefault",
          "source": "packages/farthershore-js/dist/component-policy.d.ts#L10"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ManagedIntegration",
      "name": "@farthershore/farthershore-js.ManagedIntegration",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/integrations.d.ts#L6",
      "description": "A frontend-safe handle to one product-declared integration. It never exposes\nits upstream origin, secret reference, or injection configuration.",
      "signature": "export type ManagedIntegration = {\n    fetch(path: string, init?: ManagedIntegrationRequestInit): Promise<Response>;\n    /**\n     * Fetch-compatible adapter for native SDKs that accept a custom transport.\n     * Pair it with {@link url}; it converts the SDK's ordinary Request into the\n     * bounded named-integration envelope without exposing the injected secret.\n     */\n    transport(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;\n    /** Same-origin reserved base URL for native SDKs. It must be paired with this\n     * handle's `transport`; a raw browser fetch to the URL is not authorized. */\n    url(path?: string): string;\n};",
      "typeReferences": [
        {
          "name": "ManagedIntegrationRequestInit",
          "source": "packages/farthershore-js/dist/integrations.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ManagedIntegrationRequestInit",
      "name": "@farthershore/farthershore-js.ManagedIntegrationRequestInit",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/integrations.d.ts#L3",
      "description": "Public export ManagedIntegrationRequestInit; see its declaration and owning guide.",
      "signature": "export type ManagedIntegrationRequestInit = FsFetchOptions;",
      "typeReferences": [
        {
          "name": "FsFetchOptions",
          "source": "packages/farthershore-js/dist/fetch.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.Meter",
      "name": "@farthershore/farthershore-js.Meter",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L15",
      "description": "A business-level meter definition (the dimension catalog used to label/format\nusage). Mirrors the wire `MeterDefinition`; only the display-relevant fields\nare surfaced.",
      "signature": "export interface Meter {\n    /** Stable dimension key (e.g. \"requests\", \"tokens\"). */\n    key: string;\n    /** Human-friendly label for the dimension. */\n    display: string;\n    /** Optional unit suffix (e.g. \"ms\", \"tokens\"). */\n    unit?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.MeterUsageRow",
      "name": "@farthershore/farthershore-js.MeterUsageRow",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L226",
      "description": "Public export MeterUsageRow; see its declaration and owning guide.",
      "signature": "export type MeterUsageRow = {\n    key: string;\n    label: string;\n    used: number;\n    quota: number | null;\n    unit?: string;\n    /** True when the row is a MEASURE the product meters but does NOT publish in\n     *  its served meter catalog (`ocr_pages`, `pages`) rather than a first-class\n     *  meter. Such a row is a breakdown of the metered total, not a peer of it —\n     *  the usage surfaces render it as a secondary line under the meter rows\n     *  instead of as another top-level row. */\n    secondary?: boolean;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.MoneyFormatOptions",
      "name": "@farthershore/farthershore-js.MoneyFormatOptions",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L126",
      "description": "Optional money-formatting locale options. Defaults: USD, en-US.",
      "signature": "export interface MoneyFormatOptions {\n    /** ISO 4217 currency code (e.g. \"EUR\", \"GBP\"). Default \"USD\". */\n    currency?: string;\n    /** BCP-47 locale (e.g. \"de-DE\"). Default \"en-US\". */\n    locale?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.NanosAmount",
      "name": "@farthershore/farthershore-js.NanosAmount",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1179",
      "description": "A nanodollar amount off the wire: Core's decimal-integer STRING, or `null`\nwhen the wire value was malformed (non-integer, non-string, missing). The\nreader never coerces a malformed amount to `\"0\"` — a `null` renders as\n\"unavailable\", never as `$0`. Format non-null values with\n`format.formatNanos` (bigint) — never `Number()`.",
      "signature": "export type NanosAmount = string | null;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.normalizeAuthUser",
      "name": "@farthershore/farthershore-js.normalizeAuthUser",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/auth-user.d.ts#L6",
      "description": "Normalize a Clerk user object or safe persona identity view into the\nSDK's {@link FsAuthUser}. Returns null when `raw` isn't an object (signed\nout / unknown). Every named field degrades to null; `fullName` falls back to\n`first last` when Clerk/persona doesn't supply one.",
      "signature": "export declare function normalizeAuthUser(raw: unknown): FsAuthUser | null;",
      "typeReferences": [
        {
          "name": "FsAuthUser",
          "source": "packages/farthershore-js/dist/types.d.ts#L789"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.NOTIFICATION_CATEGORIES",
      "name": "@farthershore/farthershore-js.NOTIFICATION_CATEGORIES",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/notification-categories.d.ts#L4",
      "description": "The closed set of notification categories.",
      "signature": "declare const NOTIFICATION_CATEGORIES: readonly [\"billing\", \"usage\", \"access\", \"product\", \"deployments\", \"team\", \"security\"];",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.NOTIFICATION_CATEGORY_META",
      "name": "@farthershore/farthershore-js.NOTIFICATION_CATEGORY_META",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/notification-categories.d.ts#L13",
      "description": "Public export NOTIFICATION_CATEGORY_META; see its declaration and owning guide.",
      "signature": "declare const NOTIFICATION_CATEGORY_META: Readonly<Record<NotificationCategory, NotificationCategoryMeta>>;",
      "typeReferences": [
        {
          "name": "NotificationCategory",
          "source": "packages/farthershore-js/dist/notification-categories.d.ts#L5"
        },
        {
          "name": "NotificationCategoryMeta",
          "source": "packages/farthershore-js/dist/notification-categories.d.ts#L7"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.notificationCategoriesForPlane",
      "name": "@farthershore/farthershore-js.notificationCategoriesForPlane",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/notification-categories.d.ts#L15",
      "description": "The categories a given plane's preferences page should display.",
      "signature": "export declare function notificationCategoriesForPlane(plane: NotificationPlane): NotificationCategory[];",
      "typeReferences": [
        {
          "name": "NotificationCategory",
          "source": "packages/farthershore-js/dist/notification-categories.d.ts#L5"
        },
        {
          "name": "NotificationPlane",
          "source": "packages/farthershore-js/dist/notification-categories.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.NotificationCategory",
      "name": "@farthershore/farthershore-js.NotificationCategory",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/notification-categories.d.ts#L5",
      "description": "Public export NotificationCategory; see its declaration and owning guide.",
      "signature": "export type NotificationCategory = (typeof NOTIFICATION_CATEGORIES)[number];",
      "typeReferences": [
        {
          "name": "NOTIFICATION_CATEGORIES",
          "source": "packages/farthershore-js/dist/notification-categories.d.ts#L4"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.NotificationCategoryMeta",
      "name": "@farthershore/farthershore-js.NotificationCategoryMeta",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/notification-categories.d.ts#L7",
      "description": "Human-facing metadata for a category (drives the preferences UI).",
      "signature": "export interface NotificationCategoryMeta {\n    readonly category: NotificationCategory;\n    readonly label: string;\n    readonly description: string;\n    readonly planes: readonly NotificationPlane[];\n}",
      "typeReferences": [
        {
          "name": "NotificationCategory",
          "source": "packages/farthershore-js/dist/notification-categories.d.ts#L5"
        },
        {
          "name": "NotificationPlane",
          "source": "packages/farthershore-js/dist/notification-categories.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.NotificationPlane",
      "name": "@farthershore/farthershore-js.NotificationPlane",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/notification-categories.d.ts#L2",
      "description": "The two principal planes a category can surface on.",
      "signature": "export type NotificationPlane = \"builder\" | \"portal\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.NotificationPreferences",
      "name": "@farthershore/farthershore-js.NotificationPreferences",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1164",
      "description": "The subscriber's full notification-preference state\n(`GET /portal/businesses/:id/me/notification-preferences`). Email is the only\nnotifiable channel, so a preference is a single email OPT-OUT:\n - `master === true` suppresses EVERY category's email;\n - `categories[category] === true` additionally mutes a single category.\n\nEmail is suppressed for an event iff the master opts out OR the event's\ncategory opts out. Category keys are the contracts notification categories\n(`billing`, `usage`, …) — kept as a plain string map so the SDK stays\ncontracts-free; the UI joins them to `NOTIFICATION_CATEGORY_META`.",
      "signature": "export interface NotificationPreferences {\n    master: boolean;\n    categories: Record<string, boolean>;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.NotificationPreferencesPatch",
      "name": "@farthershore/farthershore-js.NotificationPreferencesPatch",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1170",
      "description": "The PATCH body — a PARTIAL patch of the master and/or any categories. Only\nthe master/categories present change; omit the rest. Send only the delta.",
      "signature": "export interface NotificationPreferencesPatch {\n    master?: boolean;\n    categories?: Record<string, boolean>;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.NotificationsResource",
      "name": "@farthershore/farthershore-js.NotificationsResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/account.d.ts#L169",
      "description": "The subscriber's per-category notification preferences (the portal\n`/me/notification-preferences` surface). OPT-OUT model — see\n{@link NotificationPreferences}. Deliberately NON-degrading (like\n{@link RbacResource}): a failed read THROWS the typed `FartherShoreApiError`\nso the preferences page can render an explicit error state rather than a\nsilent all-opted-in default.",
      "signature": "export interface NotificationsResource {\n    /** The current preference state. Missing `master`/`categories` in a partial\n     *  wire response are normalized to the opted-in defaults. */\n    preferences(opts?: {\n        signal?: AbortSignal;\n    }): Promise<NotificationPreferences>;\n    /** Partial patch — send ONLY the changed channels/categories. Returns the\n     *  full, normalized updated state. */\n    updatePreferences(patch: NotificationPreferencesPatch): Promise<NotificationPreferences>;\n}",
      "typeReferences": [
        {
          "name": "NotificationPreferences",
          "source": "packages/farthershore-js/dist/types.d.ts#L1164"
        },
        {
          "name": "NotificationPreferencesPatch",
          "source": "packages/farthershore-js/dist/types.d.ts#L1170"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.OffsetPage",
      "name": "@farthershore/farthershore-js.OffsetPage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L535",
      "description": "Public export OffsetPage; see its declaration and owning guide.",
      "signature": "export interface OffsetPage<T> {\n    data: T[];\n    pagination: {\n        limit: number;\n        offset: number;\n        hasMore: boolean;\n    };\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.OnboardingResult",
      "name": "@farthershore/farthershore-js.OnboardingResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1104",
      "description": "`POST /onboarding` result: paid plans hand back `checkoutUrl` (note: NOT\n`url` like checkout-session); free plans activate inline and may include a\none-time auto-created API key (drives the auto-key banner).",
      "signature": "export interface OnboardingResult {\n    checkoutUrl?: string | null;\n    subscriber?: unknown;\n    /** One-time full key secret when Core auto-creates the first key. */\n    autoApiKey?: string | {\n        secret?: string;\n    } | null;\n    /** Set when the first-key mint failed AFTER the subscriber became active —\n     *  surfaced (not swallowed) so the client can tell the user. */\n    autoApiKeyError?: AutoApiKeyError | null;\n    raw: unknown;\n}",
      "typeReferences": [
        {
          "name": "AutoApiKeyError",
          "source": "packages/farthershore-js/dist/types.d.ts#L1097"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.OpaqueAllowanceDisplay",
      "name": "@farthershore/farthershore-js.OpaqueAllowanceDisplay",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1215",
      "description": "Opaque allowance display — NEVER carries a nanodollar amount. Either the\nplan-authored display units (`multiplier`: the allowance is\n`allowanceUnits` units, remaining/consumed are fractional units of it) or,\nwhen the plan authored no display, the consumption fraction in basis\npoints.",
      "signature": "export type OpaqueAllowanceDisplay = {\n    kind: \"multiplier\";\n    /** Authored allowance in display units (e.g. 5 for a \"5x\" plan). */\n    allowanceUnits: number;\n    /** Remaining allowance in display units, 2 decimals, as a string. */\n    remainingUnits: string;\n    /** Consumed allowance in display units, 2 decimals, as a string. */\n    consumedUnits: string;\n} | {\n    kind: \"fraction\";\n    /** Consumed share of the allowance in basis points (0..10000). */\n    consumedBasisPoints: number;\n    /** Remaining share of the allowance in basis points (0..10000). */\n    remainingBasisPoints: number;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.OpaqueBillPreview",
      "name": "@farthershore/farthershore-js.OpaqueBillPreview",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1277",
      "description": "Opaque plans return allowance shape ONLY — nothing a subscriber could\ndivide by a known request count to recover the per-unit rate. Amounts owed\nsurface through the invoice, not the preview.",
      "signature": "export interface OpaqueBillPreview {\n    currency: string;\n    disclosure: \"opaque\";\n    /** The plan's recurring fee, in cents. */\n    recurringFeeCents: number;\n    allowances: OpaqueBillPreviewAllowance[];\n}",
      "typeReferences": [
        {
          "name": "OpaqueBillPreviewAllowance",
          "source": "packages/farthershore-js/dist/types.d.ts#L1232"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.OpaqueBillPreviewAllowance",
      "name": "@farthershore/farthershore-js.OpaqueBillPreviewAllowance",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1232",
      "description": "A funding allowance under opaque disclosure — kind / state / expiry plus\nthe authored display; no amounts.",
      "signature": "export interface OpaqueBillPreviewAllowance {\n    kind: string;\n    /** Bucket lifecycle state — Core's `BucketState`, verbatim. */\n    state: BucketState;\n    expiresAt: string | null;\n    display: OpaqueAllowanceDisplay;\n}",
      "typeReferences": [
        {
          "name": "BucketState",
          "source": "packages/farthershore-js/dist/types.d.ts#L1184"
        },
        {
          "name": "OpaqueAllowanceDisplay",
          "source": "packages/farthershore-js/dist/types.d.ts#L1215"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.OrganizationsResource",
      "name": "@farthershore/farthershore-js.OrganizationsResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/account.d.ts#L3",
      "description": "Public export OrganizationsResource; see its declaration and owning guide.",
      "signature": "export interface OrganizationsResource {\n    /** The orgs through which the current user holds subscriptions to this\n     *  product (B2B multi-org). Degrades to the empty shape on any error —\n     *  exactly how the SSR portal treated it. Set `strict` only when a caller\n     *  needs to render the read failure distinctly from a valid empty result. */\n    contexts(opts?: {\n        signal?: AbortSignal;\n        strict?: boolean;\n    }): Promise<SubscriptionContextsResult>;\n}",
      "typeReferences": [
        {
          "name": "SubscriptionContextsResult",
          "source": "packages/farthershore-js/dist/types.d.ts#L968"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.PaymentHealth",
      "name": "@farthershore/farthershore-js.PaymentHealth",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L330",
      "description": "Public export PaymentHealth; see its declaration and owning guide.",
      "signature": "export interface PaymentHealth {\n    state: PaymentHealthState;\n    /** A suggested call-to-action when the subscription needs attention, or null\n     *  when healthy. Plain copy — the component decides how to render it. */\n    cta: string | null;\n}",
      "typeReferences": [
        {
          "name": "PaymentHealthState",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L329"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.PaymentHealthState",
      "name": "@farthershore/farthershore-js.PaymentHealthState",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L329",
      "description": "`blocked` is the one that gates access: the subscriber's plan declared no\ndunning grace (or the grace ran out), so the edge is refusing every call.\n`past_due` means a payment failed but a declared grace window is still\nserving them — degraded, not cut off. The distinction decides whether the\nhost app is usable at all, so it is a separate state rather than a tone.",
      "signature": "export type PaymentHealthState = \"ok\" | \"past_due\" | \"incomplete\" | \"blocked\" | \"cancelled\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.PendingServiceAccountApproval",
      "name": "@farthershore/farthershore-js.PendingServiceAccountApproval",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L521",
      "description": "Public export PendingServiceAccountApproval; see its declaration and owning guide.",
      "signature": "export interface PendingServiceAccountApproval {\n    id: string;\n    operation: ServiceAccountApprovalOperation;\n    serviceAccountId: string;\n    requestedBy: string;\n    requestedPermissions: string[];\n    excessPermissions: string[];\n    createdAt: string;\n    serviceAccount: {\n        name: string;\n        /** Frozen grants that stay active for a pending UPDATE. */\n        grantedPermissions: string[];\n    };\n}",
      "typeReferences": [
        {
          "name": "ServiceAccountApprovalOperation",
          "source": "packages/farthershore-js/dist/types.d.ts#L382"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.PendingServiceAccountCreateResponse",
      "name": "@farthershore/farthershore-js.PendingServiceAccountCreateResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L455",
      "description": "Public export PendingServiceAccountCreateResponse; see its declaration and owning guide.",
      "signature": "export interface PendingServiceAccountCreateResponse {\n    status: \"PENDING\";\n    serviceAccountId: string;\n    approvalId: string;\n    requestedPermissions: string[];\n    /** A pending create has no live credential or frozen authority. */\n    grantedPermissions: [];\n    excessPermissions: string[];\n    eligibleApproverIds: string[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.PendingServiceAccountUpdateResponse",
      "name": "@farthershore/farthershore-js.PendingServiceAccountUpdateResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L476",
      "description": "Public export PendingServiceAccountUpdateResponse; see its declaration and owning guide.",
      "signature": "export interface PendingServiceAccountUpdateResponse {\n    status: \"PENDING\";\n    serviceAccountId: string;\n    approvalId: string;\n    /** Frozen grants that remain active while approval is pending. */\n    activePermissions: string[];\n    requestedPermissions: string[];\n    excessPermissions: string[];\n    eligibleApproverIds: string[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.permissionSatisfies",
      "name": "@farthershore/farthershore-js.permissionSatisfies",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/permissions.d.ts#L28",
      "description": "Whether the granted `permissions` satisfy the required `key` under the\nunified grammar: `\"*\"` (global), `\"<subject>:*\"` (subject wildcard), or the\nEXACT key. There is NO verb-class widening — a `billing:write` grant never\nsatisfies `billing:refund` (class forms are expanded to concrete verbs at\nsave time, server-side). Superset of {@link permissionGrants }: it adds the\n`<subject>:*` rung.\n\nFAITHFUL COPY of the canonical `permissionSatisfies` in\n`@farthershore/contracts` (`authz/verbs.ts`) — the published SDK bundle must\nstay contracts-free, so a TEST-ONLY parity guard\n(`test/permissions-parity.test.ts`) asserts this copy agrees with the\ncanonical primitive over a shared golden table. DEFINED array only (empty =\ndeny-all), matching the frontend's deny-on-absence stance.",
      "signature": "export declare function permissionSatisfies(required: string, granted: readonly string[]): boolean;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.PersonaAuthSession",
      "name": "@farthershore/farthershore-js.PersonaAuthSession",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L334",
      "description": "Safe, non-secret view of a server-owned test-persona browser session.",
      "signature": "export interface PersonaAuthSession {\n    kind: \"test-persona\";\n    personaId: string;\n    userId: string;\n    organizationId: string | null;\n    displayName: string | null;\n    expiresAt: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.PinnedUsageDisplay",
      "name": "@farthershore/farthershore-js.PinnedUsageDisplay",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L269",
      "description": "The pinned-plan display surface from `GET /me` — the dimensions the\nsubscriber's ACTUAL plan declares and its month-window quota rules.",
      "signature": "export interface PinnedUsageDisplay {\n    /** Ordered dimension names the pinned plan displays. `rules[].d` indexes in. */\n    displayDims?: string[] | null;\n    /** Pinned rate-limit / quota allowances (month-window rows are the quotas). */\n    rules?: SubscriberPinnedRule__7b0d2ee36c4a[] | null;\n}",
      "typeReferences": [
        {
          "name": "SubscriberPinnedRule__7b0d2ee36c4a",
          "source": "packages/farthershore-js/dist/types.d.ts#L848"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.Plan",
      "name": "@farthershore/farthershore-js.Plan",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L127",
      "description": "A purchasable/available plan in the product catalog. Mirrors core's\n`PortalPlan` (declared kind + recurring billing shape) so the template can\nrender the plan card, included quotas, and a subscribe button. Money for\nusage lives ONLY in the bill preview ({@link BillPreview}).",
      "signature": "export interface Plan {\n    /** Immutable `CompiledPlan.id` — the pointer passed to `subscribe()`. */\n    id: string;\n    key: string;\n    name: string;\n    description: string | null;\n    /**\n     * The builder's DECLARED plan kind. `\"free\"` is the free tier — a FLOOR,\n     * not an option: subscribers are auto-enrolled on it at sign-up and fall\n     * back to it when a paid plan is cancelled, so `<PlansTable>` and every\n     * other plan-card surface hides it rather than offering it as a choice.\n     * Read this field — do NOT infer it from a zero recurring fee, which is\n     * also true of `usage` plans that bill usage.\n     */\n    kind: PlanKind;\n    /** Recurring fee, in cents (0 for free / usage plans). */\n    recurringFeeCents: number;\n    /** Billing cadence for the recurring fee + metered usage — `\"month\"`\n     *  (default) or `\"year\"` (annual). Lets a pricing card render \"$X/yr\" vs\n     *  \"$X/mo\" and badge annual tiers. Defaults to `\"month\"` when the wire DTO\n     *  omits it (the platform omits the key for monthly plans). */\n    billingInterval: \"month\" | \"year\";\n    /** ISO 4217 currency of every money field on the plan. REQUIRED in the\n     *  normalized model — defaults to `\"USD\"` when the wire DTO omits it (the\n     *  USD-only platform omits the key today). */\n    currency: string;\n    /** Free-trial length in days (0 = no trial). */\n    trialDays: number;\n    /** Optional monthly spend cap, in cents. */\n    maxMonthlySpendCents: number | null;\n    /** Optional minimum monthly spend floor, in cents. */\n    minMonthlySpendCents: number | null;\n    /** Structural metered dimensions (no money). Empty for non-metered plans. */\n    meters: PlanMeter[];\n    /** Quota + rate-limit rules. Month-window rules are the included allowances. */\n    limits: PlanLimit[];\n    /** Optional builder-authored feature bullets shown on the plan card. */\n    planDetails: string[];\n    /** Control-plane resource limits — `key → maxCount` caps (webhooks: 5)\n     *  such as api_keys or webhooks. Empty when the\n     *  plan declares none. */\n    resourceLimits: Record<string, number>;\n    /**\n     * The plan's PUBLIC catalog terms for metered usage — the price list a buyer\n     * needs to compare plans, projected by Core from the served commercial\n     * release. `null` when the plan binds no catalog, when the served release\n     * carries no matching pricing policy, or when the builder declared\n     * `fs.disclosure.opaque`; card surfaces fall back to \"priced per the\n     * catalog\" and a docs pointer in that case.\n     *\n     * This is the only place on the SDK's plan model where per-unit money lives,\n     * and it is NOT an exception to the rule the rest of this module states: a\n     * pricing catalog is a PUBLISHED commerce term the builder authored for\n     * everyone, whereas a subscriber's rated usage, funding draw-down and\n     * projected bill remain exclusive to Core's bill preview. The SDK still\n     * derives NO money: it renders these rates, it never multiplies them by a\n     * usage count.\n     */\n    pricingDisplay: PlanPricingDisplay | null;\n}",
      "typeReferences": [
        {
          "name": "PlanKind",
          "source": "packages/farthershore-js/dist/types.d.ts#L108"
        },
        {
          "name": "PlanLimit",
          "source": "packages/farthershore-js/dist/types.d.ts#L111"
        },
        {
          "name": "PlanMeter",
          "source": "packages/farthershore-js/dist/types.d.ts#L103"
        },
        {
          "name": "PlanPricingDisplay",
          "source": "packages/farthershore-js/dist/types.d.ts#L248"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.PlanFunding",
      "name": "@farthershore/farthershore-js.PlanFunding",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L232",
      "description": "Funding that pays for rated usage before anything is owed.",
      "signature": "export interface PlanFunding {\n    kind: \"included\" | \"promo\" | \"referral\" | \"prepaid\";\n    /** Face value in minor units of {@link PlanPricingDisplay.currency}. */\n    amountMinor: number;\n    /** Whether the bucket refreshes each billing period. */\n    recurs: boolean;\n    /** The builder's authored marketing framing: the bucket is `factor`x of a\n     *  `baseMinor` base. The base is `amountMinor / factor` by construction, so\n     *  the label cannot misstate the allowance. */\n    display: {\n        kind: \"multiplier\";\n        factor: number;\n        baseMinor: number;\n    } | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.PlanKind",
      "name": "@farthershore/farthershore-js.PlanKind",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L108",
      "description": "The builder's DECLARED plan kind (`plan.kind.*` in the Business SDK):\n`free` | `flat` | `usage` | `prepaid` | `hybrid` | `trial` | `custom`.\nEvery card decision (badge, picker, hiding the free floor) reads it —\nnothing is inferred from shape.",
      "signature": "export type PlanKind = PlanKindWire__a95f9171680c;",
      "typeReferences": [
        {
          "name": "PlanKindWire__a95f9171680c",
          "source": "packages/farthershore-js/dist/generated/catalog-types.d.ts#L25"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.PlanKindDescription",
      "name": "@farthershore/farthershore-js.PlanKindDescription",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L16",
      "description": "Presentation facts for a DECLARED plan kind — the ONE label map every\nsurface (SDK `<PlansTable>`, portal `/pricing`, dashboard plan list) reads,\nso a plan never shows two different kind labels across screens.",
      "signature": "export interface PlanKindDescription {\n    /** The declared kind, verbatim. */\n    kind: PlanKind;\n    /** Short human label for a badge / chip (\"Subscription + usage\"). */\n    label: string;\n    /** True when this kind bills consumption through a commerce usage-pricing\n     *  binding (`usage` / `prepaid` / `hybrid` / `custom`) — money for that\n     *  usage surfaces ONLY through the bill preview / invoice, never the plan.\n     *  `free` / `flat` / `trial` ration (limits) instead. Mirrors contracts'\n     *  `isUsageBilledPlanKind`; the SDK cannot import contracts. */\n    billsUsage: boolean;\n}",
      "typeReferences": [
        {
          "name": "PlanKind",
          "source": "packages/farthershore-js/dist/types.d.ts#L108"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.PlanLimit",
      "name": "@farthershore/farthershore-js.PlanLimit",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L111",
      "description": "A named rate-limit / quota rule on a plan. `window.name === \"month\"` rules\nare the included-quota allowances the usage card renders against.",
      "signature": "export interface PlanLimit {\n    dimension: string;\n    window: {\n        type: \"named\";\n        name: string;\n    } | {\n        type: \"custom\";\n        seconds: number;\n    };\n    capacity: number;\n    enforcement?: \"enforce\" | \"track\";\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.PlanMeter",
      "name": "@farthershore/farthershore-js.PlanMeter",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L103",
      "description": "A structural metered dimension on a plan — `{ dimension, kind? }`, NO\nmoney. Rates, allowances, and the projected bill come from the bill-preview\nAPI ({@link BillPreview}), never from the plan. Wire-faithful — the public\n`PlanMeter` name re-exports the codegenned `PlanMeterWire`.",
      "signature": "export type PlanMeter = PlanMeterWire__47c3d2492e8a;",
      "typeReferences": [
        {
          "name": "PlanMeterWire__47c3d2492e8a",
          "source": "packages/farthershore-js/dist/generated/catalog-types.d.ts#L17"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.PlanPricePresentation",
      "name": "@farthershore/farthershore-js.PlanPricePresentation",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L36",
      "description": "Structured price presentation for a plan — the single source of truth for\nhow every surface headlines a plan's price. See {@link presentPlanPrice}.",
      "signature": "export interface PlanPricePresentation {\n    /** Headline string: the exact recurring fee (\"$19.99\") when the plan\n     *  carries one, else a kind label — \"Free\" (free tier), \"Usage-based\"\n     *  (`usage` / `hybrid` with no fee), \"Prepaid\", \"Free trial\", \"Custom\".\n     *  NEVER rounds dollars — a $19.99 plan presents \"$19.99\", not \"$19\". */\n    headline: string;\n    /** Billing-cadence suffix for a fee-bearing plan: \"/mo\" | \"/yr\", from the\n     *  plan's real `billingInterval` (absent-on-wire defaults to month).\n     *  Omitted when there is no recurring fee. */\n    cadenceSuffix?: \"/mo\" | \"/yr\";\n    /** The plan's DECLARED kind, verbatim (`plan.kind`). */\n    kind: PlanKind;\n    /** \"N-day free trial\", when the plan carries a trial. */\n    trialNote?: string;\n    /** Spend guardrails: \"$N/month minimum\" and/or \"$N/month cap\". */\n    spendNotes?: string[];\n}",
      "typeReferences": [
        {
          "name": "PlanKind",
          "source": "packages/farthershore-js/dist/types.d.ts#L108"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.PlanPricingDisplay",
      "name": "@farthershore/farthershore-js.PlanPricingDisplay",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L248",
      "description": "PUBLIC commerce terms for a plan's metered usage.",
      "signature": "export interface PlanPricingDisplay {\n    /** The pricing policy key the plan's `usagePricing` binds. */\n    pricingPolicyKey: string;\n    /** Meter the policy rates. */\n    meterKey: string;\n    /** ISO 4217 currency of every amount below. */\n    currency: string;\n    /** How the plan binds the catalog. `fixed_version` plans pin `version`. */\n    binding: {\n        kind: \"current\" | \"current_with_contract_terms\" | \"fixed_version\";\n        version: number | null;\n    };\n    /** Rates in deterministic precedence order, most specific first. */\n    rules: PricingRule[];\n    /** Funding buckets declared on the plan, in authored order. */\n    funding: PlanFunding[];\n    /** What happens when funding runs out: `block` stops requests, `overage`\n     *  keeps serving at the catalog, `prepaid` is the wallet shape. */\n    exhaustion: \"block\" | \"overage\" | \"prepaid\" | null;\n}",
      "typeReferences": [
        {
          "name": "PlanFunding",
          "source": "packages/farthershore-js/dist/types.d.ts#L232"
        },
        {
          "name": "PricingRule",
          "source": "packages/farthershore-js/dist/types.d.ts#L206"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.PlansResource",
      "name": "@farthershore/farthershore-js.PlansResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/plans.d.ts#L61",
      "description": "Public export PlansResource; see its declaration and owning guide.",
      "signature": "export interface PlansResource {\n    /** The product's available plans (resolved via bootstrap). Empty when the\n     *  product has no published, self-serve plans. */\n    list(): Promise<Plan[]>;\n    /** The currently-purchasable plan versions for the signed-in subscriber\n     *  (including their pinned plan version), each with the `offerFingerprint`\n     *  to echo back at `subscribe()` for price-change consent. Unlike `list()`,\n     *  this is a live core read (not bootstrap-cached). */\n    getPlanOffers(): Promise<PlanOffer__5ab47cb32b7d[]>;\n    /** Start checkout for a plan. Paid → `{ url }` (navigate to Stripe). Free →\n     *  `{ subscriber }` (activated directly). Pass `offerFingerprint` (from\n     *  `getPlanOffers()`) to fail 409 PLAN_OFFER_CHANGED on a stale price. */\n    subscribe(input: SubscribeInput): Promise<SubscribeResult>;\n    /** The dashboard onboarding path (`POST /onboarding`) the SSR portal's\n     *  onboarding view uses. Differs from `subscribe()`: paid plans return\n     *  `checkoutUrl` (not `url`), and free activations may include a one-time\n     *  `autoApiKey` (drives the auto-created-key banner). */\n    startOnboarding(input?: StartOnboardingInput): Promise<OnboardingResult>;\n}",
      "typeReferences": [
        {
          "name": "OnboardingResult",
          "source": "packages/farthershore-js/dist/types.d.ts#L1104"
        },
        {
          "name": "Plan",
          "source": "packages/farthershore-js/dist/types.d.ts#L127"
        },
        {
          "name": "PlanOffer__5ab47cb32b7d",
          "source": "packages/farthershore-js/dist/resources/plans.d.ts#L31"
        },
        {
          "name": "StartOnboardingInput",
          "source": "packages/farthershore-js/dist/resources/plans.d.ts#L27"
        },
        {
          "name": "SubscribeInput",
          "source": "packages/farthershore-js/dist/resources/plans.d.ts#L5"
        },
        {
          "name": "SubscribeResult",
          "source": "packages/farthershore-js/dist/resources/plans.d.ts#L44"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.PricingAmount",
      "name": "@farthershore/farthershore-js.PricingAmount",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L190",
      "description": "A catalog rate in currency-per-unit. Carries the EXACT reduced rational\nalongside its decimal projection because rates like 1/3 have no finite\ndecimal form — render `decimal`, compare `num`/`den`.",
      "signature": "export interface PricingAmount {\n    num: string;\n    den: string;\n    /** `num / den` long-divided; exact where the expansion terminates. */\n    decimal: string;\n    /** True when `decimal` was truncated because the rational does not terminate. */\n    rounded: boolean;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.PricingRule",
      "name": "@farthershore/farthershore-js.PricingRule",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L206",
      "description": "One PUBLIC catalog rule, projected for display. `backendQuoted` rules are\nnever projected — a bound the backend quotes against is not a price.",
      "signature": "export type PricingRule = {\n    /** Stable catalog-entry key — the builder's semantic rule id. */\n    key: string;\n    /** Measure this rule prices (`pages`, `tokens`). There is no per-measure\n     *  display name anywhere in the commerce manifest, so the unit label a card\n     *  shows is derived from this key. */\n    measurementKey: string;\n    /** Catalog-item namespace, when the rule is provider/model scoped. */\n    item: {\n        provider: string;\n        model: string;\n        modality?: string;\n    } | null;\n    /** Dimension conditions that select this rule (`mode = ocr`). */\n    where: Array<{\n        dimensionKey: string;\n        value: string;\n    }>;\n} & ({\n    kind: \"perUnit\";\n    amount: PricingAmount;\n} | {\n    kind: \"graduated\" | \"volume\";\n    tiers: PricingTier[];\n});",
      "typeReferences": [
        {
          "name": "PricingAmount",
          "source": "packages/farthershore-js/dist/types.d.ts#L190"
        },
        {
          "name": "PricingTier",
          "source": "packages/farthershore-js/dist/types.d.ts#L200"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.PricingTier",
      "name": "@farthershore/farthershore-js.PricingTier",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L200",
      "description": "One bracket of a tiered catalog rule. `upTo` is the inclusive cumulative\nupper bound as a decimal string, `null` on the open-ended final tier.",
      "signature": "export interface PricingTier {\n    upTo: string | null;\n    amount: PricingAmount;\n}",
      "typeReferences": [
        {
          "name": "PricingAmount",
          "source": "packages/farthershore-js/dist/types.d.ts#L190"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.PromoCodeKind",
      "name": "@farthershore/farthershore-js.PromoCodeKind",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L812",
      "description": "Promo-code flavour on an applied subscriber promo. Mirrors the wire\n`PromoCodeKind` (`percent_off` | `amount_off` | `free_months`); kept as an\nopen union so a producer-side addition doesn't break the typed read.",
      "signature": "export type PromoCodeKind = \"percent_off\" | \"amount_off\" | \"free_months\" | (string & {});",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.RateLimitLine",
      "name": "@farthershore/farthershore-js.RateLimitLine",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L249",
      "description": "Public export RateLimitLine; see its declaration and owning guide.",
      "signature": "export type RateLimitLine = {\n    text: string;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.RbacCatalogEntry",
      "name": "@farthershore/farthershore-js.RbacCatalogEntry",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1053",
      "description": "One derived-catalog entry (`GET /me/rbac/catalog`): the permissions a\nproduct's routes make grantable, grouped by route subject. Never authored —\nderived from the product's accepted spec.",
      "signature": "export interface RbacCatalogEntry {\n    subject: string;\n    /** Optional display title for the subject. */\n    title?: string;\n    permissions: string[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.RbacResource",
      "name": "@farthershore/farthershore-js.RbacResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/account.d.ts#L65",
      "description": "Org-facing Managed-RBAC management (FAR-698/FAR-700) — the portal-customer\n`/me/rbac/*` surface. Org OWNER/ADMIN only; every method THROWS the\ntyped `FartherShoreApiError` rather than degrading, because the UI derives\nsection visibility from the error codes (`RBAC_NOT_ENABLED_BY_PRODUCT`,\n`UNKNOWN_PERMISSION`). Everything here configures UX + minted-token claims;\nthe EDGE `permission` constraint is the security boundary — never treat\nclient-side gating as enforcement.",
      "signature": "export interface RbacResource {\n    settings: {\n        /** Current org settings: `{ enabled, defaultRoleKey? }`. */\n        get(opts?: {\n            signal?: AbortSignal;\n        }): Promise<RbacSettings>;\n        /** Full-document replace. `enabled: true` seeds the editable\n         *  Admin/Editor/Viewer templates (idempotent); omitted/null\n         *  `defaultRoleKey` clears the default. */\n        update(input: {\n            enabled: boolean;\n            defaultRoleKey?: string | null;\n        }): Promise<RbacSettings>;\n    };\n    /** The DERIVED grantable-permission catalog (never authored) — grouped by\n     *  route operation, in the `<route-id>:read|write` grammar. */\n    catalog(opts?: {\n        signal?: AbortSignal;\n    }): Promise<RbacCatalogEntry[]>;\n    roles: {\n        /** The org's role list (seeded templates + custom), sorted by key. */\n        list(opts?: {\n            signal?: AbortSignal;\n        }): Promise<RbacRole[]>;\n        /** Create a custom role. Permissions are validated against the catalog\n         *  (400 `UNKNOWN_PERMISSION` naming offenders; `\"*\"` always grantable). */\n        create(input: {\n            roleKey: string;\n            name: string;\n            permissions: string[];\n        }): Promise<RbacRole>;\n        /** Rename and/or re-permission a role. */\n        update(roleKey: string, input: {\n            name?: string;\n            permissions?: string[];\n        }): Promise<RbacRole>;\n        /** Delete a role. Member assignments referencing it are left in place\n         *  (resolution ignores stale keys); a matching `defaultRoleKey` is\n         *  cleared server-side. */\n        remove(roleKey: string): Promise<void>;\n    };\n    /**\n     * Permissions Kernel Wave 6 — per-subscriber component gate policies. An\n     * org admin (team:manage_rbac) upserts one override row per component key;\n     * `requiredPermission: null` clears the permission override back to the\n     * component's default. Throws the typed `FartherShoreApiError` — a 409\n     * `GOVERNED_BY_CHANGE_SET` means change control governs these rows.\n     */\n    componentPolicies: {\n        /** Upsert the override row for one component key\n         *  (PUT /me/component-policies). */\n        update(input: {\n            componentKey: string;\n            requiredPermission: string | null;\n            gateMode: string;\n        }): Promise<ComponentAccessPolicyRow>;\n    };\n    /**\n     * Track T3 — Notion-minimal access requests. Any member files a request for a\n     * permission; owners/admins review the queue and approve (AUTO-GRANTS the\n     * permission onto the requester's direct grants) or deny.\n     */\n    accessRequests: {\n        /** File a request for a permission. Idempotent on an open PENDING row for\n         *  the same (requester, permission). Any authenticated member. */\n        create(input: {\n            permission: string;\n            note?: string;\n        }): Promise<AccessRequest__e4d3f89daefa>;\n        /** The request queue (OWNER/ADMIN): pending first, then resolved. */\n        list(opts?: {\n            signal?: AbortSignal;\n        }): Promise<AccessRequest__e4d3f89daefa[]>;\n        /** Approve (grants the permission) or deny a pending request. */\n        resolve(requestId: string, action: \"approve\" | \"deny\"): Promise<AccessRequest__e4d3f89daefa>;\n    };\n}",
      "typeReferences": [
        {
          "name": "AccessRequest__e4d3f89daefa",
          "source": "packages/farthershore-js/dist/types.d.ts#L1061"
        },
        {
          "name": "ComponentAccessPolicyRow",
          "source": "packages/farthershore-js/dist/types.d.ts#L945"
        },
        {
          "name": "RbacCatalogEntry",
          "source": "packages/farthershore-js/dist/types.d.ts#L1053"
        },
        {
          "name": "RbacRole",
          "source": "packages/farthershore-js/dist/types.d.ts#L1035"
        },
        {
          "name": "RbacSettings",
          "source": "packages/farthershore-js/dist/types.d.ts#L1028"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.RbacRole",
      "name": "@farthershore/farthershore-js.RbacRole",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1035",
      "description": "One configurable role (`/me/rbac/roles`), template-seeded or custom.",
      "signature": "export interface RbacRole {\n    roleKey: string;\n    name: string;\n    /** Permission strings in the `<subject>:read|write` grammar, or `\"*\"`. */\n    permissions: string[];\n    /** \"ACCOUNT\" rows are the membership-tier enforcement source: their\n     *  permissions are editable but their identity is fixed — no rename,\n     *  delete, default assignment, or credential binding. Absent ⇒ \"CUSTOM\". */\n    kind?: \"CUSTOM\" | \"ACCOUNT\";\n    /** ACCOUNT rows only: the full subscriber vocabulary — the editable\n     *  option set (restoring a removed verb needs the catalog, not just the\n     *  row's current grants). */\n    vocabulary?: string[];\n    createdAt?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.RbacRoleSummary",
      "name": "@farthershore/farthershore-js.RbacRoleSummary",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1023",
      "description": "One assignable role, as listed on `GET /me/team` (`availableRoles`).",
      "signature": "export interface RbacRoleSummary {\n    roleKey: string;\n    name: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.RbacSettings",
      "name": "@farthershore/farthershore-js.RbacSettings",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1028",
      "description": "Org-level Managed-RBAC settings (`GET|PUT /me/rbac/settings`).",
      "signature": "export interface RbacSettings {\n    /** Whether role permissions are enforced for this org's user tokens. */\n    enabled: boolean;\n    /** Role auto-assigned to members with no explicit assignment. */\n    defaultRoleKey?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.readRuntimeConfig",
      "name": "@farthershore/farthershore-js.readRuntimeConfig",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/config.d.ts#L77",
      "description": "Read `window.__FS_CONFIG__` (null outside the browser / when not injected).\nTyped loosely on purpose — the payload crosses a version boundary (edge\nworker vs bundled SDK), so every field stays optional.",
      "signature": "export declare function readRuntimeConfig(): FsRuntimeConfig | null;",
      "typeReferences": [
        {
          "name": "FsRuntimeConfig",
          "source": "packages/farthershore-js/dist/config.d.ts#L47"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.reconcileAfterCheckout",
      "name": "@farthershore/farthershore-js.reconcileAfterCheckout",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/reconcile.d.ts#L33",
      "description": "Poll `client.me()` (invalidating the read cache before each attempt) until the\nsubscriber lifecycle settles or the attempt budget is exhausted. Resolves with\n`{ settled, subscriber, context, attempts }` — never rejects on a settle-miss\n(the caller branches on `settled`). A `me()` throw IS surfaced.",
      "signature": "export declare function reconcileAfterCheckout(client: Pick<FartherShoreClient, \"me\" | \"invalidate\">, options?: ReconcileOptions): Promise<ReconcileResult>;",
      "typeReferences": [
        {
          "name": "FartherShoreClient",
          "source": "packages/farthershore-js/dist/client.d.ts#L36"
        },
        {
          "name": "ReconcileOptions",
          "source": "packages/farthershore-js/dist/reconcile.d.ts#L3"
        },
        {
          "name": "ReconcileResult",
          "source": "packages/farthershore-js/dist/reconcile.d.ts#L17"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ReconcileOptions",
      "name": "@farthershore/farthershore-js.ReconcileOptions",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/reconcile.d.ts#L3",
      "description": "Public export ReconcileOptions; see its declaration and owning guide.",
      "signature": "export interface ReconcileOptions {\n    /** Max number of `me()` reads before giving up. Default 6. */\n    maxAttempts?: number;\n    /** Base backoff delay in ms (doubles each attempt, capped at `maxDelayMs`).\n     *  Default 600. */\n    baseDelayMs?: number;\n    /** Backoff ceiling in ms. Default 5000. */\n    maxDelayMs?: number;\n    /** Predicate deciding whether the lifecycle has settled. Default: ACTIVE or\n     *  TRIALING. */\n    isSettled?: (subscriber: SubscriberDetail | null) => boolean;\n    /** Abort the poll loop early (e.g. component unmount). */\n    signal?: AbortSignal;\n}",
      "typeReferences": [
        {
          "name": "SubscriberDetail",
          "source": "packages/farthershore-js/dist/types.d.ts#L859"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ReconcileResult",
      "name": "@farthershore/farthershore-js.ReconcileResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/reconcile.d.ts#L17",
      "description": "Public export ReconcileResult; see its declaration and owning guide.",
      "signature": "export interface ReconcileResult {\n    /** True when the lifecycle settled within the attempt budget. */\n    settled: boolean;\n    /** The last subscriber detail read (the freshest snapshot, settled or not). */\n    subscriber: SubscriberDetail | null;\n    /** The full last `me()` context (null when signed out / no subscriber). */\n    context: SubscriberContext | null;\n    /** How many `me()` reads were issued. */\n    attempts: number;\n}",
      "typeReferences": [
        {
          "name": "SubscriberContext",
          "source": "packages/farthershore-js/dist/types.d.ts#L897"
        },
        {
          "name": "SubscriberDetail",
          "source": "packages/farthershore-js/dist/types.d.ts#L859"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.registerComponent",
      "name": "@farthershore/farthershore-js.registerComponent",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/component-policy.d.ts#L67",
      "description": "Register a builder component's gate policy. Ids are namespaced\n`custom:<slug>` (managed ids are also accepted, letting a host re-declare a\nmanaged component's default gate). Throws on a malformed id — a typo'd\nregistration would otherwise silently resolve DENIED.",
      "signature": "export declare function registerComponent(registration: ComponentRegistration): void;",
      "typeReferences": [
        {
          "name": "ComponentRegistration",
          "source": "packages/farthershore-js/dist/component-policy.d.ts#L47"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.resolveComponentPolicy",
      "name": "@farthershore/farthershore-js.resolveComponentPolicy",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/component-policy.d.ts#L105",
      "description": "Resolve the gate policy for `componentId`.\n\nPer-field precedence: builder registration → subscriber overlay (`/me`) →\nmanaged default → derived fail-closed default. Unknown ids and invalid\nresolved permission sets resolve `{ unknown: true, gateMode: \"denied\" }` —\nthe gate renders AccessDenied, never the component.",
      "signature": "export declare function resolveComponentPolicy(componentId: string, overlays?: readonly ComponentAccessPolicyRow[] | null): ResolvedComponentPolicy;",
      "typeReferences": [
        {
          "name": "ComponentAccessPolicyRow",
          "source": "packages/farthershore-js/dist/types.d.ts#L945"
        },
        {
          "name": "ResolvedComponentPolicy",
          "source": "packages/farthershore-js/dist/component-policy.d.ts#L73"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ResolvedComponentPolicy",
      "name": "@farthershore/farthershore-js.ResolvedComponentPolicy",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/component-policy.d.ts#L73",
      "description": "The resolved gate policy for one component id.",
      "signature": "export interface ResolvedComponentPolicy {\n    componentId: string;\n    /** Render-gate permission; null ONLY when `presentational`. */\n    permission: string | null;\n    /** Every render permission that must pass. Sensitive components include\n     *  their managed default as an AND-floor plus any stricter override. */\n    requiredPermissions: readonly string[];\n    /** Permission for the component's mutating affordances. */\n    writePermission: string;\n    /** How the component renders when the viewer lacks `permission`. */\n    gateMode: ComponentGateMode;\n    /** Where `gateMode` came from: an explicit host registration, a\n     *  subscriber-org overlay, or the platform default. Hosts that wrap a\n     *  component-gated surface (e.g. a route) must not force their own mode\n     *  when the source is not `\"default\"` — the configured choice wins. */\n    gateModeSource: \"registration\" | \"overlay\" | \"default\";\n    /** Renders ungated (explicit flag only). */\n    presentational: boolean;\n    /** Whether the id is one of the contracts-owned sensitive components. */\n    sensitive: boolean;\n    /** True when the id or its resolved permission policy is invalid: render\n     *  DENIED before evaluating any permission claim. */\n    unknown: boolean;\n}",
      "typeReferences": [
        {
          "name": "ComponentGateMode",
          "source": "packages/farthershore-js/dist/component-policy.d.ts#L5"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ResourceLimitRow",
      "name": "@farthershore/farthershore-js.ResourceLimitRow",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L347",
      "description": "Public export ResourceLimitRow; see its declaration and owning guide.",
      "signature": "export type ResourceLimitRow = {\n    key: string;\n    label: string;\n    limit: number;\n    used: number | null;\n    warning: \"approaching\" | \"exhausted\" | null;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ResourceLimitUsage",
      "name": "@farthershore/farthershore-js.ResourceLimitUsage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L10",
      "description": "One resource's enforced cap and the caller's current usage.",
      "signature": "export interface ResourceLimitUsage {\n    limit: number;\n    current: number;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ResourceLimitUsageMap",
      "name": "@farthershore/farthershore-js.ResourceLimitUsageMap",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L15",
      "description": "Per-resource `{ limit, current }`. Undeclared resources are unlimited.",
      "signature": "export type ResourceLimitUsageMap = Record<string, ResourceLimitUsage>;",
      "typeReferences": [
        {
          "name": "ResourceLimitUsage",
          "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L10"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ResourceRecord",
      "name": "@farthershore/farthershore-js.ResourceRecord",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/resources.d.ts#L10",
      "description": "One record of a declared resource, as owned and returned by core.",
      "signature": "export interface ResourceRecord<TPayload = unknown> {\n    id: string;\n    resource: string;\n    payload: TPayload;\n    createdAt: string;\n    updatedAt: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ResourceRequestInit",
      "name": "@farthershore/farthershore-js.ResourceRequestInit",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/resources.d.ts#L6",
      "description": "A resource verb's options — the standard request init plus an optional\n`subjectId` for SUBJECT-scoped resources (W5.4). When set, it's forwarded as\nthe `x-fs-subject-id` header so core keys the count on that subject.",
      "signature": "export type ResourceRequestInit = RouteRequestInit & {\n    subjectId?: string;\n};",
      "typeReferences": [
        {
          "name": "RouteRequestInit",
          "source": "packages/farthershore-js/dist/resources/route.d.ts#L2"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ResourcesResource",
      "name": "@farthershore/farthershore-js.ResourcesResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/resources.d.ts#L25",
      "description": "Public export ResourcesResource; see its declaration and owning guide.",
      "signature": "export interface ResourcesResource<TPayload = unknown> {\n    /** List this subscriber's records of the resource. */\n    list(init?: ResourceRequestInit): Promise<ResourceRecord<TPayload>[]>;\n    /** Fetch one record by id. */\n    get(id: string, init?: ResourceRequestInit): Promise<ResourceRecord<TPayload>>;\n    /** Create a record. Throws `LimitExceededError` (402) at the plan cap. */\n    create(payload: TPayload, init?: ResourceRequestInit): Promise<ResourceRecord<TPayload>>;\n    /** Replace a record's payload. */\n    update(id: string, payload: TPayload, init?: ResourceRequestInit): Promise<ResourceRecord<TPayload>>;\n    /** Delete a record (frees one unit of the quota). */\n    delete(id: string, init?: ResourceRequestInit): Promise<void>;\n    /** Authoritative `{ count, cap }` for this resource on the caller's\n     *  subscription (W5.2). Reads core (the system of record), so it works for\n     *  backend-managed resources the SDK can't `list()`. Signed-out / no\n     *  subscription → `{ count: 0, cap: null }`. */\n    count(init?: {\n        signal?: AbortSignal;\n        subjectId?: string;\n    }): Promise<ResourceUsage>;\n}",
      "typeReferences": [
        {
          "name": "ResourceRecord",
          "source": "packages/farthershore-js/dist/resources/resources.d.ts#L10"
        },
        {
          "name": "ResourceRequestInit",
          "source": "packages/farthershore-js/dist/resources/resources.d.ts#L6"
        },
        {
          "name": "ResourceUsage",
          "source": "packages/farthershore-js/dist/resources/resources.d.ts#L21"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ResourceUsage",
      "name": "@farthershore/farthershore-js.ResourceUsage",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/resources.d.ts#L21",
      "description": "The authoritative current count + cap for a resource on the caller's\nsubscription (W5.2). `count` is the system-of-record count read from core;\n`cap` is the per-plan ceiling (a number, or `null` when uncapped/unlimited).\nWorks even for Model-1 backend-managed resources the SDK can't `list()`.",
      "signature": "export interface ResourceUsage {\n    count: number;\n    cap: number | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.RestoreSubscriptionResult",
      "name": "@farthershore/farthershore-js.RestoreSubscriptionResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1134",
      "description": "`POST /me/restore` — the platform performs the un-cancel: a paid sub's\nscheduled `cancel_at_period_end` is lifted on the provider, a free\nCANCELLED sub is flipped back to ACTIVE inline. Like cancel, there is no\nhosted-page hand-off — the caller gets the subscription back, and\n`cancelAtPeriodEnd` on it is what the platform read AFTER the un-cancel.\nA `false` here is the proof the notice should be gone.",
      "signature": "export interface RestoreSubscriptionResult {\n    subscription?: unknown;\n    /** The platform's post-restore reading. `false` is the success signal; the\n     *  field is `null` only when Core's response carried no subscription state\n     *  to read it from — never guessed. */\n    cancelAtPeriodEnd: boolean | null;\n    raw: unknown;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.retryWhileThrottled",
      "name": "@farthershore/farthershore-js.retryWhileThrottled",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/retry-throttle.d.ts#L42",
      "description": "Run `op` with a bounded wait-then-retry on a throttle/limit deny (T7).\n\nRetries ONLY while {@link isRetryable } holds for the thrown error — which, for\na deny carrying an `_fs` envelope, is driven by `_fs.reaction`/`retrySafe`\n(T10), NEVER by raw status inference. So a `concurrency_limit_exceeded` 429\n(reaction `queue`, retried via `retrySafe:true` — NOT the reaction) is retried\nuntil a slot frees, while a `spend`/`upgrade` deny is rethrown immediately.\nHonors `Retry-After`; caps\nattempts and per-wait delay; rethrows the LAST error once the cap is hit.",
      "signature": "export declare function retryWhileThrottled<T>(op: () => Promise<T>, options?: RetryWhileThrottledOptions): Promise<T>;",
      "typeReferences": [
        {
          "name": "RetryWhileThrottledOptions",
          "source": "packages/farthershore-js/dist/retry-throttle.d.ts#L4"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.RetryWhileThrottledOptions",
      "name": "@farthershore/farthershore-js.RetryWhileThrottledOptions",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/retry-throttle.d.ts#L4",
      "description": "Options for {@link retryWhileThrottled}. All optional — the defaults give a\nsensible bounded wait-for-slot policy out of the box.",
      "signature": "export interface RetryWhileThrottledOptions {\n    /** Total attempts INCLUDING the first (so `3` = up to 2 retries). Default 4.\n     *  Floored at 1. */\n    maxAttempts?: number;\n    /** Base for the exponential backoff (ms) used when no `Retry-After` is\n     *  present on the thrown error. Default 300. */\n    baseDelayMs?: number;\n    /** Ceiling (ms) on any single wait — caps both a `Retry-After` hint and the\n     *  exponential backoff so a long/hostile hint can't hang the caller. Default\n     *  20000. */\n    maxDelayMs?: number;\n    /** Injectable delay primitive (tests pass a no-op; default is a timer-based\n     *  sleep). SSR-safe — `setTimeout` exists in Node + the browser. */\n    sleep?: (ms: number) => Promise<void>;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.RouteRequestInit",
      "name": "@farthershore/farthershore-js.RouteRequestInit",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/route.d.ts#L2",
      "description": "Public export RouteRequestInit; see its declaration and owning guide.",
      "signature": "export type RouteRequestInit = RequestInit & {\n    apiKey?: string;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.RouteResource",
      "name": "@farthershore/farthershore-js.RouteResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/route.d.ts#L15",
      "description": "Public export RouteResource; see its declaration and owning guide.",
      "signature": "export interface RouteResource {\n    /** Raw gateway call — returns the `Response` for any content type. */\n    fetch(path: string, init?: RouteRequestInit): Promise<Response>;\n    /** `GET path` → parsed JSON. */\n    get<T = unknown>(path: string, init?: RouteRequestInit): Promise<T>;\n    /** `GET path` → parsed JSON PLUS the `X-RateLimit-*` snapshot read off the\n     *  live response before it's discarded (W8.5). Also publishes the snapshot to\n     *  `useRouteRateLimit()`. */\n    getWithMeta<T = unknown>(path: string, init?: RouteRequestInit): Promise<RouteResponseMeta<T>>;\n    /** `POST path` with a JSON body → parsed JSON. */\n    post<T = unknown>(path: string, body?: unknown, init?: RouteRequestInit): Promise<T>;\n    /** `PUT path` with a JSON body → parsed JSON. */\n    put<T = unknown>(path: string, body?: unknown, init?: RouteRequestInit): Promise<T>;\n    /** `PATCH path` with a JSON body → parsed JSON. */\n    patch<T = unknown>(path: string, body?: unknown, init?: RouteRequestInit): Promise<T>;\n    /** `DELETE path` → parsed JSON (or undefined on 204). */\n    delete<T = void>(path: string, init?: RouteRequestInit): Promise<T>;\n}",
      "typeReferences": [
        {
          "name": "RouteRequestInit",
          "source": "packages/farthershore-js/dist/resources/route.d.ts#L2"
        },
        {
          "name": "RouteResponseMeta",
          "source": "packages/farthershore-js/dist/resources/route.d.ts#L8"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.RouteResponseMeta",
      "name": "@farthershore/farthershore-js.RouteResponseMeta",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/route.d.ts#L8",
      "description": "A `GET` response plus the throttle snapshot read off its `X-RateLimit-*`\nheaders (W8.5). `remaining`/`resetAt` are null when the gateway didn't send\nthem. The same snapshot also updates `useRouteRateLimit()`.",
      "signature": "export interface RouteResponseMeta<T> {\n    data: T;\n    rateLimit: {\n        remaining: number | null;\n        resetAt: Date | null;\n    };\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.rowsToCsv",
      "name": "@farthershore/farthershore-js.rowsToCsv",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/csv.d.ts#L37",
      "description": "Build a CSV string from a header + already-escaped-or-raw row matrix, escaping\nevery cell through {@link escapeCsvCell} (so the formula-injection guard\napplies uniformly). The generic counterpart to {@link usageToCsv} — used by\nthe audit-log export, which has its own columns.",
      "signature": "export declare function rowsToCsv(header: string[], rows: unknown[][]): string;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.SENSITIVE_COMPONENT_KEYS",
      "name": "@farthershore/farthershore-js.SENSITIVE_COMPONENT_KEYS",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/component-policy.d.ts#L30",
      "description": "FAITHFUL COPY of contracts/evolution `SENSITIVE_COMPONENT_KEYS`.\nThe SDK cannot import contracts at runtime, so parity is pinned in test/.",
      "signature": "declare const SENSITIVE_COMPONENT_KEYS: readonly [\"audit_log\", \"api_keys_panel\", \"team_panel\"];",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ServiceAccount",
      "name": "@farthershore/farthershore-js.ServiceAccount",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L425",
      "description": "Repeatable metadata for a managed, organization-owned service account.",
      "signature": "export interface ServiceAccount {\n    id: string;\n    name: string;\n    state: ServiceAccountProvisioningState;\n    requestedPermissions: string[];\n    grantedPermissions: string[];\n    createdBy: string | null;\n    approvedBy: string | null;\n    createdAt: string;\n    activatedAt: string | null;\n    revokedAt: string | null;\n    usageLimits?: ServiceAccountUsageLimitRequest__f255b800fa4e[];\n    credentialApprovals: ServiceAccountApprovalSummary[];\n}",
      "typeReferences": [
        {
          "name": "ServiceAccountApprovalSummary",
          "source": "packages/farthershore-js/dist/types.d.ts#L383"
        },
        {
          "name": "ServiceAccountProvisioningState",
          "source": "packages/farthershore-js/dist/types.d.ts#L380"
        },
        {
          "name": "ServiceAccountUsageLimitRequest__f255b800fa4e",
          "source": "packages/farthershore-js/dist/types.d.ts#L399"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ServiceAccountApprovalOperation",
      "name": "@farthershore/farthershore-js.ServiceAccountApprovalOperation",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L382",
      "description": "Whether an approval creates a new account or replaces an active grant snapshot.",
      "signature": "export type ServiceAccountApprovalOperation = \"CREATE\" | \"UPDATE\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ServiceAccountApprovalResponse",
      "name": "@farthershore/farthershore-js.ServiceAccountApprovalResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L508",
      "description": "Public export ServiceAccountApprovalResponse; see its declaration and owning guide.",
      "signature": "export type ServiceAccountApprovalResponse = ApprovedServiceAccountCreateResponse | ApprovedServiceAccountUpdateResponse;",
      "typeReferences": [
        {
          "name": "ApprovedServiceAccountCreateResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L493"
        },
        {
          "name": "ApprovedServiceAccountUpdateResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L502"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ServiceAccountApprovalsResource",
      "name": "@farthershore/farthershore-js.ServiceAccountApprovalsResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/keys.d.ts#L37",
      "description": "Public export ServiceAccountApprovalsResource; see its declaration and owning guide.",
      "signature": "export interface ServiceAccountApprovalsResource {\n    /** Approval requests this signed-in member is currently eligible to decide. */\n    list(opts?: {\n        signal?: AbortSignal;\n        limit?: number;\n        offset?: number;\n    }): Promise<OffsetPage<PendingServiceAccountApproval>>;\n    /** Approve the complete request or an explicitly trimmed subset. */\n    approve(approvalId: string, input?: ApproveServiceAccountInput): Promise<ServiceAccountApprovalResponse>;\n    /** Deny a pending request without minting or widening any credential. */\n    deny(approvalId: string): Promise<ServiceAccountDenyResponse>;\n}",
      "typeReferences": [
        {
          "name": "ApproveServiceAccountInput",
          "source": "packages/farthershore-js/dist/types.d.ts#L451"
        },
        {
          "name": "OffsetPage",
          "source": "packages/farthershore-js/dist/types.d.ts#L535"
        },
        {
          "name": "PendingServiceAccountApproval",
          "source": "packages/farthershore-js/dist/types.d.ts#L521"
        },
        {
          "name": "ServiceAccountApprovalResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L508"
        },
        {
          "name": "ServiceAccountDenyResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L518"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ServiceAccountApprovalSummary",
      "name": "@farthershore/farthershore-js.ServiceAccountApprovalSummary",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L383",
      "description": "Public export ServiceAccountApprovalSummary; see its declaration and owning guide.",
      "signature": "export interface ServiceAccountApprovalSummary {\n    id: string;\n    operation: ServiceAccountApprovalOperation;\n    requestedBy: string;\n    requestedPermissions: string[];\n    excessPermissions: string[];\n    createdAt: string;\n}",
      "typeReferences": [
        {
          "name": "ServiceAccountApprovalOperation",
          "source": "packages/farthershore-js/dist/types.d.ts#L382"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ServiceAccountCreateResponse",
      "name": "@farthershore/farthershore-js.ServiceAccountCreateResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L475",
      "description": "Public export ServiceAccountCreateResponse; see its declaration and owning guide.",
      "signature": "export type ServiceAccountCreateResponse = ActiveServiceAccountCreateResponse | PendingServiceAccountCreateResponse;",
      "typeReferences": [
        {
          "name": "ActiveServiceAccountCreateResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L465"
        },
        {
          "name": "PendingServiceAccountCreateResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L455"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ServiceAccountDenyResponse",
      "name": "@farthershore/farthershore-js.ServiceAccountDenyResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L518",
      "description": "Public export ServiceAccountDenyResponse; see its declaration and owning guide.",
      "signature": "export interface ServiceAccountDenyResponse {\n    status: \"DENIED\";\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ServiceAccountProvisioningState",
      "name": "@farthershore/farthershore-js.ServiceAccountProvisioningState",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L380",
      "description": "Durable provisioning state for an organization-owned service account.",
      "signature": "export type ServiceAccountProvisioningState = \"PENDING\" | \"ACTIVE\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ServiceAccountRotationResponse",
      "name": "@farthershore/farthershore-js.ServiceAccountRotationResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L509",
      "description": "Public export ServiceAccountRotationResponse; see its declaration and owning guide.",
      "signature": "export interface ServiceAccountRotationResponse {\n    status: \"ACTIVE\";\n    serviceAccountId: string;\n    revokedKeyId: string;\n    apiKeyId: string;\n    /** One-time replacement secret. */\n    plaintext: string;\n    grantedPermissions: string[];\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ServiceAccountsResource",
      "name": "@farthershore/farthershore-js.ServiceAccountsResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/keys.d.ts#L53",
      "description": "Public export ServiceAccountsResource; see its declaration and owning guide.",
      "signature": "export interface ServiceAccountsResource {\n    /** List managed accounts, including PENDING rows with no credential material. */\n    list(opts?: {\n        signal?: AbortSignal;\n        limit?: number;\n        offset?: number;\n    }): Promise<OffsetPage<ServiceAccount>>;\n    /** Create immediately when covered, otherwise return a strict PENDING response. */\n    create(input: CreateServiceAccountInput, options?: ServiceAccountMutationOptions__2dee3eb4c17c): Promise<ServiceAccountCreateResponse>;\n    /** Replace the frozen grant snapshot or create a pending UPDATE request. */\n    update(serviceAccountId: string, input: UpdateServiceAccountInput, options?: ServiceAccountMutationOptions__2dee3eb4c17c): Promise<ServiceAccountUpdateResponse>;\n    /** Rotate the account credential and return the replacement secret once. */\n    rotate(serviceAccountId: string): Promise<ServiceAccountRotationResponse>;\n    /** Revoke the account and every active credential attached to it. */\n    revoke(serviceAccountId: string): Promise<void>;\n    readonly approvals: ServiceAccountApprovalsResource;\n}",
      "typeReferences": [
        {
          "name": "CreateServiceAccountInput",
          "source": "packages/farthershore-js/dist/types.d.ts#L441"
        },
        {
          "name": "OffsetPage",
          "source": "packages/farthershore-js/dist/types.d.ts#L535"
        },
        {
          "name": "ServiceAccount",
          "source": "packages/farthershore-js/dist/types.d.ts#L425"
        },
        {
          "name": "ServiceAccountApprovalsResource",
          "source": "packages/farthershore-js/dist/resources/keys.d.ts#L37"
        },
        {
          "name": "ServiceAccountCreateResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L475"
        },
        {
          "name": "ServiceAccountMutationOptions__2dee3eb4c17c",
          "source": "packages/farthershore-js/dist/resources/keys.d.ts#L49"
        },
        {
          "name": "ServiceAccountRotationResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L509"
        },
        {
          "name": "ServiceAccountUpdateResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L492"
        },
        {
          "name": "UpdateServiceAccountInput",
          "source": "packages/farthershore-js/dist/types.d.ts#L447"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.ServiceAccountUpdateResponse",
      "name": "@farthershore/farthershore-js.ServiceAccountUpdateResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L492",
      "description": "Public export ServiceAccountUpdateResponse; see its declaration and owning guide.",
      "signature": "export type ServiceAccountUpdateResponse = ActiveServiceAccountUpdateResponse | PendingServiceAccountUpdateResponse;",
      "typeReferences": [
        {
          "name": "ActiveServiceAccountUpdateResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L486"
        },
        {
          "name": "PendingServiceAccountUpdateResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L476"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.Session",
      "name": "@farthershore/farthershore-js.Session",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L326",
      "description": "Public export Session; see its declaration and owning guide.",
      "signature": "export interface Session {\n    authenticated: boolean;\n    subscriber: Subscriber | null;\n    /** Verified browser-session identity. Present only for a server-owned test\n     * persona cookie; Clerk sessions expose their user through the Clerk bridge. */\n    authSession: PersonaAuthSession | null;\n}",
      "typeReferences": [
        {
          "name": "PersonaAuthSession",
          "source": "packages/farthershore-js/dist/types.d.ts#L334"
        },
        {
          "name": "Subscriber",
          "source": "packages/farthershore-js/dist/types.d.ts#L315"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.SpendCapResult",
      "name": "@farthershore/farthershore-js.SpendCapResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/billing.d.ts#L5",
      "description": "Result of {@link BillingResource.setSpendCap}: the stored cap (echo) + the\nbumped subscription entitlement version (cache-bust signal).",
      "signature": "export interface SpendCapResult {\n    /** The stored monthly spend cap in cents (null when cleared). */\n    maxMonthlySpendCents: number | null;\n    /** The subscription's entitlement version after the write, when returned. */\n    entitlementVersion?: number;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.StartOnboardingInput",
      "name": "@farthershore/farthershore-js.StartOnboardingInput",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/plans.d.ts#L27",
      "description": "Input to `startOnboarding()`. Unlike direct checkout, the plan is optional:\nomitting it asks Core to select the business's single declared zero-price\nplan. This is the safest zero-price onboarding path because a client cannot\naccidentally name a billable plan.",
      "signature": "export interface StartOnboardingInput extends Omit<SubscribeInput, \"compiledPlanId\"> {\n    compiledPlanId?: string;\n}",
      "typeReferences": [
        {
          "name": "SubscribeInput",
          "source": "packages/farthershore-js/dist/resources/plans.d.ts#L5"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.StatusChip",
      "name": "@farthershore/farthershore-js.StatusChip",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L294",
      "description": "Public export StatusChip; see its declaration and owning guide.",
      "signature": "export interface StatusChip {\n    /** Sentence-case label (e.g. \"Active\", \"Past due\", \"Cancels soon\"). */\n    label: string;\n    tone: StatusChipTone;\n}",
      "typeReferences": [
        {
          "name": "StatusChipTone",
          "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L293"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.StatusChipTone",
      "name": "@farthershore/farthershore-js.StatusChipTone",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L293",
      "description": "Visual tone for a status chip. Maps onto the `fs-tag--*` modifier set.",
      "signature": "export type StatusChipTone = \"success\" | \"info\" | \"warning\" | \"danger\" | \"muted\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.SubscribeInput",
      "name": "@farthershore/farthershore-js.SubscribeInput",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/plans.d.ts#L5",
      "description": "Input to `subscribe()`. `compiledPlanId` is the `Plan.id` (immutable\nCompiledPlan pointer).",
      "signature": "export interface SubscribeInput {\n    /** The plan to subscribe to — pass `plan.id`. */\n    compiledPlanId: string;\n    /** Owning org for org-owned subscriptions (forwarded as the\n     *  `organizationId` query + header). */\n    organizationId?: string | null;\n    /** Where Stripe redirects after a successful paid checkout. */\n    successUrl?: string;\n    /** Where Stripe redirects if the subscriber abandons checkout. */\n    cancelUrl?: string;\n    /** OPTIONAL price-consent echo (E2 — Managed Stripe Price Integrity): the\n     *  `offerFingerprint` from `getPlanOffers()`. When provided and the plan's\n     *  economics changed since the offer was rendered, core rejects with\n     *  409 PLAN_OFFER_CHANGED (typed as `FartherShorePlanOfferChangedError`) and\n     *  creates NO session — catch it, refetch offers, and re-present the price.\n     *  Omit for today's unguarded behavior. */\n    offerFingerprint?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.Subscriber",
      "name": "@farthershore/farthershore-js.Subscriber",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L315",
      "description": "Public export Subscriber; see its declaration and owning guide.",
      "signature": "export interface Subscriber {\n    /** Lifecycle status (e.g. ONBOARDING | ACTIVE | SUSPENDED). */\n    status: string | null;\n    /** Denormalized plan key for display. */\n    planKey: string | null;\n    /** Immutable CompiledPlan id currently active for this subscriber. */\n    compiledPlanId: string | null;\n    /** True only after the selected environment's gateway has the exact active\n     * subscription projection. */\n    gatewayReady?: boolean;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.SubscriberActivePromo",
      "name": "@farthershore/farthershore-js.SubscriberActivePromo",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L815",
      "description": "An active promotional code applied to a subscriber. Mirrors core's\n`PortalSubscriberContext.subscriber.activePromo`.",
      "signature": "export interface SubscriberActivePromo {\n    id: string;\n    code: string;\n    kind: PromoCodeKind;\n    /** Discount magnitude (percent or cents, per `kind`), or null/absent. */\n    amount?: number | null;\n    /** How many billing periods the promo applies for. */\n    durationMonths: number;\n    /** ISO timestamp the promo stops applying, or null. */\n    activeUntil?: string | null;\n    /** ISO timestamp the promo was applied, or null. */\n    appliedAt?: string | null;\n}",
      "typeReferences": [
        {
          "name": "PromoCodeKind",
          "source": "packages/farthershore-js/dist/types.d.ts#L812"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.SubscriberContext",
      "name": "@farthershore/farthershore-js.SubscriberContext",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L897",
      "description": "Full `GET /me` context: the subscriber (null = signed-in user has no\nsubscriber record for the selected org → onboarding) plus the\neligibility-scoped plan list (NOT identical to the public catalog).",
      "signature": "export interface SubscriberContext {\n    subscriber: SubscriberDetail | null;\n    availablePlans: Plan[];\n    /**\n     * E1 — the subscriber's PINNED plan, resolved server-side from the\n     * subscription's pinned CompiledPlan version (NOT the catalog head — a\n     * pinned older version may not appear in `availablePlans` at all).\n     *\n     * Tri-state for old-Core back-compat:\n     *   - `Plan`      — resolved pinned plan.\n     *   - `null`      — Core resolved it: there IS no pinned plan (no\n     *                   subscription). Do NOT fall back to guessing.\n     *   - `undefined` — the wire field was ABSENT (pre-E1 Core). Only here may\n     *                   a consumer fall back to matching `availablePlans` by\n     *                   `subscriber.compiledPlanId` (deprecated path).\n     */\n    currentPlan?: Plan | null;\n    /** Managed-RBAC product-role keys assigned to the CALLER within the org\n     *  (FAR-698/FAR-700). Server-resolved on `GET /me` — the same row-backed\n     *  source the gateway-token mint uses; the SDK never decodes tokens.\n     *  Empty for pre-RBAC responses. */\n    roles: string[];\n    /** The caller's resolved permission strings (`<subject>:read|write`\n     *  grammar). `[\"*\"]` means Managed RBAC is off or the caller is an OWNER;\n     *  personal-org members receive the same resolved permission sets as team-org\n     *  members. Client-side gating over these is UX ONLY — the gateway's\n     *  `permission` constraint is the security boundary. */\n    permissions: string[];\n    /** Reviewed product permissions explicitly denied by the subscriber's\n     * effective roles. Present on current Core responses. */\n    deniedPermissions?: string[];\n    /** Current product permissions that were not reviewed by the effective\n     * roles and therefore inherit the safe product-evolution default of allow.\n     * Platform/account permissions are never included. */\n    unassignedProductPermissions?: string[];\n    /** Per-subscriber ComponentAccessPolicy override rows (Permissions Kernel,\n     *  Wave 5) — `{componentKey, requiredPermission, gateMode}` as core emits\n     *  them. Consumed by the SDK's component-policy resolver; `[]` when the\n     *  subscriber has no overrides (or on older responses). */\n    componentAccessPolicies: ComponentAccessPolicyRow[];\n    /** Current legal acceptance state for this subscriber/org, when served by\n     *  Core. Absent on older responses. */\n    legalConsent?: LegalConsentStatus__2c5f3ab016cd;\n    raw: unknown;\n}",
      "typeReferences": [
        {
          "name": "ComponentAccessPolicyRow",
          "source": "packages/farthershore-js/dist/types.d.ts#L945"
        },
        {
          "name": "LegalConsentStatus__2c5f3ab016cd",
          "source": "packages/farthershore-js/dist/types.d.ts#L76"
        },
        {
          "name": "Plan",
          "source": "packages/farthershore-js/dist/types.d.ts#L127"
        },
        {
          "name": "SubscriberDetail",
          "source": "packages/farthershore-js/dist/types.d.ts#L859"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.SubscriberDetail",
      "name": "@farthershore/farthershore-js.SubscriberDetail",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L859",
      "description": "Rich subscriber detail from `GET /me` — superset of {@link Subscriber} with\nthe lifecycle/billing fields the account pages render. Extra Core fields ride\nalong untyped.",
      "signature": "export interface SubscriberDetail {\n    id?: string;\n    status: string | null;\n    planKey: string | null;\n    compiledPlanId: string | null;\n    /** True only after the selected environment's gateway has the exact active\n     * subscription projection. */\n    gatewayReady?: boolean;\n    /** Resource limits on the subscriber's pinned plan, not the latest catalog. */\n    resourceLimits?: Record<string, number>;\n    /** Per-dimension meter map (`dimension → unit`) on the subscriber's PINNED\n     *  compiled plan — the billing shape the subscriber is actually on. */\n    dimensions?: Record<string, number>;\n    /** The ordered list of meter dimensions the usage tab should display,\n     *  authored by the pinned plan. `rules[].d` indexes into this array. */\n    displayDims?: string[];\n    /** Pinned-plan rate-limit / quota allowances (the source of truth for\n     *  included quotas — see {@link SubscriberPinnedRule}). */\n    rules?: SubscriberPinnedRule__7b0d2ee36c4a[];\n    /** Stripe-driven lifecycle (e.g. ACTIVE | TRIALING | PAST_DUE | CANCELLED). */\n    subscriptionLifecycle?: string | null;\n    /** Stripe-synced trial end (ISO) — drives the trial banner countdown. */\n    trialEndsAt?: string | null;\n    /** True when a paid cancel is scheduled for period end (\"Renew\" un-schedules). */\n    cancelAtPeriodEnd?: boolean | null;\n    /** A scheduled plan transition (downgrades apply at period end). */\n    scheduledTransition?: SubscriberScheduledTransition | null;\n    /** An active promotional code applied to the subscription, when present. */\n    activePromo?: SubscriberActivePromo | null;\n    /** P-SPENDCAP-READ (W6.4) — the subscriber-set monthly spend cap, in cents,\n     *  or null when none is set. STORED-not-ENFORCED today (held in\n     *  `Subscription.customMetadata`, pending the rate-limit migration). */\n    maxMonthlySpendCents?: number | null;\n    [k: string]: unknown;\n}",
      "typeReferences": [
        {
          "name": "SubscriberActivePromo",
          "source": "packages/farthershore-js/dist/types.d.ts#L815"
        },
        {
          "name": "SubscriberPinnedRule__7b0d2ee36c4a",
          "source": "packages/farthershore-js/dist/types.d.ts#L848"
        },
        {
          "name": "SubscriberScheduledTransition",
          "source": "packages/farthershore-js/dist/types.d.ts#L832"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.SubscribeResult",
      "name": "@farthershore/farthershore-js.SubscribeResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/plans.d.ts#L44",
      "description": "Result of `subscribe()`. For a PAID plan, `url` is the Stripe Checkout URL to\nnavigate to. For a FREE plan, there is no `url` — the subscriber was\nactivated directly and `subscriber` describes the new row.",
      "signature": "export interface SubscribeResult {\n    /** Stripe Checkout URL (paid plans only). Undefined for free activations. */\n    url?: string;\n    /** The activated subscriber (free plans only). Undefined for paid checkout. */\n    subscriber?: {\n        id: string;\n        businessId?: string | null;\n        status: string;\n    };\n    /** Server-side checkout-attempt id, when returned. */\n    checkoutAttemptId?: string;\n    /** Best-effort initial API key minted on free-plan activation, when present. */\n    autoApiKey?: string;\n    /** Set when the subscriber activated but the first-key mint FAILED — surfaced\n     *  (not swallowed) so the caller can prompt a manual key creation. */\n    autoApiKeyError?: AutoApiKeyError;\n}",
      "typeReferences": [
        {
          "name": "AutoApiKeyError",
          "source": "packages/farthershore-js/dist/types.d.ts#L1097"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.SubscriberScheduledTransition",
      "name": "@farthershore/farthershore-js.SubscriberScheduledTransition",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L832",
      "description": "A scheduled plan transition on a subscriber. Mirrors core's\n`PortalSubscriberContext.subscriber.scheduledTransition` — richer than\n{@link SubscriptionScheduledTransition} (carries the resolved plan name +\ntype).",
      "signature": "export interface SubscriberScheduledTransition {\n    compiledPlanId: string | null;\n    planName: string | null;\n    planType: string | null;\n    /** ISO timestamp the transition takes effect. */\n    effectiveAt: string;\n    /** Movement direction (`CANCEL` | `UPGRADE` | `DOWNGRADE` | `SIDEGRADE`),\n     *  open to producer-side additions. */\n    kind: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.Subscription",
      "name": "@farthershore/farthershore-js.Subscription",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L739",
      "description": "The consumer's current subscription for this product. Mirrors core's\n`PortalSubscriptionDto` (lifecycle + billing state + scheduled transition)\nmapped to the SDK's camelCase domain convention. The widened fields degrade\nto safe defaults when the wire DTO is lean (`null` / `false`).",
      "signature": "export interface Subscription {\n    id: string;\n    /** Display lifecycle status (e.g. ACTIVE | TRIALING | PAST_DUE). Falls back\n     *  across `status` / `lifecycle` on the wire. */\n    status: string;\n    planKey: string | null;\n    planName: string | null;\n    /** Owning product id, or null when absent on a lean DTO. */\n    businessId: string | null;\n    /** Immutable `CompiledPlan.id` currently active, or null. */\n    compiledPlanId: string | null;\n    /** Richer lifecycle string straight off the row (may equal `status`). */\n    lifecycle: string | null;\n    /** Payment health (`ok` | `past_due` | `incomplete` | …), or null when the\n     *  DTO doesn't carry it (free subs). */\n    paymentHealth: string | null;\n    /** ISO start of the current billing period, or null. */\n    currentPeriodStart: string | null;\n    /** ISO end of the current billing period, or null. */\n    currentPeriodEnd: string | null;\n    /** True when a paid cancel is scheduled for period end. */\n    cancelAtPeriodEnd: boolean;\n    /** ISO trial end — drives the trial countdown. */\n    trialEndsAt: string | null;\n    /** ISO timestamp the subscription was canceled, or null. */\n    canceledAt: string | null;\n    /** A scheduled plan transition, or null when none is pending. */\n    scheduledTransition: SubscriptionScheduledTransition | null;\n    /** Whether the subscriber has a Stripe customer (can open the billing\n     *  portal). Free subs that never touched Stripe are `false`. */\n    canManageInStripe: boolean;\n    /**\n     * Whether there is actually something here to cancel — SERVER-DECIDED.\n     *\n     * A subscription on a `free`-kind plan has no paid, Stripe-managed\n     * subscription behind it, so \"cancel\" has no meaning. The client cannot work\n     * this out on its own (the portal DTO always carries a real subscription id,\n     * so \"nothing to cancel\" looks identical to a lean wire body), which is why\n     * core answers it.\n     *\n     * `null` means the server did not say — treated as CANCELLABLE so an older\n     * core never strands a paying subscriber with no way to cancel.\n     */\n    cancellable: boolean | null;\n    /** The full platform subscription DTO (large + evolving) for advanced reads. */\n    raw: unknown;\n}",
      "typeReferences": [
        {
          "name": "SubscriptionScheduledTransition",
          "source": "packages/farthershore-js/dist/types.d.ts#L726"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.SubscriptionContext",
      "name": "@farthershore/farthershore-js.SubscriptionContext",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L955",
      "description": "One org through which the user holds a subscription to this product.",
      "signature": "export interface SubscriptionContext {\n    organizationId: string;\n    /** Org display name — matches core's wire field (`name`, NOT\n     *  `organizationName`; see apps/core/src/routes/portal-customer/shared.ts). */\n    name?: string | null;\n    isDefault?: boolean;\n    /** Existing subscriber row for this business/org pair. A non-null value\n     * means this workspace already owns customer state for the product. */\n    subscriberId?: string | null;\n    /** Authoritative active-plan entitlement for the selected environment. */\n    hasEntitlement?: boolean;\n    [k: string]: unknown;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.SubscriptionContextsResult",
      "name": "@farthershore/farthershore-js.SubscriptionContextsResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L968",
      "description": "Public export SubscriptionContextsResult; see its declaration and owning guide.",
      "signature": "export interface SubscriptionContextsResult {\n    contexts: SubscriptionContext[];\n    defaultOrganizationId: string;\n    selectedOrganizationId: string | null;\n}",
      "typeReferences": [
        {
          "name": "SubscriptionContext",
          "source": "packages/farthershore-js/dist/types.d.ts#L955"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.SubscriptionScheduledTransition",
      "name": "@farthershore/farthershore-js.SubscriptionScheduledTransition",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L726",
      "description": "A scheduled plan transition on a subscription (downgrades apply at period\nend). Mirrors core's `PortalSubscriptionDto.scheduledTransition`.",
      "signature": "export interface SubscriptionScheduledTransition {\n    /** Immutable `CompiledPlan.id` the subscription moves to, or null. */\n    compiledPlanId: string | null;\n    /** ISO timestamp the transition takes effect, or null. */\n    effectiveAt: string | null;\n    /** Movement direction (`CANCEL` | `UPGRADE` | `DOWNGRADE` | `SIDEGRADE`),\n     *  open to producer-side additions. */\n    kind: string | null;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.TeamListResult",
      "name": "@farthershore/farthershore-js.TeamListResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L990",
      "description": "Team read result — `ok:false` (with `error`) drives the read-only banner.",
      "signature": "export interface TeamListResult {\n    ok: boolean;\n    members: TeamMember[];\n    /** The org's assignable Managed-RBAC role list (FAR-698) — what the\n     *  per-member role multi-select offers. Empty when RBAC is unused. */\n    availableRoles?: RbacRoleSummary[];\n    error?: string;\n}",
      "typeReferences": [
        {
          "name": "RbacRoleSummary",
          "source": "packages/farthershore-js/dist/types.d.ts#L1023"
        },
        {
          "name": "TeamMember",
          "source": "packages/farthershore-js/dist/types.d.ts#L974"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.TeamMember",
      "name": "@farthershore/farthershore-js.TeamMember",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L974",
      "description": "Public export TeamMember; see its declaration and owning guide.",
      "signature": "export interface TeamMember {\n    id: string;\n    userExternalId: string;\n    role: TeamRole;\n    /** Managed-RBAC product-role keys assigned to this member (FAR-698).\n     *  Absent on pre-RBAC responses. */\n    businessRoleKeys?: string[];\n    /** Assigned keys whose role row no longer exists (deleted roles leave\n     *  assignments in place — resolution ignores them). Drives the portal's\n     *  stale-role warning. */\n    staleRoleKeys?: string[];\n    createdAt?: string;\n    updatedAt?: string;\n    [k: string]: unknown;\n}",
      "typeReferences": [
        {
          "name": "TeamRole",
          "source": "packages/farthershore-js/dist/types.d.ts#L973"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.TeamResource",
      "name": "@farthershore/farthershore-js.TeamResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/account.d.ts#L13",
      "description": "Public export TeamResource; see its declaration and owning guide.",
      "signature": "export interface TeamResource {\n    /** Team members on the current subscription. A failed read surfaces\n     *  `{ ok:false, error }` (drives the SSR portal's read-only banner) — NOT a\n     *  silent empty list. */\n    list(opts?: {\n        signal?: AbortSignal;\n    }): Promise<TeamListResult>;\n    /**\n     * Track T2 — subscriber-team invitations. Managers (OWNER/ADMIN) invite by\n     * email; the invitee accepts with the emailed token. Each method THROWS the\n     * typed `FartherShoreApiError` on validation/authz failure.\n     */\n    invites: {\n        /** Pending invitations (OWNER/ADMIN). */\n        list(opts?: {\n            signal?: AbortSignal;\n        }): Promise<TeamInvitation__f9f120bf906d[]>;\n        /** Create an invitation. `role` defaults to VIEWER; `businessRoleKeys` must\n         *  be a subset of the caller's own permissions (403 otherwise). Returns the\n         *  invitation plus the one-time raw token. */\n        create(input: {\n            email: string;\n            role?: TeamRole;\n            businessRoleKeys?: string[];\n        }): Promise<TeamInvitationCreated__c157ef151993>;\n        /** Revoke a pending invitation. */\n        revoke(invitationId: string): Promise<void>;\n        /** Accept an invitation with its token. The signed-in user's email must\n         *  match the invite (403 mismatch; 409 expired/already-used). */\n        accept(token: string): Promise<TeamInvitationAccepted__11c705c559ac>;\n    };\n    updateRole(membershipId: string, role: TeamRole): Promise<TeamMember>;\n    remove(membershipId: string): Promise<void>;\n    /**\n     * Set-replace a member's Managed-RBAC product-role assignment (FAR-698):\n     * the given list becomes the member's full assignment; `[]` clears it.\n     * Every key must reference an existing role. Throws the typed\n     * `FartherShoreApiError` on validation/authz failures.\n     * Client-side role gating is UX only; the gateway's `permission`\n     * constraint is the security boundary.\n     */\n    assignRoles(membershipId: string, roles: string[]): Promise<TeamMember>;\n}",
      "typeReferences": [
        {
          "name": "TeamInvitation__f9f120bf906d",
          "source": "packages/farthershore-js/dist/types.d.ts#L999"
        },
        {
          "name": "TeamInvitationAccepted__11c705c559ac",
          "source": "packages/farthershore-js/dist/types.d.ts#L1017"
        },
        {
          "name": "TeamInvitationCreated__c157ef151993",
          "source": "packages/farthershore-js/dist/types.d.ts#L1012"
        },
        {
          "name": "TeamListResult",
          "source": "packages/farthershore-js/dist/types.d.ts#L990"
        },
        {
          "name": "TeamMember",
          "source": "packages/farthershore-js/dist/types.d.ts#L974"
        },
        {
          "name": "TeamRole",
          "source": "packages/farthershore-js/dist/types.d.ts#L973"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.TeamRole",
      "name": "@farthershore/farthershore-js.TeamRole",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L973",
      "description": "Public export TeamRole; see its declaration and owning guide.",
      "signature": "export type TeamRole = \"OWNER\" | \"ADMIN\" | \"VIEWER\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.TokenProvider",
      "name": "@farthershore/farthershore-js.TokenProvider",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/config.d.ts#L80",
      "description": "Returns the current session bearer token (Clerk session JWT or persona JWT),\nor null/undefined when signed out. May be async (e.g. Clerk's getToken).",
      "signature": "export type TokenProvider = () => string | null | undefined | Promise<string | null | undefined>;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.TransparentBillPreview",
      "name": "@farthershore/farthershore-js.TransparentBillPreview",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L1257",
      "description": "Public export TransparentBillPreview; see its declaration and owning guide.",
      "signature": "export interface TransparentBillPreview {\n    currency: string;\n    disclosure: \"transparent\";\n    /** The plan's recurring fee, in cents. */\n    recurringFeeCents: number;\n    /** Per-rating-window engine totals. */\n    windows: BillPreviewWindow[];\n    totals: {\n        /** Nanodollars, decimal strings (null = unavailable). */\n        ratedNanos: NanosAmount;\n        fundedNanos: NanosAmount;\n        receivableNanos: NanosAmount;\n    };\n    allowances: BillPreviewAllowance[];\n    /** All-zero counts mean `totals` IS the whole bill. */\n    usageRating: BillPreviewUsageRating__fb184ad4d633;\n}",
      "typeReferences": [
        {
          "name": "BillPreviewAllowance",
          "source": "packages/farthershore-js/dist/types.d.ts#L1198"
        },
        {
          "name": "BillPreviewUsageRating__fb184ad4d633",
          "source": "packages/farthershore-js/dist/types.d.ts#L1251"
        },
        {
          "name": "BillPreviewWindow",
          "source": "packages/farthershore-js/dist/types.d.ts#L1186"
        },
        {
          "name": "NanosAmount",
          "source": "packages/farthershore-js/dist/types.d.ts#L1179"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.unregisterComponent",
      "name": "@farthershore/farthershore-js.unregisterComponent",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/component-policy.d.ts#L69",
      "description": "Remove a registration (host teardown / tests).",
      "signature": "export declare function unregisterComponent(id: string): void;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UpdateServiceAccountInput",
      "name": "@farthershore/farthershore-js.UpdateServiceAccountInput",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L447",
      "description": "Public export UpdateServiceAccountInput; see its declaration and owning guide.",
      "signature": "export interface UpdateServiceAccountInput {\n    requestedPermissions?: NonEmptyPermissionList__ca911cbb6fa0;\n    usageLimit?: ServiceAccountUsageLimitRequest__f255b800fa4e | null;\n}",
      "typeReferences": [
        {
          "name": "NonEmptyPermissionList__ca911cbb6fa0",
          "source": "packages/farthershore-js/dist/types.d.ts#L440"
        },
        {
          "name": "ServiceAccountUsageLimitRequest__f255b800fa4e",
          "source": "packages/farthershore-js/dist/types.d.ts#L399"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UpdateUsageLimitInput",
      "name": "@farthershore/farthershore-js.UpdateUsageLimitInput",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L637",
      "description": "Strict PUT body. Scope, subject, and quantity are immutable; at least one\nvalue or mode/threshold field is required.",
      "signature": "export type UpdateUsageLimitInput = (UsageLimitUpdateValue__e8f19d3e563b & UsageLimitUpdateMode__0a6925ca669e) | (UsageLimitNoUpdateValue__cd3ce2b61e4f & UsageLimitExplicitUpdateMode__577df72501b7) | (UsageLimitNoUpdateValue__cd3ce2b61e4f & {\n    mode?: never;\n    notifyAtPct: number | null;\n});",
      "typeReferences": [
        {
          "name": "UsageLimitExplicitUpdateMode__577df72501b7",
          "source": "packages/farthershore-js/dist/types.d.ts#L628"
        },
        {
          "name": "UsageLimitNoUpdateValue__cd3ce2b61e4f",
          "source": "packages/farthershore-js/dist/types.d.ts#L614"
        },
        {
          "name": "UsageLimitUpdateMode__0a6925ca669e",
          "source": "packages/farthershore-js/dist/types.d.ts#L618"
        },
        {
          "name": "UsageLimitUpdateValue__e8f19d3e563b",
          "source": "packages/farthershore-js/dist/types.d.ts#L607"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.USAGE_CSV_HEADER",
      "name": "@farthershore/farthershore-js.USAGE_CSV_HEADER",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/csv.d.ts#L5",
      "description": "The CSV columns the usage export emits — mirrors the {@link UsageEvent}\nshape the SSR portal / dev-portal-template exported. `requests` is the native\nmeter.",
      "signature": "declare const USAGE_CSV_HEADER = \"timestamp,operation,status,status_code,requests,tokens,latency_ms\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.USAGE_LIMIT_SCOPES",
      "name": "@farthershore/farthershore-js.USAGE_LIMIT_SCOPES",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L546",
      "description": "Public, contracts-free projection of the Stage 1 portal usage-limit DTOs.\nExact parity is pinned in `test/usage-limits.test.ts`; the private contracts\nworkspace package must never leak into this published SDK's declarations.",
      "signature": "declare const USAGE_LIMIT_SCOPES: readonly [\"ORG\", \"MEMBER\", \"SERVICE_ACCOUNT\"];",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.USAGE_LIMIT_STRATEGIES",
      "name": "@farthershore/farthershore-js.USAGE_LIMIT_STRATEGIES",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L553",
      "description": "Public export USAGE_LIMIT_STRATEGIES; see its declaration and owning guide.",
      "signature": "declare const USAGE_LIMIT_STRATEGIES: readonly [\"fixed_window\", \"sliding_window\"];",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.USAGE_TRAFFIC_CLASSES",
      "name": "@farthershore/farthershore-js.USAGE_TRAFFIC_CLASSES",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L650",
      "description": "Public export USAGE_TRAFFIC_CLASSES; see its declaration and owning guide.",
      "signature": "declare const USAGE_TRAFFIC_CLASSES: readonly [\"customer_operation\", \"control_plane\", \"admin_internal\", \"background_job\", \"webhook\", \"healthcheck\", \"unclassified\"];",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageBillingBasis",
      "name": "@farthershore/farthershore-js.UsageBillingBasis",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L649",
      "description": "Whether usage is billed as a pure request COUNT or weighted USAGE. Drives the\nmeter label (\"Requests\" vs \"Usage\"); computed server-side.",
      "signature": "export type UsageBillingBasis = \"requests\" | \"usage\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageChargeableOutcomes",
      "name": "@farthershore/farthershore-js.UsageChargeableOutcomes",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L654",
      "description": "Public export UsageChargeableOutcomes; see its declaration and owning guide.",
      "signature": "export type UsageChargeableOutcomes = \"success_only\" | \"success_and_partial\" | \"attempted\" | \"trusted_actual_usage_only\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageDisplay",
      "name": "@farthershore/farthershore-js.UsageDisplay",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L239",
      "description": "Public export UsageDisplay; see its declaration and owning guide.",
      "signature": "export interface UsageDisplay {\n    label: string;\n    value: string;\n    progress: {\n        used: number;\n        total: number;\n    } | null;\n    breakdown: string | null;\n    detail: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageEvent",
      "name": "@farthershore/farthershore-js.UsageEvent",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L679",
      "description": "Public export UsageEvent; see its declaration and owning guide.",
      "signature": "export interface UsageEvent {\n    id: string;\n    timestamp: string;\n    operation: string;\n    apiKeyPrefix: string | null;\n    statusCode: number | null;\n    status: \"success\" | \"error\";\n    /** Event kind (e.g. \"api\"); shown as the row Type. */\n    type: string | null;\n    latencyMs: number | null;\n    /** Canonical per-event meter values, keyed by product-declared meter. */\n    dimensions: UsageEventDimensions__f3dde72e4b29;\n    /** Compatibility aliases for common legacy portal displays. */\n    requests: number | null;\n    tokens: number | null;\n    /** Advisory UsagePolicy state confirmed or relayed by the gateway/core. The\n     *  frontend decides nothing from this; it is only for rendering stale-tolerant\n     *  labels, cooldowns, and prompts. */\n    usagePolicy?: UsagePolicyAdvisory;\n}",
      "typeReferences": [
        {
          "name": "UsageEventDimensions__f3dde72e4b29",
          "source": "packages/farthershore-js/dist/types.d.ts#L646"
        },
        {
          "name": "UsagePolicyAdvisory",
          "source": "packages/farthershore-js/dist/types.d.ts#L655"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageLimit",
      "name": "@farthershore/farthershore-js.UsageLimit",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L580",
      "description": "Public export UsageLimit; see its declaration and owning guide.",
      "signature": "export type UsageLimit = UsageLimitSubject & UsageLimitValue & {\n    id: string;\n    quantity: string;\n    mode: UsageLimitMode;\n    period: \"BILLING_PERIOD\";\n    /** Present only for NOTIFY rows. */\n    notifyAtPct?: number;\n    ceiling: UsageLimitCeiling;\n    /** Present when the edge accounts this limit on a non-default window. */\n    effectiveWindow?: UsageLimitEffectiveWindow;\n    createdBy: string | null;\n    createdAt: string;\n    updatedAt: string;\n};",
      "typeReferences": [
        {
          "name": "UsageLimitCeiling",
          "source": "packages/farthershore-js/dist/types.d.ts#L549"
        },
        {
          "name": "UsageLimitEffectiveWindow",
          "source": "packages/farthershore-js/dist/types.d.ts#L559"
        },
        {
          "name": "UsageLimitMode",
          "source": "packages/farthershore-js/dist/types.d.ts#L548"
        },
        {
          "name": "UsageLimitSubject",
          "source": "packages/farthershore-js/dist/types.d.ts#L570"
        },
        {
          "name": "UsageLimitValue",
          "source": "packages/farthershore-js/dist/types.d.ts#L563"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageLimitCeiling",
      "name": "@farthershore/farthershore-js.UsageLimitCeiling",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L549",
      "description": "Public export UsageLimitCeiling; see its declaration and owning guide.",
      "signature": "export interface UsageLimitCeiling {\n    limitUnits?: number;\n    limitCents?: number;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageLimitDeleteResult",
      "name": "@farthershore/farthershore-js.UsageLimitDeleteResult",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L641",
      "description": "Public export UsageLimitDeleteResult; see its declaration and owning guide.",
      "signature": "export interface UsageLimitDeleteResult {\n    id: string;\n    deleted: true;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageLimitEffectiveWindow",
      "name": "@farthershore/farthershore-js.UsageLimitEffectiveWindow",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L559",
      "description": "READ-ONLY: how the limit is actually accounted at the edge. Builder-owned\n(inherited from the plan's own rule for the dimension); a `sliding_window`\nmakes the ceiling a rolling horizon of the period's length instead of one\nthat resets at the period boundary. Never writable by the subscriber.",
      "signature": "export interface UsageLimitEffectiveWindow {\n    strategy: UsageLimitStrategy;\n    periodSeconds: number;\n}",
      "typeReferences": [
        {
          "name": "UsageLimitStrategy",
          "source": "packages/farthershore-js/dist/types.d.ts#L554"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageLimitListResponse",
      "name": "@farthershore/farthershore-js.UsageLimitListResponse",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L594",
      "description": "Public export UsageLimitListResponse; see its declaration and owning guide.",
      "signature": "export type UsageLimitListResponse = OffsetPage<UsageLimit>;",
      "typeReferences": [
        {
          "name": "OffsetPage",
          "source": "packages/farthershore-js/dist/types.d.ts#L535"
        },
        {
          "name": "UsageLimit",
          "source": "packages/farthershore-js/dist/types.d.ts#L580"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageLimitMode",
      "name": "@farthershore/farthershore-js.UsageLimitMode",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L548",
      "description": "Public export UsageLimitMode; see its declaration and owning guide.",
      "signature": "export type UsageLimitMode = \"BLOCK\" | \"NOTIFY\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageLimitProfile",
      "name": "@farthershore/farthershore-js.UsageLimitProfile",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L653",
      "description": "Public export UsageLimitProfile; see its declaration and owning guide.",
      "signature": "export type UsageLimitProfile = \"customer_usage\" | \"business_capacity\" | \"control_plane\" | \"admin_internal\" | \"platform_abuse_only\" | \"healthcheck\" | \"none\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageLimitScope",
      "name": "@farthershore/farthershore-js.UsageLimitScope",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L547",
      "description": "Public export UsageLimitScope; see its declaration and owning guide.",
      "signature": "export type UsageLimitScope = (typeof USAGE_LIMIT_SCOPES)[number];",
      "typeReferences": [
        {
          "name": "USAGE_LIMIT_SCOPES",
          "source": "packages/farthershore-js/dist/types.d.ts#L546"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageLimitsResource",
      "name": "@farthershore/farthershore-js.UsageLimitsResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/usage-limits.d.ts#L3",
      "description": "Public export UsageLimitsResource; see its declaration and owning guide.",
      "signature": "export interface UsageLimitsResource {\n    /** List the current subscriber organization's visible per-actor limits.\n     *  `options.signal` is accepted for source compatibility but does not cancel\n     *  the shared cached fetch; the cache owns the request lifecycle. */\n    list(options?: {\n        signal?: AbortSignal;\n        limit?: number;\n        offset?: number;\n    }): Promise<UsageLimitListResponse>;\n    /** Create a subscriber-authored usage limit. */\n    create(input: CreateUsageLimitInput): Promise<UsageLimit>;\n    /** Update mutable value, mode, or threshold fields. */\n    update(limitId: string, input: UpdateUsageLimitInput): Promise<UsageLimit>;\n    /** Permanently remove a subscriber-authored usage limit. */\n    delete(limitId: string): Promise<UsageLimitDeleteResult>;\n}",
      "typeReferences": [
        {
          "name": "CreateUsageLimitInput",
          "source": "packages/farthershore-js/dist/types.d.ts#L604"
        },
        {
          "name": "UpdateUsageLimitInput",
          "source": "packages/farthershore-js/dist/types.d.ts#L637"
        },
        {
          "name": "UsageLimit",
          "source": "packages/farthershore-js/dist/types.d.ts#L580"
        },
        {
          "name": "UsageLimitDeleteResult",
          "source": "packages/farthershore-js/dist/types.d.ts#L641"
        },
        {
          "name": "UsageLimitListResponse",
          "source": "packages/farthershore-js/dist/types.d.ts#L594"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageLimitStrategy",
      "name": "@farthershore/farthershore-js.UsageLimitStrategy",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L554",
      "description": "Public export UsageLimitStrategy; see its declaration and owning guide.",
      "signature": "export type UsageLimitStrategy = (typeof USAGE_LIMIT_STRATEGIES)[number];",
      "typeReferences": [
        {
          "name": "USAGE_LIMIT_STRATEGIES",
          "source": "packages/farthershore-js/dist/types.d.ts#L553"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageLimitSubject",
      "name": "@farthershore/farthershore-js.UsageLimitSubject",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L570",
      "description": "Public export UsageLimitSubject; see its declaration and owning guide.",
      "signature": "export type UsageLimitSubject = {\n    scope: \"ORG\";\n    subjectId?: never;\n} | {\n    scope: \"MEMBER\";\n    subjectId: string;\n} | {\n    scope: \"SERVICE_ACCOUNT\";\n    subjectId: string;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageLimitValue",
      "name": "@farthershore/farthershore-js.UsageLimitValue",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L563",
      "description": "Public export UsageLimitValue; see its declaration and owning guide.",
      "signature": "export type UsageLimitValue = {\n    limitUnits: number;\n    limitCents?: never;\n} | {\n    limitCents: number;\n    limitUnits?: never;\n};",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsagePolicyAdvisory",
      "name": "@farthershore/farthershore-js.UsagePolicyAdvisory",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L655",
      "description": "Public export UsagePolicyAdvisory; see its declaration and owning guide.",
      "signature": "export interface UsagePolicyAdvisory {\n    /** Gateway-resolved policy id, when the usage payload includes one. */\n    usagePolicyId: string | null;\n    /** Known traffic class; null when a newer gateway sends a class this SDK\n     *  does not know yet. See `unknownTrafficClass` for the preserved raw value. */\n    trafficClass: UsageTrafficClass | null;\n    unknownTrafficClass?: string;\n    policySource: UsagePolicySource | null;\n    limitProfile: UsageLimitProfile | null;\n    customerBillable: boolean | null;\n    providerCostTracked: boolean | null;\n    chargeableOutcomes: UsageChargeableOutcomes | null;\n    meterKey: string | null;\n    cooldownResetAt: number | null;\n    retryAfterSeconds: number | null;\n    freeButLimited: boolean;\n    providerCost: boolean;\n    upgradePrompt: boolean;\n    creditPrompt: boolean;\n    genericMessage: string;\n    /** Raw gateway/core policy fields. Preserved for forward-compatible UIs and\n     *  debugging; advisory only and never an enforcement input. */\n    raw: Record<string, unknown>;\n}",
      "typeReferences": [
        {
          "name": "UsageChargeableOutcomes",
          "source": "packages/farthershore-js/dist/types.d.ts#L654"
        },
        {
          "name": "UsageLimitProfile",
          "source": "packages/farthershore-js/dist/types.d.ts#L653"
        },
        {
          "name": "UsagePolicySource",
          "source": "packages/farthershore-js/dist/types.d.ts#L652"
        },
        {
          "name": "UsageTrafficClass",
          "source": "packages/farthershore-js/dist/types.d.ts#L651"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsagePolicySource",
      "name": "@farthershore/farthershore-js.UsagePolicySource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L652",
      "description": "Public export UsagePolicySource; see its declaration and owning guide.",
      "signature": "export type UsagePolicySource = \"declared\" | \"inherited\" | \"defaulted\" | \"inferred\";",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageRange",
      "name": "@farthershore/farthershore-js.UsageRange",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/usage.d.ts#L3",
      "description": "Public export UsageRange; see its declaration and owning guide.",
      "signature": "export interface UsageRange {\n    from?: string;\n    to?: string;\n}",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageResource",
      "name": "@farthershore/farthershore-js.UsageResource",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/resources/usage.d.ts#L7",
      "description": "Public export UsageResource; see its declaration and owning guide.",
      "signature": "export interface UsageResource {\n    /** Dimension → total for the period (requests/tokens/computeMs/dollars…).\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle); the read is unmount-safe\n     *  via the hook's active-flag and bounded by the cache TTL. */\n    summary(range?: UsageRange, opts?: {\n        signal?: AbortSignal;\n    }): Promise<UsageSummary>;\n    /** The most-recent usage events (platform caps this list).\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle); the read is unmount-safe\n     *  via the hook's active-flag and bounded by the cache TTL. */\n    events(range?: UsageRange, opts?: {\n        signal?: AbortSignal;\n    }): Promise<UsageEvent[]>;\n    /** Everything in one round-trip: per-dimension totals + recent events + the\n     *  billing basis (the \"Requests\" vs \"Usage\" meter-label hint).\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle); the read is unmount-safe\n     *  via the hook's active-flag and bounded by the cache TTL. */\n    snapshot(range?: UsageRange, opts?: {\n        signal?: AbortSignal;\n        includeEvents?: boolean;\n    }): Promise<UsageSnapshot>;\n}",
      "typeReferences": [
        {
          "name": "UsageEvent",
          "source": "packages/farthershore-js/dist/types.d.ts#L679"
        },
        {
          "name": "UsageRange",
          "source": "packages/farthershore-js/dist/resources/usage.d.ts#L3"
        },
        {
          "name": "UsageSnapshot",
          "source": "packages/farthershore-js/dist/types.d.ts#L701"
        },
        {
          "name": "UsageSummary",
          "source": "packages/farthershore-js/dist/types.d.ts#L645"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageSnapshot",
      "name": "@farthershore/farthershore-js.UsageSnapshot",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L701",
      "description": "A single round-trip's worth of usage: per-dimension totals, the recent\nevents, and the billing basis.",
      "signature": "export interface UsageSnapshot {\n    summary: UsageSummary;\n    events: UsageEvent[];\n    billingBasis: UsageBillingBasis;\n    /** Whether `summary` is an EXACT total over the whole period (`true`, the\n     *  DB-side aggregate) or an approximation from a bounded event sample\n     *  (`false`). A `false` here means the UI should flag the figure as\n     *  approximate. Defaults to `true` (additive — older Cores omit it). */\n    exact: boolean;\n    /** Number of usage events the `summary` total was computed from over the\n     *  period. With `exact: true` this is the true event count; with\n     *  `exact: false` it's the sampled (capped) count. */\n    sampledEvents: number;\n    /** ISO start of the period the `summary` covers (the resolved `from`), or\n     *  null when the Core doesn't report it. */\n    periodStart: string | null;\n    /** ISO end of the period the `summary` covers (the resolved `to`), or null\n     *  when the Core doesn't report it. */\n    periodEnd: string | null;\n    /** Aggregated advisory policy state from the freshest event in this snapshot.\n     *  Null when no event carries policy metadata. */\n    usagePolicy: UsagePolicyAdvisory | null;\n}",
      "typeReferences": [
        {
          "name": "UsageBillingBasis",
          "source": "packages/farthershore-js/dist/types.d.ts#L649"
        },
        {
          "name": "UsageEvent",
          "source": "packages/farthershore-js/dist/types.d.ts#L679"
        },
        {
          "name": "UsagePolicyAdvisory",
          "source": "packages/farthershore-js/dist/types.d.ts#L655"
        },
        {
          "name": "UsageSummary",
          "source": "packages/farthershore-js/dist/types.d.ts#L645"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageSummary",
      "name": "@farthershore/farthershore-js.UsageSummary",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L645",
      "description": "Public export UsageSummary; see its declaration and owning guide.",
      "signature": "export type UsageSummary = Record<string, number>;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.usageToCsv",
      "name": "@farthershore/farthershore-js.usageToCsv",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/csv.d.ts#L30",
      "description": "Render a usage event list as a CSV string (header + one row per event), every\ncell run through {@link escapeCsvCell}. Returns just the header line for an\nempty list. Pure — a host turns the string into a download with a Blob (see\nthe `downloadUsageCsv` helper the components use).",
      "signature": "export declare function usageToCsv(events: UsageEvent[]): string;",
      "typeReferences": [
        {
          "name": "UsageEvent",
          "source": "packages/farthershore-js/dist/types.d.ts#L679"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.UsageTrafficClass",
      "name": "@farthershore/farthershore-js.UsageTrafficClass",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/types.d.ts#L651",
      "description": "Public export UsageTrafficClass; see its declaration and owning guide.",
      "signature": "export type UsageTrafficClass = (typeof USAGE_TRAFFIC_CLASSES)[number];",
      "typeReferences": [
        {
          "name": "USAGE_TRAFFIC_CLASSES",
          "source": "packages/farthershore-js/dist/types.d.ts#L650"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.root.WAIT_THEN_RETRY_REACTIONS",
      "name": "@farthershore/farthershore-js.WAIT_THEN_RETRY_REACTIONS",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/root",
      "source": "packages/farthershore-js/dist/retry-throttle.d.ts#L22",
      "description": "Reactions whose intent is explicitly \"wait, then resend the same request\".\nUsed only for documentation/intent — the actual gate is {@link isRetryable },\nwhich reads the same `_fs.reaction`/`retrySafe` signal.",
      "signature": "declare const WAIT_THEN_RETRY_REACTIONS: ReadonlySet<FsLimitReaction__06a9e09be641>;",
      "typeReferences": [
        {
          "name": "FsLimitReaction__06a9e09be641",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.test-utils.createMockFartherShoreClient",
      "name": "@farthershore/farthershore-js/test-utils.createMockFartherShoreClient",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/test-utils",
      "source": "packages/farthershore-js/dist/test-utils/mock-client.d.ts#L36",
      "description": "Build a fully-typed {@link FartherShoreClient} test double. Every resource\ndefaults to an empty/no-op implementation, so a component tree renders\nwithout crashing under `<FartherShoreTestProvider>` with zero overrides.\n`overrides` deep-merges onto the defaults — a nested plain object (a\nresource) merges key-by-key, so overriding one method preserves every\nsibling method's default; a function value always replaces wholesale.",
      "signature": "export declare function createMockFartherShoreClient(overrides?: DeepPartial<FartherShoreClient__e4fe174a542f>): FartherShoreClient__e4fe174a542f;",
      "typeReferences": [
        {
          "name": "DeepPartial",
          "source": "packages/farthershore-js/dist/test-utils/mock-client.d.ts#L5"
        },
        {
          "name": "FartherShoreClient__e4fe174a542f",
          "source": "packages/farthershore-js/dist/client.d.ts#L36"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.test-utils.deepMergeClient",
      "name": "@farthershore/farthershore-js/test-utils.deepMergeClient",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/test-utils",
      "source": "packages/farthershore-js/dist/test-utils/mock-client.d.ts#L13",
      "description": "Deep-merge `override` onto `base`: nested plain objects (resources) MERGE\nkey-by-key so an override of one method (`{ keys: { list } }`) preserves\nevery sibling method's default; functions and other leaves REPLACE\nwholesale (never merged into). Exported for reuse by callers building their\nown layered mocks.",
      "signature": "export declare function deepMergeClient<T>(base: T, override: DeepPartial<T>): T;",
      "typeReferences": [
        {
          "name": "DeepPartial",
          "source": "packages/farthershore-js/dist/test-utils/mock-client.d.ts#L5"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.test-utils.DeepPartial",
      "name": "@farthershore/farthershore-js/test-utils.DeepPartial",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/test-utils",
      "source": "packages/farthershore-js/dist/test-utils/mock-client.d.ts#L5",
      "description": "Recursively-optional mirror of `T`. Plain nested objects stay deep-partial;\nfunctions and other leaves (arrays, primitives, class instances) are only\never REPLACED wholesale — see {@link deepMergeClient}.",
      "signature": "export type DeepPartial<T> = T extends (...args: infer A) => infer R ? (...args: A) => R : T extends readonly unknown[] ? T : T extends object ? {\n    [K in keyof T]?: DeepPartial<T[K]>;\n} : T;",
      "typeReferences": [],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.test-utils.FartherShoreTestProvider",
      "name": "@farthershore/farthershore-js/test-utils.FartherShoreTestProvider",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/test-utils",
      "source": "packages/farthershore-js/dist/test-utils/test-provider.d.ts#L24",
      "description": "Mount a component tree under a Farther Shore client for tests — the\n`render(..., { wrapper })` target for any component that calls\n`useFartherShore()` / one of the built-in hooks.",
      "signature": "export declare function FartherShoreTestProvider({ client, children, }: FartherShoreTestProviderProps): import(\"react\").JSX.Element;",
      "typeReferences": [
        {
          "name": "FartherShoreTestProviderProps",
          "source": "packages/farthershore-js/dist/test-utils/test-provider.d.ts#L3"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.test-utils.FartherShoreTestProviderProps",
      "name": "@farthershore/farthershore-js/test-utils.FartherShoreTestProviderProps",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/test-utils",
      "source": "packages/farthershore-js/dist/test-utils/test-provider.d.ts#L3",
      "description": "Public export FartherShoreTestProviderProps; see its declaration and owning guide.",
      "signature": "export interface FartherShoreTestProviderProps {\n    /** A mock or real client — typically {@link createMockFartherShoreClient}'s\n     *  return value. */\n    client: FartherShoreClient__e4fe174a542f;\n    children: ReactNode;\n}",
      "typeReferences": [
        {
          "name": "FartherShoreClient__e4fe174a542f",
          "source": "packages/farthershore-js/dist/client.d.ts#L36"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.test-utils.mockApiError",
      "name": "@farthershore/farthershore-js/test-utils.mockApiError",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/test-utils",
      "source": "packages/farthershore-js/dist/test-utils/error-builders.d.ts#L28",
      "description": "Build a generic {@link FartherShoreApiError} for asserting an error-handling\nbranch keyed on `status`/`code`.\n\n expect(mockApiError(429, \"x\")).toBeInstanceOf(FartherShoreApiError);",
      "signature": "export declare function mockApiError(status: number, code: string, message?: string): FartherShoreApiError__ae8b4410fda4;",
      "typeReferences": [
        {
          "name": "FartherShoreApiError__ae8b4410fda4",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.test-utils.mockLimitExceeded",
      "name": "@farthershore/farthershore-js/test-utils.mockLimitExceeded",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/test-utils",
      "source": "packages/farthershore-js/dist/test-utils/error-builders.d.ts#L17",
      "description": "Build a {@link LimitExceededError} (a plan/quota/spend cap deny) for\nasserting a component's upgrade-prompt branch.\n\n expect(mockLimitExceeded()).toBeInstanceOf(LimitExceededError);",
      "signature": "export declare function mockLimitExceeded(overrides?: {\n    message?: string;\n    code?: string;\n    status?: number;\n    descriptor?: Partial<LimitDescriptor__01693492a147>;\n}): LimitExceededError__7844c601e6fd;",
      "typeReferences": [
        {
          "name": "LimitDescriptor__01693492a147",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L85"
        },
        {
          "name": "LimitExceededError__7844c601e6fd",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L206"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "sdk.farthershore-js.test-utils.mockRateLimited",
      "name": "@farthershore/farthershore-js/test-utils.mockRateLimited",
      "kind": "sdk",
      "collection": "frontend-sdk",
      "page": "generated/frontend-sdk/test-utils",
      "source": "packages/farthershore-js/dist/test-utils/error-builders.d.ts#L7",
      "description": "Build a {@link FartherShoreRateLimitedError} (a `429` throttle deny) for\nasserting a component's backoff/retry branch.\n\n expect(mockRateLimited()).toBeInstanceOf(FartherShoreRateLimitedError);",
      "signature": "export declare function mockRateLimited(overrides?: {\n    message?: string;\n    retryAfterSeconds?: number | null;\n    code?: string;\n}): FartherShoreRateLimitedError__dbc7e0b60aee;",
      "typeReferences": [
        {
          "name": "FartherShoreRateLimitedError__dbc7e0b60aee",
          "source": "packages/farthershore-js/dist/errors/index.d.ts#L288"
        }
      ],
      "guide": "reference/frontend-sdk"
    },
    {
      "id": "workflow.add-backend",
      "name": "Add a backend",
      "kind": "workflow",
      "collection": "backend-sdk",
      "page": "cookbook/add-backend",
      "source": "packages/platform-docs/docs/cookbook/add-backend.mdx",
      "description": "Declare and connect an additional backend safely.",
      "guide": "cookbook/add-backend"
    },
    {
      "id": "workflow.add-resource-limit",
      "name": "Add a resource limit",
      "kind": "workflow",
      "collection": "business-sdk",
      "page": "cookbook/add-resource-limit",
      "source": "packages/platform-docs/docs/cookbook/add-resource-limit.mdx",
      "description": "Cap how many persistent resources a subscriber may own.",
      "guide": "cookbook/add-resource-limit"
    },
    {
      "id": "workflow.add-spend-cap",
      "name": "Add a spend cap",
      "kind": "workflow",
      "collection": "commerce",
      "page": "cookbook/add-spend-cap",
      "source": "packages/platform-docs/docs/cookbook/add-spend-cap.mdx",
      "description": "Bound metered spend with funding plus a block policy.",
      "guide": "cookbook/add-spend-cap"
    },
    {
      "id": "workflow.add-team-rbac",
      "name": "Add team RBAC",
      "kind": "workflow",
      "collection": "business-sdk",
      "page": "cookbook/add-team-rbac",
      "source": "packages/platform-docs/docs/cookbook/add-team-rbac.mdx",
      "description": "Turn on managed team roles and permission enforcement.",
      "guide": "cookbook/add-team-rbac"
    },
    {
      "id": "workflow.add-trial",
      "name": "Add a trial",
      "kind": "workflow",
      "collection": "commerce",
      "page": "cookbook/add-trial",
      "source": "packages/platform-docs/docs/cookbook/add-trial.mdx",
      "description": "Add a time-limited trial to a paid plan.",
      "guide": "cookbook/add-trial"
    },
    {
      "id": "workflow.add-webhook-consumer",
      "name": "Add a webhook consumer",
      "kind": "workflow",
      "collection": "backend-sdk",
      "page": "cookbook/add-webhook-consumer",
      "source": "packages/platform-docs/docs/cookbook/add-webhook-consumer.mdx",
      "description": "Receive signed business events at your HTTPS endpoint.",
      "guide": "cookbook/add-webhook-consumer"
    },
    {
      "id": "workflow.ai-token-metering",
      "name": "Meter AI tokens",
      "kind": "workflow",
      "collection": "commerce",
      "page": "cookbook/ai-token-metering",
      "source": "packages/platform-docs/docs/cookbook/ai-token-metering.mdx",
      "description": "Meter LLM input/output tokens end to end.",
      "guide": "cookbook/ai-token-metering"
    },
    {
      "id": "workflow.change-a-price",
      "name": "Change a price",
      "kind": "workflow",
      "collection": "commerce",
      "page": "cookbook/change-a-price",
      "source": "packages/platform-docs/docs/cookbook/change-a-price.mdx",
      "description": "Reprice safely; new subscriptions pay the new price, existing keep their pin.",
      "guide": "cookbook/change-a-price"
    },
    {
      "id": "workflow.diagnose-billing-usage",
      "name": "Diagnose billing and usage",
      "kind": "workflow",
      "collection": "operations",
      "page": "cookbook/diagnose-billing-usage",
      "source": "packages/platform-docs/docs/cookbook/diagnose-billing-usage.mdx",
      "description": "Trace a mismatch between served requests, usage, and billing.",
      "guide": "cookbook/diagnose-billing-usage"
    },
    {
      "id": "workflow.diagnose-denied-request",
      "name": "Diagnose a denied request",
      "kind": "workflow",
      "collection": "gateway",
      "page": "cookbook/diagnose-denied-request",
      "source": "packages/platform-docs/docs/cookbook/diagnose-denied-request.mdx",
      "description": "Find why the gateway denied a subscriber request.",
      "guide": "cookbook/diagnose-denied-request"
    },
    {
      "id": "workflow.direct-backend",
      "name": "Connect a direct backend",
      "kind": "workflow",
      "collection": "backend-sdk",
      "page": "cookbook/direct-backend",
      "source": "packages/platform-docs/docs/cookbook/direct-backend.mdx",
      "description": "Connect a public HTTPS backend with direct transport.",
      "guide": "cookbook/direct-backend"
    },
    {
      "id": "workflow.enable-platform-agent",
      "name": "Enable the Farther Shore Agent",
      "kind": "workflow",
      "collection": "agents",
      "page": "cookbook/enable-platform-agent",
      "source": "packages/platform-docs/docs/cookbook/enable-platform-agent.mdx",
      "description": "Turn on the Operator, inspect its work, and stop it safely.",
      "guide": "cookbook/enable-platform-agent"
    },
    {
      "id": "workflow.freemium",
      "name": "Freemium that converts",
      "kind": "workflow",
      "collection": "commerce",
      "page": "cookbook/freemium",
      "source": "packages/platform-docs/docs/cookbook/freemium.mdx",
      "description": "A free tier with real limits and a one-click upgrade path.",
      "guide": "cookbook/freemium"
    },
    {
      "id": "workflow.grant-routes",
      "name": "Gate API routes by plan",
      "kind": "workflow",
      "collection": "gateway",
      "page": "cookbook/grant-routes",
      "source": "packages/platform-docs/docs/cookbook/grant-routes.mdx",
      "description": "Grant branded route refs to plans and mirror access state in the UI.",
      "guide": "cookbook/grant-routes"
    },
    {
      "id": "workflow.hybrid-portal",
      "name": "Shared and private in one portal",
      "kind": "workflow",
      "collection": "frontend-sdk",
      "page": "cookbook/hybrid-portal",
      "source": "packages/platform-docs/docs/cookbook/hybrid-portal.mdx",
      "description": "Combine an org-shared, RBAC-gated section and member-keyed private data in one frontend.",
      "guide": "cookbook/hybrid-portal"
    },
    {
      "id": "workflow.hybrid-product",
      "name": "Build a hybrid product",
      "kind": "workflow",
      "collection": "platform",
      "page": "cookbook/hybrid-product",
      "source": "packages/platform-docs/docs/cookbook/hybrid-product.mdx",
      "description": "Launch one product with a hosted customer app and a metered API.",
      "guide": "cookbook/hybrid-product"
    },
    {
      "id": "workflow.metered-routes",
      "name": "Add metered routes",
      "kind": "workflow",
      "collection": "business-sdk",
      "page": "cookbook/metered-routes",
      "source": "packages/platform-docs/docs/cookbook/metered-routes.mdx",
      "description": "Meter a new dimension and bill it on a plan.",
      "guide": "cookbook/metered-routes"
    },
    {
      "id": "workflow.prepaid-credits",
      "name": "Prepaid wallet",
      "kind": "workflow",
      "collection": "commerce",
      "page": "cookbook/prepaid-credits",
      "source": "packages/platform-docs/docs/cookbook/prepaid-credits.mdx",
      "description": "Sell a prepaid bucket that usage draws down and that stops at zero.",
      "guide": "cookbook/prepaid-credits"
    },
    {
      "id": "workflow.preview-environment",
      "name": "Test in a preview environment",
      "kind": "workflow",
      "collection": "operations",
      "page": "cookbook/preview-environment",
      "source": "packages/platform-docs/docs/cookbook/preview-environment.mdx",
      "description": "Test contract changes in an isolated branch-backed environment.",
      "guide": "cookbook/preview-environment"
    },
    {
      "id": "workflow.release-production",
      "name": "Release to production",
      "kind": "workflow",
      "collection": "operations",
      "page": "cookbook/release-production",
      "source": "packages/platform-docs/docs/cookbook/release-production.mdx",
      "description": "Preview, approve, publish, and verify a production release.",
      "guide": "cookbook/release-production"
    },
    {
      "id": "workflow.saas-subscription-app",
      "name": "A subscription SaaS app",
      "kind": "workflow",
      "collection": "platform",
      "page": "cookbook/saas-subscription-app",
      "source": "packages/platform-docs/docs/cookbook/saas-subscription-app.mdx",
      "description": "Sell a hosted, plan-gated web app for a flat monthly fee — no API.",
      "guide": "cookbook/saas-subscription-app"
    },
    {
      "id": "workflow.share-with-a-member",
      "name": "Share with another member",
      "kind": "workflow",
      "collection": "frontend-sdk",
      "page": "cookbook/share-with-a-member",
      "source": "packages/platform-docs/docs/cookbook/share-with-a-member.mdx",
      "description": "Let a member share a document with a teammate on the verified, correlatable member id.",
      "guide": "cookbook/share-with-a-member"
    },
    {
      "id": "workflow.subscription-plus-overage",
      "name": "Subscription + overage",
      "kind": "workflow",
      "collection": "commerce",
      "page": "cookbook/subscription-plus-overage",
      "source": "packages/platform-docs/docs/cookbook/subscription-plus-overage.mdx",
      "description": "A base fee with included usage, then metered overage above it.",
      "guide": "cookbook/subscription-plus-overage"
    },
    {
      "id": "workflow.usage-based-api",
      "name": "A pay-as-you-go API",
      "kind": "workflow",
      "collection": "platform",
      "page": "cookbook/usage-based-api",
      "source": "packages/platform-docs/docs/cookbook/usage-based-api.mdx",
      "description": "Build and sell a usage-metered API business end to end.",
      "guide": "cookbook/usage-based-api"
    }
  ],
  "sdkSupportingDeclarations": {
    "generated/business-sdk/root": [
      {
        "name": "ActionSpecJson__e01b08e9d184",
        "signature": "export type ActionSpecJson__e01b08e9d184 = {\n    id: string;\n    title?: string;\n    kind: \"query\" | \"mutation\";\n    actorType?: string;\n    subject?: {\n        type: string;\n        from: \"header\" | \"path_param\";\n        name: string;\n    };\n    inputSchemaRef?: string;\n    audit?: \"none\" | \"metadata\" | \"full\";\n    resource?: {\n        resource: string;\n        effect: \"create\" | \"delete\";\n    };\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L323",
        "description": "",
        "references": []
      },
      {
        "name": "AUTHENTIC_PRICE__9ac77f4b80b2",
        "signature": "declare const AUTHENTIC_PRICE__9ac77f4b80b2: unique symbol;",
        "source": "packages/business/dist/types/value-model/money.d.ts#L3",
        "description": "",
        "references": []
      },
      {
        "name": "AuthoredPrice__fa4522a263d6",
        "signature": "export type AuthoredPrice__fa4522a263d6 = Readonly<PriceSpec__1288e85e83b9 & {\n    readonly [AUTHENTIC_PRICE__9ac77f4b80b2]: true;\n}>;",
        "source": "packages/business/dist/types/value-model/money.d.ts#L4",
        "description": "",
        "references": [
          {
            "name": "AUTHENTIC_PRICE__9ac77f4b80b2",
            "source": "packages/business/dist/types/value-model/money.d.ts#L3"
          },
          {
            "name": "PriceSpec__1288e85e83b9",
            "source": "packages/business/dist/types/price.d.ts#L9"
          }
        ]
      },
      {
        "name": "BackendOptions__63ffee6039bc",
        "signature": "export type BackendOptions__63ffee6039bc = {\n    /** Human-friendly label (defaults to the id). */\n    name?: string;\n    /** Stable slug (defaults to the id). */\n    slug?: string;\n    transport?: BackendTransportOptions__6fbea01c7324;\n    /**\n     * Per-request gateway->backend signature verification. The JWKS + signer\n     * keystone is proven, so this is the HARD default: OMITTING it compiles to\n     * `verification: { required: true }` — the gateway signs every request, the\n     * backend fails closed, and `ctx.principal` is guaranteed. Set\n     * `verification: { required: false }` to opt a backend out (escape hatch).\n     */\n    verification?: {\n        required?: boolean;\n    };\n    /** Meter allow-list. Omitted = all business meters allowed. */\n    meters?: Array<KeyRef__d164043d89c3 | MeterRef__af57686b0ce1>;\n    /** Marks this as the default backend when a business declares more than one. */\n    default?: boolean;\n};",
        "source": "packages/business/dist/types/backend.d.ts#L8",
        "description": "",
        "references": [
          {
            "name": "BackendTransportOptions__6fbea01c7324",
            "source": "packages/business/dist/types/backend.d.ts#L4"
          },
          {
            "name": "KeyRef__d164043d89c3",
            "source": "packages/business/dist/types/refs.d.ts#L1"
          },
          {
            "name": "MeterRef__af57686b0ce1",
            "source": "packages/business/dist/types/route-metering.d.ts#L10"
          }
        ]
      },
      {
        "name": "BackendRef__376a47b9b8d4",
        "signature": "export type BackendRef__376a47b9b8d4 = {\n    readonly kind: \"backend\";\n    readonly key: string;\n};",
        "source": "packages/business/dist/types/business.d.ts#L110",
        "description": "",
        "references": []
      },
      {
        "name": "BackendTransportOptions__6fbea01c7324",
        "signature": "export type BackendTransportOptions__6fbea01c7324 = {\n    mode?: BackendTransportModeJson;\n    runner?: BackendRunnerJson;\n};",
        "source": "packages/business/dist/types/backend.d.ts#L4",
        "description": "",
        "references": [
          {
            "name": "BackendRunnerJson",
            "source": "packages/business/dist/types/ir-types.d.ts#L303"
          },
          {
            "name": "BackendTransportModeJson",
            "source": "packages/business/dist/types/ir-types.d.ts#L302"
          }
        ]
      },
      {
        "name": "BusinessBlockJson__a04690090fc8",
        "signature": "export type BusinessBlockJson__a04690090fc8 = {\n    visibility?: \"public\" | \"private\";\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L383",
        "description": "",
        "references": []
      },
      {
        "name": "BusinessChangeApprovalRiskJson__e8db37f1738a",
        "signature": "export type BusinessChangeApprovalRiskJson__e8db37f1738a = \"safe\" | \"non_blocking\" | \"economic_risk\" | \"blocking\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L363",
        "description": "",
        "references": []
      },
      {
        "name": "BusinessCleanupPolicyModeJson__41a5ae49826e",
        "signature": "export type BusinessCleanupPolicyModeJson__41a5ae49826e = \"report\" | \"pull_request\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L362",
        "description": "",
        "references": []
      },
      {
        "name": "BusinessCustomerContextJson__e5b9539124a5",
        "signature": "export type BusinessCustomerContextJson__e5b9539124a5 = {\n    context_tokens?: {\n        enabled?: boolean;\n    };\n    portal_auth?: {\n        strategy: CustomerPortalAuthStrategyJson__c8cec76b5a5a;\n    };\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L375",
        "description": "",
        "references": [
          {
            "name": "CustomerPortalAuthStrategyJson__c8cec76b5a5a",
            "source": "packages/business/dist/types/ir-types.d.ts#L374"
          }
        ]
      },
      {
        "name": "BusinessFunction__7e4f3d5c2657",
        "signature": "export type BusinessFunction__7e4f3d5c2657 = (options?: FunctionalBusinessOptions) => CompiledBusiness__671c1daa22b7;",
        "source": "packages/business/dist/types/commerce/types.d.ts#L229",
        "description": "",
        "references": [
          {
            "name": "CompiledBusiness__671c1daa22b7",
            "source": "packages/business/dist/types/business.d.ts#L7"
          },
          {
            "name": "FunctionalBusinessOptions",
            "source": "packages/business/dist/types/value-model/declarations.d.ts#L8"
          }
        ]
      },
      {
        "name": "BusinessOptions__bbd5a4a3592b",
        "signature": "export type BusinessOptions__bbd5a4a3592b = {\n    visibility?: \"public\" | \"private\";\n    /** API-key header the gateway reads (default x-api-key). */\n    authHeader?: string;\n    upstreamAuth?: {\n        type: \"none\" | \"static_bearer\";\n        token?: string;\n    };\n    billOn4xx?: boolean;\n    /** Business operator policies, e.g. zero-traffic cleanup report/PR mode. */\n    operatorPolicies?: BusinessPoliciesJson__0d51efe66230;\n    /** Customer-context controls emitted as business.customer_context. */\n    customerContext?: {\n        contextTokens?: BusinessCustomerContextJson__e5b9539124a5[\"context_tokens\"];\n        customerAuth?: BusinessCustomerContextJson__e5b9539124a5[\"portal_auth\"];\n    };\n    billing?: {\n        applyLimitUpgradesInstantly?: boolean;\n        /** D4 — how plan changes cascade to EXISTING subscribers. Absent =\n         *  platform default: auto-advance (economic changes reach existing\n         *  subscribers at each one's next renewal — `period_end`; price\n         *  decreases apply immediately). `immediate` on price\n         *  increases / entitlement reductions requires the matching\n         *  `allowImmediate*` consent flag (schema-enforced). Shape mirrors\n         *  `subscriberChangePolicySchema` in @farthershore/contracts. */\n        subscriberChangePolicy?: SubscriberChangePolicyOptions__b422925d18da;\n    };\n};",
        "source": "packages/business/dist/types/business.d.ts#L35",
        "description": "",
        "references": [
          {
            "name": "BusinessCustomerContextJson__e5b9539124a5",
            "source": "packages/business/dist/types/ir-types.d.ts#L375"
          },
          {
            "name": "BusinessPoliciesJson__0d51efe66230",
            "source": "packages/business/dist/types/ir-types.d.ts#L364"
          },
          {
            "name": "SubscriberChangePolicyOptions__b422925d18da",
            "source": "packages/business/dist/types/business.d.ts#L19"
          }
        ]
      },
      {
        "name": "BusinessPoliciesJson__0d51efe66230",
        "signature": "export type BusinessPoliciesJson__0d51efe66230 = {\n    cleanup?: {\n        enabled?: boolean;\n        mode?: BusinessCleanupPolicyModeJson__41a5ae49826e;\n    };\n    change_approval?: {\n        auto_merge_max_risk?: \"none\" | \"safe\" | \"non_blocking\";\n        require_human_for?: BusinessChangeApprovalRiskJson__e8db37f1738a[];\n    };\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L364",
        "description": "",
        "references": [
          {
            "name": "BusinessChangeApprovalRiskJson__e8db37f1738a",
            "source": "packages/business/dist/types/ir-types.d.ts#L363"
          },
          {
            "name": "BusinessCleanupPolicyModeJson__41a5ae49826e",
            "source": "packages/business/dist/types/ir-types.d.ts#L362"
          }
        ]
      },
      {
        "name": "CommerceAuthoringSnapshot__60159f2d0d70",
        "signature": "export type CommerceAuthoringSnapshot__60159f2d0d70 = Readonly<{\n    schemaVersion: 1;\n    measures: readonly Readonly<{\n        key: string;\n    }>[];\n    dimensions: readonly Readonly<{\n        key: string;\n        values?: readonly string[];\n    }>[];\n    providers: readonly Readonly<{\n        key: string;\n        models: readonly string[];\n    }>[];\n    meters: readonly Readonly<{\n        key: string;\n        measures: readonly string[];\n        dimensions: readonly string[];\n    }>[];\n    pricingPolicies: readonly LoweredPricingPolicy__51372c7aeb1f[];\n    plans: readonly LoweredPlan__acc0ad17968f[];\n    meterRouteBindings: readonly Readonly<{\n        key: string;\n        /** Served route keys — ONE per declared operation of the bound `route()`\n         *  (`servedRouteKey`: the gateway route id, e.g. `POST /v1/chat`),\n         *  sorted. Never a bare path. */\n        routeKeys: readonly string[];\n        reports: readonly string[];\n        caps?: readonly Readonly<{\n            measurementKey: string;\n            maximum: number;\n        }>[];\n        maxOutputUnits?: Readonly<{\n            measurementKey: string;\n            maximum: number;\n            adapter?: Readonly<{\n                knob: \"max_output_units\";\n                parser: \"json_body_max_output_units_v1\";\n                mutator: \"json_body_max_output_units_v1\";\n            }>;\n        }>;\n    }>[];\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L92",
        "description": "",
        "references": [
          {
            "name": "LoweredPlan__acc0ad17968f",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L64"
          },
          {
            "name": "LoweredPricingPolicy__51372c7aeb1f",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L46"
          }
        ]
      },
      {
        "name": "CommerceBrand__7b1b990b7c90",
        "signature": "type CommerceBrand__7b1b990b7c90<Name extends string> = {\n    readonly [commerceBrand__afc79e100d58]: Name;\n};",
        "source": "packages/business/dist/types/commerce/types.d.ts#L8",
        "description": "",
        "references": [
          {
            "name": "commerceBrand__afc79e100d58",
            "source": "packages/business/dist/types/commerce/types.d.ts#L7"
          }
        ]
      },
      {
        "name": "commerceBrand__afc79e100d58",
        "signature": "declare const commerceBrand__afc79e100d58: unique symbol;",
        "source": "packages/business/dist/types/commerce/types.d.ts#L7",
        "description": "",
        "references": []
      },
      {
        "name": "CompiledBusiness__671c1daa22b7",
        "signature": "export type CompiledBusiness__671c1daa22b7 = Readonly<{\n    readonly kind: \"business\";\n}>;",
        "source": "packages/business/dist/types/business.d.ts#L7",
        "description": "",
        "references": []
      },
      {
        "name": "CountedResourceCountSourceJson__7b01580d882e",
        "signature": "export type CountedResourceCountSourceJson__7b01580d882e = \"reported\" | \"action_inferred\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L354",
        "description": "",
        "references": []
      },
      {
        "name": "CountedResourceJson__90d0b7f16d08",
        "signature": "export type CountedResourceJson__90d0b7f16d08 = {\n    name: string;\n    display?: string;\n    scope?: CountedResourceScopeJson__5c4e2863f653;\n    subjectType?: string;\n    countSource?: CountedResourceCountSourceJson__7b01580d882e;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L355",
        "description": "",
        "references": [
          {
            "name": "CountedResourceCountSourceJson__7b01580d882e",
            "source": "packages/business/dist/types/ir-types.d.ts#L354"
          },
          {
            "name": "CountedResourceScopeJson__5c4e2863f653",
            "source": "packages/business/dist/types/ir-types.d.ts#L353"
          }
        ]
      },
      {
        "name": "CountedResourceScopeJson__5c4e2863f653",
        "signature": "export type CountedResourceScopeJson__5c4e2863f653 = \"subscription\" | \"subject\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L353",
        "description": "",
        "references": []
      },
      {
        "name": "Currency__c07b80881979",
        "signature": "export type Currency__c07b80881979 = \"usd\";",
        "source": "packages/business/dist/types/value-model/money.d.ts#L2",
        "description": "",
        "references": []
      },
      {
        "name": "CustomerPortalAuthStrategyJson__c8cec76b5a5a",
        "signature": "export type CustomerPortalAuthStrategyJson__c8cec76b5a5a = \"clerk\" | \"test-personas\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L374",
        "description": "",
        "references": []
      },
      {
        "name": "DeclarationRef__2a230f417174",
        "signature": "export type DeclarationRef__2a230f417174<K extends RefKind__6d76109c9bb1 = RefKind__6d76109c9bb1> = {\n    readonly kind: K;\n    readonly id: string;\n    readonly generation: number;\n    readonly [refBrand__3cba6d1ed1ab]: true;\n};",
        "source": "packages/business/dist/types/value-model/refs.d.ts#L5",
        "description": "",
        "references": [
          {
            "name": "refBrand__3cba6d1ed1ab",
            "source": "packages/business/dist/types/value-model/refs.d.ts#L4"
          },
          {
            "name": "RefKind__6d76109c9bb1",
            "source": "packages/business/dist/types/value-model/refs.d.ts#L3"
          }
        ]
      },
      {
        "name": "DurationInput__9fbd3d189b84",
        "signature": "export type DurationInput__9fbd3d189b84 = string | number;",
        "source": "packages/business/dist/types/route-policy.d.ts#L4",
        "description": "A human duration string (`\"30s\"`, `\"500ms\"`, `\"2m\"`) or a raw millisecond\ncount. Numbers are treated as milliseconds.",
        "references": []
      },
      {
        "name": "ExactQuoteBounds__e9cf817917c1",
        "signature": "export type ExactQuoteBounds__e9cf817917c1 = Readonly<{\n    kind: \"backend_quoted\";\n    min: ExactRate;\n    max: ExactRate;\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L13",
        "description": "FAR-911 / M5 — repo-authored bounds of a backend-quoted rule (USD per unit).",
        "references": [
          {
            "name": "ExactRate",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L1"
          }
        ]
      },
      {
        "name": "FrontendIntegrationBodyJson__412664c4c97a",
        "signature": "export type FrontendIntegrationBodyJson__412664c4c97a = {\n    kind: \"none\";\n} | {\n    kind: \"json\";\n    maxBytes: number;\n} | {\n    kind: \"text\";\n    maxBytes: number;\n    contentTypes: string[];\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L142",
        "description": "",
        "references": []
      },
      {
        "name": "FrontendIntegrationBodyOptions__69124a73fbef",
        "signature": "type FrontendIntegrationBodyOptions__69124a73fbef = Extract<FrontendIntegrationSpecJson[\"request\"][\"operations\"][number][\"body\"], {\n    kind: \"none\" | \"json\";\n}> | (Omit<Extract<FrontendIntegrationSpecJson[\"request\"][\"operations\"][number][\"body\"], {\n    kind: \"text\";\n}>, \"contentTypes\"> & {\n    contentTypes: readonly string[];\n});",
        "source": "packages/business/dist/types/value-model/declarations.d.ts#L36",
        "description": "",
        "references": [
          {
            "name": "FrontendIntegrationSpecJson",
            "source": "packages/business/dist/types/ir-types.d.ts#L170"
          }
        ]
      },
      {
        "name": "FrontendIntegrationMethodJson__404791a522ea",
        "signature": "export type FrontendIntegrationMethodJson__404791a522ea = \"GET\" | \"HEAD\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L141",
        "description": "",
        "references": []
      },
      {
        "name": "FundingBucketKind__eced6b195b95",
        "signature": "export type FundingBucketKind__eced6b195b95 = \"included\" | \"prepaid\" | \"promo\" | \"referral\";",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L19",
        "description": "",
        "references": []
      },
      {
        "name": "KeyRef__d164043d89c3",
        "signature": "export type KeyRef__d164043d89c3 = string | {\n    key: string;\n};",
        "source": "packages/business/dist/types/refs.d.ts#L1",
        "description": "",
        "references": []
      },
      {
        "name": "LimitScopeJson__215e4eb2041c",
        "signature": "export type LimitScopeJson__215e4eb2041c = {\n    endpoint?: string;\n    apiKey?: string;\n    workspace?: string;\n    region?: string;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L40",
        "description": "T12 — a FORWARD-COMPAT scope hint (endpoint / apiKey / workspace / region)\ncarried on a plan limit or a capacity ceiling. Mirrors the contracts\n`LimitScope`. Round-trips authoring → IR → compiled constraint; v1 enforcement\nis unchanged.",
        "references": []
      },
      {
        "name": "LoweredCatalogCondition__91bc16beb904",
        "signature": "export type LoweredCatalogCondition__91bc16beb904 = Readonly<{\n    dimensionKey: string;\n    value: string;\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L21",
        "description": "",
        "references": []
      },
      {
        "name": "LoweredCatalogItem__4eb2f217a7cb",
        "signature": "export type LoweredCatalogItem__4eb2f217a7cb = Readonly<{\n    provider: string;\n    model: string;\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L25",
        "description": "",
        "references": []
      },
      {
        "name": "LoweredFundingBucket__ee3504094266",
        "signature": "export type LoweredFundingBucket__ee3504094266 = Readonly<{\n    kind: FundingBucketKind__eced6b195b95;\n    currency: \"usd\";\n    amountMinor: number;\n    topUp?: boolean;\n    display?: Readonly<{\n        kind: \"multiplier\";\n        factor: number;\n        baseMinor: number;\n    }>;\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L53",
        "description": "",
        "references": [
          {
            "name": "FundingBucketKind__eced6b195b95",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L19"
          }
        ]
      },
      {
        "name": "LoweredPlan__acc0ad17968f",
        "signature": "export type LoweredPlan__acc0ad17968f = Readonly<{\n    key: string;\n    kind: PlanKindName__d0fd9bcc38b8;\n    price?: Readonly<{\n        currency: \"usd\";\n        interval: \"month\" | \"year\";\n        recurringFeeMinor: number;\n    }>;\n    usagePricing?: Readonly<{\n        kind: PricingBindingKind__ff438801f484;\n        pricingPolicyKey: string;\n        version?: number;\n    }>;\n    funding?: Readonly<{\n        buckets: readonly LoweredFundingBucket__ee3504094266[];\n    }>;\n    lifecycle?: Readonly<{\n        trialDays: number;\n    }>;\n    spendPolicy?: Readonly<{\n        disclosure?: \"opaque\" | \"transparent\";\n        rail?: \"x402\";\n        onExhaustion: Readonly<{\n            behavior: \"block\" | \"overage\";\n            pricingPolicyKey?: string;\n        }>;\n    }>;\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L64",
        "description": "",
        "references": [
          {
            "name": "LoweredFundingBucket__ee3504094266",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L53"
          },
          {
            "name": "PlanKindName__d0fd9bcc38b8",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L20"
          },
          {
            "name": "PricingBindingKind__ff438801f484",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L18"
          }
        ]
      },
      {
        "name": "LoweredPricingCatalogEntry__1d1b855a7ba8",
        "signature": "export type LoweredPricingCatalogEntry__1d1b855a7ba8 = Readonly<{\n    key: string;\n    item?: LoweredCatalogItem__4eb2f217a7cb;\n    measurementKey: string;\n    where?: readonly LoweredCatalogCondition__91bc16beb904[];\n    rate?: ExactRate;\n    tiers?: ExactCatalogTiers;\n    quote?: ExactQuoteBounds__e9cf817917c1;\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L29",
        "description": "",
        "references": [
          {
            "name": "ExactCatalogTiers",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L5"
          },
          {
            "name": "ExactQuoteBounds__e9cf817917c1",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L13"
          },
          {
            "name": "ExactRate",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L1"
          },
          {
            "name": "LoweredCatalogCondition__91bc16beb904",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L21"
          },
          {
            "name": "LoweredCatalogItem__4eb2f217a7cb",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L25"
          }
        ]
      },
      {
        "name": "LoweredPricingModifier__1c95de5a5c16",
        "signature": "export type LoweredPricingModifier__1c95de5a5c16 = Readonly<{\n    multiplier: ExactRate;\n    when: Readonly<{\n        dimensionKey: string;\n        operator: \"eq\";\n        value: string;\n    }>;\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L38",
        "description": "",
        "references": [
          {
            "name": "ExactRate",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L1"
          }
        ]
      },
      {
        "name": "LoweredPricingPolicy__51372c7aeb1f",
        "signature": "export type LoweredPricingPolicy__51372c7aeb1f = Readonly<{\n    key: string;\n    meterKey: string;\n    currency: \"usd\";\n    catalog: readonly LoweredPricingCatalogEntry__1d1b855a7ba8[];\n    modifiers: readonly LoweredPricingModifier__1c95de5a5c16[];\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L46",
        "description": "",
        "references": [
          {
            "name": "LoweredPricingCatalogEntry__1d1b855a7ba8",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L29"
          },
          {
            "name": "LoweredPricingModifier__1c95de5a5c16",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L38"
          }
        ]
      },
      {
        "name": "ManifestResourceNode__c5816bda01cb",
        "signature": "export type ManifestResourceNode__c5816bda01cb<T = unknown> = {\n    readonly urn: ManifestResourceUrn;\n    readonly kind: ManifestResourceKind;\n    readonly key: string;\n    readonly value: T;\n    readonly dependsOn: readonly ManifestResourceUrn[];\n    readonly declarationOrder: number;\n};",
        "source": "packages/business/dist/types/resource-graph.d.ts#L3",
        "description": "",
        "references": [
          {
            "name": "ManifestResourceKind",
            "source": "packages/business/dist/types/resource-graph.d.ts#L1"
          },
          {
            "name": "ManifestResourceUrn",
            "source": "packages/business/dist/types/resource-graph.d.ts#L2"
          }
        ]
      },
      {
        "name": "MeterCost__c48c806cf197",
        "signature": "export type MeterCost__c48c806cf197 = {\n    readonly kind: \"meter_cost\";\n    readonly meter: string;\n    readonly value: number;\n};",
        "source": "packages/business/dist/types/route-metering.d.ts#L5",
        "description": "",
        "references": []
      },
      {
        "name": "MeterFunction__02c80dd4d01e",
        "signature": "export type MeterFunction__02c80dd4d01e = (id: string, options?: MeterOptions) => MeterRef;",
        "source": "packages/business/dist/types/commerce/types.d.ts#L220",
        "description": "",
        "references": [
          {
            "name": "MeterOptions",
            "source": "packages/business/dist/types/commerce/types.d.ts#L87"
          },
          {
            "name": "MeterRef",
            "source": "packages/business/dist/types/value-model/refs.d.ts#L26"
          }
        ]
      },
      {
        "name": "MeterOptions__b9495f4ba34f",
        "signature": "export type MeterOptions__b9495f4ba34f = Omit<MeterDefinitionJson, \"key\" | \"display\"> & {\n    display?: string;\n};",
        "source": "packages/business/dist/types/business.d.ts#L63",
        "description": "",
        "references": [
          {
            "name": "MeterDefinitionJson",
            "source": "packages/business/dist/types/ir-types.d.ts#L4"
          }
        ]
      },
      {
        "name": "MeterRef__af57686b0ce1",
        "signature": "export type MeterRef__af57686b0ce1 = {\n    readonly kind: \"meter\";\n    readonly key: string;\n    /** Fixed gateway-known usage for route/business defaults. */\n    fixed(value: number): MeterCost__c48c806cf197;\n};",
        "source": "packages/business/dist/types/route-metering.d.ts#L10",
        "description": "",
        "references": [
          {
            "name": "MeterCost__c48c806cf197",
            "source": "packages/business/dist/types/route-metering.d.ts#L5"
          }
        ]
      },
      {
        "name": "MeterRoutesFunction__799abcbb8f6e",
        "signature": "export type MeterRoutesFunction__799abcbb8f6e = {\n    (key: string, target: RouteRef, options: MeterRouteBindingOptions): void;\n    (key: string, target: MeterRoutesOverlayTarget | GroupRef, options: FunctionalMeterRoutesOptions): void;\n};",
        "source": "packages/business/dist/types/commerce/types.d.ts#L225",
        "description": "",
        "references": [
          {
            "name": "FunctionalMeterRoutesOptions",
            "source": "packages/business/dist/types/value-model/registry.d.ts#L28"
          },
          {
            "name": "GroupRef",
            "source": "packages/business/dist/types/value-model/refs.d.ts#L36"
          },
          {
            "name": "MeterRouteBindingOptions",
            "source": "packages/business/dist/types/commerce/types.d.ts#L163"
          },
          {
            "name": "MeterRoutesOverlayTarget",
            "source": "packages/business/dist/types/commerce/types.d.ts#L224"
          },
          {
            "name": "RouteRef",
            "source": "packages/business/dist/types/value-model/refs.d.ts#L35"
          }
        ]
      },
      {
        "name": "ModifierBuilder__ae4a0e208869",
        "signature": "export type ModifierBuilder__ae4a0e208869 = Readonly<{\n    when(condition: DimensionConditionRef): ModifierRef;\n} & CommerceBrand__7b1b990b7c90<\"modifier_builder\">>;",
        "source": "packages/business/dist/types/commerce/types.d.ts#L77",
        "description": "",
        "references": [
          {
            "name": "CommerceBrand__7b1b990b7c90",
            "source": "packages/business/dist/types/commerce/types.d.ts#L8"
          },
          {
            "name": "DimensionConditionRef",
            "source": "packages/business/dist/types/commerce/types.d.ts#L31"
          },
          {
            "name": "ModifierRef",
            "source": "packages/business/dist/types/commerce/types.d.ts#L72"
          }
        ]
      },
      {
        "name": "MoneyAmount__51964157493a",
        "signature": "export type MoneyAmount__51964157493a = Readonly<{\n    currency: Currency__c07b80881979;\n    minor: number;\n    monthly(): MoneyPrice__4792013e3b32;\n    yearly(): MoneyPrice__4792013e3b32;\n}>;",
        "source": "packages/business/dist/types/value-model/money.d.ts#L11",
        "description": "",
        "references": [
          {
            "name": "Currency__c07b80881979",
            "source": "packages/business/dist/types/value-model/money.d.ts#L2"
          },
          {
            "name": "MoneyPrice__4792013e3b32",
            "source": "packages/business/dist/types/value-model/money.d.ts#L7"
          }
        ]
      },
      {
        "name": "MoneyFunction__dc62d2738f6d",
        "signature": "export type MoneyFunction__dc62d2738f6d = Readonly<{\n    usd(major: number): AuthoredMoneyAmount;\n}>;",
        "source": "packages/business/dist/types/commerce/types.d.ts#L231",
        "description": "",
        "references": [
          {
            "name": "AuthoredMoneyAmount",
            "source": "packages/business/dist/types/commerce/types.d.ts#L230"
          }
        ]
      },
      {
        "name": "MoneyPrice__4792013e3b32",
        "signature": "export type MoneyPrice__4792013e3b32 = Readonly<AuthoredPrice__fa4522a263d6 & {\n    currency: Currency__c07b80881979;\n    interval: \"month\" | \"year\";\n}>;",
        "source": "packages/business/dist/types/value-model/money.d.ts#L7",
        "description": "",
        "references": [
          {
            "name": "AuthoredPrice__fa4522a263d6",
            "source": "packages/business/dist/types/value-model/money.d.ts#L4"
          },
          {
            "name": "Currency__c07b80881979",
            "source": "packages/business/dist/types/value-model/money.d.ts#L2"
          }
        ]
      },
      {
        "name": "PermissionSubjectJson__d124b4a2259d",
        "signature": "export type PermissionSubjectJson__d124b4a2259d = {\n    subject: string;\n    verbs: string[];\n    escalatory?: string[];\n    description?: string;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L389",
        "description": "One repo-owned custom permission subject — emitted by a permission-carrying\n`fs.group(id, members, { permission })`. `verbs` are the EXTRA\ngrant-by-exact-name domain verbs beyond the implied read/write route pair.",
        "references": []
      },
      {
        "name": "PlanArchiveJson__452830f6517f",
        "signature": "export type PlanArchiveJson__452830f6517f = {\n    at?: string;\n    transitionTo?: string;\n    strategy?: \"auto\" | \"explicit\" | \"block\";\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L108",
        "description": "",
        "references": []
      },
      {
        "name": "PlanEconomicsControls__792c3ab4d885",
        "signature": "type PlanEconomicsControls__792c3ab4d885 = Readonly<{\n    /** `money.usd(n).monthly()` / `.yearly()`; `free()` only on `kind: free`. */\n    price?: MoneyPrice__4792013e3b32 | AuthoredPrice__fa4522a263d6;\n    usagePricing?: PricingBindingRef;\n    funding?: {\n        buckets: readonly FundingBucketRef[];\n    };\n    lifecycle?: {\n        trialDays: number;\n    };\n    spendPolicy?: {\n        disclosure?: DisclosureRef;\n        /** FAR-911 — `rail.x402`: compile under the prepaid admission matrix rows. */\n        rail?: RailRef;\n        onExhaustion: ExhaustionRef;\n    };\n}>;",
        "source": "packages/business/dist/types/commerce/types.d.ts#L135",
        "description": "",
        "references": [
          {
            "name": "AuthoredPrice__fa4522a263d6",
            "source": "packages/business/dist/types/value-model/money.d.ts#L4"
          },
          {
            "name": "DisclosureRef",
            "source": "packages/business/dist/types/commerce/types.d.ts#L118"
          },
          {
            "name": "ExhaustionRef",
            "source": "packages/business/dist/types/commerce/types.d.ts#L122"
          },
          {
            "name": "FundingBucketRef",
            "source": "packages/business/dist/types/commerce/types.d.ts#L114"
          },
          {
            "name": "MoneyPrice__4792013e3b32",
            "source": "packages/business/dist/types/value-model/money.d.ts#L7"
          },
          {
            "name": "PricingBindingRef",
            "source": "packages/business/dist/types/commerce/types.d.ts#L97"
          },
          {
            "name": "RailRef",
            "source": "packages/business/dist/types/commerce/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "PlanFunction__9b23957fc098",
        "signature": "export type PlanFunction__9b23957fc098 = {\n    (id: string, options: PlanOptions): PlanRef;\n    readonly kind: Readonly<{\n        free: PlanKindRef<\"free\">;\n        flat: PlanKindRef<\"flat\">;\n        usage: PlanKindRef<\"usage\">;\n        prepaid: PlanKindRef<\"prepaid\">;\n        hybrid: PlanKindRef<\"hybrid\">;\n        trial: PlanKindRef<\"trial\">;\n        custom: PlanKindRef<\"custom\">;\n    }>;\n};",
        "source": "packages/business/dist/types/commerce/types.d.ts#L208",
        "description": "",
        "references": [
          {
            "name": "PlanKindRef",
            "source": "packages/business/dist/types/commerce/types.d.ts#L131"
          },
          {
            "name": "PlanOptions",
            "source": "packages/business/dist/types/commerce/types.d.ts#L158"
          },
          {
            "name": "PlanRef",
            "source": "packages/business/dist/types/value-model/refs.d.ts#L37"
          }
        ]
      },
      {
        "name": "PlanKindName__d0fd9bcc38b8",
        "signature": "export type PlanKindName__d0fd9bcc38b8 = \"free\" | \"flat\" | \"usage\" | \"prepaid\" | \"hybrid\" | \"trial\" | \"custom\";",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L20",
        "description": "",
        "references": []
      },
      {
        "name": "PlanLimitWindowJson__34c3ba9c4506",
        "signature": "export type PlanLimitWindowJson__34c3ba9c4506 = {\n    type: \"named\";\n    name: \"second\" | \"minute\" | \"hour\" | \"day\" | \"week\" | \"month\";\n} | {\n    type: \"custom\";\n    seconds: number;\n    label?: string;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L67",
        "description": "",
        "references": []
      },
      {
        "name": "PlanOptions__0e8a3d72b1c6",
        "signature": "export type PlanOptions__0e8a3d72b1c6 = {\n    /** The DECLARED plan kind (`plan.kind.*`); never inferred from shape. */\n    kind: PlanKindJson;\n    name: string;\n    description?: string;\n    details?: string[];\n    /** The normalized recurring price spec. Omit for a 0-fee plan. */\n    price?: PriceSpec__1288e85e83b9;\n    trialDays?: number;\n    maxMonthlySpendCents?: number;\n    minMonthlySpendCents?: number;\n    limits?: PlanLimitJson[];\n    /** Direct grants using stable route ids. */\n    routeGrants?: string[];\n    /** Named managed-frontend integrations this plan permits. */\n    frontendIntegrationGrants?: string[];\n    resourceLimits?: Record<string, number>;\n    /** A3 — per-request capacity ceiling (normalized PlanCapacityJson). */\n    capacity?: PlanCapacityJson;\n    overageBehavior?: \"block\" | \"allow_and_bill\";\n    selfServeEnabled?: boolean;\n    archive?: {\n        at?: string;\n        transitionTo?: string;\n        strategy?: \"auto\" | \"explicit\" | \"block\";\n    };\n};",
        "source": "packages/business/dist/types/business.d.ts#L75",
        "description": "",
        "references": [
          {
            "name": "PlanCapacityJson",
            "source": "packages/business/dist/types/ir-types.d.ts#L52"
          },
          {
            "name": "PlanKindJson",
            "source": "packages/business/dist/types/ir-types.d.ts#L66"
          },
          {
            "name": "PlanLimitJson",
            "source": "packages/business/dist/types/ir-types.d.ts#L75"
          },
          {
            "name": "PriceSpec__1288e85e83b9",
            "source": "packages/business/dist/types/price.d.ts#L9"
          }
        ]
      },
      {
        "name": "PriceSpec__1288e85e83b9",
        "signature": "export type PriceSpec__1288e85e83b9 = {\n    recurring_fee_cents: number;\n    billing_interval: \"month\" | \"year\";\n};",
        "source": "packages/business/dist/types/price.d.ts#L9",
        "description": "The plan price spec — the normalized shape the functional plan price\n(and the internal builder plan options) resolve to. Maps onto the plan's\nrecurring billing fields; whether a plan is FREE is its declared `kind`,\nnever a price flag.\n\n  { recurring_fee_cents: 2900, billing_interval: \"month\" }",
        "references": []
      },
      {
        "name": "PricingBindingKind__ff438801f484",
        "signature": "export type PricingBindingKind__ff438801f484 = \"current\" | \"current_with_contract_terms\" | \"fixed_version\";",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L18",
        "description": "",
        "references": []
      },
      {
        "name": "PricingCatalogAuthoringEntry__8ad295725f7a",
        "signature": "export type PricingCatalogAuthoringEntry__8ad295725f7a = UnboundRateRef | BoundRateRef | ModifierRef;",
        "source": "packages/business/dist/types/commerce/types.d.ts#L91",
        "description": "",
        "references": [
          {
            "name": "BoundRateRef",
            "source": "packages/business/dist/types/commerce/types.d.ts#L63"
          },
          {
            "name": "ModifierRef",
            "source": "packages/business/dist/types/commerce/types.d.ts#L72"
          },
          {
            "name": "UnboundRateRef",
            "source": "packages/business/dist/types/commerce/types.d.ts#L53"
          }
        ]
      },
      {
        "name": "RawRetryPolicyInput__d96fd6958073",
        "signature": "export type RawRetryPolicyInput__d96fd6958073 = RouteRetryPolicyJson;",
        "source": "packages/business/dist/types/route-policy.d.ts#L7",
        "description": "The advanced retry escape hatch — the full canonical object, authored\ndirectly. `retry: true` expands to {@link SAFE_RETRY_DEFAULT} instead.",
        "references": [
          {
            "name": "RouteRetryPolicyJson",
            "source": "packages/business/dist/types/ir-types.d.ts#L189"
          }
        ]
      },
      {
        "name": "refBrand__3cba6d1ed1ab",
        "signature": "declare const refBrand__3cba6d1ed1ab: unique symbol;",
        "source": "packages/business/dist/types/value-model/refs.d.ts#L4",
        "description": "",
        "references": []
      },
      {
        "name": "RefKind__6d76109c9bb1",
        "signature": "export type RefKind__6d76109c9bb1 = \"meter\" | \"route\" | \"group\" | \"plan\" | \"resource\" | \"backend\" | \"frontend_integration\";",
        "source": "packages/business/dist/types/value-model/refs.d.ts#L3",
        "description": "",
        "references": []
      },
      {
        "name": "RequestMeterOptions__7ec5d6047951",
        "signature": "export type RequestMeterOptions__7ec5d6047951 = Partial<MeterOptions__b9495f4ba34f>;",
        "source": "packages/business/dist/types/business.d.ts#L66",
        "description": "",
        "references": [
          {
            "name": "MeterOptions__b9495f4ba34f",
            "source": "packages/business/dist/types/business.d.ts#L63"
          }
        ]
      },
      {
        "name": "ResourceOptions__04a2cc1fd6ee",
        "signature": "export type ResourceOptions__04a2cc1fd6ee = Omit<CountedResourceJson__90d0b7f16d08, \"name\">;",
        "source": "packages/business/dist/types/business.d.ts#L74",
        "description": "",
        "references": [
          {
            "name": "CountedResourceJson__90d0b7f16d08",
            "source": "packages/business/dist/types/ir-types.d.ts#L355"
          }
        ]
      },
      {
        "name": "RouteAuthoredUsagePolicyJson__622a0aa384fd",
        "signature": "export type RouteAuthoredUsagePolicyJson__622a0aa384fd = {\n    preset: RouteUsagePolicyPresetJson__0df8c3d02afc;\n    providerCostTracked?: RouteProviderCostTrackedJson__69509ac0044b;\n    chargeableOutcomes?: RouteChargeableOutcomesJson__ba3a3aead9e9;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L273",
        "description": "",
        "references": [
          {
            "name": "RouteChargeableOutcomesJson__ba3a3aead9e9",
            "source": "packages/business/dist/types/ir-types.d.ts#L267"
          },
          {
            "name": "RouteProviderCostTrackedJson__69509ac0044b",
            "source": "packages/business/dist/types/ir-types.d.ts#L268"
          },
          {
            "name": "RouteUsagePolicyPresetJson__0df8c3d02afc",
            "source": "packages/business/dist/types/ir-types.d.ts#L266"
          }
        ]
      },
      {
        "name": "RouteChargeableOutcomesJson__ba3a3aead9e9",
        "signature": "export type RouteChargeableOutcomesJson__ba3a3aead9e9 = \"success_only\" | \"success_and_partial\" | \"attempted\" | \"trusted_actual_usage_only\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L267",
        "description": "",
        "references": []
      },
      {
        "name": "RouteLimitAuthoring__ae39586db789",
        "signature": "export type RouteLimitAuthoring__ae39586db789 = string | RouteLimitInput__250d9325480a;",
        "source": "packages/business/dist/types/route-metering.d.ts#L34",
        "description": "FAR-684 — builder-authored rate/quota intent: a compact `\"limit/window\"`\nstring (`\"10/min\"`, `\"1000/month\"`) or the explicit object form.",
        "references": [
          {
            "name": "RouteLimitInput__250d9325480a",
            "source": "packages/business/dist/types/route-metering.d.ts#L22"
          }
        ]
      },
      {
        "name": "RouteLimitInput__250d9325480a",
        "signature": "export type RouteLimitInput__250d9325480a = TemporalLimitOptions & {\n    /** Capacity in the dimension's native unit. */\n    limit: number;\n    /** Window the cap resets on. */\n    per: RouteLimitWindowName__a0705d660e11;\n    /** Metered dimension. Defaults to `requests` (native per-call count). */\n    dimension?: string;\n    /** Record without denying past capacity (default: false → enforce). */\n    track?: boolean;\n};",
        "source": "packages/business/dist/types/route-metering.d.ts#L22",
        "description": "FAR-684 — object form of a per-route rate/quota override. The string form\n(`\"10/min\"`) is sugar over `{ limit, per }`.",
        "references": [
          {
            "name": "RouteLimitWindowName__a0705d660e11",
            "source": "packages/business/dist/types/route-metering.d.ts#L19"
          },
          {
            "name": "TemporalLimitOptions",
            "source": "packages/business/dist/types/limit-strategy.d.ts#L2"
          }
        ]
      },
      {
        "name": "RouteLimitJson__077809c9f639",
        "signature": "export type RouteLimitJson__077809c9f639 = {\n    dimension: string;\n    window: PlanLimitWindowJson__34c3ba9c4506;\n    capacity: number;\n    enforcement?: \"enforce\" | \"track\";\n    strategy?: \"fixed_window\" | \"sliding_window\" | \"token_bucket\";\n    bucketCapacity?: number;\n    refillRatePerSecond?: number;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L99",
        "description": "FAR-684 — the CANONICAL per-route rate/quota override the SDK normalizes\n`rateLimit` / `quota` sugar into, and the compiler emits as a route-scoped\n`rate_limit` / `quota` ConstraintSpec. Mirrors the contracts\n`routeLimitOverrideSchema`. `dimension` defaults to `requests` (the native\nper-call meter) so `rateLimit: \"10/min\"` needs no meter wiring. Never\nhand-authored — builders write intent sugar; this is the normalized shape.",
        "references": [
          {
            "name": "PlanLimitWindowJson__34c3ba9c4506",
            "source": "packages/business/dist/types/ir-types.d.ts#L67"
          }
        ]
      },
      {
        "name": "RouteLimitWindowName__a0705d660e11",
        "signature": "export type RouteLimitWindowName__a0705d660e11 = \"second\" | \"minute\" | \"hour\" | \"day\" | \"week\" | \"month\";",
        "source": "packages/business/dist/types/route-metering.d.ts#L19",
        "description": "FAR-684 — the named windows a builder can name in rate/quota intent sugar.\nMirrors the platform limit windows.",
        "references": []
      },
      {
        "name": "RouteMeteringOptions__00c1790b3d64",
        "signature": "export type RouteMeteringOptions__00c1790b3d64 = {\n    /**\n     * Dynamic meter keys the upstream may report with @farthershore/backend.\n     */\n    reports?: string | MeterRef__af57686b0ce1 | Array<string | MeterRef__af57686b0ce1>;\n    /** Fixed gateway-known route costs. */\n    costs?: MeterCost__c48c806cf197 | Array<MeterCost__c48c806cf197>;\n    /** Override the default successful-response range. */\n    onStatusCodes?: string | number[];\n    /** Usage-policy preset authoring. The core compiler expands this to compiled UsagePolicy. */\n    usagePolicy?: RouteAuthoredUsagePolicyJson__622a0aa384fd | RouteUsagePolicyJson__bd930ebf5713;\n    /** Declare that billable units normally arrive after the response stream.\n     * Fixed costs are admitted before the call; actual reports settle later. */\n    postStreamBilling?: boolean;\n    /** FAR-684 — short-window velocity cap for THIS route, e.g.\n     *  `rateLimit: \"10/min\"`. Normalized to a route-scoped `rate_limit`\n     *  ConstraintSpec the gateway enforces (429) only on this route. */\n    rateLimit?: RouteLimitAuthoring__ae39586db789;\n    /** FAR-684 — longer-period budget for THIS route, e.g. `quota: \"10000/month\"`.\n     *  Normalized to a route-scoped `quota` ConstraintSpec the gateway enforces\n     *  (402) only on this route. */\n    quota?: RouteLimitAuthoring__ae39586db789;\n    /** FAR-684 — ADVANCED escape hatch: canonical route-scoped limits used\n     *  verbatim (the codegen round-trip path). Wins over `rateLimit`/`quota`. */\n    limits?: RouteLimitJson__077809c9f639[];\n};",
        "source": "packages/business/dist/types/route-metering.d.ts#L52",
        "description": "",
        "references": [
          {
            "name": "MeterCost__c48c806cf197",
            "source": "packages/business/dist/types/route-metering.d.ts#L5"
          },
          {
            "name": "MeterRef__af57686b0ce1",
            "source": "packages/business/dist/types/route-metering.d.ts#L10"
          },
          {
            "name": "RouteAuthoredUsagePolicyJson__622a0aa384fd",
            "source": "packages/business/dist/types/ir-types.d.ts#L273"
          },
          {
            "name": "RouteLimitAuthoring__ae39586db789",
            "source": "packages/business/dist/types/route-metering.d.ts#L34"
          },
          {
            "name": "RouteLimitJson__077809c9f639",
            "source": "packages/business/dist/types/ir-types.d.ts#L99"
          },
          {
            "name": "RouteUsagePolicyJson__bd930ebf5713",
            "source": "packages/business/dist/types/ir-types.d.ts#L281"
          }
        ]
      },
      {
        "name": "RouteOperationOptions__902951868956",
        "signature": "export type RouteOperationOptions__902951868956 = FunctionalRouteOptions;",
        "source": "packages/business/dist/types/value-model/registry.d.ts#L29",
        "description": "",
        "references": [
          {
            "name": "FunctionalRouteOptions",
            "source": "packages/business/dist/types/value-model/registry.d.ts#L7"
          }
        ]
      },
      {
        "name": "RouteOptions__8ba341feca83",
        "signature": "export type RouteOptions__8ba341feca83 = RouteMeteringOptions__00c1790b3d64 & RoutePolicyOptions__ed332c838a9c & {\n    action?: string;\n    /** BYO-Backend V1 — bind this route to a declared backend. Omitted = the\n     *  business's sole / default backend (single-backend products stay\n     *  zero-config). */\n    backend?: string | BackendRef__376a47b9b8d4;\n};",
        "source": "packages/business/dist/types/business.d.ts#L67",
        "description": "",
        "references": [
          {
            "name": "BackendRef__376a47b9b8d4",
            "source": "packages/business/dist/types/business.d.ts#L110"
          },
          {
            "name": "RouteMeteringOptions__00c1790b3d64",
            "source": "packages/business/dist/types/route-metering.d.ts#L52"
          },
          {
            "name": "RoutePolicyOptions__ed332c838a9c",
            "source": "packages/business/dist/types/route-policy.d.ts#L12"
          }
        ]
      },
      {
        "name": "RoutePolicyOptions__ed332c838a9c",
        "signature": "export type RoutePolicyOptions__ed332c838a9c = {\n    /** Sugar for `policy.authMode: \"public\"`. Omitted/`false` = required. */\n    public?: boolean;\n    /** Overall request timeout: `\"30s\"` | `30_000` (ms) → `policy.timeoutMs`. */\n    timeout?: DurationInput__9fbd3d189b84;\n    /** Idle/TTFB timeout: `\"5s\"` | `5_000` (ms) → `policy.idleTimeoutMs`. */\n    idleTimeout?: DurationInput__9fbd3d189b84;\n    /**\n     * `true` → the platform-canonical safe retry default; a full object → the\n     * advanced escape hatch (used verbatim); `false`/omitted → no retry.\n     */\n    retry?: boolean | RawRetryPolicyInput__d96fd6958073;\n    /**\n     * Consumer-principal subject requirement (D4). `requireMember` forces a\n     * MEMBER subject (a session or a personal key) → `policy.subject: \"member\"`;\n     * `requireService` forces a SERVICE subject (an org-owned service-account\n     * key) → `policy.subject: \"service\"`. Omit both = no requirement (\"any\").\n     * Mutually exclusive, and incompatible with `public` (a public route carries\n     * no credential, so it can't require a subject).\n     */\n    requireMember?: true;\n    requireService?: true;\n    /**\n     * CALLABILITY — the allowlist of credential surfaces the gateway admits, e.g.\n     * `surfaces: [\"api\"]` (key-only) or `[\"ui\"]` (portal-only).\n     * Omitted = all admitted (\"hybrid\" — the common case). Authored order is\n     * irrelevant (deduped + canonically sorted at compile). Refused on a `public`\n     * route (no credential to classify). A route NOT admitting `api` is\n     * automatically absent from the generated API reference and un-grantable to\n     * API keys — a key can't call it, so listing it would mislead.\n     */\n    surfaces?: RouteSurface__b5c8a54b503c[];\n    /**\n     * VISIBILITY — `true` also 404s a wrong-surface caller (instead of an\n     * informative 403) and force-hides an OTHERWISE-api-callable route from docs +\n     * scopes (a private beta). Redundant on a non-api route (already hidden by its\n     * surfaces). Allowed on a `public` route (visibility isn't a credential\n     * concern). Omitted = visible.\n     */\n    hidden?: boolean;\n    /**\n     * ADVANCED escape hatch — the raw canonical policy object, merged UNDER the\n     * sugar fields above (sugar wins on conflict). Prefer the one-liner intent\n     * forms; reach for this only when you need a knob the sugar doesn't expose.\n     */\n    policy?: RoutePolicyJson;\n};",
        "source": "packages/business/dist/types/route-policy.d.ts#L12",
        "description": "Intent-first route policy sugar. Every field is optional; a RouteOptions with\nnone of these produces no `policy` block at all.",
        "references": [
          {
            "name": "DurationInput__9fbd3d189b84",
            "source": "packages/business/dist/types/route-policy.d.ts#L4"
          },
          {
            "name": "RawRetryPolicyInput__d96fd6958073",
            "source": "packages/business/dist/types/route-policy.d.ts#L7"
          },
          {
            "name": "RoutePolicyJson",
            "source": "packages/business/dist/types/ir-types.d.ts#L206"
          },
          {
            "name": "RouteSurface__b5c8a54b503c",
            "source": "packages/business/dist/types/ir-types.d.ts#L205"
          }
        ]
      },
      {
        "name": "RouteProviderCostTrackedJson__69509ac0044b",
        "signature": "export type RouteProviderCostTrackedJson__69509ac0044b = boolean | {\n    providerCostTracked?: boolean;\n    provider?: string;\n    model?: string;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L268",
        "description": "",
        "references": []
      },
      {
        "name": "RouteSurface__b5c8a54b503c",
        "signature": "export type RouteSurface__b5c8a54b503c = \"ui\" | \"api\" | \"agent\" | \"webhook\" | \"cli\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L205",
        "description": "Route callability surfaces — which credential SURFACE may call a route.\nExtensible enum; only `ui`/`api` are enforced today (see contracts\n`routeSurfaceSchema`). Mirror kept in sync by the schema-vs-type drift guard.",
        "references": []
      },
      {
        "name": "RouteTrafficClassJson__0fcb4c4bf86d",
        "signature": "export type RouteTrafficClassJson__0fcb4c4bf86d = \"customer_operation\" | \"control_plane\" | \"admin_internal\" | \"background_job\" | \"webhook\" | \"healthcheck\" | \"unclassified\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L278",
        "description": "",
        "references": []
      },
      {
        "name": "RouteUsagePolicyJson__bd930ebf5713",
        "signature": "export type RouteUsagePolicyJson__bd930ebf5713 = {\n    trafficClass: RouteTrafficClassJson__0fcb4c4bf86d;\n    policySource: RouteUsagePolicySourceJson__956c2e9dd016;\n    limitParticipation: {\n        profile: RouteUsagePolicyLimitProfileJson__5436ffa8006e;\n        pools?: string[];\n        scopes?: Array<Record<string, unknown>>;\n        metrics?: string[];\n    };\n    customerBillingPolicy: {\n        customerBillable: boolean;\n        meterKey?: string;\n        chargeableOutcomes: RouteChargeableOutcomesJson__ba3a3aead9e9;\n        invoiceBehavior?: string;\n    };\n    providerCostPolicy: {\n        providerCostTracked: boolean;\n        declaredProviderHint?: string;\n        declaredModelHint?: string;\n    };\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L281",
        "description": "",
        "references": [
          {
            "name": "RouteChargeableOutcomesJson__ba3a3aead9e9",
            "source": "packages/business/dist/types/ir-types.d.ts#L267"
          },
          {
            "name": "RouteTrafficClassJson__0fcb4c4bf86d",
            "source": "packages/business/dist/types/ir-types.d.ts#L278"
          },
          {
            "name": "RouteUsagePolicyLimitProfileJson__5436ffa8006e",
            "source": "packages/business/dist/types/ir-types.d.ts#L280"
          },
          {
            "name": "RouteUsagePolicySourceJson__956c2e9dd016",
            "source": "packages/business/dist/types/ir-types.d.ts#L279"
          }
        ]
      },
      {
        "name": "RouteUsagePolicyLimitProfileJson__5436ffa8006e",
        "signature": "export type RouteUsagePolicyLimitProfileJson__5436ffa8006e = \"customer_usage\" | \"business_capacity\" | \"control_plane\" | \"admin_internal\" | \"platform_abuse_only\" | \"healthcheck\" | \"none\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L280",
        "description": "",
        "references": []
      },
      {
        "name": "RouteUsagePolicyPresetJson__0df8c3d02afc",
        "signature": "export type RouteUsagePolicyPresetJson__0df8c3d02afc = \"billable_operation\" | \"free_operation\" | \"control_plane\" | \"admin_internal\" | \"webhook\" | \"background_job\" | \"healthcheck\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L266",
        "description": "",
        "references": []
      },
      {
        "name": "RouteUsagePolicySourceJson__956c2e9dd016",
        "signature": "export type RouteUsagePolicySourceJson__956c2e9dd016 = \"declared\" | \"inherited\" | \"defaulted\" | \"inferred\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L279",
        "description": "",
        "references": []
      },
      {
        "name": "StructuralPlanOptions__f7824ff3bdd0",
        "signature": "export type StructuralPlanOptions__f7824ff3bdd0 = Pick<PlanOptions__0e8a3d72b1c6, \"description\" | \"details\" | \"trialDays\" | \"maxMonthlySpendCents\" | \"minMonthlySpendCents\" | \"capacity\" | \"overageBehavior\" | \"selfServeEnabled\"> & {\n    kind: PlanKindJson;\n    name?: string;\n    price?: AuthoredPrice__fa4522a263d6;\n    grants?: readonly (RouteRef | GroupRef | FrontendIntegrationRef)[];\n    limits?: readonly (MeterLimit | ResourceLimit)[];\n    archive?: Omit<PlanArchiveJson__452830f6517f, \"transitionTo\"> & {\n        transitionTo?: PlanRef;\n    };\n};",
        "source": "packages/business/dist/types/value-model/declarations.d.ts#L26",
        "description": "The STRUCTURAL (entitlement) half of a plan declaration — what the plan\ngrants and how it rations, plus its recurring economics. Money for usage\nnever lives here: `plan()` (commerce authoring) lowers the commerce\ncontrols into the commerce manifest and this structural half into the\nManifest IR plan.",
        "references": [
          {
            "name": "AuthoredPrice__fa4522a263d6",
            "source": "packages/business/dist/types/value-model/money.d.ts#L4"
          },
          {
            "name": "FrontendIntegrationRef",
            "source": "packages/business/dist/types/value-model/refs.d.ts#L43"
          },
          {
            "name": "GroupRef",
            "source": "packages/business/dist/types/value-model/refs.d.ts#L36"
          },
          {
            "name": "MeterLimit",
            "source": "packages/business/dist/types/value-model/refs.d.ts#L11"
          },
          {
            "name": "PlanArchiveJson__452830f6517f",
            "source": "packages/business/dist/types/ir-types.d.ts#L108"
          },
          {
            "name": "PlanKindJson",
            "source": "packages/business/dist/types/ir-types.d.ts#L66"
          },
          {
            "name": "PlanOptions__0e8a3d72b1c6",
            "source": "packages/business/dist/types/business.d.ts#L75"
          },
          {
            "name": "PlanRef",
            "source": "packages/business/dist/types/value-model/refs.d.ts#L37"
          },
          {
            "name": "ResourceLimit",
            "source": "packages/business/dist/types/value-model/refs.d.ts#L21"
          },
          {
            "name": "RouteRef",
            "source": "packages/business/dist/types/value-model/refs.d.ts#L35"
          }
        ]
      },
      {
        "name": "SubscriberChangeActionOption__99f1a181d6ed",
        "signature": "export type SubscriberChangeActionOption__99f1a181d6ed = \"immediate\" | \"period_end\";",
        "source": "packages/business/dist/types/business.d.ts#L15",
        "description": "One subscriber-change timing action (see `billing.subscriberChangePolicy`).",
        "references": []
      },
      {
        "name": "SubscriberChangePolicyOptions__b422925d18da",
        "signature": "export type SubscriberChangePolicyOptions__b422925d18da = {\n    default?: SubscriberChangeActionOption__99f1a181d6ed;\n    when?: {\n        price_increase?: SubscriberChangeActionOption__99f1a181d6ed;\n        price_decrease?: SubscriberChangeActionOption__99f1a181d6ed;\n        route_grant_added?: SubscriberChangeActionOption__99f1a181d6ed;\n        route_grant_removed?: SubscriberChangeActionOption__99f1a181d6ed;\n        limit_increased?: SubscriberChangeActionOption__99f1a181d6ed;\n        limit_reduced?: SubscriberChangeActionOption__99f1a181d6ed;\n        credit_increased?: SubscriberChangeActionOption__99f1a181d6ed;\n        credit_reduced?: SubscriberChangeActionOption__99f1a181d6ed;\n        rating_changed?: SubscriberChangeActionOption__99f1a181d6ed;\n    };\n    allowImmediatePriceIncrease?: boolean;\n    allowImmediateEntitlementReduction?: boolean;\n};",
        "source": "packages/business/dist/types/business.d.ts#L19",
        "description": "Authoring shape for `billing.subscriberChangePolicy` — a structural mirror\nof `subscriberChangePolicySchema` in",
        "references": [
          {
            "name": "SubscriberChangeActionOption__99f1a181d6ed",
            "source": "packages/business/dist/types/business.d.ts#L15"
          }
        ]
      }
    ],
    "generated/business-sdk/codegen": [
      {
        "name": "ActionSpecJson__e01b08e9d184",
        "signature": "export type ActionSpecJson__e01b08e9d184 = {\n    id: string;\n    title?: string;\n    kind: \"query\" | \"mutation\";\n    actorType?: string;\n    subject?: {\n        type: string;\n        from: \"header\" | \"path_param\";\n        name: string;\n    };\n    inputSchemaRef?: string;\n    audit?: \"none\" | \"metadata\" | \"full\";\n    resource?: {\n        resource: string;\n        effect: \"create\" | \"delete\";\n    };\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L323",
        "description": "",
        "references": []
      },
      {
        "name": "BackendDefinitionJson__10a9a390d24d",
        "signature": "export type BackendDefinitionJson__10a9a390d24d = {\n    name?: string;\n    slug?: string;\n    transport?: {\n        mode?: BackendTransportModeJson__ce5a0a6d1c03;\n        runner?: BackendRunnerJson__0e11128e42f5;\n    };\n    /**\n     * Gateway->backend request signing. Emitted for every declared backend; the\n     * builder helper defaults omission to `{ required: true }` (HARD default).\n     */\n    verification?: {\n        required?: boolean;\n    };\n    /** Meter allow-list. Omitted = all business meters allowed. */\n    meters?: string[];\n    /** Marks the default backend when a business declares more than one. */\n    default?: boolean;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L304",
        "description": "",
        "references": [
          {
            "name": "BackendRunnerJson__0e11128e42f5",
            "source": "packages/business/dist/types/ir-types.d.ts#L303"
          },
          {
            "name": "BackendTransportModeJson__ce5a0a6d1c03",
            "source": "packages/business/dist/types/ir-types.d.ts#L302"
          }
        ]
      },
      {
        "name": "BackendRunnerJson__0e11128e42f5",
        "signature": "export type BackendRunnerJson__0e11128e42f5 = \"embedded\" | \"sidecar\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L303",
        "description": "",
        "references": []
      },
      {
        "name": "BackendTransportModeJson__ce5a0a6d1c03",
        "signature": "export type BackendTransportModeJson__ce5a0a6d1c03 = \"direct\" | \"tunnel\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L302",
        "description": "",
        "references": []
      },
      {
        "name": "BusinessBlockJson__a04690090fc8",
        "signature": "export type BusinessBlockJson__a04690090fc8 = {\n    visibility?: \"public\" | \"private\";\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L383",
        "description": "",
        "references": []
      },
      {
        "name": "BusinessChangeApprovalRiskJson__e8db37f1738a",
        "signature": "export type BusinessChangeApprovalRiskJson__e8db37f1738a = \"safe\" | \"non_blocking\" | \"economic_risk\" | \"blocking\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L363",
        "description": "",
        "references": []
      },
      {
        "name": "BusinessCleanupPolicyModeJson__41a5ae49826e",
        "signature": "export type BusinessCleanupPolicyModeJson__41a5ae49826e = \"report\" | \"pull_request\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L362",
        "description": "",
        "references": []
      },
      {
        "name": "BusinessCustomerContextJson__e5b9539124a5",
        "signature": "export type BusinessCustomerContextJson__e5b9539124a5 = {\n    context_tokens?: {\n        enabled?: boolean;\n    };\n    portal_auth?: {\n        strategy: CustomerPortalAuthStrategyJson__c8cec76b5a5a;\n    };\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L375",
        "description": "",
        "references": [
          {
            "name": "CustomerPortalAuthStrategyJson__c8cec76b5a5a",
            "source": "packages/business/dist/types/ir-types.d.ts#L374"
          }
        ]
      },
      {
        "name": "BusinessPoliciesJson__0d51efe66230",
        "signature": "export type BusinessPoliciesJson__0d51efe66230 = {\n    cleanup?: {\n        enabled?: boolean;\n        mode?: BusinessCleanupPolicyModeJson__41a5ae49826e;\n    };\n    change_approval?: {\n        auto_merge_max_risk?: \"none\" | \"safe\" | \"non_blocking\";\n        require_human_for?: BusinessChangeApprovalRiskJson__e8db37f1738a[];\n    };\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L364",
        "description": "",
        "references": [
          {
            "name": "BusinessChangeApprovalRiskJson__e8db37f1738a",
            "source": "packages/business/dist/types/ir-types.d.ts#L363"
          },
          {
            "name": "BusinessCleanupPolicyModeJson__41a5ae49826e",
            "source": "packages/business/dist/types/ir-types.d.ts#L362"
          }
        ]
      },
      {
        "name": "BusinessSpecJson__7ce46a3ce9fb",
        "signature": "export type BusinessSpecJson__7ce46a3ce9fb = {\n    business: BusinessBlockJson__a04690090fc8;\n    gateway?: {\n        authHeader?: string;\n        upstreamAuth?: {\n            type: \"none\" | \"static_bearer\";\n            token?: string;\n        };\n    };\n    metering?: {\n        meters?: MeterDefinitionJson__a744b09a0a2a[];\n        billOn4xx?: boolean;\n    };\n    /** BYO-Backend V1 — first-class backend declarations keyed by backend id.\n     *  Emitted only when at least one backend is declared (so single-backend /\n     *  no-backend products keep their pre-BYOB irHash). */\n    backend?: Record<string, BackendDefinitionJson__10a9a390d24d>;\n    resources?: CountedResourceJson__90d0b7f16d08[];\n    /** Repo-owned custom permission subjects. Emitted (sorted by subject) only\n     *  when at least one permission-carrying group is declared, so businesses\n     *  without permission groups keep their pre-cutover irHash. */\n    permissions?: PermissionSubjectJson__d124b4a2259d[];\n    policies?: BusinessPoliciesJson__0d51efe66230;\n    customer_context?: BusinessCustomerContextJson__e5b9539124a5;\n    plans?: PlanSpecJson__47392a63c977[];\n    /** Advanced/internal platform-schema blocks (usage, billing,\n     *  environments, lifecycle, ephemeral, …) are validated by the platform\n     *  schema but are not authorable through the functional SDK. */\n    [key: string]: unknown;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L395",
        "description": "",
        "references": [
          {
            "name": "BackendDefinitionJson__10a9a390d24d",
            "source": "packages/business/dist/types/ir-types.d.ts#L304"
          },
          {
            "name": "BusinessBlockJson__a04690090fc8",
            "source": "packages/business/dist/types/ir-types.d.ts#L383"
          },
          {
            "name": "BusinessCustomerContextJson__e5b9539124a5",
            "source": "packages/business/dist/types/ir-types.d.ts#L375"
          },
          {
            "name": "BusinessPoliciesJson__0d51efe66230",
            "source": "packages/business/dist/types/ir-types.d.ts#L364"
          },
          {
            "name": "CountedResourceJson__90d0b7f16d08",
            "source": "packages/business/dist/types/ir-types.d.ts#L355"
          },
          {
            "name": "MeterDefinitionJson__a744b09a0a2a",
            "source": "packages/business/dist/types/ir-types.d.ts#L4"
          },
          {
            "name": "PermissionSubjectJson__d124b4a2259d",
            "source": "packages/business/dist/types/ir-types.d.ts#L389"
          },
          {
            "name": "PlanSpecJson__47392a63c977",
            "source": "packages/business/dist/types/ir-types.d.ts#L113"
          }
        ]
      },
      {
        "name": "CacheProfile__876a201699a6",
        "signature": "export type CacheProfile__876a201699a6 = \"long\" | \"short\" | \"blocking\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L3",
        "description": "",
        "references": []
      },
      {
        "name": "CommerceAuthoringSnapshot__60159f2d0d70",
        "signature": "export type CommerceAuthoringSnapshot__60159f2d0d70 = Readonly<{\n    schemaVersion: 1;\n    measures: readonly Readonly<{\n        key: string;\n    }>[];\n    dimensions: readonly Readonly<{\n        key: string;\n        values?: readonly string[];\n    }>[];\n    providers: readonly Readonly<{\n        key: string;\n        models: readonly string[];\n    }>[];\n    meters: readonly Readonly<{\n        key: string;\n        measures: readonly string[];\n        dimensions: readonly string[];\n    }>[];\n    pricingPolicies: readonly LoweredPricingPolicy__51372c7aeb1f[];\n    plans: readonly LoweredPlan__acc0ad17968f[];\n    meterRouteBindings: readonly Readonly<{\n        key: string;\n        /** Served route keys — ONE per declared operation of the bound `route()`\n         *  (`servedRouteKey`: the gateway route id, e.g. `POST /v1/chat`),\n         *  sorted. Never a bare path. */\n        routeKeys: readonly string[];\n        reports: readonly string[];\n        caps?: readonly Readonly<{\n            measurementKey: string;\n            maximum: number;\n        }>[];\n        maxOutputUnits?: Readonly<{\n            measurementKey: string;\n            maximum: number;\n            adapter?: Readonly<{\n                knob: \"max_output_units\";\n                parser: \"json_body_max_output_units_v1\";\n                mutator: \"json_body_max_output_units_v1\";\n            }>;\n        }>;\n    }>[];\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L92",
        "description": "",
        "references": [
          {
            "name": "LoweredPlan__acc0ad17968f",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L64"
          },
          {
            "name": "LoweredPricingPolicy__51372c7aeb1f",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L46"
          }
        ]
      },
      {
        "name": "CountedResourceCountSourceJson__7b01580d882e",
        "signature": "export type CountedResourceCountSourceJson__7b01580d882e = \"reported\" | \"action_inferred\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L354",
        "description": "",
        "references": []
      },
      {
        "name": "CountedResourceJson__90d0b7f16d08",
        "signature": "export type CountedResourceJson__90d0b7f16d08 = {\n    name: string;\n    display?: string;\n    scope?: CountedResourceScopeJson__5c4e2863f653;\n    subjectType?: string;\n    countSource?: CountedResourceCountSourceJson__7b01580d882e;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L355",
        "description": "",
        "references": [
          {
            "name": "CountedResourceCountSourceJson__7b01580d882e",
            "source": "packages/business/dist/types/ir-types.d.ts#L354"
          },
          {
            "name": "CountedResourceScopeJson__5c4e2863f653",
            "source": "packages/business/dist/types/ir-types.d.ts#L353"
          }
        ]
      },
      {
        "name": "CountedResourceScopeJson__5c4e2863f653",
        "signature": "export type CountedResourceScopeJson__5c4e2863f653 = \"subscription\" | \"subject\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L353",
        "description": "",
        "references": []
      },
      {
        "name": "CustomerPortalAuthStrategyJson__c8cec76b5a5a",
        "signature": "export type CustomerPortalAuthStrategyJson__c8cec76b5a5a = \"clerk\" | \"test-personas\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L374",
        "description": "",
        "references": []
      },
      {
        "name": "ExactCatalogTiers__367557c966f6",
        "signature": "export type ExactCatalogTiers__367557c966f6 = Readonly<{\n    strategy: \"graduated\" | \"volume_retroactive\";\n    tiers: readonly Readonly<{\n        upTo: string | null;\n        rate: ExactRate__d20ab6d469eb;\n    }>[];\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L5",
        "description": "",
        "references": [
          {
            "name": "ExactRate__d20ab6d469eb",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L1"
          }
        ]
      },
      {
        "name": "ExactQuoteBounds__e9cf817917c1",
        "signature": "export type ExactQuoteBounds__e9cf817917c1 = Readonly<{\n    kind: \"backend_quoted\";\n    min: ExactRate__d20ab6d469eb;\n    max: ExactRate__d20ab6d469eb;\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L13",
        "description": "FAR-911 / M5 — repo-authored bounds of a backend-quoted rule (USD per unit).",
        "references": [
          {
            "name": "ExactRate__d20ab6d469eb",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L1"
          }
        ]
      },
      {
        "name": "ExactRate__d20ab6d469eb",
        "signature": "export type ExactRate__d20ab6d469eb = Readonly<{\n    num: string;\n    den: string;\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L1",
        "description": "",
        "references": []
      },
      {
        "name": "FrontendIntegrationBodyJson__412664c4c97a",
        "signature": "export type FrontendIntegrationBodyJson__412664c4c97a = {\n    kind: \"none\";\n} | {\n    kind: \"json\";\n    maxBytes: number;\n} | {\n    kind: \"text\";\n    maxBytes: number;\n    contentTypes: string[];\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L142",
        "description": "",
        "references": []
      },
      {
        "name": "FrontendIntegrationInjectionJson__0aad8e29552d",
        "signature": "export type FrontendIntegrationInjectionJson__0aad8e29552d = {\n    secretRef: string;\n    location: \"header\";\n    name: string;\n    template: \"{value}\" | \"Bearer {value}\";\n} | {\n    secretRef: string;\n    location: \"query\";\n    name: string;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L159",
        "description": "",
        "references": []
      },
      {
        "name": "FrontendIntegrationMethodJson__404791a522ea",
        "signature": "export type FrontendIntegrationMethodJson__404791a522ea = \"GET\" | \"HEAD\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L141",
        "description": "",
        "references": []
      },
      {
        "name": "FrontendIntegrationOperationJson__e8605b7d664b",
        "signature": "export type FrontendIntegrationOperationJson__e8605b7d664b = {\n    method: FrontendIntegrationMethodJson__404791a522ea;\n    path: string;\n    headers: string[];\n    query: string[];\n    body: FrontendIntegrationBodyJson__412664c4c97a;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L152",
        "description": "",
        "references": [
          {
            "name": "FrontendIntegrationBodyJson__412664c4c97a",
            "source": "packages/business/dist/types/ir-types.d.ts#L142"
          },
          {
            "name": "FrontendIntegrationMethodJson__404791a522ea",
            "source": "packages/business/dist/types/ir-types.d.ts#L141"
          }
        ]
      },
      {
        "name": "FrontendIntegrationSpecJson__46198141209a",
        "signature": "export type FrontendIntegrationSpecJson__46198141209a = {\n    id: string;\n    upstream: string;\n    request: {\n        operations: FrontendIntegrationOperationJson__e8605b7d664b[];\n    };\n    injection: FrontendIntegrationInjectionJson__0aad8e29552d;\n    response: {\n        kind: \"json\";\n        contentTypes: string[];\n        maxBytes: number;\n        jsonPointers: string[];\n        responseHeaders: string[];\n    };\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L170",
        "description": "Secret-value-free mirror of contracts' FrontendIntegrationSpec.",
        "references": [
          {
            "name": "FrontendIntegrationInjectionJson__0aad8e29552d",
            "source": "packages/business/dist/types/ir-types.d.ts#L159"
          },
          {
            "name": "FrontendIntegrationOperationJson__e8605b7d664b",
            "source": "packages/business/dist/types/ir-types.d.ts#L152"
          }
        ]
      },
      {
        "name": "FundingBucketKind__eced6b195b95",
        "signature": "export type FundingBucketKind__eced6b195b95 = \"included\" | \"prepaid\" | \"promo\" | \"referral\";",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L19",
        "description": "",
        "references": []
      },
      {
        "name": "HttpMethod__7ba25e3979be",
        "signature": "export type HttpMethod__7ba25e3979be = \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\" | \"HEAD\" | \"OPTIONS\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L1",
        "description": "",
        "references": []
      },
      {
        "name": "LimitScopeJson__215e4eb2041c",
        "signature": "export type LimitScopeJson__215e4eb2041c = {\n    endpoint?: string;\n    apiKey?: string;\n    workspace?: string;\n    region?: string;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L40",
        "description": "T12 — a FORWARD-COMPAT scope hint (endpoint / apiKey / workspace / region)\ncarried on a plan limit or a capacity ceiling. Mirrors the contracts\n`LimitScope`. Round-trips authoring → IR → compiled constraint; v1 enforcement\nis unchanged.",
        "references": []
      },
      {
        "name": "LoweredCatalogCondition__91bc16beb904",
        "signature": "export type LoweredCatalogCondition__91bc16beb904 = Readonly<{\n    dimensionKey: string;\n    value: string;\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L21",
        "description": "",
        "references": []
      },
      {
        "name": "LoweredCatalogItem__4eb2f217a7cb",
        "signature": "export type LoweredCatalogItem__4eb2f217a7cb = Readonly<{\n    provider: string;\n    model: string;\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L25",
        "description": "",
        "references": []
      },
      {
        "name": "LoweredFundingBucket__ee3504094266",
        "signature": "export type LoweredFundingBucket__ee3504094266 = Readonly<{\n    kind: FundingBucketKind__eced6b195b95;\n    currency: \"usd\";\n    amountMinor: number;\n    topUp?: boolean;\n    display?: Readonly<{\n        kind: \"multiplier\";\n        factor: number;\n        baseMinor: number;\n    }>;\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L53",
        "description": "",
        "references": [
          {
            "name": "FundingBucketKind__eced6b195b95",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L19"
          }
        ]
      },
      {
        "name": "LoweredPlan__acc0ad17968f",
        "signature": "export type LoweredPlan__acc0ad17968f = Readonly<{\n    key: string;\n    kind: PlanKindName__d0fd9bcc38b8;\n    price?: Readonly<{\n        currency: \"usd\";\n        interval: \"month\" | \"year\";\n        recurringFeeMinor: number;\n    }>;\n    usagePricing?: Readonly<{\n        kind: PricingBindingKind__ff438801f484;\n        pricingPolicyKey: string;\n        version?: number;\n    }>;\n    funding?: Readonly<{\n        buckets: readonly LoweredFundingBucket__ee3504094266[];\n    }>;\n    lifecycle?: Readonly<{\n        trialDays: number;\n    }>;\n    spendPolicy?: Readonly<{\n        disclosure?: \"opaque\" | \"transparent\";\n        rail?: \"x402\";\n        onExhaustion: Readonly<{\n            behavior: \"block\" | \"overage\";\n            pricingPolicyKey?: string;\n        }>;\n    }>;\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L64",
        "description": "",
        "references": [
          {
            "name": "LoweredFundingBucket__ee3504094266",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L53"
          },
          {
            "name": "PlanKindName__d0fd9bcc38b8",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L20"
          },
          {
            "name": "PricingBindingKind__ff438801f484",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L18"
          }
        ]
      },
      {
        "name": "LoweredPricingCatalogEntry__1d1b855a7ba8",
        "signature": "export type LoweredPricingCatalogEntry__1d1b855a7ba8 = Readonly<{\n    key: string;\n    item?: LoweredCatalogItem__4eb2f217a7cb;\n    measurementKey: string;\n    where?: readonly LoweredCatalogCondition__91bc16beb904[];\n    rate?: ExactRate__d20ab6d469eb;\n    tiers?: ExactCatalogTiers__367557c966f6;\n    quote?: ExactQuoteBounds__e9cf817917c1;\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L29",
        "description": "",
        "references": [
          {
            "name": "ExactCatalogTiers__367557c966f6",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L5"
          },
          {
            "name": "ExactQuoteBounds__e9cf817917c1",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L13"
          },
          {
            "name": "ExactRate__d20ab6d469eb",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L1"
          },
          {
            "name": "LoweredCatalogCondition__91bc16beb904",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L21"
          },
          {
            "name": "LoweredCatalogItem__4eb2f217a7cb",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L25"
          }
        ]
      },
      {
        "name": "LoweredPricingModifier__1c95de5a5c16",
        "signature": "export type LoweredPricingModifier__1c95de5a5c16 = Readonly<{\n    multiplier: ExactRate__d20ab6d469eb;\n    when: Readonly<{\n        dimensionKey: string;\n        operator: \"eq\";\n        value: string;\n    }>;\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L38",
        "description": "",
        "references": [
          {
            "name": "ExactRate__d20ab6d469eb",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L1"
          }
        ]
      },
      {
        "name": "LoweredPricingPolicy__51372c7aeb1f",
        "signature": "export type LoweredPricingPolicy__51372c7aeb1f = Readonly<{\n    key: string;\n    meterKey: string;\n    currency: \"usd\";\n    catalog: readonly LoweredPricingCatalogEntry__1d1b855a7ba8[];\n    modifiers: readonly LoweredPricingModifier__1c95de5a5c16[];\n}>;",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L46",
        "description": "",
        "references": [
          {
            "name": "LoweredPricingCatalogEntry__1d1b855a7ba8",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L29"
          },
          {
            "name": "LoweredPricingModifier__1c95de5a5c16",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L38"
          }
        ]
      },
      {
        "name": "ManifestIrDocument__3d04599c0d50",
        "signature": "export type ManifestIrDocument__3d04599c0d50 = {\n    irVersion: 1;\n    sdkVersion: string;\n    business: BusinessSpecJson__7ce46a3ce9fb;\n    routes: RouteLayerJson__1ae1dfa1e3a3[];\n    frontendIntegrations: FrontendIntegrationSpecJson__46198141209a[];\n    commerce: CommerceAuthoringSnapshot__60159f2d0d70;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L425",
        "description": "",
        "references": [
          {
            "name": "BusinessSpecJson__7ce46a3ce9fb",
            "source": "packages/business/dist/types/ir-types.d.ts#L395"
          },
          {
            "name": "CommerceAuthoringSnapshot__60159f2d0d70",
            "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L92"
          },
          {
            "name": "FrontendIntegrationSpecJson__46198141209a",
            "source": "packages/business/dist/types/ir-types.d.ts#L170"
          },
          {
            "name": "RouteLayerJson__1ae1dfa1e3a3",
            "source": "packages/business/dist/types/ir-types.d.ts#L340"
          }
        ]
      },
      {
        "name": "MeterDefinitionJson__a744b09a0a2a",
        "signature": "export type MeterDefinitionJson__a744b09a0a2a = {\n    key: string;\n    display: string;\n    unit?: string;\n    routeDefault?: number;\n    enforcementType?: \"exact_pre_request\" | \"estimated_then_settled\" | \"postpaid\" | \"strict_concurrency\";\n    aggregation?: \"SUM\" | \"COUNT\" | \"MAX\" | \"UNIQUE_COUNT\" | \"LATEST\";\n    window?: \"minute\" | \"hour\" | \"day\" | \"month\" | \"billing_period\";\n    valueProperty?: string;\n    uniqueProperty?: string;\n    groupBy?: string[];\n    eventCode?: string;\n    /** Token category this meter measures, when it is a token meter. T5 covers\n     *  the full token-accounting vocabulary: the input/output/total axes, the\n     *  cache axes (`cached_read_input` / `cache_creation_input`), `context`, the\n     *  output-budget axes (`max_output` / `estimated_output` / `actual_output`),\n     *  and `streaming_output`. Mirrors `TOKEN_CATEGORIES` in contracts. */\n    tokenCategory?: \"input\" | \"output\" | \"total\" | \"cached_read_input\" | \"cache_creation_input\" | \"context\" | \"max_output\" | \"estimated_output\" | \"actual_output\" | \"streaming_output\";\n    /** How the gateway RESERVES units for this meter on an estimate-then-settle\n     *  path: `reserve_max` (conservative worst-case) / `estimate` (heuristic) /\n     *  `count_actual` (no reserve). T5 — authored per token category to its\n     *  use-case: hard quota → `reserve_max` (optionally capped by\n     *  `reserveCeiling`); soft billing → `estimate`; spend → `reserve_max`. */\n    reserveStrategy?: \"reserve_max\" | \"estimate\" | \"count_actual\";\n    /** T5 — optional configured reservation CEILING (meter's native unit) for a\n     *  conservative `reserve_max` strategy that must not hold the full theoretical\n     *  worst case. Positive integer. Omit ⇒ unbounded worst-case reserve. */\n    reserveCeiling?: number;\n    /** Key of a meter this one is paired with (e.g. an `input` token meter pairs\n     *  with its `output` meter) so settlement / observability correlate the pair. */\n    pairsWith?: string;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L4",
        "description": "",
        "references": []
      },
      {
        "name": "MutationClass__7be649da1488",
        "signature": "export type MutationClass__7be649da1488 = \"runtime\" | \"contractual\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L2",
        "description": "",
        "references": []
      },
      {
        "name": "PermissionSubjectJson__d124b4a2259d",
        "signature": "export type PermissionSubjectJson__d124b4a2259d = {\n    subject: string;\n    verbs: string[];\n    escalatory?: string[];\n    description?: string;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L389",
        "description": "One repo-owned custom permission subject — emitted by a permission-carrying\n`fs.group(id, members, { permission })`. `verbs` are the EXTRA\ngrant-by-exact-name domain verbs beyond the implied read/write route pair.",
        "references": []
      },
      {
        "name": "PlanArchiveJson__452830f6517f",
        "signature": "export type PlanArchiveJson__452830f6517f = {\n    at?: string;\n    transitionTo?: string;\n    strategy?: \"auto\" | \"explicit\" | \"block\";\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L108",
        "description": "",
        "references": []
      },
      {
        "name": "PlanCapacityJson__cc200bb824bb",
        "signature": "export type PlanCapacityJson__cc200bb824bb = {\n    maxInputTokens?: number;\n    maxOutputTokens?: number;\n    maxContextTokens?: number;\n    maxPayloadBytes?: number;\n    enforcement?: \"enforce\" | \"track\";\n    failMode?: \"open\" | \"closed\";\n    /** T9 — confidence input: `declared` (exact) vs `estimated` (tokenizer). */\n    tokenCountSource?: \"declared\" | \"estimated\";\n    /** T12 — FORWARD-COMPAT scope hint. */\n    scope?: LimitScopeJson__215e4eb2041c;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L52",
        "description": "A3 — per-request capacity ceiling authored on a plan. Mirrors the contracts\n`planCapacitySchema` (ceilings + enforce/track + failMode + T9\n`tokenCountSource` + T12 `scope`) WITHOUT the compiler-owned `kind` /\n`provenance` discriminators. The core compiler turns it into a\n`{ kind: \"capacity\", …, provenance: \"plan\" }` ConstraintSpec. At least one\nceiling must be present.",
        "references": [
          {
            "name": "LimitScopeJson__215e4eb2041c",
            "source": "packages/business/dist/types/ir-types.d.ts#L40"
          }
        ]
      },
      {
        "name": "PlanKindJson__a2fffc829df1",
        "signature": "export type PlanKindJson__a2fffc829df1 = \"free\" | \"flat\" | \"usage\" | \"prepaid\" | \"hybrid\" | \"trial\" | \"custom\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L66",
        "description": "The DECLARED plan kind (`plan.kind.*`). Carried on the Manifest IR plan\nand on the commerce manifest; surfaces read it, nothing infers it.",
        "references": []
      },
      {
        "name": "PlanKindName__d0fd9bcc38b8",
        "signature": "export type PlanKindName__d0fd9bcc38b8 = \"free\" | \"flat\" | \"usage\" | \"prepaid\" | \"hybrid\" | \"trial\" | \"custom\";",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L20",
        "description": "",
        "references": []
      },
      {
        "name": "PlanLimitJson__7fa99c13f45f",
        "signature": "export type PlanLimitJson__7fa99c13f45f = {\n    dimension: string;\n    window: PlanLimitWindowJson__34c3ba9c4506;\n    capacity: number;\n    enforcement?: \"enforce\" | \"track\";\n    /** A3 — optional WARN threshold as a fraction of `capacity` in [0, 1]. The\n     *  core compiler threads it onto the emitted rate_limit / quota constraint's\n     *  `warnAt`. Advisory only; never denies. Optional + additive. */\n    warnAt?: number;\n    strategy?: \"fixed_window\" | \"sliding_window\" | \"token_bucket\";\n    bucketCapacity?: number;\n    refillRatePerSecond?: number;\n    /** T12 — optional FORWARD-COMPAT scope hint. The core compiler threads it onto\n     *  the emitted rate_limit / quota constraint's `scope`. v1 enforcement is\n     *  unchanged. Optional + additive. */\n    scope?: LimitScopeJson__215e4eb2041c;\n    reset_trigger?: \"billing_period\" | \"subscription_start\";\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L75",
        "description": "",
        "references": [
          {
            "name": "LimitScopeJson__215e4eb2041c",
            "source": "packages/business/dist/types/ir-types.d.ts#L40"
          },
          {
            "name": "PlanLimitWindowJson__34c3ba9c4506",
            "source": "packages/business/dist/types/ir-types.d.ts#L67"
          }
        ]
      },
      {
        "name": "PlanLimitWindowJson__34c3ba9c4506",
        "signature": "export type PlanLimitWindowJson__34c3ba9c4506 = {\n    type: \"named\";\n    name: \"second\" | \"minute\" | \"hour\" | \"day\" | \"week\" | \"month\";\n} | {\n    type: \"custom\";\n    seconds: number;\n    label?: string;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L67",
        "description": "",
        "references": []
      },
      {
        "name": "PlanSpecJson__47392a63c977",
        "signature": "export type PlanSpecJson__47392a63c977 = {\n    key: string;\n    /** The DECLARED plan kind. Required: a plan is free / flat / usage / …\n     *  because the builder said so, never because of its shape. Usage money\n     *  never lives on the plan; it is commerce-manifest owned. */\n    kind: PlanKindJson__a2fffc829df1;\n    description?: string;\n    details?: string[];\n    recurring_fee_cents?: number;\n    billing_interval?: \"month\" | \"year\";\n    trial_days?: number;\n    max_monthly_spend_cents?: number;\n    min_monthly_spend_cents?: number;\n    limits?: PlanLimitJson__7fa99c13f45f[];\n    /** Additive v2 direct grants using stable route ids. */\n    routeGrants?: string[];\n    /** Named managed-frontend integrations this plan permits. */\n    frontendIntegrationGrants?: string[];\n    resource_limits?: Record<string, number>;\n    /** A3 — per-request capacity ceiling. Compiles to a `{ kind: \"capacity\" }`\n     *  ConstraintSpec the gateway enforces (413 `request_too_large`). */\n    capacity?: PlanCapacityJson__cc200bb824bb;\n    overageBehavior?: \"block\" | \"allow_and_bill\";\n    selfServeEnabled?: boolean;\n    archive?: PlanArchiveJson__452830f6517f;\n    /** Escape hatch: future fields ride through here. `variants` was removed and is rejected at validation. */\n    [key: string]: unknown;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L113",
        "description": "",
        "references": [
          {
            "name": "PlanArchiveJson__452830f6517f",
            "source": "packages/business/dist/types/ir-types.d.ts#L108"
          },
          {
            "name": "PlanCapacityJson__cc200bb824bb",
            "source": "packages/business/dist/types/ir-types.d.ts#L52"
          },
          {
            "name": "PlanKindJson__a2fffc829df1",
            "source": "packages/business/dist/types/ir-types.d.ts#L66"
          },
          {
            "name": "PlanLimitJson__7fa99c13f45f",
            "source": "packages/business/dist/types/ir-types.d.ts#L75"
          }
        ]
      },
      {
        "name": "PricingBindingKind__ff438801f484",
        "signature": "export type PricingBindingKind__ff438801f484 = \"current\" | \"current_with_contract_terms\" | \"fixed_version\";",
        "source": "packages/business/dist/types/commerce/lowered-types.d.ts#L18",
        "description": "",
        "references": []
      },
      {
        "name": "RouteChargeableOutcomesJson__ba3a3aead9e9",
        "signature": "export type RouteChargeableOutcomesJson__ba3a3aead9e9 = \"success_only\" | \"success_and_partial\" | \"attempted\" | \"trusted_actual_usage_only\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L267",
        "description": "",
        "references": []
      },
      {
        "name": "RouteDefinitionJson__16a975e76419",
        "signature": "export type RouteDefinitionJson__16a975e76419 = {\n    match: {\n        method: HttpMethod__7ba25e3979be;\n        path: string;\n    };\n    metering?: {\n        defaults?: Record<string, number>;\n        reports?: string[];\n        onStatusCodes?: string | number[];\n        /** The authoritative billable units arrive through the attested\n         * post-stream reporter. The in-band gateway event remains reserve-only. */\n        postStreamBilling?: boolean;\n    };\n    /** Explicit billing semantics belong to the route, not the metering block;\n     *  contracts reparses route layers strictly enough to strip unknown nested\n     *  keys, which would silently turn authored free operations into inferred\n     *  billable metered operations. */\n    usagePolicy?: RouteUsagePolicyJson__bd930ebf5713;\n    unmetered?: boolean;\n    inheritDefaultMeters?: boolean;\n    action?: string;\n    /** Repo-owned custom permissions — stamped by lowering when this route is a\n     *  member of a permission-carrying `fs.group`. The gateway gates the route\n     *  on `<permissionSubject>:read|write`; metering/grant identity (`action` /\n     *  canonical method+path) is untouched. Never authored directly on a route. */\n    permissionSubject?: string;\n    /** Repo-owned custom permissions — gateway-required verb override for this\n     *  operation (`<permissionSubject>:<permissionVerb>` instead of the\n     *  method-derived read/write). Present only with `permissionSubject`. */\n    permissionVerb?: string;\n    /** BYO-Backend V1 — route→backend binding id. Omitted = the sole / default\n     *  backend (single-backend businesses stay zero-config). */\n    backend?: string;\n    /** Canonical per-route auth/timeout/retry policy (FAR-680). Omitted when no\n     *  policy intent was authored — keeps the IR (and irHash) byte-identical. */\n    policy?: RoutePolicyJson__2cd59104f8e6;\n    /** FAR-684 — canonical per-route rate/quota overrides, normalized from\n     *  `rateLimit` / `quota` sugar. Omitted when the route authored none — keeps\n     *  the IR (and irHash) byte-identical. */\n    limits?: RouteLimitJson__077809c9f639[];\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L225",
        "description": "",
        "references": [
          {
            "name": "HttpMethod__7ba25e3979be",
            "source": "packages/business/dist/types/ir-types.d.ts#L1"
          },
          {
            "name": "RouteLimitJson__077809c9f639",
            "source": "packages/business/dist/types/ir-types.d.ts#L99"
          },
          {
            "name": "RoutePolicyJson__2cd59104f8e6",
            "source": "packages/business/dist/types/ir-types.d.ts#L206"
          },
          {
            "name": "RouteUsagePolicyJson__bd930ebf5713",
            "source": "packages/business/dist/types/ir-types.d.ts#L281"
          }
        ]
      },
      {
        "name": "RouteLayerJson__1ae1dfa1e3a3",
        "signature": "export type RouteLayerJson__1ae1dfa1e3a3 = {\n    description?: string;\n    mutation_class?: MutationClass__7be649da1488;\n    cacheProfile?: CacheProfile__876a201699a6;\n    routes: RouteDefinitionJson__16a975e76419[];\n    runtime?: {\n        rollout_key?: string;\n        required_flags?: string[];\n    };\n    actions?: ActionSpecJson__e01b08e9d184[];\n    /** Layer-level default backend binding; exact routes may override it. */\n    backend?: string;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L340",
        "description": "",
        "references": [
          {
            "name": "ActionSpecJson__e01b08e9d184",
            "source": "packages/business/dist/types/ir-types.d.ts#L323"
          },
          {
            "name": "CacheProfile__876a201699a6",
            "source": "packages/business/dist/types/ir-types.d.ts#L3"
          },
          {
            "name": "MutationClass__7be649da1488",
            "source": "packages/business/dist/types/ir-types.d.ts#L2"
          },
          {
            "name": "RouteDefinitionJson__16a975e76419",
            "source": "packages/business/dist/types/ir-types.d.ts#L225"
          }
        ]
      },
      {
        "name": "RouteLimitJson__077809c9f639",
        "signature": "export type RouteLimitJson__077809c9f639 = {\n    dimension: string;\n    window: PlanLimitWindowJson__34c3ba9c4506;\n    capacity: number;\n    enforcement?: \"enforce\" | \"track\";\n    strategy?: \"fixed_window\" | \"sliding_window\" | \"token_bucket\";\n    bucketCapacity?: number;\n    refillRatePerSecond?: number;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L99",
        "description": "FAR-684 — the CANONICAL per-route rate/quota override the SDK normalizes\n`rateLimit` / `quota` sugar into, and the compiler emits as a route-scoped\n`rate_limit` / `quota` ConstraintSpec. Mirrors the contracts\n`routeLimitOverrideSchema`. `dimension` defaults to `requests` (the native\nper-call meter) so `rateLimit: \"10/min\"` needs no meter wiring. Never\nhand-authored — builders write intent sugar; this is the normalized shape.",
        "references": [
          {
            "name": "PlanLimitWindowJson__34c3ba9c4506",
            "source": "packages/business/dist/types/ir-types.d.ts#L67"
          }
        ]
      },
      {
        "name": "RoutePolicyJson__2cd59104f8e6",
        "signature": "export type RoutePolicyJson__2cd59104f8e6 = {\n    authMode?: \"public\" | \"required\";\n    timeoutMs?: number;\n    idleTimeoutMs?: number;\n    retry?: RouteRetryPolicyJson__6044d092c471;\n    /** Consumer-principal subject requirement the gateway enforces (403\n     *  `member_subject_required` / `service_subject_required`). OMITTED when the\n     *  route imposes no requirement (\"any\") — absence-vs-presence is the only\n     *  irHash signal, so a route with no subject requirement stays byte-identical. */\n    subject?: \"member\" | \"service\";\n    /** CALLABILITY axis — allowlist of credential surfaces the gateway admits.\n     *  OMITTED = all admitted (the implicit \"hybrid\" state). Emitted as a\n     *  non-empty, deduped, canonically-sorted array so the irHash is stable. */\n    surfaces?: RouteSurface__b5c8a54b503c[];\n    /** VISIBILITY axis — true excludes the route from generated docs + grantable\n     *  API-key scopes, and makes a callability deny return 404 (not 403). OMITTED\n     *  when the route is visible, so a listed route stays byte-identical. */\n    hidden?: boolean;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L206",
        "description": "",
        "references": [
          {
            "name": "RouteRetryPolicyJson__6044d092c471",
            "source": "packages/business/dist/types/ir-types.d.ts#L189"
          },
          {
            "name": "RouteSurface__b5c8a54b503c",
            "source": "packages/business/dist/types/ir-types.d.ts#L205"
          }
        ]
      },
      {
        "name": "RouteRetryOnJson__0096ba141bc1",
        "signature": "export type RouteRetryOnJson__0096ba141bc1 = \"network\" | \"5xx\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L186",
        "description": "Retry conditions the canonical retry policy fires on (FAR-680).",
        "references": []
      },
      {
        "name": "RouteRetryPolicyJson__6044d092c471",
        "signature": "export type RouteRetryPolicyJson__6044d092c471 = {\n    maxAttempts: number;\n    retryOn: RouteRetryOnJson__0096ba141bc1[];\n    backoff: {\n        base: number;\n        max: number;\n        jitter: number;\n    };\n    budgetRatio: number;\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L189",
        "description": "CANONICAL retry policy — the explicit IR shape SDK sugar normalizes into\nand FAR-689 consumes. Never hand-authored; `retry: true` expands to it.",
        "references": [
          {
            "name": "RouteRetryOnJson__0096ba141bc1",
            "source": "packages/business/dist/types/ir-types.d.ts#L186"
          }
        ]
      },
      {
        "name": "RouteSurface__b5c8a54b503c",
        "signature": "export type RouteSurface__b5c8a54b503c = \"ui\" | \"api\" | \"agent\" | \"webhook\" | \"cli\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L205",
        "description": "Route callability surfaces — which credential SURFACE may call a route.\nExtensible enum; only `ui`/`api` are enforced today (see contracts\n`routeSurfaceSchema`). Mirror kept in sync by the schema-vs-type drift guard.",
        "references": []
      },
      {
        "name": "RouteTrafficClassJson__0fcb4c4bf86d",
        "signature": "export type RouteTrafficClassJson__0fcb4c4bf86d = \"customer_operation\" | \"control_plane\" | \"admin_internal\" | \"background_job\" | \"webhook\" | \"healthcheck\" | \"unclassified\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L278",
        "description": "",
        "references": []
      },
      {
        "name": "RouteUsagePolicyJson__bd930ebf5713",
        "signature": "export type RouteUsagePolicyJson__bd930ebf5713 = {\n    trafficClass: RouteTrafficClassJson__0fcb4c4bf86d;\n    policySource: RouteUsagePolicySourceJson__956c2e9dd016;\n    limitParticipation: {\n        profile: RouteUsagePolicyLimitProfileJson__5436ffa8006e;\n        pools?: string[];\n        scopes?: Array<Record<string, unknown>>;\n        metrics?: string[];\n    };\n    customerBillingPolicy: {\n        customerBillable: boolean;\n        meterKey?: string;\n        chargeableOutcomes: RouteChargeableOutcomesJson__ba3a3aead9e9;\n        invoiceBehavior?: string;\n    };\n    providerCostPolicy: {\n        providerCostTracked: boolean;\n        declaredProviderHint?: string;\n        declaredModelHint?: string;\n    };\n};",
        "source": "packages/business/dist/types/ir-types.d.ts#L281",
        "description": "",
        "references": [
          {
            "name": "RouteChargeableOutcomesJson__ba3a3aead9e9",
            "source": "packages/business/dist/types/ir-types.d.ts#L267"
          },
          {
            "name": "RouteTrafficClassJson__0fcb4c4bf86d",
            "source": "packages/business/dist/types/ir-types.d.ts#L278"
          },
          {
            "name": "RouteUsagePolicyLimitProfileJson__5436ffa8006e",
            "source": "packages/business/dist/types/ir-types.d.ts#L280"
          },
          {
            "name": "RouteUsagePolicySourceJson__956c2e9dd016",
            "source": "packages/business/dist/types/ir-types.d.ts#L279"
          }
        ]
      },
      {
        "name": "RouteUsagePolicyLimitProfileJson__5436ffa8006e",
        "signature": "export type RouteUsagePolicyLimitProfileJson__5436ffa8006e = \"customer_usage\" | \"business_capacity\" | \"control_plane\" | \"admin_internal\" | \"platform_abuse_only\" | \"healthcheck\" | \"none\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L280",
        "description": "",
        "references": []
      },
      {
        "name": "RouteUsagePolicySourceJson__956c2e9dd016",
        "signature": "export type RouteUsagePolicySourceJson__956c2e9dd016 = \"declared\" | \"inherited\" | \"defaulted\" | \"inferred\";",
        "source": "packages/business/dist/types/ir-types.d.ts#L279",
        "description": "",
        "references": []
      }
    ],
    "generated/backend-sdk/root": [
      {
        "name": "JitterStrategy__d3dcffd979fd",
        "signature": "export type JitterStrategy__d3dcffd979fd = \n/** No jitter — the raw capped exponential (deterministic). */\n\"none\"\n/** Equal jitter — `cap/2 + random()*cap/2` (the DEFAULT). */\n | \"equal\"\n/** Full jitter — `random()*cap` (max spread, no minimum floor). */\n | \"full\";",
        "source": "packages/backend/dist/types/core/backoff.d.ts#L2",
        "description": "The jitter strategy applied to the capped exponential delay.",
        "references": []
      },
      {
        "name": "JwksCacheState__075013cca763",
        "signature": "export type JwksCacheState__075013cca763 = \"fresh\" | \"soft_stale\" | \"hard_stale\" | \"cold\";",
        "source": "packages/backend/dist/types/core/jwks.d.ts#L5",
        "description": "Freshness of the key set backing a verification decision.",
        "references": []
      },
      {
        "name": "JwksObservation__b0d7452a7cf1",
        "signature": "export type JwksObservation__b0d7452a7cf1 = {\n    state: JwksCacheState__075013cca763;\n    /** Age of the cached key set in ms (0 when cold). */\n    ageMs: number;\n    /** The `kid` being resolved, when the observation is tied to one. */\n    kid?: string;\n};",
        "source": "packages/backend/dist/types/core/jwks.d.ts#L6",
        "description": "",
        "references": [
          {
            "name": "JwksCacheState__075013cca763",
            "source": "packages/backend/dist/types/core/jwks.d.ts#L5"
          }
        ]
      },
      {
        "name": "JwksObserver__4d7082fe0d6b",
        "signature": "export type JwksObserver__4d7082fe0d6b = (observation: JwksObservation__b0d7452a7cf1) => void;",
        "source": "packages/backend/dist/types/core/jwks.d.ts#L18",
        "description": "Observability hook. Fires on every decision that depends on cache freshness,\nso an operator can alarm on `soft_stale` (Core is failing) long before\n`hard_stale` (requests are now being rejected).",
        "references": [
          {
            "name": "JwksObservation__b0d7452a7cf1",
            "source": "packages/backend/dist/types/core/jwks.d.ts#L6"
          }
        ]
      },
      {
        "name": "ReconcileResult__9286f3220e09",
        "signature": "export interface ReconcileResult__9286f3220e09 {\n    /** Reflected surface matched the declared lock. */\n    inSync: boolean;\n    /** A drift report was sent. */\n    reportedDrift: boolean;\n    /** Route ids confirmed served (pending → clearable). */\n    confirmedRouteIds: string[];\n    /** A report sink call failed (swallowed — boot never blocks on it). */\n    reportError?: string;\n}",
        "source": "packages/backend/dist/types/reflect/reconcile.d.ts#L23",
        "description": "",
        "references": []
      },
      {
        "name": "ReportFn__89e79b33cabf",
        "signature": "export type ReportFn__89e79b33cabf = (input: ReportInput | readonly ReportInput[]) => Promise<ReportResult>;",
        "source": "packages/backend/dist/types/core/report.d.ts#L115",
        "description": "`report()` accepts one measurement or an ARRAY of measurements. The array\nform is the sanctioned way to report several meters after the response is\nsent: one served request owns exactly ONE post-stream callback identity, so\nsequential awaited single reports after the first flush cannot be delivered\n— a batch rides the single callback atomically. All entries of a batch\nshare one quote (at most one distinct quote may be supplied).",
        "references": [
          {
            "name": "ReportInput",
            "source": "packages/backend/dist/types/core/report.d.ts#L28"
          },
          {
            "name": "ReportResult",
            "source": "packages/backend/dist/types/core/report.d.ts#L53"
          }
        ]
      },
      {
        "name": "RESPONSE_METERING_ERROR_CODES__ebc2ee726659",
        "signature": "declare const RESPONSE_METERING_ERROR_CODES__ebc2ee726659: {\n    readonly missingToken: \"missing_token\";\n    readonly invalidMeterKey: \"invalid_meter_key\";\n    readonly invalidMeterValue: \"invalid_meter_value\";\n    readonly invalidQuote: \"invalid_quote\";\n};",
        "source": "packages/backend/dist/types/response-metering.d.ts#L2",
        "description": "The response-metering fault codes carried by {@link MeteringError}.",
        "references": []
      },
      {
        "name": "ResponseMeteringErrorCode__bb4ee7cec8df",
        "signature": "export type ResponseMeteringErrorCode__bb4ee7cec8df = (typeof RESPONSE_METERING_ERROR_CODES__ebc2ee726659)[keyof typeof RESPONSE_METERING_ERROR_CODES__ebc2ee726659];",
        "source": "packages/backend/dist/types/response-metering.d.ts#L8",
        "description": "",
        "references": [
          {
            "name": "RESPONSE_METERING_ERROR_CODES__ebc2ee726659",
            "source": "packages/backend/dist/types/response-metering.d.ts#L2"
          }
        ]
      },
      {
        "name": "ResponseSink__b746e2445083",
        "signature": "export type ResponseSink__b746e2445083 = {\n    /** True while headers can still be stamped onto the outgoing response. */\n    canStampHeaders(): boolean;\n    /** Stamp the signed metering headers onto the outgoing response. */\n    stampHeaders(headers: Record<string, string>): void;\n};",
        "source": "packages/backend/dist/types/core/report.d.ts#L78",
        "description": "The transport seam a host adapter supplies for the in-band lane.",
        "references": []
      },
      {
        "name": "RouteRefreshGate__ebb28e3c71bf",
        "signature": "export type RouteRefreshGate__ebb28e3c71bf = {\n    tryAcquire(key: string): boolean;\n};",
        "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L164",
        "description": "The single method {@link RouteRefreshLimiter } exposes to the verifier.",
        "references": []
      },
      {
        "name": "RouteSetRefresher__8966fd1442e8",
        "signature": "export type RouteSetRefresher__8966fd1442e8 = () => Promise<{\n    knownRouteIds: ReadonlySet<string>;\n    policyVersion?: string;\n} | null>;",
        "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L159",
        "description": "Forces one bootstrap refresh and reports the fresh route set + policy version.\n`null` means \"could not refresh\" — never \"no routes\".",
        "references": []
      },
      {
        "name": "RuntimeBootstrapRequest__4b9c188578f3",
        "signature": "export type RuntimeBootstrapRequest__4b9c188578f3 = {\n    instanceId?: string;\n    sdkVersion?: string;\n    sdkLanguage?: string;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L183",
        "description": "",
        "references": []
      },
      {
        "name": "RuntimeEnvironmentKind__ac9ea026fbe7",
        "signature": "export type RuntimeEnvironmentKind__ac9ea026fbe7 = RuntimeTokenKind__821c369e851d;",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L180",
        "description": "",
        "references": [
          {
            "name": "RuntimeTokenKind__821c369e851d",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L123"
          }
        ]
      },
      {
        "name": "RuntimeLockDescriptor__0d22ecd0bb58",
        "signature": "export type RuntimeLockDescriptor__0d22ecd0bb58 = {\n    surfaceHash: string;\n    lockVersion: number;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L224",
        "description": "The declared route-surface lock the backend reconciles against at startup.",
        "references": []
      },
      {
        "name": "RuntimeMeteringConfig__3d27722db6c2",
        "signature": "export type RuntimeMeteringConfig__3d27722db6c2 = {\n    enabled: boolean;\n    endpoint: string;\n    credential: string;\n    allowedMeters: string[];\n    allowedRoutes: string[];\n    perEventMax: number;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L195",
        "description": "",
        "references": []
      },
      {
        "name": "RuntimeRouteDescriptor__48a862559af0",
        "signature": "export type RuntimeRouteDescriptor__48a862559af0 = {\n    id: string;\n    method: string;\n    path: string;\n    backendId: string;\n    /** Declared-but-not-yet-confirmed-served route. `fs.ready()` confirms the ones\n     *  this replica actually serves so core can clear the flag and publish. */\n    pending?: boolean;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L214",
        "description": "",
        "references": []
      },
      {
        "name": "RuntimeTokenKind__821c369e851d",
        "signature": "export type RuntimeTokenKind__821c369e851d = keyof typeof RUNTIME_TOKEN_PREFIXES;",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L123",
        "description": "",
        "references": [
          {
            "name": "RUNTIME_TOKEN_PREFIXES",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L119"
          }
        ]
      },
      {
        "name": "RuntimeTransportConfig__7254e971c589",
        "signature": "export type RuntimeTransportConfig__7254e971c589 = {\n    mode: TransportMode;\n    runner: TransportRunner__21383ffda4d0 | null;\n    originUrl?: string;\n    originHostname?: string;\n    localTarget?: string;\n    cloudflared?: {\n        tunnelToken: string;\n        version: string;\n    };\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L203",
        "description": "",
        "references": [
          {
            "name": "TransportMode",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L181"
          },
          {
            "name": "TransportRunner__21383ffda4d0",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L182"
          }
        ]
      },
      {
        "name": "RuntimeVerificationConfig__5494b13a9008",
        "signature": "export type RuntimeVerificationConfig__5494b13a9008 = {\n    required: boolean;\n    jwksUrl: string;\n    clockSkewSeconds: number;\n    replayWindowSeconds: number;\n    headerNames: typeof RUNTIME_HEADER_NAMES;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L188",
        "description": "",
        "references": [
          {
            "name": "RUNTIME_HEADER_NAMES",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L126"
          }
        ]
      },
      {
        "name": "StdioStream__d26eea00aaf1",
        "signature": "type StdioStream__d26eea00aaf1 = Pick<EventEmitter, \"on\">;",
        "source": "packages/backend/dist/types/core/tunnel.d.ts#L4",
        "description": "A line emitter — the subset of a child stdio stream we consume.",
        "references": []
      },
      {
        "name": "TransportRunner__21383ffda4d0",
        "signature": "export type TransportRunner__21383ffda4d0 = \"embedded\" | \"sidecar\";",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L182",
        "description": "",
        "references": []
      },
      {
        "name": "VerifyRequestHostOptions__981e9466821d",
        "signature": "export type VerifyRequestHostOptions__981e9466821d = {\n    responseSink?: ResponseSink__b746e2445083;\n};",
        "source": "packages/backend/dist/types/core/runtime.d.ts#L76",
        "description": "Host-adapter seams for `verifyRequest`. An adapter that owns the outgoing\nresponse (the Express middleware) supplies a {@link ResponseSink} so\n`ctx.report()` can choose the zero-network in-band header transport while the\nresponse is still open. Without one, reports take the post-stream channel.",
        "references": [
          {
            "name": "ResponseSink__b746e2445083",
            "source": "packages/backend/dist/types/core/report.d.ts#L78"
          }
        ]
      }
    ],
    "generated/backend-sdk/express": [
      {
        "name": "ConsumerPrincipal__16f951b9786d",
        "signature": "export type ConsumerPrincipal__16f951b9786d = {\n    org: {\n        id: string;\n    };\n    subject: {\n        kind: \"member\";\n        /** The member's stable internal id (never an IdP subject/email). */\n        memberId: string;\n        /** How this request's identity was proven. */\n        via: \"session\" | \"api_key\";\n        /** The personal `fsk_` key id when `via === \"api_key\"` (audit). */\n        keyId?: string;\n    } | {\n        kind: \"service\";\n        /** The org-owned service account id — the stable service identity. */\n        serviceAccountId: string;\n        /** The specific service `fsk_` key id (rotates; audit). */\n        keyId: string;\n    };\n};",
        "source": "packages/backend/dist/types/core/verifyContext.d.ts#L8",
        "description": "The verified consumer principal derived from the cv=2 signed context — a\ntenant (`org`) plus exactly one subject. Local copy of the contracts\n`ConsumerPrincipal` (the SDK never leaks `@farthershore/contracts` into a\npublic type signature; see runtime-signing.ts).",
        "references": []
      },
      {
        "name": "FartherShore__b6398b2ddfc7",
        "signature": "export declare class FartherShore__b6398b2ddfc7 {\n    private readonly bootstrapClient;\n    private readonly fetchImpl;\n    private readonly verificationEnabled;\n    private readonly meteringEnabledOverride;\n    private readonly runtimeToken;\n    private readonly coreUrl;\n    private readonly instanceId?;\n    private readonly tunnelOptions;\n    /** OPTIONAL HS256 secret(s) — defense-in-depth over the cv=2 X-Fs-Context. */\n    private readonly contextSecrets;\n    private readonly nonceCache;\n    private readonly replayProtectionDiagnostic;\n    private readonly shutdownManager;\n    /** Bounds the on-demand bootstrap refreshes an unknown route id can trigger. */\n    private readonly routeRefreshLimiter;\n    private jwks;\n    private postStreamUsageClient;\n    private tunnel;\n    private bootstrapped;\n    constructor(options?: FartherShoreInitOptions__d009c6effb6b);\n    /** Ensure bootstrap config is loaded; build the JWKS + metering clients. */\n    ensureBootstrapped(): Promise<RuntimeBootstrapResponse__aecc7a0d671f>;\n    /**\n     * Boot-time route reconciliation (call once, before `listen()`). Reflects the\n     * app's real route surface, diffs it against the declared lock from bootstrap,\n     * REPORTS drift to the platform, and CONFIRMS the declared `pending` routes\n     * this replica serves. Fail-OPEN: never throws / never blocks boot.\n     *\n     * The reflection code is dynamically imported so it stays OFF the per-request\n     * verification hot path (the runtime stays route-unaware there). The report is\n     * an OUTBOUND backend→core call (same channel as bootstrap/metering), so it\n     * works for every transport (direct / tunnel).\n     *\n     * Returns the reconcile result (or null if reflection is unavailable / boot\n     * reporting failed). v1 reflects Express; `app` omitted → no-op.\n     */\n    ready(app?: unknown): Promise<ReconcileResult__9286f3220e09 | null>;\n    /** Outbound report sink for `ready()` — runtime-token-authed POSTs to core. */\n    private buildReportSink;\n    /**\n     * Framework-neutral verification primitive. Fail-closed: throws a typed\n     * FartherShoreError on any verification failure. Returns the verified context.\n     */\n    verifyRequest(input: VerifyRequestInput__5a17124b6df7, options?: VerifyRequestHostOptions__981e9466821d): Promise<FartherShoreRequestContext__fee40dd450e8>;\n    /**\n     * Bind the ONE reporting verb to a verified context. Identity comes from the\n     * context (`signedContext.subscriptionId` + `requestId`) — never from the\n     * caller — so a handler cannot forget it, and a background job that is handed\n     * this context keeps reporting against the SAME served identity.\n     */\n    private buildReportFn;\n    /** Whether verification is required (bootstrap × opt-out). */\n    verificationRequired(): Promise<boolean>;\n    /**\n     * Start the embedded runner. For a `tunnel` backend whose runner is\n     * `embedded`, this supervises `cloudflared` as a child process\n     * (spawned via the injected/default spawner) using the tunnel token from\n     * bootstrap. For every other transport (`direct`, or the `sidecar` runner)\n     * it is a no-op — there is no SDK-managed process to run.\n     *\n     * Fail-open by default: a tunnel that cannot start does NOT crash the host app\n     * (request verification stays fail-closed regardless — a different axis).\n     */\n    start(): Promise<void>;\n    /**\n     * PRIVATE transport for the post-stream lane of `ctx.report()`. Never rejects\n     * — a metering hiccup must not break a builder's endpoint. This is machinery,\n     * not surface: the ONE public reporting verb is `ctx.report()`.\n     */\n    private reportPostStreamUsage;\n    /**\n     * How far replay protection actually reaches — `\"shared\"` (enforced across\n     * every replica) or `\"single-instance\"` (this process only). Deployment\n     * diagnostic: log it at boot, or assert on it in a smoke test, so the mode is\n     * never a surprise. See {@link FartherShoreInitOptions.nonceStore}.\n     */\n    replayProtection(): ReplayProtectionDiagnostic__a3a9ef1278f1;\n    /** Current local health report. */\n    health(): RuntimeHealthReport__0174b488600d;\n    /** Graceful shutdown: flush metering + send a stopping heartbeat. */\n    shutdown(): Promise<void>;\n    /** Register an additional shutdown hook (e.g. the cloudflared supervisor). */\n    onShutdown(hook: () => Promise<void> | void): void;\n}",
        "source": "packages/backend/dist/types/core/runtime.d.ts#L84",
        "description": "The runtime instance. Lazily bootstraps; holds the JWKS client, nonce cache,\nmetering buffer, and shutdown hooks.",
        "references": [
          {
            "name": "FartherShoreInitOptions__d009c6effb6b",
            "source": "packages/backend/dist/types/core/runtime.d.ts#L21"
          },
          {
            "name": "FartherShoreRequestContext__fee40dd450e8",
            "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L24"
          },
          {
            "name": "ReconcileResult__9286f3220e09",
            "source": "packages/backend/dist/types/reflect/reconcile.d.ts#L23"
          },
          {
            "name": "ReplayProtectionDiagnostic__a3a9ef1278f1",
            "source": "packages/backend/dist/types/core/replay-protection.d.ts#L4"
          },
          {
            "name": "RuntimeBootstrapResponse__aecc7a0d671f",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L228"
          },
          {
            "name": "RuntimeHealthReport__0174b488600d",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L306"
          },
          {
            "name": "VerifyRequestHostOptions__981e9466821d",
            "source": "packages/backend/dist/types/core/runtime.d.ts#L76"
          },
          {
            "name": "VerifyRequestInput__5a17124b6df7",
            "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L6"
          }
        ]
      },
      {
        "name": "FartherShoreInitOptions__d009c6effb6b",
        "signature": "export type FartherShoreInitOptions__d009c6effb6b = {\n    /** Explicit runtime token. Defaults to process.env.FS_RUNTIME_TOKEN. */\n    runtimeToken?: string;\n    /** Core base URL. Defaults to FS_CORE_URL or https://core.farthershore.com. */\n    coreUrl?: string;\n    /** Env map (tests). Defaults to process.env. */\n    env?: Record<string, string | undefined>;\n    /** Injectable fetch (tests). */\n    fetchImpl?: typeof fetch;\n    /** Optional advanced opt-outs (default: everything on). */\n    verification?: {\n        enabled?: boolean;\n    };\n    metering?: {\n        enabled?: boolean;\n    };\n    /** Embedded-cloudflared runner config (advanced opt-in; default DX is on). */\n    tunnel?: FartherShoreTunnelOptions__07694d2dbe44;\n    /** SDK metadata forwarded to bootstrap. */\n    instanceId?: string;\n    /**\n     * OPTIONAL HS256 secret(s) for the gateway's cv=2 `X-Fs-Context` claim — pure\n     * DEFENSE-IN-DEPTH, NOT required to derive identity. The consumer principal is\n     * always produced from the `X-Fs-Context` token whose bytes are vouched for by\n     * the Ed25519 request signature (the token's SHA-256 is bound into the signed\n     * canonical string). These secrets add a second, independent HS256 proof: when\n     * configured, a presented token must ALSO pass HS256 or the request is\n     * rejected. They are the GATEWAY CONTEXT-SIGNING keyring values\n     * (`CONTEXT_SIGNING_KEYS_JSON`; supply every live key during rotation —\n     * try-all), NOT the business's `contextTokenSecret` (which signs `fsc_`\n     * INGRESS tokens verified BY the gateway — setting that here would reject every\n     * valid gateway request). Defaults to `FS_CONTEXT_SECRETS` (comma-separated)\n     * from the env. Leaving it unset is the common case.\n     */\n    contextSecrets?: readonly string[];\n    /**\n     * OPTIONAL shared replay-prevention store. Not required: the signature's\n     * ~305s time window is the always-on defense, and the zero-config default is\n     * an in-memory per-process cache. Inject a shared atomic store (Redis /\n     * Memcached / Cloudflare KV / Durable Object) implementing {@link NonceStore}\n     * only if you want one-time-use enforced ACROSS replicas rather than within\n     * each one. `checkAndRemember` may be async, and should be TTL-bound to the\n     * signature validity window.\n     *\n     * If you do inject one, an outage of that store fails requests CLOSED — it\n     * never degrades to \"not a replay\".\n     */\n    nonceStore?: NonceStore__85b099a3f9b9;\n};",
        "source": "packages/backend/dist/types/core/runtime.d.ts#L21",
        "description": "",
        "references": [
          {
            "name": "FartherShoreTunnelOptions__07694d2dbe44",
            "source": "packages/backend/dist/types/core/runtime.d.ts#L9"
          },
          {
            "name": "NonceStore__85b099a3f9b9",
            "source": "packages/backend/dist/types/core/nonceCache.d.ts#L13"
          }
        ]
      },
      {
        "name": "FartherShoreRequestContext__fee40dd450e8",
        "signature": "export type FartherShoreRequestContext__fee40dd450e8 = {\n    requestId: string;\n    businessId: string;\n    backendId: string;\n    routeId: string;\n    policyVersion: string;\n    timestamp: number;\n    bodyHash: string;\n    /** Filled by the host bootstrap layer (tenant/customer), not by verify. */\n    tenantId?: string;\n    customerId?: string;\n    meters?: string[];\n    features?: Record<string, unknown>;\n    /**\n     * The verified CONSUMER PRINCIPAL behind this request (consumer-principal\n     * wave, D3) — derived from the cv=2 `X-Fs-Context` whose bytes are vouched for\n     * by the Ed25519 request signature (the token hash is bound into the canonical\n     * signing string). OPTIONAL on this raw `fs.middleware()` path: a valid gateway\n     * request MAY be identity-less (no `X-Fs-Context` — the gateway signs an\n     * empty context hash), in which case there is no principal to resolve. This\n     * field is typed honestly here; the `fs.handler()` path (createExpressHandler)\n     * is where the GUARANTEED non-optional principal lives — it rejects an\n     * identity-less request with `401 principal_required` before the callback runs.\n     * Use {@link requireMember} to narrow to the member arm on member-only routes.\n     */\n    principal?: ConsumerPrincipal__16f951b9786d;\n    /**\n     * Managed-RBAC permissions the gateway resolved for the acting subject —\n     * sourced ONLY from the VERIFIED signed `X-Fs-Context` claim (the unsigned\n     * `x-fs-permissions` fallback is GONE). `undefined` when the claim was absent\n     * ⇒ FAR-723 carrier-level DENY; `[]` for an authenticated subject with no\n     * grants. Read via {@link hasPermission} / {@link requirePermission}.\n     */\n    permissions?: string[];\n    /** Exact current-G product permissions default-allowed for this request. */\n    unassignedProductPermissions?: string[];\n    /** The VERIFIED signed cv=2 context payload. Its permissions/roles populated\n     *  the fields above; its claims derived {@link principal}. */\n    signedContext?: FartherShoreSignedContext__24c947c09583;\n    /** Managed-RBAC role keys the acting subject holds (display/audit only). */\n    roles?: string[];\n    /**\n     * THE reporting verb. `report({ meter, values, dims?, quote? })` reports\n     * MEASUREMENTS against the served identity this context already carries —\n     * there is no subscription/release argument to forget. The SDK picks the\n     * transport (signed in-band headers before the response is sent, the attested\n     * post-stream channel after it, or from a background job), so the builder\n     * never chooses one.\n     *\n     * Attached by the runtime facade. A context produced by the BARE\n     * `verifyRequest()` primitive has no metering channel, so its `report()`\n     * throws an error naming the fix rather than dropping the measurement.\n     */\n    report: ReportFn__89e79b33cabf;\n};",
        "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L24",
        "description": "The verified request context attached to req.fartherShore.",
        "references": [
          {
            "name": "ConsumerPrincipal__16f951b9786d",
            "source": "packages/backend/dist/types/core/verifyContext.d.ts#L8"
          },
          {
            "name": "FartherShoreSignedContext__24c947c09583",
            "source": "packages/backend/dist/types/core/verifyContext.d.ts#L33"
          },
          {
            "name": "ReportFn__89e79b33cabf",
            "source": "packages/backend/dist/types/core/report.d.ts#L115"
          }
        ]
      },
      {
        "name": "FartherShoreSignedContext__24c947c09583",
        "signature": "export type FartherShoreSignedContext__24c947c09583 = {\n    /** Claim-format version. This SDK understands ONLY cv=2 (consumer principal). */\n    cv: 2;\n    /** Resource owner: member id (member) or service account id (service). */\n    sub: string;\n    /** API key / service credential id, when the call is key-borne. */\n    client_id?: string;\n    /** Nested actor (on-behalf-of): personal-key traffic sets `{ sub: keyId }`. */\n    act?: {\n        sub: string;\n    };\n    /** The org (tenant) id. */\n    org: string;\n    businessId: string;\n    compiledPlanId: string;\n    subscriptionId: string;\n    subscriberId: string;\n    environmentId: string | null;\n    subjectKey: string;\n    /** Which subject arm this context resolves to. */\n    subjectKind: \"member\" | \"service\";\n    /** The org-owned service account id, for service subjects (mirror of `sub`). */\n    serviceAccountId?: string;\n    /** The bound role keys (absent when unminted). */\n    roles?: string[];\n    /** The unified-authz permission claim (absent when unminted). */\n    permissions?: string[];\n    /** Exact current-G product permissions default-allowed for this request. */\n    unassignedProductPermissions?: string[];\n};",
        "source": "packages/backend/dist/types/core/verifyContext.d.ts#L33",
        "description": "The cv=2 signed-context payload the gateway stamps into `X-Fs-Context`. Local\ncopy of the contracts `ConsumerContextClaims`. Identity rides the RFC 9068 /\nRFC 8693 claims (`sub`, `client_id`, `act`, `subjectKind`).",
        "references": []
      },
      {
        "name": "FartherShoreTunnelOptions__07694d2dbe44",
        "signature": "export type FartherShoreTunnelOptions__07694d2dbe44 = {\n    /** Opt out of the embedded cloudflared runner (e.g. sidecar mode). */\n    enabled?: boolean;\n    /** Injected spawner (tests/non-default hosts). Defaults to node:child_process. */\n    spawn?: SpawnFn__a4d2414f74db;\n    /** Explicit cloudflared binary path. */\n    binaryPath?: string;\n    /** Crash the host app if the tunnel cannot start. Default: fail-open. */\n    failClosed?: boolean;\n    /** Log sink for redacted cloudflared output. */\n    logger?: (line: string) => void;\n};",
        "source": "packages/backend/dist/types/core/runtime.d.ts#L9",
        "description": "Advanced opt-in tunnel config. The embedded runner is the default DX.",
        "references": [
          {
            "name": "SpawnFn__a4d2414f74db",
            "source": "packages/backend/dist/types/core/tunnel.d.ts#L25"
          }
        ]
      },
      {
        "name": "HeadersLike__89315298f855",
        "signature": "export type HeadersLike__89315298f855 = Headers | Record<string, string | string[] | undefined>;",
        "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L22",
        "description": "",
        "references": []
      },
      {
        "name": "MeasurementDimensions__e2d8137e24a6",
        "signature": "export type MeasurementDimensions__e2d8137e24a6 = Record<string, string>;",
        "source": "packages/backend/dist/types/core/report.d.ts#L5",
        "description": "Catalog selectors the measurement was produced under, keyed by dimension.",
        "references": []
      },
      {
        "name": "MeasurementValues__ab2d89ace8f2",
        "signature": "export type MeasurementValues__ab2d89ace8f2 = Record<string, number>;",
        "source": "packages/backend/dist/types/core/report.d.ts#L3",
        "description": "Observed measurement values, keyed by measure key.",
        "references": []
      },
      {
        "name": "NonceStore__85b099a3f9b9",
        "signature": "export interface NonceStore__85b099a3f9b9 {\n    checkAndRemember(id: string): boolean | Promise<boolean>;\n}",
        "source": "packages/backend/dist/types/core/nonceCache.d.ts#L13",
        "description": "Replay-prevention store contract. `checkAndRemember(id)` returns `true` if\n`id` was already seen (a REPLAY) and `false` on first sight (recording it).\n\nThe default {@link NonceCache} is IN-MEMORY and PER-PROCESS: it prevents\nreplay against a single instance only. A multi-replica backend where a\ncaptured, still-valid signed request is replayed to a DIFFERENT replica needs\na SHARED store (Redis/Memcached/Cloudflare KV/Durable Object) — inject one via\n`FartherShoreInitOptions.nonceStore`. `checkAndRemember` may be async so a\nnetwork-backed store can be awaited. (Time-bounding still caps the exposure\nto the signature's ~300s validity window regardless of the store.)",
        "references": []
      },
      {
        "name": "ReconcileResult__9286f3220e09",
        "signature": "export interface ReconcileResult__9286f3220e09 {\n    /** Reflected surface matched the declared lock. */\n    inSync: boolean;\n    /** A drift report was sent. */\n    reportedDrift: boolean;\n    /** Route ids confirmed served (pending → clearable). */\n    confirmedRouteIds: string[];\n    /** A report sink call failed (swallowed — boot never blocks on it). */\n    reportError?: string;\n}",
        "source": "packages/backend/dist/types/reflect/reconcile.d.ts#L23",
        "description": "",
        "references": []
      },
      {
        "name": "ReplayProtectionDiagnostic__a3a9ef1278f1",
        "signature": "export type ReplayProtectionDiagnostic__a3a9ef1278f1 = {\n    mode: ReplayProtectionMode__c5da7b084f0a;\n    /** True when replay is enforced across every replica, not just this process. */\n    crossReplica: boolean;\n};",
        "source": "packages/backend/dist/types/core/replay-protection.d.ts#L4",
        "description": "",
        "references": [
          {
            "name": "ReplayProtectionMode__c5da7b084f0a",
            "source": "packages/backend/dist/types/core/replay-protection.d.ts#L3"
          }
        ]
      },
      {
        "name": "ReplayProtectionMode__c5da7b084f0a",
        "signature": "export type ReplayProtectionMode__c5da7b084f0a = \"shared\" | \"single-instance\";",
        "source": "packages/backend/dist/types/core/replay-protection.d.ts#L3",
        "description": "How far one-time-use enforcement actually reaches.",
        "references": []
      },
      {
        "name": "ReportFn__89e79b33cabf",
        "signature": "export type ReportFn__89e79b33cabf = (input: ReportInput__0f8959765e13 | readonly ReportInput__0f8959765e13[]) => Promise<ReportResult__1d967fd166a1>;",
        "source": "packages/backend/dist/types/core/report.d.ts#L115",
        "description": "`report()` accepts one measurement or an ARRAY of measurements. The array\nform is the sanctioned way to report several meters after the response is\nsent: one served request owns exactly ONE post-stream callback identity, so\nsequential awaited single reports after the first flush cannot be delivered\n— a batch rides the single callback atomically. All entries of a batch\nshare one quote (at most one distinct quote may be supplied).",
        "references": [
          {
            "name": "ReportInput__0f8959765e13",
            "source": "packages/backend/dist/types/core/report.d.ts#L28"
          },
          {
            "name": "ReportResult__1d967fd166a1",
            "source": "packages/backend/dist/types/core/report.d.ts#L53"
          }
        ]
      },
      {
        "name": "ReportInput__0f8959765e13",
        "signature": "export type ReportInput__0f8959765e13 = {\n    /** Meter key as declared in the business release (plain string at the wire). */\n    meter: string;\n    /** Observed values keyed by measure key, e.g. `{ input_tokens: 1200 }`. */\n    values: MeasurementValues__ab2d89ace8f2;\n    /** Catalog selectors, e.g. `{ model: \"acme-4\", cache_status: \"hit\" }`. */\n    dims?: MeasurementDimensions__e2d8137e24a6;\n    /**\n     * OPTIONAL money proposal for a `backendQuoted` pricing rule: a PER-UNIT\n     * rate in nanodollars (multiplied by the measured quantity — never a\n     * total). Opaque at the authoring boundary (a job result carries it through\n     * untyped); validated against {@link QuoteInput} here and transmitted as a\n     * {@link QuoteProposal}. Applies to every backend-quoted component of this\n     * report; ignored by rules that are not backend-quoted.\n     */\n    quote?: unknown;\n};",
        "source": "packages/backend/dist/types/core/report.d.ts#L28",
        "description": "One measurement report. The complete argument surface of the verb.",
        "references": [
          {
            "name": "MeasurementDimensions__e2d8137e24a6",
            "source": "packages/backend/dist/types/core/report.d.ts#L5"
          },
          {
            "name": "MeasurementValues__ab2d89ace8f2",
            "source": "packages/backend/dist/types/core/report.d.ts#L3"
          }
        ]
      },
      {
        "name": "ReportResult__1d967fd166a1",
        "signature": "export type ReportResult__1d967fd166a1 = {\n    ok: true;\n    transport: ReportTransport__0721adbb43b4;\n} | {\n    ok: false;\n    transport: ReportTransport__0721adbb43b4;\n    reason: string;\n    /** The PLATFORM's error code, when the failure came back in a response\n     *  body (e.g. `post_stream_request_not_found`). Absent for local faults.\n     *  Surfaced so a builder can act on the cause without wrapping fetch. */\n    code?: string;\n    /** The platform's own error message, verbatim. */\n    message?: string;\n    /** HTTP status of the final delivery attempt, when there was one. */\n    status?: number;\n};",
        "source": "packages/backend/dist/types/core/report.d.ts#L53",
        "description": "Delivery outcome. Validation faults THROW (a malformed report is a builder\nbug worth surfacing); delivery faults resolve `ok: false` so a metering\nhiccup never breaks the builder's endpoint. A served request may own only\none post-stream callback identity, so later calls fail explicitly.",
        "references": [
          {
            "name": "ReportTransport__0721adbb43b4",
            "source": "packages/backend/dist/types/core/report.d.ts#L46"
          }
        ]
      },
      {
        "name": "ReportTransport__0721adbb43b4",
        "signature": "export type ReportTransport__0721adbb43b4 = \"in_band\" | \"post_stream\";",
        "source": "packages/backend/dist/types/core/report.d.ts#L46",
        "description": "Which channel actually carried the measurement.",
        "references": []
      },
      {
        "name": "ResponseSink__b746e2445083",
        "signature": "export type ResponseSink__b746e2445083 = {\n    /** True while headers can still be stamped onto the outgoing response. */\n    canStampHeaders(): boolean;\n    /** Stamp the signed metering headers onto the outgoing response. */\n    stampHeaders(headers: Record<string, string>): void;\n};",
        "source": "packages/backend/dist/types/core/report.d.ts#L78",
        "description": "The transport seam a host adapter supplies for the in-band lane.",
        "references": []
      },
      {
        "name": "RUNTIME_HEADER_NAMES__adc010c1041a",
        "signature": "declare const RUNTIME_HEADER_NAMES__adc010c1041a: {\n    readonly signature: \"x-fs-signature\";\n    readonly keyId: \"x-fs-key-id\";\n    readonly requestId: \"x-fs-request-id\";\n    readonly timestamp: \"x-fs-timestamp\";\n    readonly businessId: \"x-fs-business-id\";\n    readonly backendId: \"x-fs-backend-id\";\n    readonly routeId: \"x-fs-route-id\";\n    readonly policyVersion: \"x-fs-policy-version\";\n    readonly bodyHash: \"x-fs-body-hash\";\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L126",
        "description": "",
        "references": []
      },
      {
        "name": "RUNTIME_TOKEN_OPERATIONS__1b6bc2f07e6d",
        "signature": "declare const RUNTIME_TOKEN_OPERATIONS__1b6bc2f07e6d: readonly [\"gateway_verification\", \"metering\", \"health\", \"tunnel\", \"drift_report\"];",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L124",
        "description": "",
        "references": []
      },
      {
        "name": "RUNTIME_TOKEN_PREFIXES__449e80fc59d4",
        "signature": "declare const RUNTIME_TOKEN_PREFIXES__449e80fc59d4: {\n    readonly live: \"fsrt_live_\";\n    readonly test: \"fsrt_test_\";\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L119",
        "description": "",
        "references": []
      },
      {
        "name": "RuntimeBootstrapResponse__aecc7a0d671f",
        "signature": "export type RuntimeBootstrapResponse__aecc7a0d671f = {\n    business: {\n        id: string;\n        slug: string;\n    };\n    backend: {\n        id: string;\n        slug: string;\n        name: string;\n    };\n    /**\n     * Every backend id this token may serve, across ALL of the business's\n     * environments — `backend.id` is always a member.\n     *\n     * One deployment holds exactly one `FS_RUNTIME_TOKEN`, so an\n     * environment-scoped token forced a SEPARATE deployment per environment:\n     * serving a preview env meant repointing (and breaking) production. A\n     * business-scoped token serves every environment from one deployment, and the\n     * SDK checks the gateway's signed backend id for MEMBERSHIP of this set\n     * rather than equality with a single id.\n     *\n     * Optional and additive: an older core omits it and the SDK falls back to the\n     * single-id equality check.\n     */\n    backendIds?: string[];\n    environment: {\n        id: string | null;\n        kind: RuntimeEnvironmentKind__ac9ea026fbe7;\n    };\n    operations: RuntimeTokenOperation__29f1e3868c88[];\n    verification: RuntimeVerificationConfig__5494b13a9008;\n    metering: RuntimeMeteringConfig__3d27722db6c2;\n    transport: RuntimeTransportConfig__7254e971c589;\n    routes: RuntimeRouteDescriptor__48a862559af0[];\n    /** Reflected route-surface lock (surfaceHash + version). Present once core\n     *  serves it; `fs.ready()` diffs the reflected surface against it. */\n    lock?: RuntimeLockDescriptor__0d22ecd0bb58;\n    policyVersion: string;\n    refreshAfterSeconds: number;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L228",
        "description": "",
        "references": [
          {
            "name": "RuntimeEnvironmentKind__ac9ea026fbe7",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L180"
          },
          {
            "name": "RuntimeLockDescriptor__0d22ecd0bb58",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L224"
          },
          {
            "name": "RuntimeMeteringConfig__3d27722db6c2",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L195"
          },
          {
            "name": "RuntimeRouteDescriptor__48a862559af0",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L214"
          },
          {
            "name": "RuntimeTokenOperation__29f1e3868c88",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L125"
          },
          {
            "name": "RuntimeTransportConfig__7254e971c589",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L203"
          },
          {
            "name": "RuntimeVerificationConfig__5494b13a9008",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L188"
          }
        ]
      },
      {
        "name": "RuntimeEnvironmentKind__ac9ea026fbe7",
        "signature": "export type RuntimeEnvironmentKind__ac9ea026fbe7 = RuntimeTokenKind__821c369e851d;",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L180",
        "description": "",
        "references": [
          {
            "name": "RuntimeTokenKind__821c369e851d",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L123"
          }
        ]
      },
      {
        "name": "RuntimeHealthReport__0174b488600d",
        "signature": "export type RuntimeHealthReport__0174b488600d = {\n    runtimeToken: boolean;\n    bootstrap: boolean;\n    tunnel: string | null;\n    verification: boolean;\n    metering: boolean;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L306",
        "description": "",
        "references": []
      },
      {
        "name": "RuntimeLockDescriptor__0d22ecd0bb58",
        "signature": "export type RuntimeLockDescriptor__0d22ecd0bb58 = {\n    surfaceHash: string;\n    lockVersion: number;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L224",
        "description": "The declared route-surface lock the backend reconciles against at startup.",
        "references": []
      },
      {
        "name": "RuntimeMeteringConfig__3d27722db6c2",
        "signature": "export type RuntimeMeteringConfig__3d27722db6c2 = {\n    enabled: boolean;\n    endpoint: string;\n    credential: string;\n    allowedMeters: string[];\n    allowedRoutes: string[];\n    perEventMax: number;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L195",
        "description": "",
        "references": []
      },
      {
        "name": "RuntimeRouteDescriptor__48a862559af0",
        "signature": "export type RuntimeRouteDescriptor__48a862559af0 = {\n    id: string;\n    method: string;\n    path: string;\n    backendId: string;\n    /** Declared-but-not-yet-confirmed-served route. `fs.ready()` confirms the ones\n     *  this replica actually serves so core can clear the flag and publish. */\n    pending?: boolean;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L214",
        "description": "",
        "references": []
      },
      {
        "name": "RuntimeTokenKind__821c369e851d",
        "signature": "export type RuntimeTokenKind__821c369e851d = keyof typeof RUNTIME_TOKEN_PREFIXES__449e80fc59d4;",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L123",
        "description": "",
        "references": [
          {
            "name": "RUNTIME_TOKEN_PREFIXES__449e80fc59d4",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L119"
          }
        ]
      },
      {
        "name": "RuntimeTokenOperation__29f1e3868c88",
        "signature": "export type RuntimeTokenOperation__29f1e3868c88 = (typeof RUNTIME_TOKEN_OPERATIONS__1b6bc2f07e6d)[number];",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L125",
        "description": "",
        "references": [
          {
            "name": "RUNTIME_TOKEN_OPERATIONS__1b6bc2f07e6d",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L124"
          }
        ]
      },
      {
        "name": "RuntimeTransportConfig__7254e971c589",
        "signature": "export type RuntimeTransportConfig__7254e971c589 = {\n    mode: TransportMode__341e38853a53;\n    runner: TransportRunner__21383ffda4d0 | null;\n    originUrl?: string;\n    originHostname?: string;\n    localTarget?: string;\n    cloudflared?: {\n        tunnelToken: string;\n        version: string;\n    };\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L203",
        "description": "",
        "references": [
          {
            "name": "TransportMode__341e38853a53",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L181"
          },
          {
            "name": "TransportRunner__21383ffda4d0",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L182"
          }
        ]
      },
      {
        "name": "RuntimeVerificationConfig__5494b13a9008",
        "signature": "export type RuntimeVerificationConfig__5494b13a9008 = {\n    required: boolean;\n    jwksUrl: string;\n    clockSkewSeconds: number;\n    replayWindowSeconds: number;\n    headerNames: typeof RUNTIME_HEADER_NAMES__adc010c1041a;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L188",
        "description": "",
        "references": [
          {
            "name": "RUNTIME_HEADER_NAMES__adc010c1041a",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L126"
          }
        ]
      },
      {
        "name": "SpawnedTunnelProcess__65f87a1c4fc6",
        "signature": "export interface SpawnedTunnelProcess__65f87a1c4fc6 {\n    readonly stdout: StdioStream__d26eea00aaf1 | null;\n    readonly stderr: StdioStream__d26eea00aaf1 | null;\n    readonly pid?: number;\n    /** Register the process-exit handler. */\n    on(event: \"exit\", listener: (code: number | null, signal: NodeJS.Signals | null) => void): unknown;\n    /** Signal the child to stop. */\n    kill(signal?: NodeJS.Signals | number): boolean;\n}",
        "source": "packages/backend/dist/types/core/tunnel.d.ts#L11",
        "description": "The minimal child-process surface the supervisor needs. A real\n`child_process.ChildProcess` satisfies this; tests pass a fake. We deliberately\ndo NOT depend on the full ChildProcess type so the spawner stays injectable and\nthe SDK does not pull a Node-only process model into the language-neutral core.",
        "references": [
          {
            "name": "StdioStream__d26eea00aaf1",
            "source": "packages/backend/dist/types/core/tunnel.d.ts#L4"
          }
        ]
      },
      {
        "name": "SpawnFn__a4d2414f74db",
        "signature": "export type SpawnFn__a4d2414f74db = (command: string, args: string[], options?: {\n    env?: NodeJS.ProcessEnv;\n}) => SpawnedTunnelProcess__65f87a1c4fc6;",
        "source": "packages/backend/dist/types/core/tunnel.d.ts#L25",
        "description": "The injected spawner port. In production this is a thin wrapper over\n`child_process.spawn`; in tests it is a fake that records argv. It MUST NOT be\npassed `local_target` — routing is owned by Cloudflare.",
        "references": [
          {
            "name": "SpawnedTunnelProcess__65f87a1c4fc6",
            "source": "packages/backend/dist/types/core/tunnel.d.ts#L11"
          }
        ]
      },
      {
        "name": "StdioStream__d26eea00aaf1",
        "signature": "type StdioStream__d26eea00aaf1 = Pick<EventEmitter, \"on\">;",
        "source": "packages/backend/dist/types/core/tunnel.d.ts#L4",
        "description": "A line emitter — the subset of a child stdio stream we consume.",
        "references": []
      },
      {
        "name": "TransportMode__341e38853a53",
        "signature": "export type TransportMode__341e38853a53 = \"direct\" | \"tunnel\";",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L181",
        "description": "",
        "references": []
      },
      {
        "name": "TransportRunner__21383ffda4d0",
        "signature": "export type TransportRunner__21383ffda4d0 = \"embedded\" | \"sidecar\";",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L182",
        "description": "",
        "references": []
      },
      {
        "name": "VerifyRequestHostOptions__981e9466821d",
        "signature": "export type VerifyRequestHostOptions__981e9466821d = {\n    responseSink?: ResponseSink__b746e2445083;\n};",
        "source": "packages/backend/dist/types/core/runtime.d.ts#L76",
        "description": "Host-adapter seams for `verifyRequest`. An adapter that owns the outgoing\nresponse (the Express middleware) supplies a {@link ResponseSink} so\n`ctx.report()` can choose the zero-network in-band header transport while the\nresponse is still open. Without one, reports take the post-stream channel.",
        "references": [
          {
            "name": "ResponseSink__b746e2445083",
            "source": "packages/backend/dist/types/core/report.d.ts#L78"
          }
        ]
      },
      {
        "name": "VerifyRequestInput__5a17124b6df7",
        "signature": "export type VerifyRequestInput__5a17124b6df7 = {\n    method: string;\n    /** Path only (no host, no query). */\n    path: string;\n    /** Raw query string (with or without leading '?'); \"\" when absent. */\n    query?: string;\n    headers: HeadersLike__89315298f855;\n    /** Raw request bytes captured pre-parser; null/undefined for empty body. */\n    body?: Uint8Array | null;\n    /**\n     * True when the request is body-hash-exempt (streaming). The signed hash must\n     * then be the STREAM sentinel and the body is not hashed (size cap still\n     * applies upstream).\n     */\n    streamingExempt?: boolean;\n};",
        "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L6",
        "description": "Per-request input. `headers` keys are matched case-insensitively.",
        "references": [
          {
            "name": "HeadersLike__89315298f855",
            "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L22"
          }
        ]
      }
    ],
    "generated/backend-sdk/reflect": [
      {
        "name": "ReflectedRoute__a5f4bc3646ed",
        "signature": "export interface ReflectedRoute__a5f4bc3646ed {\n    method: string;\n    path: string;\n}",
        "source": "packages/backend/dist/types/reflect/route-canon.d.ts#L2",
        "description": "A reflected route — method + canonical path. Mirrors contracts ReflectedRoute.",
        "references": []
      }
    ],
    "generated/backend-sdk/runtime": [],
    "generated/backend-sdk/testing": [
      {
        "name": "CanonicalSigningInput__d7cf4cea4ad9",
        "signature": "export type CanonicalSigningInput__d7cf4cea4ad9 = {\n    /** HTTP method; canonicalized to upper-case. */\n    method: string;\n    /** Request path (no host, no query). */\n    path: string;\n    /** Raw query string (without leading '?'), or \"\" when absent. */\n    query: string;\n    /** Lowercase-hex SHA-256 of the raw body, EMPTY_BODY_SHA256, or \"STREAM\". */\n    bodyHash: string;\n    /** Gateway-minted request id (also the replay nonce). */\n    requestId: string;\n    /** Unix epoch seconds at signing time. */\n    timestamp: number;\n    businessId: string;\n    backendId: string;\n    /** Resolved route id; \"\" when unresolved. */\n    routeId: string;\n    policyVersion: string;\n    /**\n     * Consumer-principal wave (D3) — SHA-256 hex of the presented `X-Fs-Context`\n     * JWT string, or the SHA-256 of the EMPTY string when context signing is off.\n     * Bound into the canonical string so one request-signature verification\n     * covers both the request and the identity context. Compute via\n     * {@link hashContextToken}.\n     */\n    contextHash: string;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L153",
        "description": "The signed claim set. Field VALUES are language-neutral strings/integers;\nthe canonical serialization (in runtime-signing.ts) pins the wire bytes.",
        "references": []
      },
      {
        "name": "ConsumerPrincipal__16f951b9786d",
        "signature": "export type ConsumerPrincipal__16f951b9786d = {\n    org: {\n        id: string;\n    };\n    subject: {\n        kind: \"member\";\n        /** The member's stable internal id (never an IdP subject/email). */\n        memberId: string;\n        /** How this request's identity was proven. */\n        via: \"session\" | \"api_key\";\n        /** The personal `fsk_` key id when `via === \"api_key\"` (audit). */\n        keyId?: string;\n    } | {\n        kind: \"service\";\n        /** The org-owned service account id — the stable service identity. */\n        serviceAccountId: string;\n        /** The specific service `fsk_` key id (rotates; audit). */\n        keyId: string;\n    };\n};",
        "source": "packages/backend/dist/types/core/verifyContext.d.ts#L8",
        "description": "The verified consumer principal derived from the cv=2 signed context — a\ntenant (`org`) plus exactly one subject. Local copy of the contracts\n`ConsumerPrincipal` (the SDK never leaks `@farthershore/contracts` into a\npublic type signature; see runtime-signing.ts).",
        "references": []
      },
      {
        "name": "ExpressMiddleware__416c4ad228c7",
        "signature": "export type ExpressMiddleware__416c4ad228c7 = (req: ExpressRequestLike__f93080abdbb9, res: ExpressResponseLike__7a6dd95793e1, next: ExpressNext__c3f550fc71bd) => void;",
        "source": "packages/backend/dist/types/adapters/express.d.ts#L30",
        "description": "",
        "references": [
          {
            "name": "ExpressNext__c3f550fc71bd",
            "source": "packages/backend/dist/types/adapters/express.d.ts#L29"
          },
          {
            "name": "ExpressRequestLike__f93080abdbb9",
            "source": "packages/backend/dist/types/adapters/express.d.ts#L5"
          },
          {
            "name": "ExpressResponseLike__7a6dd95793e1",
            "source": "packages/backend/dist/types/adapters/express.d.ts#L17"
          }
        ]
      },
      {
        "name": "ExpressNext__c3f550fc71bd",
        "signature": "export type ExpressNext__c3f550fc71bd = (err?: unknown) => void;",
        "source": "packages/backend/dist/types/adapters/express.d.ts#L29",
        "description": "",
        "references": []
      },
      {
        "name": "ExpressRequestLike__f93080abdbb9",
        "signature": "export type ExpressRequestLike__f93080abdbb9 = {\n    method: string;\n    /** Original URL incl. query, e.g. \"/v1/x?a=1\". */\n    originalUrl?: string;\n    url?: string;\n    path?: string;\n    headers: Record<string, string | string[] | undefined>;\n    /** Raw body bytes if captured by an upstream raw parser. */\n    rawBody?: Buffer | Uint8Array;\n    body?: unknown;\n    fartherShore?: FartherShoreRequestContext__fee40dd450e8;\n};",
        "source": "packages/backend/dist/types/adapters/express.d.ts#L5",
        "description": "Minimal Express-shaped types so we don't hard-depend on",
        "references": [
          {
            "name": "FartherShoreRequestContext__fee40dd450e8",
            "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L24"
          }
        ]
      },
      {
        "name": "ExpressResponseLike__7a6dd95793e1",
        "signature": "export type ExpressResponseLike__7a6dd95793e1 = {\n    status(code: number): ExpressResponseLike__7a6dd95793e1;\n    json(body: unknown): unknown;\n    setHeader(name: string, value: string): void;\n    /**\n     * Node's `ServerResponse.headersSent`. This is what makes the reporting verb's\n     * transport choice AUTOMATIC: while it is false the measurement rides signed\n     * response headers (no network call); once the response is on the wire\n     * `ctx.report()` transparently switches to the post-stream channel.\n     */\n    headersSent?: boolean;\n};",
        "source": "packages/backend/dist/types/adapters/express.d.ts#L17",
        "description": "",
        "references": []
      },
      {
        "name": "FartherShore__b6398b2ddfc7",
        "signature": "export declare class FartherShore__b6398b2ddfc7 {\n    private readonly bootstrapClient;\n    private readonly fetchImpl;\n    private readonly verificationEnabled;\n    private readonly meteringEnabledOverride;\n    private readonly runtimeToken;\n    private readonly coreUrl;\n    private readonly instanceId?;\n    private readonly tunnelOptions;\n    /** OPTIONAL HS256 secret(s) — defense-in-depth over the cv=2 X-Fs-Context. */\n    private readonly contextSecrets;\n    private readonly nonceCache;\n    private readonly replayProtectionDiagnostic;\n    private readonly shutdownManager;\n    /** Bounds the on-demand bootstrap refreshes an unknown route id can trigger. */\n    private readonly routeRefreshLimiter;\n    private jwks;\n    private postStreamUsageClient;\n    private tunnel;\n    private bootstrapped;\n    constructor(options?: FartherShoreInitOptions__d009c6effb6b);\n    /** Ensure bootstrap config is loaded; build the JWKS + metering clients. */\n    ensureBootstrapped(): Promise<RuntimeBootstrapResponse__aecc7a0d671f>;\n    /**\n     * Boot-time route reconciliation (call once, before `listen()`). Reflects the\n     * app's real route surface, diffs it against the declared lock from bootstrap,\n     * REPORTS drift to the platform, and CONFIRMS the declared `pending` routes\n     * this replica serves. Fail-OPEN: never throws / never blocks boot.\n     *\n     * The reflection code is dynamically imported so it stays OFF the per-request\n     * verification hot path (the runtime stays route-unaware there). The report is\n     * an OUTBOUND backend→core call (same channel as bootstrap/metering), so it\n     * works for every transport (direct / tunnel).\n     *\n     * Returns the reconcile result (or null if reflection is unavailable / boot\n     * reporting failed). v1 reflects Express; `app` omitted → no-op.\n     */\n    ready(app?: unknown): Promise<ReconcileResult__9286f3220e09 | null>;\n    /** Outbound report sink for `ready()` — runtime-token-authed POSTs to core. */\n    private buildReportSink;\n    /**\n     * Framework-neutral verification primitive. Fail-closed: throws a typed\n     * FartherShoreError on any verification failure. Returns the verified context.\n     */\n    verifyRequest(input: VerifyRequestInput__5a17124b6df7, options?: VerifyRequestHostOptions__981e9466821d): Promise<FartherShoreRequestContext__fee40dd450e8>;\n    /**\n     * Bind the ONE reporting verb to a verified context. Identity comes from the\n     * context (`signedContext.subscriptionId` + `requestId`) — never from the\n     * caller — so a handler cannot forget it, and a background job that is handed\n     * this context keeps reporting against the SAME served identity.\n     */\n    private buildReportFn;\n    /** Whether verification is required (bootstrap × opt-out). */\n    verificationRequired(): Promise<boolean>;\n    /**\n     * Start the embedded runner. For a `tunnel` backend whose runner is\n     * `embedded`, this supervises `cloudflared` as a child process\n     * (spawned via the injected/default spawner) using the tunnel token from\n     * bootstrap. For every other transport (`direct`, or the `sidecar` runner)\n     * it is a no-op — there is no SDK-managed process to run.\n     *\n     * Fail-open by default: a tunnel that cannot start does NOT crash the host app\n     * (request verification stays fail-closed regardless — a different axis).\n     */\n    start(): Promise<void>;\n    /**\n     * PRIVATE transport for the post-stream lane of `ctx.report()`. Never rejects\n     * — a metering hiccup must not break a builder's endpoint. This is machinery,\n     * not surface: the ONE public reporting verb is `ctx.report()`.\n     */\n    private reportPostStreamUsage;\n    /**\n     * How far replay protection actually reaches — `\"shared\"` (enforced across\n     * every replica) or `\"single-instance\"` (this process only). Deployment\n     * diagnostic: log it at boot, or assert on it in a smoke test, so the mode is\n     * never a surprise. See {@link FartherShoreInitOptions.nonceStore}.\n     */\n    replayProtection(): ReplayProtectionDiagnostic__a3a9ef1278f1;\n    /** Current local health report. */\n    health(): RuntimeHealthReport__0174b488600d;\n    /** Graceful shutdown: flush metering + send a stopping heartbeat. */\n    shutdown(): Promise<void>;\n    /** Register an additional shutdown hook (e.g. the cloudflared supervisor). */\n    onShutdown(hook: () => Promise<void> | void): void;\n}",
        "source": "packages/backend/dist/types/core/runtime.d.ts#L84",
        "description": "The runtime instance. Lazily bootstraps; holds the JWKS client, nonce cache,\nmetering buffer, and shutdown hooks.",
        "references": [
          {
            "name": "FartherShoreInitOptions__d009c6effb6b",
            "source": "packages/backend/dist/types/core/runtime.d.ts#L21"
          },
          {
            "name": "FartherShoreRequestContext__fee40dd450e8",
            "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L24"
          },
          {
            "name": "ReconcileResult__9286f3220e09",
            "source": "packages/backend/dist/types/reflect/reconcile.d.ts#L23"
          },
          {
            "name": "ReplayProtectionDiagnostic__a3a9ef1278f1",
            "source": "packages/backend/dist/types/core/replay-protection.d.ts#L4"
          },
          {
            "name": "RuntimeBootstrapResponse__aecc7a0d671f",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L228"
          },
          {
            "name": "RuntimeHealthReport__0174b488600d",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L306"
          },
          {
            "name": "VerifyRequestHostOptions__981e9466821d",
            "source": "packages/backend/dist/types/core/runtime.d.ts#L76"
          },
          {
            "name": "VerifyRequestInput__5a17124b6df7",
            "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L6"
          }
        ]
      },
      {
        "name": "FartherShoreInitOptions__d009c6effb6b",
        "signature": "export type FartherShoreInitOptions__d009c6effb6b = {\n    /** Explicit runtime token. Defaults to process.env.FS_RUNTIME_TOKEN. */\n    runtimeToken?: string;\n    /** Core base URL. Defaults to FS_CORE_URL or https://core.farthershore.com. */\n    coreUrl?: string;\n    /** Env map (tests). Defaults to process.env. */\n    env?: Record<string, string | undefined>;\n    /** Injectable fetch (tests). */\n    fetchImpl?: typeof fetch;\n    /** Optional advanced opt-outs (default: everything on). */\n    verification?: {\n        enabled?: boolean;\n    };\n    metering?: {\n        enabled?: boolean;\n    };\n    /** Embedded-cloudflared runner config (advanced opt-in; default DX is on). */\n    tunnel?: FartherShoreTunnelOptions__07694d2dbe44;\n    /** SDK metadata forwarded to bootstrap. */\n    instanceId?: string;\n    /**\n     * OPTIONAL HS256 secret(s) for the gateway's cv=2 `X-Fs-Context` claim — pure\n     * DEFENSE-IN-DEPTH, NOT required to derive identity. The consumer principal is\n     * always produced from the `X-Fs-Context` token whose bytes are vouched for by\n     * the Ed25519 request signature (the token's SHA-256 is bound into the signed\n     * canonical string). These secrets add a second, independent HS256 proof: when\n     * configured, a presented token must ALSO pass HS256 or the request is\n     * rejected. They are the GATEWAY CONTEXT-SIGNING keyring values\n     * (`CONTEXT_SIGNING_KEYS_JSON`; supply every live key during rotation —\n     * try-all), NOT the business's `contextTokenSecret` (which signs `fsc_`\n     * INGRESS tokens verified BY the gateway — setting that here would reject every\n     * valid gateway request). Defaults to `FS_CONTEXT_SECRETS` (comma-separated)\n     * from the env. Leaving it unset is the common case.\n     */\n    contextSecrets?: readonly string[];\n    /**\n     * OPTIONAL shared replay-prevention store. Not required: the signature's\n     * ~305s time window is the always-on defense, and the zero-config default is\n     * an in-memory per-process cache. Inject a shared atomic store (Redis /\n     * Memcached / Cloudflare KV / Durable Object) implementing {@link NonceStore}\n     * only if you want one-time-use enforced ACROSS replicas rather than within\n     * each one. `checkAndRemember` may be async, and should be TTL-bound to the\n     * signature validity window.\n     *\n     * If you do inject one, an outage of that store fails requests CLOSED — it\n     * never degrades to \"not a replay\".\n     */\n    nonceStore?: NonceStore__85b099a3f9b9;\n};",
        "source": "packages/backend/dist/types/core/runtime.d.ts#L21",
        "description": "",
        "references": [
          {
            "name": "FartherShoreTunnelOptions__07694d2dbe44",
            "source": "packages/backend/dist/types/core/runtime.d.ts#L9"
          },
          {
            "name": "NonceStore__85b099a3f9b9",
            "source": "packages/backend/dist/types/core/nonceCache.d.ts#L13"
          }
        ]
      },
      {
        "name": "FartherShoreRequestContext__fee40dd450e8",
        "signature": "export type FartherShoreRequestContext__fee40dd450e8 = {\n    requestId: string;\n    businessId: string;\n    backendId: string;\n    routeId: string;\n    policyVersion: string;\n    timestamp: number;\n    bodyHash: string;\n    /** Filled by the host bootstrap layer (tenant/customer), not by verify. */\n    tenantId?: string;\n    customerId?: string;\n    meters?: string[];\n    features?: Record<string, unknown>;\n    /**\n     * The verified CONSUMER PRINCIPAL behind this request (consumer-principal\n     * wave, D3) — derived from the cv=2 `X-Fs-Context` whose bytes are vouched for\n     * by the Ed25519 request signature (the token hash is bound into the canonical\n     * signing string). OPTIONAL on this raw `fs.middleware()` path: a valid gateway\n     * request MAY be identity-less (no `X-Fs-Context` — the gateway signs an\n     * empty context hash), in which case there is no principal to resolve. This\n     * field is typed honestly here; the `fs.handler()` path (createExpressHandler)\n     * is where the GUARANTEED non-optional principal lives — it rejects an\n     * identity-less request with `401 principal_required` before the callback runs.\n     * Use {@link requireMember} to narrow to the member arm on member-only routes.\n     */\n    principal?: ConsumerPrincipal__16f951b9786d;\n    /**\n     * Managed-RBAC permissions the gateway resolved for the acting subject —\n     * sourced ONLY from the VERIFIED signed `X-Fs-Context` claim (the unsigned\n     * `x-fs-permissions` fallback is GONE). `undefined` when the claim was absent\n     * ⇒ FAR-723 carrier-level DENY; `[]` for an authenticated subject with no\n     * grants. Read via {@link hasPermission} / {@link requirePermission}.\n     */\n    permissions?: string[];\n    /** Exact current-G product permissions default-allowed for this request. */\n    unassignedProductPermissions?: string[];\n    /** The VERIFIED signed cv=2 context payload. Its permissions/roles populated\n     *  the fields above; its claims derived {@link principal}. */\n    signedContext?: FartherShoreSignedContext__24c947c09583;\n    /** Managed-RBAC role keys the acting subject holds (display/audit only). */\n    roles?: string[];\n    /**\n     * THE reporting verb. `report({ meter, values, dims?, quote? })` reports\n     * MEASUREMENTS against the served identity this context already carries —\n     * there is no subscription/release argument to forget. The SDK picks the\n     * transport (signed in-band headers before the response is sent, the attested\n     * post-stream channel after it, or from a background job), so the builder\n     * never chooses one.\n     *\n     * Attached by the runtime facade. A context produced by the BARE\n     * `verifyRequest()` primitive has no metering channel, so its `report()`\n     * throws an error naming the fix rather than dropping the measurement.\n     */\n    report: ReportFn__89e79b33cabf;\n};",
        "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L24",
        "description": "The verified request context attached to req.fartherShore.",
        "references": [
          {
            "name": "ConsumerPrincipal__16f951b9786d",
            "source": "packages/backend/dist/types/core/verifyContext.d.ts#L8"
          },
          {
            "name": "FartherShoreSignedContext__24c947c09583",
            "source": "packages/backend/dist/types/core/verifyContext.d.ts#L33"
          },
          {
            "name": "ReportFn__89e79b33cabf",
            "source": "packages/backend/dist/types/core/report.d.ts#L115"
          }
        ]
      },
      {
        "name": "FartherShoreSignedContext__24c947c09583",
        "signature": "export type FartherShoreSignedContext__24c947c09583 = {\n    /** Claim-format version. This SDK understands ONLY cv=2 (consumer principal). */\n    cv: 2;\n    /** Resource owner: member id (member) or service account id (service). */\n    sub: string;\n    /** API key / service credential id, when the call is key-borne. */\n    client_id?: string;\n    /** Nested actor (on-behalf-of): personal-key traffic sets `{ sub: keyId }`. */\n    act?: {\n        sub: string;\n    };\n    /** The org (tenant) id. */\n    org: string;\n    businessId: string;\n    compiledPlanId: string;\n    subscriptionId: string;\n    subscriberId: string;\n    environmentId: string | null;\n    subjectKey: string;\n    /** Which subject arm this context resolves to. */\n    subjectKind: \"member\" | \"service\";\n    /** The org-owned service account id, for service subjects (mirror of `sub`). */\n    serviceAccountId?: string;\n    /** The bound role keys (absent when unminted). */\n    roles?: string[];\n    /** The unified-authz permission claim (absent when unminted). */\n    permissions?: string[];\n    /** Exact current-G product permissions default-allowed for this request. */\n    unassignedProductPermissions?: string[];\n};",
        "source": "packages/backend/dist/types/core/verifyContext.d.ts#L33",
        "description": "The cv=2 signed-context payload the gateway stamps into `X-Fs-Context`. Local\ncopy of the contracts `ConsumerContextClaims`. Identity rides the RFC 9068 /\nRFC 8693 claims (`sub`, `client_id`, `act`, `subjectKind`).",
        "references": []
      },
      {
        "name": "FartherShoreTunnelOptions__07694d2dbe44",
        "signature": "export type FartherShoreTunnelOptions__07694d2dbe44 = {\n    /** Opt out of the embedded cloudflared runner (e.g. sidecar mode). */\n    enabled?: boolean;\n    /** Injected spawner (tests/non-default hosts). Defaults to node:child_process. */\n    spawn?: SpawnFn__a4d2414f74db;\n    /** Explicit cloudflared binary path. */\n    binaryPath?: string;\n    /** Crash the host app if the tunnel cannot start. Default: fail-open. */\n    failClosed?: boolean;\n    /** Log sink for redacted cloudflared output. */\n    logger?: (line: string) => void;\n};",
        "source": "packages/backend/dist/types/core/runtime.d.ts#L9",
        "description": "Advanced opt-in tunnel config. The embedded runner is the default DX.",
        "references": [
          {
            "name": "SpawnFn__a4d2414f74db",
            "source": "packages/backend/dist/types/core/tunnel.d.ts#L25"
          }
        ]
      },
      {
        "name": "HandlerOptions__89c221f2c3e0",
        "signature": "export type HandlerOptions__89c221f2c3e0 = {\n    /**\n     * Permission key the verified principal must hold (unified grammar:\n     * `*` / `<subject>:*` / exact — custom strings work). Checked with the\n     * FAIL-CLOSED carrier gate (`requirePermission`): an ABSENT permission set\n     * denies. On failure the wrapper responds `403 { error: \"permission_denied\" }`\n     * before the callback runs.\n     */\n    permission?: string;\n};",
        "source": "packages/backend/dist/types/adapters/express.d.ts#L91",
        "description": "Options for the `fs.handler(options, cb)` overload.",
        "references": []
      },
      {
        "name": "HeadersLike__89315298f855",
        "signature": "export type HeadersLike__89315298f855 = Headers | Record<string, string | string[] | undefined>;",
        "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L22",
        "description": "",
        "references": []
      },
      {
        "name": "Jwk__10747812bcb3",
        "signature": "export type Jwk__10747812bcb3 = JsonWebKey & {\n    kid?: string;\n};",
        "source": "packages/backend/dist/types/core/jwks.d.ts#L1",
        "description": "",
        "references": []
      },
      {
        "name": "JwksCacheState__075013cca763",
        "signature": "export type JwksCacheState__075013cca763 = \"fresh\" | \"soft_stale\" | \"hard_stale\" | \"cold\";",
        "source": "packages/backend/dist/types/core/jwks.d.ts#L5",
        "description": "Freshness of the key set backing a verification decision.",
        "references": []
      },
      {
        "name": "JwksClient__3bf9d241c5e2",
        "signature": "export declare class JwksClient__3bf9d241c5e2 {\n    private readonly jwksUrl;\n    private readonly fetchImpl;\n    private readonly cacheTtlMs;\n    private readonly hardStaleMs;\n    private readonly negativeCacheMs;\n    private readonly now;\n    private readonly onObservation;\n    private keysByKid;\n    private fetchedAt;\n    private hasFetchedOnce;\n    private inflight;\n    private readonly negativeKids;\n    constructor(options: JwksClientOptions__1aedfc6c12a8);\n    /**\n     * Resolve a public JWK for `kid`, fail-closed. Throws FartherShoreError with\n     * `jwks_unavailable` (cold cache, or a hard-stale cache whose refresh is\n     * failing) or `unknown_key_id`.\n     */\n    getKey(kid: string): Promise<Jwk__10747812bcb3>;\n    /** Record a confirmed-missing kid, evicting the oldest if at capacity. */\n    private rememberMissingKid;\n    private ageMs;\n    private isStale;\n    private isHardStale;\n    /** Current freshness of the cached key set. */\n    private cacheState;\n    private observe;\n    /** Fail closed when the cached key set is past the hard-stale ceiling. */\n    private assertWithinHardStale;\n    /** Single-flight refresh: concurrent callers share one fetch. */\n    private refresh;\n    private doFetch;\n    /**\n     * BOUNDED stale-while-revalidate. A COLD cache fails closed. A warm cache\n     * inside the soft window swallows the failure and keeps serving. Past the\n     * hard-stale ceiling it fails closed too — availability is worth a bounded\n     * window of degraded trust, not an unbounded one.\n     */\n    private handleRefreshFailure;\n}",
        "source": "packages/backend/dist/types/core/jwks.d.ts#L43",
        "description": "Caching JWKS client. Serves the last successful key set as a warm fallback\nwhile a refresh is failing, but only until {@link JwksClientOptions.hardStaleMs};\nfails closed on a cold cache and past the hard-stale ceiling.",
        "references": [
          {
            "name": "Jwk__10747812bcb3",
            "source": "packages/backend/dist/types/core/jwks.d.ts#L1"
          },
          {
            "name": "JwksClientOptions__1aedfc6c12a8",
            "source": "packages/backend/dist/types/core/jwks.d.ts#L19"
          }
        ]
      },
      {
        "name": "JwksClientOptions__1aedfc6c12a8",
        "signature": "export type JwksClientOptions__1aedfc6c12a8 = {\n    jwksUrl: string;\n    /** Injectable fetch (tests). Defaults to globalThis.fetch. */\n    fetchImpl?: typeof fetch;\n    /** How long a successful fetch stays fresh before a background refresh. */\n    cacheTtlMs?: number;\n    /**\n     * Hard ceiling on serving a key set whose refresh is failing. Past this age\n     * the client FAILS CLOSED rather than vouching for keys it can no longer\n     * confirm. Must be ≥ cacheTtlMs.\n     */\n    hardStaleMs?: number;\n    /** How long an unknown-kid result is negatively cached (avoids hammering). */\n    negativeCacheMs?: number;\n    /** Injectable clock (tests). */\n    now?: () => number;\n    /** Freshness//staleness observations for metrics. */\n    onObservation?: JwksObserver__4d7082fe0d6b;\n};",
        "source": "packages/backend/dist/types/core/jwks.d.ts#L19",
        "description": "",
        "references": [
          {
            "name": "JwksObserver__4d7082fe0d6b",
            "source": "packages/backend/dist/types/core/jwks.d.ts#L18"
          }
        ]
      },
      {
        "name": "JwksObservation__b0d7452a7cf1",
        "signature": "export type JwksObservation__b0d7452a7cf1 = {\n    state: JwksCacheState__075013cca763;\n    /** Age of the cached key set in ms (0 when cold). */\n    ageMs: number;\n    /** The `kid` being resolved, when the observation is tied to one. */\n    kid?: string;\n};",
        "source": "packages/backend/dist/types/core/jwks.d.ts#L6",
        "description": "",
        "references": [
          {
            "name": "JwksCacheState__075013cca763",
            "source": "packages/backend/dist/types/core/jwks.d.ts#L5"
          }
        ]
      },
      {
        "name": "JwksObserver__4d7082fe0d6b",
        "signature": "export type JwksObserver__4d7082fe0d6b = (observation: JwksObservation__b0d7452a7cf1) => void;",
        "source": "packages/backend/dist/types/core/jwks.d.ts#L18",
        "description": "Observability hook. Fires on every decision that depends on cache freshness,\nso an operator can alarm on `soft_stale` (Core is failing) long before\n`hard_stale` (requests are now being rejected).",
        "references": [
          {
            "name": "JwksObservation__b0d7452a7cf1",
            "source": "packages/backend/dist/types/core/jwks.d.ts#L6"
          }
        ]
      },
      {
        "name": "MeasurementDimensions__e2d8137e24a6",
        "signature": "export type MeasurementDimensions__e2d8137e24a6 = Record<string, string>;",
        "source": "packages/backend/dist/types/core/report.d.ts#L5",
        "description": "Catalog selectors the measurement was produced under, keyed by dimension.",
        "references": []
      },
      {
        "name": "MeasurementValues__ab2d89ace8f2",
        "signature": "export type MeasurementValues__ab2d89ace8f2 = Record<string, number>;",
        "source": "packages/backend/dist/types/core/report.d.ts#L3",
        "description": "Observed measurement values, keyed by measure key.",
        "references": []
      },
      {
        "name": "MiddlewareOptions__b16fbb0c44c2",
        "signature": "export type MiddlewareOptions__b16fbb0c44c2 = {\n    /**\n     * STRICT BY DEFAULT (`true`). Every request is verified FAIL-CLOSED and its\n     * inbound `x-fs-*` headers are stripped before the handler runs — the verified\n     * `req.fartherShore` context is the only identity source. The builder need not\n     * pass this: the gateway signs every request, and a missing/invalid signature\n     * or context is a `401`.\n     *\n     * Set `always: false` to instead DEFER to bootstrap's\n     * `verification.required` flag — when the backend contract does not require\n     * verification, the request passes through WITHOUT a context (and without\n     * stripping). This is an advanced escape hatch for a backend that intentionally\n     * consumes no identity; the secure default is strict.\n     */\n    always?: boolean;\n    /**\n     * Called when verification REJECTS a request, with the diagnostic detail that\n     * is deliberately withheld from the response body.\n     *\n     * The wire response is only `{ error: <code> }` (plus the error's `details`,\n     * if any) — several distinct causes share one code (`route_mismatch` covers\n     * both a business mismatch and a backend mismatch; an unserved route id is\n     * the separate `route_unknown`), and the specifics must not leak to an\n     * unauthenticated caller. But discarding them entirely leaves the operator\n     * with no way to tell which cause fired, in their OWN logs, for their OWN\n     * server. That is what this hook restores.\n     *\n     * Defaults to a one-line `console.warn`. Pass a function to route it into a\n     * structured logger, or `() => {}` to silence it.\n     */\n    onVerificationError?: (detail: {\n        code: string;\n        message: string;\n        status: number;\n        method: string;\n        path: string;\n    }) => void;\n};",
        "source": "packages/backend/dist/types/adapters/express.d.ts#L31",
        "description": "",
        "references": []
      },
      {
        "name": "NonceStore__85b099a3f9b9",
        "signature": "export interface NonceStore__85b099a3f9b9 {\n    checkAndRemember(id: string): boolean | Promise<boolean>;\n}",
        "source": "packages/backend/dist/types/core/nonceCache.d.ts#L13",
        "description": "Replay-prevention store contract. `checkAndRemember(id)` returns `true` if\n`id` was already seen (a REPLAY) and `false` on first sight (recording it).\n\nThe default {@link NonceCache} is IN-MEMORY and PER-PROCESS: it prevents\nreplay against a single instance only. A multi-replica backend where a\ncaptured, still-valid signed request is replayed to a DIFFERENT replica needs\na SHARED store (Redis/Memcached/Cloudflare KV/Durable Object) — inject one via\n`FartherShoreInitOptions.nonceStore`. `checkAndRemember` may be async so a\nnetwork-backed store can be awaited. (Time-bounding still caps the exposure\nto the signature's ~300s validity window regardless of the store.)",
        "references": []
      },
      {
        "name": "PermissionCarrier__227d98a75a82",
        "signature": "export interface PermissionCarrier__227d98a75a82 {\n    permissions?: readonly string[];\n    /** Exact product permissions default-allowed by the current G+A decision. */\n    unassignedProductPermissions?: readonly string[];\n    /**\n     * The verified X-Fs-Context claims, when the request carried a valid token.\n     * NOT consulted for permission decisions — its presence NEVER grants (an\n     * absent `permissions` set always denies). Retained only as part of the\n     * verified-context shape a carrier is built from.\n     */\n    signedContext?: FartherShoreSignedContext__24c947c09583;\n}",
        "source": "packages/backend/dist/types/core/permissions.d.ts#L61",
        "description": "The subset of a verified context these helpers read.",
        "references": [
          {
            "name": "FartherShoreSignedContext__24c947c09583",
            "source": "packages/backend/dist/types/core/verifyContext.d.ts#L33"
          }
        ]
      },
      {
        "name": "ReconcileResult__9286f3220e09",
        "signature": "export interface ReconcileResult__9286f3220e09 {\n    /** Reflected surface matched the declared lock. */\n    inSync: boolean;\n    /** A drift report was sent. */\n    reportedDrift: boolean;\n    /** Route ids confirmed served (pending → clearable). */\n    confirmedRouteIds: string[];\n    /** A report sink call failed (swallowed — boot never blocks on it). */\n    reportError?: string;\n}",
        "source": "packages/backend/dist/types/reflect/reconcile.d.ts#L23",
        "description": "",
        "references": []
      },
      {
        "name": "ReplayProtectionDiagnostic__a3a9ef1278f1",
        "signature": "export type ReplayProtectionDiagnostic__a3a9ef1278f1 = {\n    mode: ReplayProtectionMode__c5da7b084f0a;\n    /** True when replay is enforced across every replica, not just this process. */\n    crossReplica: boolean;\n};",
        "source": "packages/backend/dist/types/core/replay-protection.d.ts#L4",
        "description": "",
        "references": [
          {
            "name": "ReplayProtectionMode__c5da7b084f0a",
            "source": "packages/backend/dist/types/core/replay-protection.d.ts#L3"
          }
        ]
      },
      {
        "name": "ReplayProtectionMode__c5da7b084f0a",
        "signature": "export type ReplayProtectionMode__c5da7b084f0a = \"shared\" | \"single-instance\";",
        "source": "packages/backend/dist/types/core/replay-protection.d.ts#L3",
        "description": "How far one-time-use enforcement actually reaches.",
        "references": []
      },
      {
        "name": "ReportFn__89e79b33cabf",
        "signature": "export type ReportFn__89e79b33cabf = (input: ReportInput__0f8959765e13 | readonly ReportInput__0f8959765e13[]) => Promise<ReportResult__1d967fd166a1>;",
        "source": "packages/backend/dist/types/core/report.d.ts#L115",
        "description": "`report()` accepts one measurement or an ARRAY of measurements. The array\nform is the sanctioned way to report several meters after the response is\nsent: one served request owns exactly ONE post-stream callback identity, so\nsequential awaited single reports after the first flush cannot be delivered\n— a batch rides the single callback atomically. All entries of a batch\nshare one quote (at most one distinct quote may be supplied).",
        "references": [
          {
            "name": "ReportInput__0f8959765e13",
            "source": "packages/backend/dist/types/core/report.d.ts#L28"
          },
          {
            "name": "ReportResult__1d967fd166a1",
            "source": "packages/backend/dist/types/core/report.d.ts#L53"
          }
        ]
      },
      {
        "name": "ReportInput__0f8959765e13",
        "signature": "export type ReportInput__0f8959765e13 = {\n    /** Meter key as declared in the business release (plain string at the wire). */\n    meter: string;\n    /** Observed values keyed by measure key, e.g. `{ input_tokens: 1200 }`. */\n    values: MeasurementValues__ab2d89ace8f2;\n    /** Catalog selectors, e.g. `{ model: \"acme-4\", cache_status: \"hit\" }`. */\n    dims?: MeasurementDimensions__e2d8137e24a6;\n    /**\n     * OPTIONAL money proposal for a `backendQuoted` pricing rule: a PER-UNIT\n     * rate in nanodollars (multiplied by the measured quantity — never a\n     * total). Opaque at the authoring boundary (a job result carries it through\n     * untyped); validated against {@link QuoteInput} here and transmitted as a\n     * {@link QuoteProposal}. Applies to every backend-quoted component of this\n     * report; ignored by rules that are not backend-quoted.\n     */\n    quote?: unknown;\n};",
        "source": "packages/backend/dist/types/core/report.d.ts#L28",
        "description": "One measurement report. The complete argument surface of the verb.",
        "references": [
          {
            "name": "MeasurementDimensions__e2d8137e24a6",
            "source": "packages/backend/dist/types/core/report.d.ts#L5"
          },
          {
            "name": "MeasurementValues__ab2d89ace8f2",
            "source": "packages/backend/dist/types/core/report.d.ts#L3"
          }
        ]
      },
      {
        "name": "ReportResult__1d967fd166a1",
        "signature": "export type ReportResult__1d967fd166a1 = {\n    ok: true;\n    transport: ReportTransport__0721adbb43b4;\n} | {\n    ok: false;\n    transport: ReportTransport__0721adbb43b4;\n    reason: string;\n    /** The PLATFORM's error code, when the failure came back in a response\n     *  body (e.g. `post_stream_request_not_found`). Absent for local faults.\n     *  Surfaced so a builder can act on the cause without wrapping fetch. */\n    code?: string;\n    /** The platform's own error message, verbatim. */\n    message?: string;\n    /** HTTP status of the final delivery attempt, when there was one. */\n    status?: number;\n};",
        "source": "packages/backend/dist/types/core/report.d.ts#L53",
        "description": "Delivery outcome. Validation faults THROW (a malformed report is a builder\nbug worth surfacing); delivery faults resolve `ok: false` so a metering\nhiccup never breaks the builder's endpoint. A served request may own only\none post-stream callback identity, so later calls fail explicitly.",
        "references": [
          {
            "name": "ReportTransport__0721adbb43b4",
            "source": "packages/backend/dist/types/core/report.d.ts#L46"
          }
        ]
      },
      {
        "name": "ReportTransport__0721adbb43b4",
        "signature": "export type ReportTransport__0721adbb43b4 = \"in_band\" | \"post_stream\";",
        "source": "packages/backend/dist/types/core/report.d.ts#L46",
        "description": "Which channel actually carried the measurement.",
        "references": []
      },
      {
        "name": "ResponseSink__b746e2445083",
        "signature": "export type ResponseSink__b746e2445083 = {\n    /** True while headers can still be stamped onto the outgoing response. */\n    canStampHeaders(): boolean;\n    /** Stamp the signed metering headers onto the outgoing response. */\n    stampHeaders(headers: Record<string, string>): void;\n};",
        "source": "packages/backend/dist/types/core/report.d.ts#L78",
        "description": "The transport seam a host adapter supplies for the in-band lane.",
        "references": []
      },
      {
        "name": "RUNTIME_HEADER_NAMES__adc010c1041a",
        "signature": "declare const RUNTIME_HEADER_NAMES__adc010c1041a: {\n    readonly signature: \"x-fs-signature\";\n    readonly keyId: \"x-fs-key-id\";\n    readonly requestId: \"x-fs-request-id\";\n    readonly timestamp: \"x-fs-timestamp\";\n    readonly businessId: \"x-fs-business-id\";\n    readonly backendId: \"x-fs-backend-id\";\n    readonly routeId: \"x-fs-route-id\";\n    readonly policyVersion: \"x-fs-policy-version\";\n    readonly bodyHash: \"x-fs-body-hash\";\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L126",
        "description": "",
        "references": []
      },
      {
        "name": "RUNTIME_TOKEN_OPERATIONS__1b6bc2f07e6d",
        "signature": "declare const RUNTIME_TOKEN_OPERATIONS__1b6bc2f07e6d: readonly [\"gateway_verification\", \"metering\", \"health\", \"tunnel\", \"drift_report\"];",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L124",
        "description": "",
        "references": []
      },
      {
        "name": "RUNTIME_TOKEN_PREFIXES__449e80fc59d4",
        "signature": "declare const RUNTIME_TOKEN_PREFIXES__449e80fc59d4: {\n    readonly live: \"fsrt_live_\";\n    readonly test: \"fsrt_test_\";\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L119",
        "description": "",
        "references": []
      },
      {
        "name": "RuntimeBootstrapResponse__aecc7a0d671f",
        "signature": "export type RuntimeBootstrapResponse__aecc7a0d671f = {\n    business: {\n        id: string;\n        slug: string;\n    };\n    backend: {\n        id: string;\n        slug: string;\n        name: string;\n    };\n    /**\n     * Every backend id this token may serve, across ALL of the business's\n     * environments — `backend.id` is always a member.\n     *\n     * One deployment holds exactly one `FS_RUNTIME_TOKEN`, so an\n     * environment-scoped token forced a SEPARATE deployment per environment:\n     * serving a preview env meant repointing (and breaking) production. A\n     * business-scoped token serves every environment from one deployment, and the\n     * SDK checks the gateway's signed backend id for MEMBERSHIP of this set\n     * rather than equality with a single id.\n     *\n     * Optional and additive: an older core omits it and the SDK falls back to the\n     * single-id equality check.\n     */\n    backendIds?: string[];\n    environment: {\n        id: string | null;\n        kind: RuntimeEnvironmentKind__ac9ea026fbe7;\n    };\n    operations: RuntimeTokenOperation__29f1e3868c88[];\n    verification: RuntimeVerificationConfig__5494b13a9008;\n    metering: RuntimeMeteringConfig__3d27722db6c2;\n    transport: RuntimeTransportConfig__7254e971c589;\n    routes: RuntimeRouteDescriptor__48a862559af0[];\n    /** Reflected route-surface lock (surfaceHash + version). Present once core\n     *  serves it; `fs.ready()` diffs the reflected surface against it. */\n    lock?: RuntimeLockDescriptor__0d22ecd0bb58;\n    policyVersion: string;\n    refreshAfterSeconds: number;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L228",
        "description": "",
        "references": [
          {
            "name": "RuntimeEnvironmentKind__ac9ea026fbe7",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L180"
          },
          {
            "name": "RuntimeLockDescriptor__0d22ecd0bb58",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L224"
          },
          {
            "name": "RuntimeMeteringConfig__3d27722db6c2",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L195"
          },
          {
            "name": "RuntimeRouteDescriptor__48a862559af0",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L214"
          },
          {
            "name": "RuntimeTokenOperation__29f1e3868c88",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L125"
          },
          {
            "name": "RuntimeTransportConfig__7254e971c589",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L203"
          },
          {
            "name": "RuntimeVerificationConfig__5494b13a9008",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L188"
          }
        ]
      },
      {
        "name": "RuntimeEnvironmentKind__ac9ea026fbe7",
        "signature": "export type RuntimeEnvironmentKind__ac9ea026fbe7 = RuntimeTokenKind__821c369e851d;",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L180",
        "description": "",
        "references": [
          {
            "name": "RuntimeTokenKind__821c369e851d",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L123"
          }
        ]
      },
      {
        "name": "RuntimeHealthReport__0174b488600d",
        "signature": "export type RuntimeHealthReport__0174b488600d = {\n    runtimeToken: boolean;\n    bootstrap: boolean;\n    tunnel: string | null;\n    verification: boolean;\n    metering: boolean;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L306",
        "description": "",
        "references": []
      },
      {
        "name": "RuntimeLockDescriptor__0d22ecd0bb58",
        "signature": "export type RuntimeLockDescriptor__0d22ecd0bb58 = {\n    surfaceHash: string;\n    lockVersion: number;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L224",
        "description": "The declared route-surface lock the backend reconciles against at startup.",
        "references": []
      },
      {
        "name": "RuntimeMeteringConfig__3d27722db6c2",
        "signature": "export type RuntimeMeteringConfig__3d27722db6c2 = {\n    enabled: boolean;\n    endpoint: string;\n    credential: string;\n    allowedMeters: string[];\n    allowedRoutes: string[];\n    perEventMax: number;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L195",
        "description": "",
        "references": []
      },
      {
        "name": "RuntimeMeteringEvent__418138753c49",
        "signature": "export type RuntimeMeteringEvent__418138753c49 = {\n    event_id: string;\n    business_id: string;\n    backend_id: string;\n    route_id?: string;\n    request_id?: string;\n    /** Subscription the usage belongs to (billing attribution). Optional and\n     *  additive: legacy emitters omit it; core then falls back to resolving the\n     *  served gateway request via `request_id`, and rows that resolve neither\n     *  way are persisted unbilled + flagged unattributable. */\n    subscription_id?: string;\n    meter: string;\n    qty: number;\n    timestamp: string;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L268",
        "description": "",
        "references": []
      },
      {
        "name": "RuntimePostStreamUsageEvent__1827aaa16965",
        "signature": "export type RuntimePostStreamUsageEvent__1827aaa16965 = {\n    requestId: string;\n    subscriptionId: string;\n    nonce: string;\n    meters: Record<string, number>;\n    creditUnitsConsumed?: Record<string, number>;\n    measureContext?: Record<string, unknown>;\n    /** Schema version of {@link measurements}; currently `1`. */\n    measurementsVersion?: number;\n    /** Measurement lane — `{ meter, values, dims }` as declared in the release. */\n    measurements?: {\n        meter: string;\n        values: Record<string, number>;\n        dims?: Record<string, string>;\n    }[];\n    /** Proposed rate input for a `backendQuoted` pricing rule (core clamps it). */\n    quote?: {\n        currency: string;\n        amountNanos: string;\n    };\n    signature: string;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L284",
        "description": "Attested, request-bound billing callback sent after a stream completes.",
        "references": []
      },
      {
        "name": "RuntimeRouteDescriptor__48a862559af0",
        "signature": "export type RuntimeRouteDescriptor__48a862559af0 = {\n    id: string;\n    method: string;\n    path: string;\n    backendId: string;\n    /** Declared-but-not-yet-confirmed-served route. `fs.ready()` confirms the ones\n     *  this replica actually serves so core can clear the flag and publish. */\n    pending?: boolean;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L214",
        "description": "",
        "references": []
      },
      {
        "name": "RuntimeTokenKind__821c369e851d",
        "signature": "export type RuntimeTokenKind__821c369e851d = keyof typeof RUNTIME_TOKEN_PREFIXES__449e80fc59d4;",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L123",
        "description": "",
        "references": [
          {
            "name": "RUNTIME_TOKEN_PREFIXES__449e80fc59d4",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L119"
          }
        ]
      },
      {
        "name": "RuntimeTokenOperation__29f1e3868c88",
        "signature": "export type RuntimeTokenOperation__29f1e3868c88 = (typeof RUNTIME_TOKEN_OPERATIONS__1b6bc2f07e6d)[number];",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L125",
        "description": "",
        "references": [
          {
            "name": "RUNTIME_TOKEN_OPERATIONS__1b6bc2f07e6d",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L124"
          }
        ]
      },
      {
        "name": "RuntimeTransportConfig__7254e971c589",
        "signature": "export type RuntimeTransportConfig__7254e971c589 = {\n    mode: TransportMode__341e38853a53;\n    runner: TransportRunner__21383ffda4d0 | null;\n    originUrl?: string;\n    originHostname?: string;\n    localTarget?: string;\n    cloudflared?: {\n        tunnelToken: string;\n        version: string;\n    };\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L203",
        "description": "",
        "references": [
          {
            "name": "TransportMode__341e38853a53",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L181"
          },
          {
            "name": "TransportRunner__21383ffda4d0",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L182"
          }
        ]
      },
      {
        "name": "RuntimeVerificationConfig__5494b13a9008",
        "signature": "export type RuntimeVerificationConfig__5494b13a9008 = {\n    required: boolean;\n    jwksUrl: string;\n    clockSkewSeconds: number;\n    replayWindowSeconds: number;\n    headerNames: typeof RUNTIME_HEADER_NAMES__adc010c1041a;\n};",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L188",
        "description": "",
        "references": [
          {
            "name": "RUNTIME_HEADER_NAMES__adc010c1041a",
            "source": "packages/backend/dist/types/runtime-types.d.ts#L126"
          }
        ]
      },
      {
        "name": "SpawnedTunnelProcess__65f87a1c4fc6",
        "signature": "export interface SpawnedTunnelProcess__65f87a1c4fc6 {\n    readonly stdout: StdioStream__d26eea00aaf1 | null;\n    readonly stderr: StdioStream__d26eea00aaf1 | null;\n    readonly pid?: number;\n    /** Register the process-exit handler. */\n    on(event: \"exit\", listener: (code: number | null, signal: NodeJS.Signals | null) => void): unknown;\n    /** Signal the child to stop. */\n    kill(signal?: NodeJS.Signals | number): boolean;\n}",
        "source": "packages/backend/dist/types/core/tunnel.d.ts#L11",
        "description": "The minimal child-process surface the supervisor needs. A real\n`child_process.ChildProcess` satisfies this; tests pass a fake. We deliberately\ndo NOT depend on the full ChildProcess type so the spawner stays injectable and\nthe SDK does not pull a Node-only process model into the language-neutral core.",
        "references": [
          {
            "name": "StdioStream__d26eea00aaf1",
            "source": "packages/backend/dist/types/core/tunnel.d.ts#L4"
          }
        ]
      },
      {
        "name": "SpawnFn__a4d2414f74db",
        "signature": "export type SpawnFn__a4d2414f74db = (command: string, args: string[], options?: {\n    env?: NodeJS.ProcessEnv;\n}) => SpawnedTunnelProcess__65f87a1c4fc6;",
        "source": "packages/backend/dist/types/core/tunnel.d.ts#L25",
        "description": "The injected spawner port. In production this is a thin wrapper over\n`child_process.spawn`; in tests it is a fake that records argv. It MUST NOT be\npassed `local_target` — routing is owned by Cloudflare.",
        "references": [
          {
            "name": "SpawnedTunnelProcess__65f87a1c4fc6",
            "source": "packages/backend/dist/types/core/tunnel.d.ts#L11"
          }
        ]
      },
      {
        "name": "StdioStream__d26eea00aaf1",
        "signature": "type StdioStream__d26eea00aaf1 = Pick<EventEmitter, \"on\">;",
        "source": "packages/backend/dist/types/core/tunnel.d.ts#L4",
        "description": "A line emitter — the subset of a child stdio stream we consume.",
        "references": []
      },
      {
        "name": "TransportMode__341e38853a53",
        "signature": "export type TransportMode__341e38853a53 = \"direct\" | \"tunnel\";",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L181",
        "description": "",
        "references": []
      },
      {
        "name": "TransportRunner__21383ffda4d0",
        "signature": "export type TransportRunner__21383ffda4d0 = \"embedded\" | \"sidecar\";",
        "source": "packages/backend/dist/types/runtime-types.d.ts#L182",
        "description": "",
        "references": []
      },
      {
        "name": "VerifiedExpressHandler__ca6f4e2c232b",
        "signature": "export type VerifiedExpressHandler__ca6f4e2c232b<Req extends ExpressRequestLike__f93080abdbb9 = ExpressRequestLike__f93080abdbb9, Res extends ExpressResponseLike__7a6dd95793e1 = ExpressResponseLike__7a6dd95793e1> = (ctx: VerifiedPrincipalContext__f4d6dbc0db6f, req: Req, res: Res, next: ExpressNext__c3f550fc71bd) => void | Promise<void>;",
        "source": "packages/backend/dist/types/adapters/express.d.ts#L89",
        "description": "A route handler that runs only with a GUARANTEED verified PRINCIPAL. The first\nargument is the {@link VerifiedPrincipalContext} — read `ctx.principal` and\n`ctx.signedContext` (and narrow with `requireMember`/`requireService`)\nwithout any optional-chaining.\nSee {@link createExpressHandler}.",
        "references": [
          {
            "name": "ExpressNext__c3f550fc71bd",
            "source": "packages/backend/dist/types/adapters/express.d.ts#L29"
          },
          {
            "name": "ExpressRequestLike__f93080abdbb9",
            "source": "packages/backend/dist/types/adapters/express.d.ts#L5"
          },
          {
            "name": "ExpressResponseLike__7a6dd95793e1",
            "source": "packages/backend/dist/types/adapters/express.d.ts#L17"
          },
          {
            "name": "VerifiedPrincipalContext__f4d6dbc0db6f",
            "source": "packages/backend/dist/types/adapters/express.d.ts#L78"
          }
        ]
      },
      {
        "name": "VerifiedPrincipalContext__f4d6dbc0db6f",
        "signature": "export type VerifiedPrincipalContext__f4d6dbc0db6f = FartherShoreRequestContext__fee40dd450e8 & {\n    principal: ConsumerPrincipal__16f951b9786d;\n    signedContext: FartherShoreSignedContext__24c947c09583;\n};",
        "source": "packages/backend/dist/types/adapters/express.d.ts#L78",
        "description": "A verified request context whose {@link ConsumerPrincipal} is GUARANTEED\npresent — the shape handed to a {@link VerifiedExpressHandler}. The raw\n`FartherShoreRequestContext.principal` is optional (an identity-less gateway\nrequest is legitimate on the `fs.middleware()` path); `fs.handler()` narrows to\nthis type only AFTER rejecting an absent principal with `401 principal_required`,\nso the callback can read `ctx.principal` (and narrow with\n`requireMember`/`requireService`) without any optional-chaining.",
        "references": [
          {
            "name": "ConsumerPrincipal__16f951b9786d",
            "source": "packages/backend/dist/types/core/verifyContext.d.ts#L8"
          },
          {
            "name": "FartherShoreRequestContext__fee40dd450e8",
            "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L24"
          },
          {
            "name": "FartherShoreSignedContext__24c947c09583",
            "source": "packages/backend/dist/types/core/verifyContext.d.ts#L33"
          }
        ]
      },
      {
        "name": "VerifyRequestHostOptions__981e9466821d",
        "signature": "export type VerifyRequestHostOptions__981e9466821d = {\n    responseSink?: ResponseSink__b746e2445083;\n};",
        "source": "packages/backend/dist/types/core/runtime.d.ts#L76",
        "description": "Host-adapter seams for `verifyRequest`. An adapter that owns the outgoing\nresponse (the Express middleware) supplies a {@link ResponseSink} so\n`ctx.report()` can choose the zero-network in-band header transport while the\nresponse is still open. Without one, reports take the post-stream channel.",
        "references": [
          {
            "name": "ResponseSink__b746e2445083",
            "source": "packages/backend/dist/types/core/report.d.ts#L78"
          }
        ]
      },
      {
        "name": "VerifyRequestInput__5a17124b6df7",
        "signature": "export type VerifyRequestInput__5a17124b6df7 = {\n    method: string;\n    /** Path only (no host, no query). */\n    path: string;\n    /** Raw query string (with or without leading '?'); \"\" when absent. */\n    query?: string;\n    headers: HeadersLike__89315298f855;\n    /** Raw request bytes captured pre-parser; null/undefined for empty body. */\n    body?: Uint8Array | null;\n    /**\n     * True when the request is body-hash-exempt (streaming). The signed hash must\n     * then be the STREAM sentinel and the body is not hashed (size cap still\n     * applies upstream).\n     */\n    streamingExempt?: boolean;\n};",
        "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L6",
        "description": "Per-request input. `headers` keys are matched case-insensitively.",
        "references": [
          {
            "name": "HeadersLike__89315298f855",
            "source": "packages/backend/dist/types/core/verifyRequest.d.ts#L22"
          }
        ]
      },
      {
        "name": "WEBHOOK_EVENT_NAMES__b1fde63f3b9d",
        "signature": "declare const WEBHOOK_EVENT_NAMES__b1fde63f3b9d: readonly [\"subscription.created\", \"subscription.updated\", \"subscription.canceled\", \"payment.succeeded\", \"payment.failed\", \"entitlement.changed\", \"usage.threshold_reached\"];",
        "source": "packages/backend/dist/types/webhooks/types.d.ts#L5",
        "description": "Event names a webhook endpoint can subscribe to (the platform events\ncatalog's webhook-deliverable subset), in catalog order.",
        "references": []
      },
      {
        "name": "WEBHOOK_TEST_EVENT__6536cbfa1b3d",
        "signature": "declare const WEBHOOK_TEST_EVENT__6536cbfa1b3d: \"webhook.test\";",
        "source": "packages/backend/dist/types/webhooks/types.d.ts#L8",
        "description": "The synthetic event a dashboard / CLI \"Send test\" produces.",
        "references": []
      },
      {
        "name": "WebhookEnvelope__f1da89296e6d",
        "signature": "export type WebhookEnvelope__f1da89296e6d<T extends WebhookEnvelopeType__22116d242a71 = WebhookEnvelopeType__22116d242a71> = T extends WebhookEnvelopeType__22116d242a71 ? {\n    id: string;\n    type: T;\n    /** ISO 8601 — when the event was recorded (stable across retries). */\n    createdAt: string;\n    businessId: string;\n    /** `null` = production. */\n    environmentId: string | null;\n    data: WebhookEventData__3ab81689f0bb[T];\n} : never;",
        "source": "packages/backend/dist/types/webhooks/types.d.ts#L68",
        "description": "The JSON body of every delivery. `id` equals the `webhook-id` header.",
        "references": [
          {
            "name": "WebhookEnvelopeType__22116d242a71",
            "source": "packages/backend/dist/types/webhooks/types.d.ts#L10"
          },
          {
            "name": "WebhookEventData__3ab81689f0bb",
            "source": "packages/backend/dist/types/webhooks/types.d.ts#L16"
          }
        ]
      },
      {
        "name": "WebhookEnvelopeType__22116d242a71",
        "signature": "export type WebhookEnvelopeType__22116d242a71 = WebhookEventName__516efeb1d3c0 | typeof WEBHOOK_TEST_EVENT__6536cbfa1b3d;",
        "source": "packages/backend/dist/types/webhooks/types.d.ts#L10",
        "description": "Every `type` a delivery envelope can carry.",
        "references": [
          {
            "name": "WEBHOOK_TEST_EVENT__6536cbfa1b3d",
            "source": "packages/backend/dist/types/webhooks/types.d.ts#L8"
          },
          {
            "name": "WebhookEventName__516efeb1d3c0",
            "source": "packages/backend/dist/types/webhooks/types.d.ts#L6"
          }
        ]
      },
      {
        "name": "WebhookEventData__3ab81689f0bb",
        "signature": "export interface WebhookEventData__3ab81689f0bb {\n    \"subscription.created\": {\n        subscriptionId?: string;\n        compiledPlanId?: string;\n        [key: string]: unknown;\n    };\n    \"subscription.updated\": {\n        subscriptionId?: string;\n        /** Producer-specific change reason, e.g. `plan_changed`, `trial_ending`. */\n        reason?: string;\n        lifecycle?: string;\n        compiledPlanId?: string;\n        [key: string]: unknown;\n    };\n    \"subscription.canceled\": {\n        subscriptionId?: string;\n        reason?: string;\n        lifecycle?: string;\n        [key: string]: unknown;\n    };\n    \"payment.succeeded\": WebhookPaymentData__dc4de7029bac;\n    \"payment.failed\": WebhookPaymentData__dc4de7029bac;\n    \"entitlement.changed\": {\n        compiledPlanId?: string;\n        lineageId?: string;\n        status?: string;\n        [key: string]: unknown;\n    };\n    \"usage.threshold_reached\": {\n        subscriptionId?: string;\n        subscriberId?: string;\n        limitId?: string;\n        threshold?: number;\n        windowStartMs?: number;\n        windowEndMs?: number;\n        [key: string]: unknown;\n    };\n    \"webhook.test\": {\n        businessId: string;\n        sentAt: string;\n        [key: string]: unknown;\n    };\n}",
        "source": "packages/backend/dist/types/webhooks/types.d.ts#L16",
        "description": "Per-event `data`. The keys listed are what the platform's producers carry\ntoday; extra keys pass through untouched (automation rules may attach\nbuilder-authored fields), so every shape is open.",
        "references": [
          {
            "name": "WebhookPaymentData__dc4de7029bac",
            "source": "packages/backend/dist/types/webhooks/types.d.ts#L59"
          }
        ]
      },
      {
        "name": "WebhookEventName__516efeb1d3c0",
        "signature": "export type WebhookEventName__516efeb1d3c0 = (typeof WEBHOOK_EVENT_NAMES__b1fde63f3b9d)[number];",
        "source": "packages/backend/dist/types/webhooks/types.d.ts#L6",
        "description": "",
        "references": [
          {
            "name": "WEBHOOK_EVENT_NAMES__b1fde63f3b9d",
            "source": "packages/backend/dist/types/webhooks/types.d.ts#L5"
          }
        ]
      },
      {
        "name": "WebhookPaymentData__dc4de7029bac",
        "signature": "export interface WebhookPaymentData__dc4de7029bac {\n    subscriptionId?: string;\n    invoiceId?: string;\n    amount?: number | null;\n    currency?: string | null;\n    reason?: string;\n    [key: string]: unknown;\n}",
        "source": "packages/backend/dist/types/webhooks/types.d.ts#L59",
        "description": "",
        "references": []
      }
    ],
    "generated/backend-sdk/webhooks": [
      {
        "name": "WebhookPaymentData__dc4de7029bac",
        "signature": "export interface WebhookPaymentData__dc4de7029bac {\n    subscriptionId?: string;\n    invoiceId?: string;\n    amount?: number | null;\n    currency?: string | null;\n    reason?: string;\n    [key: string]: unknown;\n}",
        "source": "packages/backend/dist/types/webhooks/types.d.ts#L59",
        "description": "",
        "references": []
      }
    ],
    "generated/frontend-sdk/root": [
      {
        "name": "AccessRequest__e4d3f89daefa",
        "signature": "export interface AccessRequest__e4d3f89daefa {\n    id: string;\n    /** External identity id of the requesting member. */\n    requestedBy: string;\n    /** The requested permission (unified `<subject>:<verb>` grammar). */\n    permission: string;\n    note?: string | null;\n    /** PENDING | APPROVED | DENIED. */\n    status: string;\n    resolvedBy?: string | null;\n    resolvedAt?: string | null;\n    createdAt: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1061",
        "description": "A Notion-minimal access request (`/me/access-requests`). Track T3 —\napproval AUTO-GRANTS the permission onto the requester's direct grants.",
        "references": []
      },
      {
        "name": "BillPreviewUsageRating__fb184ad4d633",
        "signature": "export interface BillPreviewUsageRating__fb184ad4d633 {\n    pendingEventCount: number;\n    unratableEventCount: number;\n    /** ISO instant of the oldest unaccounted event, or null when there is none. */\n    oldestUnratedServedAt: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1251",
        "description": "Served usage this cycle that `totals` does NOT account for.\n\n`totals.ratedNanos` sums POSTED charges only, so usage that is metered but\nnot yet priced — or that can no longer be priced at all — contributes\nnothing to it. Rendering that as `$0` asserts \"you owe nothing\" when the\ntruthful statement is \"we have not priced this yet\". Render this instead of\nletting a confident zero stand.\n\n`pendingEventCount` drains on its own; `unratableEventCount` will not without\noperator action.",
        "references": []
      },
      {
        "name": "buildDimensionBreakdown__f82446dddd7c",
        "signature": "export declare function buildDimensionBreakdown__f82446dddd7c(summary: Record<string, number>, meters: Meter[]): string | null;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L253",
        "description": "",
        "references": [
          {
            "name": "Meter",
            "source": "packages/farthershore-js/dist/types.d.ts#L15"
          }
        ]
      },
      {
        "name": "buildMeterUsageRows__dd03e7a0a916",
        "signature": "export declare function buildMeterUsageRows__dd03e7a0a916(plan: Plan | null, summary: Record<string, number>, meters: Meter[], billingBasis?: UsageBillingBasis): MeterUsageRow[];",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L266",
        "description": "Combine a plan's monthly quotas with a usage summary into render-ready rows —\none per meter that has a quota OR non-zero usage. Sorted: quota'd meters\nfirst (by label), then no-quota meters by usage descending. Mirrors the SSR\nportal's `buildAllMeterUsage`.\n\n`meters` is the product-level meter catalog (for labels/units); when empty,\nthe summary keys are used directly.",
        "references": [
          {
            "name": "Meter",
            "source": "packages/farthershore-js/dist/types.d.ts#L15"
          },
          {
            "name": "MeterUsageRow",
            "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L226"
          },
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          },
          {
            "name": "UsageBillingBasis",
            "source": "packages/farthershore-js/dist/types.d.ts#L649"
          }
        ]
      },
      {
        "name": "buildPinnedMeterUsageRows__fd3dc232bb17",
        "signature": "export declare function buildPinnedMeterUsageRows__fd3dc232bb17(pinned: PinnedUsageDisplay | null | undefined, summary: Record<string, number>, meters: Meter[], billingBasis?: UsageBillingBasis): MeterUsageRow[];",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L291",
        "description": "Build usage rows from the subscriber's PINNED plan (`GET /me`'s\n`displayDims` + `rules`), not the latest catalog meter list.\n\nWhy: {@link buildMeterUsageRows} reads quotas from `plan.limits` on whichever\ncatalog `Plan` the card resolves — that's the LATEST product version, which\ncan have drifted from the shape the subscriber is actually billed under. The\npinned `displayDims`/`rules` are the entitlement the subscriber is on, so the\n\"used / N included\" figures match their real billing.\n\nEach month-window rule (`w === MONTH_WINDOW_SECONDS`) contributes the included\nquota for `displayDims[rule.d]`. A dimension with no month rule still renders\n(quota null) when it has non-zero usage. `meters` supplies labels/units; when\nabsent the dimension key is used directly. The weighted-meter `requests` →\n\"Usage\" relabel matches buildMeterUsageRows.",
        "references": [
          {
            "name": "Meter",
            "source": "packages/farthershore-js/dist/types.d.ts#L15"
          },
          {
            "name": "MeterUsageRow",
            "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L226"
          },
          {
            "name": "PinnedUsageDisplay",
            "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L269"
          },
          {
            "name": "UsageBillingBasis",
            "source": "packages/farthershore-js/dist/types.d.ts#L649"
          }
        ]
      },
      {
        "name": "buildPrimaryUsage__a1cfc1e9cdb3",
        "signature": "export declare function buildPrimaryUsage__a1cfc1e9cdb3(plan: Plan | null, summary: Record<string, number>, meters: Meter[], billingBasis?: UsageBillingBasis): UsageDisplay;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L254",
        "description": "",
        "references": [
          {
            "name": "Meter",
            "source": "packages/farthershore-js/dist/types.d.ts#L15"
          },
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          },
          {
            "name": "UsageBillingBasis",
            "source": "packages/farthershore-js/dist/types.d.ts#L649"
          },
          {
            "name": "UsageDisplay",
            "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L239"
          }
        ]
      },
      {
        "name": "buildRateLimits__5220b52a303e",
        "signature": "export declare function buildRateLimits__5220b52a303e(plan: Plan | null, meters: Meter[]): RateLimitLine[];",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L255",
        "description": "",
        "references": [
          {
            "name": "Meter",
            "source": "packages/farthershore-js/dist/types.d.ts#L15"
          },
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          },
          {
            "name": "RateLimitLine",
            "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L249"
          }
        ]
      },
      {
        "name": "buildResourceLimitRows__f08613820468",
        "signature": "export declare function buildResourceLimitRows__f08613820468(plan: Pick<Plan, \"resourceLimits\">, usage: ResourceLimitUsage__a25d6e733a8f): ResourceLimitRow[];",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L354",
        "description": "",
        "references": [
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          },
          {
            "name": "ResourceLimitRow",
            "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L347"
          },
          {
            "name": "ResourceLimitUsage__a25d6e733a8f",
            "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L346"
          }
        ]
      },
      {
        "name": "catalogPricingLines__c7aab05ab71a",
        "signature": "export declare function catalogPricingLines__c7aab05ab71a(plan: Plan): string[];",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L412",
        "description": "The catalog lines a plan card renders, in reading order: what's included,\nwhat usage costs, and what happens at zero.\n\nEMPTY when the plan publishes no catalog terms — the caller falls back to\n\"Usage priced per the catalog\" and a docs pointer, which is the honest\nrendering both for a plan that binds no catalog and for one whose builder\ndeclared opaque disclosure. An empty array is never \"this plan is free\".",
        "references": [
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "catalogRuleQualifier__43f6b05ea45d",
        "signature": "export declare function catalogRuleQualifier__43f6b05ea45d(rule: PricingRule): string;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L380",
        "description": "The qualifier that distinguishes one catalog rule from its siblings — the\ndimension values it applies at, or its provider/model namespace. \"\" when the\nrule needs no qualifier.",
        "references": [
          {
            "name": "PricingRule",
            "source": "packages/farthershore-js/dist/types.d.ts#L206"
          }
        ]
      },
      {
        "name": "ClientContext__d9dbf3313290",
        "signature": "export interface ClientContext__d9dbf3313290 {\n    /** Platform Core base URL. LAZY: resolved on read as explicit config >\n     *  injected `window.__FS_CONFIG__` > the production platform default —\n     *  never throws. Reading this property is what performs the lazy window\n     *  read; never read it at module scope or client-construction time. */\n    readonly coreUrl: string;\n    /** Portal host identifying the product/env to Core. LAZY — see {@link\n     *  coreUrl}; defaults to `location.host` in the browser, read on access. */\n    readonly portalHost: string | null;\n    businessId: string | null;\n    environmentId: string | null;\n    organizationId: string | null;\n    /**\n     * The organization selection before it is reconciled against subscription\n     * contexts. Unlike `organizationId`, undefined means no explicit selection;\n     * null is a durable request for the user's default subscription. Internal\n     * runtime state used by the React organization provider.\n     */\n    organizationSelection?: string | null;\n    /** Subscribers notified when the imperative organization scope changes. */\n    organizationListeners: Set<() => void>;\n    /** Read-through cache backing `fs.prefetch.*` (see cache.ts). */\n    readCache: Map<string, ReadCacheEntry__ee67854da2b9>;\n    gatewayUrl: string | null;\n    apiKey: string | null;\n    /** Cached short-lived gateway context token for browser-session feature\n     *  calls. Cleared whenever session/org scope changes. */\n    gatewayContextToken: {\n        token: string;\n        expiresAt: string;\n        cacheKey: string;\n    } | null;\n    /** In-flight context-token mint, keyed by cacheKey — SINGLE-FLIGHT coalescing\n     *  so concurrent feature calls share ONE mint instead of stampeding Core\n     *  (W6.3). Cleared as soon as the mint settles. Internal. */\n    gatewayContextTokenInflight: {\n        cacheKey: string;\n        promise: Promise<GatewayContextToken>;\n    } | null;\n    /** Explicit session bearer (for Clerk/advanced integrations), falling back\n     *  to the configured `getToken` provider. Persona sessions are HttpOnly\n     *  cookies and never enter JavaScript. */\n    sessionToken: string | null;\n    /** True after a cookie-authenticated Core request succeeds. This lets a\n     *  later 401 trigger managed recovery without treating an anonymous first\n     *  `/me` read as a lapsed session. Contains no credential. */\n    browserSessionAuthenticated: boolean;\n    getToken?: TokenProvider;\n    /** Runtime-installed token provider (e.g. the managed Clerk bridge inside\n     *  `<FartherShoreRoot>`). Wins over `config.getToken`; an explicitly set\n     *  `sessionToken` still wins over both. */\n    tokenProvider: TokenProvider | null;\n    fetch: FetchLike;\n    /** Resolved automatic-retry policy (defaults applied). */\n    retry: ResolvedRetryConfig__fe2336bea142;\n    /** Resolved global interceptors (all optional; default no-ops elsewhere). */\n    onError?: (err: unknown) => void;\n    onLimitExceeded?: (err: LimitExceededError) => void;\n    onUnauthorized?: (err: FartherShoreApiError) => void;\n    /** Runtime-installed 401 reaction (the managed auth layer's mid-session\n     *  recovery), wired by `<FsAuthProvider>` via `setOnUnauthorized`. Fires AFTER\n     *  the config-level `onUnauthorized`. Internal. */\n    onUnauthorizedManaged?: (err: FartherShoreApiError) => void;\n    /**\n     * LATCH: managed auth recovery has already fired for the CURRENT credential.\n     *\n     * The interceptor de-dupe is per-ERROR-OBJECT, which only collapses one\n     * logical failure surfacing through nested transports. A dashboard runs many\n     * independent reads concurrently, so a single lapsed session produces MANY\n     * distinct 401 errors — each firing its own recovery, each remounting the\n     * surface, each triggering a fresh round of reads. That feedback loop was\n     * measured at ~274 requests in 25s from ONE dashboard (~650/min against\n     * core's 100/min portal limit): the portal rate-limited itself.\n     *\n     * Recovery is a per-SESSION event, not a per-request one. Cleared whenever a\n     * new credential is installed, so a genuinely re-authed session can recover\n     * again.\n     */\n    managedRecoveryLatched?: boolean;\n    /** Last `X-RateLimit-*` snapshot observed on a gateway response (W8.5) — fed\n     *  by `fs.route.getWithMeta`, read by `useRouteRateLimit()`. Null until the first\n     *  gateway call that carried the headers. Internal. */\n    lastRateLimit: RateLimitSnapshot__934527ed940b | null;\n    /** Subscribers notified when `lastRateLimit` changes (the `useRouteRateLimit`\n     *  external store). Internal. */\n    rateLimitListeners: Set<() => void>;\n    /** A5-amend (T11) — the last LIMIT/throttle deny observed leaving the\n     *  transport, recorded by `fireInterceptors`. ADVISORY: the freshest known\n     *  RECENT deny, not a live poll (the gateway stays authoritative). Read by\n     *  `useLimitStatus()`. Null until the first limit deny is observed. Internal. */\n    lastLimitDeny: ObservedLimitDeny__ff379deca309 | null;\n    /** Subscribers notified when `lastLimitDeny` changes (the `useLimitStatus`\n     *  external store). Internal. */\n    limitDenyListeners: Set<() => void>;\n    /** Subscribers notified when the read cache is BUSTED (auth change, org\n     *  switch, entitlement mutation) — every mounted `useAsync` refetches.\n     *\n     *  Clearing the cache alone only stops the NEXT read from being served stale;\n     *  it does not re-run the reads already on screen. Without this notification a\n     *  `setSessionToken` after a 401 leaves every mounted surface showing the\n     *  signed-out result until something happens to remount it. Internal. */\n    readCacheListeners: Set<() => void>;\n    /** True when all SDK-owned network/auth paths are served by the local mock\n     *  transport. Internal, read by the managed auth layer. */\n    mockMode: boolean;\n}",
        "source": "packages/farthershore-js/dist/config.d.ts#L183",
        "description": "Mutable, per-client runtime context the resources share. Bootstrap fills in\nthe discovered product/env/gateway; sign-in fills in the session token.",
        "references": [
          {
            "name": "FartherShoreApiError",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
          },
          {
            "name": "FetchLike",
            "source": "packages/farthershore-js/dist/config.d.ts#L2"
          },
          {
            "name": "GatewayContextToken",
            "source": "packages/farthershore-js/dist/types.d.ts#L803"
          },
          {
            "name": "LimitExceededError",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L206"
          },
          {
            "name": "ObservedLimitDeny__ff379deca309",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L580"
          },
          {
            "name": "RateLimitSnapshot__934527ed940b",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
          },
          {
            "name": "ReadCacheEntry__ee67854da2b9",
            "source": "packages/farthershore-js/dist/cache.d.ts#L2"
          },
          {
            "name": "ResolvedRetryConfig__fe2336bea142",
            "source": "packages/farthershore-js/dist/config.d.ts#L29"
          },
          {
            "name": "TokenProvider",
            "source": "packages/farthershore-js/dist/config.d.ts#L80"
          }
        ]
      },
      {
        "name": "computeProgressBar__e4819393223f",
        "signature": "export declare function computeProgressBar__e4819393223f(used: number, total: number): {\n    pct: number;\n    status: \"ok\" | \"warning\" | \"error\";\n};",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L222",
        "description": "Progress-bar percentage + a coarse status color name for `used / total`.",
        "references": []
      },
      {
        "name": "describePlanChangeError__6199fc9db841",
        "signature": "export declare function describePlanChangeError__6199fc9db841(err: unknown, planName?: string): string;",
        "source": "packages/farthershore-js/dist/format/plan-transition.d.ts#L43",
        "description": "Subscriber-facing copy for a failed plan change. NEVER returns the platform\nmessage: core's text embeds subscription ids and internal route paths. Unknown\ncodes fall back to a generic line — the caller is expected to `console.error`\nthe raw error so a developer can still diagnose it.",
        "references": []
      },
      {
        "name": "describePlanKind__bc89a2a76f27",
        "signature": "export declare function describePlanKind__bc89a2a76f27(kind: PlanKind): PlanKindDescription;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L33",
        "description": "Describe a DECLARED plan kind: its human label and whether it bills usage.\nRead from `plan.kind` verbatim — nothing is inferred from the recurring\nfee or the structural meter list. Exhaustive over `PlanKind`.",
        "references": [
          {
            "name": "PlanKind",
            "source": "packages/farthershore-js/dist/types.d.ts#L108"
          },
          {
            "name": "PlanKindDescription",
            "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L16"
          }
        ]
      },
      {
        "name": "describePlanLimit__44aef0cd7254",
        "signature": "export declare function describePlanLimit__44aef0cd7254(limit: PlanLimit): string;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L320",
        "description": "One-line \"capacity dimension / window\" for a {@link PlanLimit} (e.g.\n\"600 requests / minute\") — the rate-limit row display for W10.",
        "references": [
          {
            "name": "PlanLimit",
            "source": "packages/farthershore-js/dist/types.d.ts#L111"
          }
        ]
      },
      {
        "name": "describePlanSummary__1087c6d6f26e",
        "signature": "export declare function describePlanSummary__1087c6d6f26e(plan: Plan): string;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L91",
        "description": "Plan summary line from the declared kind + recurring fee.",
        "references": [
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "entitlementBullets__777c9056ecca",
        "signature": "export declare function entitlementBullets__777c9056ecca(resourceLimits: Record<string, number> | null | undefined): string[];",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L173",
        "description": "Render-ready entitlement bullets from a plan's typed entitlement maps:\nnumeric enforced limits as \"Up to N …\" and true boolean limits as labels.\n`false` / 0 entries are omitted. Shared by every plan-card bullet\nsynthesizer (SDK + template) so all surfaces agree.",
        "references": []
      },
      {
        "name": "filterSelectablePlans__491d00098a7d",
        "signature": "export declare function filterSelectablePlans__491d00098a7d(plans: Plan[], currentPlan: Plan | null | undefined): Plan[];",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L124",
        "description": "The plans a subscriber may SELECT alongside `currentPlan`, sorted for\ndisplay. (Named `filterUpgradePlans` until L11 — \"upgrade\" stopped being an\nhonest name once downgrades were offered.)\n\nIt used to carry two DOWNGRADE-BLOCKING rules, and both were wrong:\n\n 1. a blanket `kind === \"free\"` drop, and\n 2. a strict `targetFee > currentFee` comparison,\n\nso a subscriber on Pro was shown no cheaper plan at all — the only action\nleft was \"Cancel Subscription\", even though core happily performs\npaid→cheaper and paid→free as an END-OF-PERIOD transition (see\n`manage-subscription-lifecycle.ts`: `targetCents > currentCents` picks\n`immediate`, everything else is `end_of_period`). The fee comparison was\nalso blind to usage-billed kinds (`usage` / `prepaid` / `hybrid` /\n`custom`), whose money is metered consumption or a prepaid funding purchase\nand whose recurring fee is routinely 0 — the same mistake the `Plan.kind`\ndoc warns about: do not infer the price from a zero recurring fee.\n\nThe rule is now simply: every plan is selectable EXCEPT the one the\nsubscriber is already on. The single remaining exception is the free FLOOR\nfor a subscriber who is already on a free plan — offering them the floor\nthey are standing on is a choice already made (see PlansTable).\n\nThe CTA copy for each remaining plan must state the direction and its\ntiming — see `format/plan-transition`'s `planChangeCtaLabel` /\n`planChangeTimingNote`.",
        "references": [
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "formatCatalogExhaustion__22106a32de44",
        "signature": "export declare function formatCatalogExhaustion__22106a32de44(exhaustion: PlanPricingDisplay[\"exhaustion\"]): string | null;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L402",
        "description": "What happens when funding runs out, in a buyer's words.",
        "references": [
          {
            "name": "PlanPricingDisplay",
            "source": "packages/farthershore-js/dist/types.d.ts#L248"
          }
        ]
      },
      {
        "name": "formatCatalogFunding__e3d315174586",
        "signature": "export declare function formatCatalogFunding__e3d315174586(funding: PlanFunding[], opts?: MoneyFormatOptions): string | null;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L388",
        "description": "The \"Included: …\" line for a plan's funding, or null when it declares none.\nRenders the builder's authored multiplier framing when there is one — \"$60\n(12x $5)\" — because that label is the product's own marketing and is exact\nby construction (`baseMinor === amountMinor / factor`).",
        "references": [
          {
            "name": "MoneyFormatOptions",
            "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L126"
          },
          {
            "name": "PlanFunding",
            "source": "packages/farthershore-js/dist/types.d.ts#L232"
          }
        ]
      },
      {
        "name": "formatCatalogRate__1c4069e5c4b5",
        "signature": "export declare function formatCatalogRate__1c4069e5c4b5(amount: PricingAmount, measurementKey: string, opts?: MoneyFormatOptions): string;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L368",
        "description": "Render one catalog rate as a price per unit of its measure — \"$0.004/page\",\nor \"$0.60 per million tokens\" when the per-unit rate is too small to read.\n\nA rate below $0.0001 per unit renders per million: \"$0.0000006/token\" is a\nstring no buyer can compare at a glance, and per-million is how that kind of\npricing is quoted everywhere. The threshold reads the RATE, not the measure\nname, so any business metering something tiny gets the readable form without\nthe SDK needing to know what a token is.\n\n`amount.rounded` means the exact rational did not terminate in decimal, so\nthe figure is a truncation and is marked \"~\" rather than quoted as the price.",
        "references": [
          {
            "name": "MoneyFormatOptions",
            "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L126"
          },
          {
            "name": "PricingAmount",
            "source": "packages/farthershore-js/dist/types.d.ts#L190"
          }
        ]
      },
      {
        "name": "formatCatalogRule__8f5b591f982d",
        "signature": "export declare function formatCatalogRule__8f5b591f982d(rule: PricingRule, opts?: MoneyFormatOptions): string;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L383",
        "description": "One catalog rule as a card line: \"$0.004/page digital\", or the tier ladder\n\"$0.004/page up to 15,000, then $0.003/page\".",
        "references": [
          {
            "name": "MoneyFormatOptions",
            "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L126"
          },
          {
            "name": "PricingRule",
            "source": "packages/farthershore-js/dist/types.d.ts#L206"
          }
        ]
      },
      {
        "name": "formatCents__0834b254bd71",
        "signature": "export declare function formatCents__0834b254bd71(cents: number, opts?: MoneyFormatOptions): string;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L134",
        "description": "Format an integer-cents value as \"$X\" (or \"$X.YY\" when fractional). Pass\n`{ currency, locale }` to localize (default USD/en-US).",
        "references": [
          {
            "name": "MoneyFormatOptions",
            "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L126"
          }
        ]
      },
      {
        "name": "formatDate__eb204cfcfad9",
        "signature": "export declare function formatDate__eb204cfcfad9(value: string | number | Date | null | undefined, opts?: DateFormatOptions): string;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L160",
        "description": "Locale-aware date formatter for the pervasive SDK timestamps (trial / period\nend, audit entries, scheduled transitions). Accepts an ISO string, a `Date`,\nor epoch ms. Returns \"\" for a null/undefined/unparseable value so callers can\ninline it without a guard. Default: en-US, medium style, date only.",
        "references": [
          {
            "name": "DateFormatOptions",
            "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L146"
          }
        ]
      },
      {
        "name": "formatMeasureBreakdown__d29c7c37d4b8",
        "signature": "export declare function formatMeasureBreakdown__d29c7c37d4b8(measures: readonly {\n    label: string;\n    used: number;\n}[]): string | null;",
        "source": "packages/farthershore-js/dist/format/usage-labels.d.ts#L17",
        "description": "The secondary breakdown sentence rendered UNDER the meter rows — the\nmeasures that rolled up into them, e.g. `\"OCR pages 2 · Pages 2\"`.\n\nReturns null when there is nothing to break down, so a caller can inline it.",
        "references": []
      },
      {
        "name": "formatMinimumSpend__703e50763b9b",
        "signature": "export declare function formatMinimumSpend__703e50763b9b(plan: Plan): string | null;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L162",
        "description": "One-line minimum-spend floor summary, or null when the plan has no floor.",
        "references": [
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "formatNanos__88e9bbf170bb",
        "signature": "export declare function formatNanos__88e9bbf170bb(nanos: string | bigint, opts?: MoneyFormatOptions): string;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L144",
        "description": "Format a nanodollar amount (the bill preview's decimal-string wire form, or\na bigint) as a currency string — bigint arithmetic end to end, so a total\nbeyond 2^53 nanos never loses precision and NO amount is ever parsed to a\nfloat. Sub-cent amounts keep up to 6 fraction digits (\"$0.000125\"); cent\nand whole amounts show 2 / 0 (\"$12.34\", \"$50\"). Rounds half-up at the last\nkept digit. Malformed input (not an optionally-signed integer string) → \"\".\nPass `{ currency, locale }` to localize (default USD/en-US).",
        "references": [
          {
            "name": "MoneyFormatOptions",
            "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L126"
          }
        ]
      },
      {
        "name": "formatPlanLimitWindow__d3866d671c3e",
        "signature": "export declare function formatPlanLimitWindow__d3866d671c3e(window: PlanLimit[\"window\"]): string;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L317",
        "description": "Human label for a {@link PlanLimit}'s window — a named window verbatim\n(\"month\", \"minute\"), a custom window mapped to second/minute/hour when it's a\nround multiple, else `Ns`. Pure (the rate-limit display helper for W10).",
        "references": [
          {
            "name": "PlanLimit",
            "source": "packages/farthershore-js/dist/types.d.ts#L111"
          }
        ]
      },
      {
        "name": "formatPlanPrice__fc05951fffba",
        "signature": "export declare function formatPlanPrice__fc05951fffba(plan: Plan): {\n    price: string;\n    period: string;\n};",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L69",
        "description": "Render-ready headline price for a plan card: `{ price, period }`.\n - free tier          → `{ \"$0\", \"forever\" }`\n - no recurring fee   → `{ <kind headline>, \"\" }` (e.g. \"Usage-based\")\n - otherwise          → `{ \"$N[.NN]\", \"/mo\" | \"/yr\" }` (exact cents + the\n   plan's REAL billing cadence — built on {@link presentPlanPrice}).",
        "references": [
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "formatPlanPriceDetail__ce62e738fa5f",
        "signature": "export declare function formatPlanPriceDetail__ce62e738fa5f(plan: Plan): string | null;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L89",
        "description": "Price detail next to the plan name; null when it would echo the name.",
        "references": [
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "formatRateLimitText__902f4a94c331",
        "signature": "export declare function formatRateLimitText__902f4a94c331(plan: Plan | null, meters: Meter[]): string | null;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L256",
        "description": "",
        "references": [
          {
            "name": "Meter",
            "source": "packages/farthershore-js/dist/types.d.ts#L15"
          },
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "FsDenyEnvelope__adf7ef9f2448",
        "signature": "export interface FsDenyEnvelope__adf7ef9f2448 {\n    /**\n     * The semantic class of limit hit — the primary axis clients branch on.\n     * `null` ONLY when the wire carried a `limitClass` string the SDK's closed\n     * mirror does NOT know (a FUTURE class added to contracts but not yet shipped\n     * in this bundle, T13). In that case the raw value is preserved on\n     * {@link unknownLimitClass} and the whole `_fs` block on {@link raw} so a\n     * client can still render + introspect the deny, while the SDK refuses to\n     * invent a known-class facet for it. A KNOWN class is always non-null.\n     */\n    limitClass: FsLimitClass | null;\n    /**\n     * T13 — the raw `limitClass` string when it is NOT a member of the closed\n     * {@link FsLimitClass} mirror (a future/unknown class). Undefined for every\n     * known class. Lets a forward-compat client surface \"a `<unknownLimitClass>`\n     * limit was hit\" + a debug breadcrumb without the SDK guessing semantics.\n     */\n    unknownLimitClass?: string;\n    /**\n     * T13 — the raw `_fs` block exactly as it arrived on the wire, preserved for\n     * debugging/forwarding. Always present (even for a known class) so a developer\n     * can inspect fields this bundle's typed projection doesn't model yet.\n     */\n    raw?: Record<string, unknown>;\n    /** The limit's scope when known (e.g. `subscription`, `org`, `route`). */\n    scope?: string;\n    /** Actor facet for actor-scoped subscriber limits. Carries kind only; raw\n     *  actor ids must never be present in deny envelopes. */\n    actorScope?: \"member\" | \"service_account\";\n    /** The metered/resource dimension when known (e.g. `tokens`, `requests`). */\n    metric?: string;\n    /** Unix epoch ms when the limit window resets, when known. */\n    reset?: number;\n    /** Units remaining in the window at decision time, when known. */\n    remaining?: number;\n    /** Units already consumed in the window at decision time, when known. */\n    used?: number;\n    /** The cap value (the ceiling that was hit), when known. */\n    limit?: number;\n    /** True when retrying the SAME request can succeed (velocity/transient cap). */\n    retrySafe: boolean;\n    /** True when the caller must MODIFY the request (reduce size / change plan)\n     *  before it can succeed — the `capacity`/`spend` affordances. */\n    mustModify: boolean;\n    /** Provider-supplied reason verbatim, when relayed upstream (an `adaptive`\n     *  throttle). */\n    providerReason?: string;\n    /** Whether the platform or an upstream provider decided the limit. */\n    limitOrigin: FsLimitOrigin__1d4de1805fa7;\n    /** Human-facing next step for the END USER, when one applies. */\n    userAction?: string;\n    /** Human-facing next step for the DEVELOPER/operator, when one applies. */\n    devAction?: string;\n    /** The per-attempt request id (correlates with logs/traces). */\n    requestId?: string;\n    /** The gateway decision id (correlates with the usage event / audit). */\n    decisionId?: string;\n    /** Which exact constraint denied (projects from\n     *  `LimitDecision.blockingConstraintId`); present on a limit deny when known. */\n    blockingConstraintId?: string;\n    /** The recommended client reaction. */\n    reaction: FsLimitReaction__06a9e09be641;\n    /** Envelope schema version. Bumped on a NON-additive envelope change. */\n    envelopeVersion?: number;\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L109",
        "description": "The `_fs` deny envelope a limit deny body carries under the `_fs` key\n(`{ error, code, _fs: FsDenyEnvelope }`). A SUPERSET of {@link LimitDescriptor}:\na single self-describing block telling a client WHAT class of limit was hit,\nWHY, and what to DO — without re-deriving it from the wire code + status. A\nhand-mirror of the contracts `FsDenyEnvelope` (the published surface stays\ncontracts-free); the field set is bound to the source by the drift guard. The\noptional fields are absent when not known so the envelope stays byte-minimal.",
        "references": [
          {
            "name": "FsLimitClass",
            "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
          },
          {
            "name": "FsLimitOrigin__1d4de1805fa7",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
          },
          {
            "name": "FsLimitReaction__06a9e09be641",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
          }
        ]
      },
      {
        "name": "FsLimitOrigin__1d4de1805fa7",
        "signature": "export type FsLimitOrigin__1d4de1805fa7 = \"platform\" | \"provider\" | \"subscriber\";",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L96",
        "description": "Where a limit was decided. Mirrors the contracts `LimitOrigin` (`platform` —\na plan/entitlement limit the platform owns; `provider` — an upstream throttle\nthe platform relays).",
        "references": []
      },
      {
        "name": "FsLimitReaction__06a9e09be641",
        "signature": "export type FsLimitReaction__06a9e09be641 = \"none\" | \"backoff_retry\" | \"wait_then_retry\" | \"queue\" | \"reduce_then_retry\" | \"fallback\" | \"upgrade\";",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L99",
        "description": "What a client should DO about a limit deny — the recommended reaction.\nMirrors the contracts `LimitReaction`.",
        "references": []
      },
      {
        "name": "getScheduledTransitionCopy__d0d68b298653",
        "signature": "export declare function getScheduledTransitionCopy__d0d68b298653(transition: SubscriberScheduledTransition | null | undefined): ScheduledTransitionCopy__a08f28383495 | null;",
        "source": "packages/farthershore-js/dist/format/subscriber-lifecycle.d.ts#L32",
        "description": "",
        "references": [
          {
            "name": "ScheduledTransitionCopy__a08f28383495",
            "source": "packages/farthershore-js/dist/format/subscriber-lifecycle.d.ts#L2"
          },
          {
            "name": "SubscriberScheduledTransition",
            "source": "packages/farthershore-js/dist/types.d.ts#L832"
          }
        ]
      },
      {
        "name": "getSubscriberPromoCopy__a02fd2e64736",
        "signature": "export declare function getSubscriberPromoCopy__a02fd2e64736(promo: SubscriberActivePromo | null | undefined): SubscriberPromoCopy__237f8d642833 | null;",
        "source": "packages/farthershore-js/dist/format/subscriber-lifecycle.d.ts#L33",
        "description": "",
        "references": [
          {
            "name": "SubscriberActivePromo",
            "source": "packages/farthershore-js/dist/types.d.ts#L815"
          },
          {
            "name": "SubscriberPromoCopy__237f8d642833",
            "source": "packages/farthershore-js/dist/format/subscriber-lifecycle.d.ts#L19"
          }
        ]
      },
      {
        "name": "getSubscriberStatusPresentation__3d2be580d857",
        "signature": "export declare function getSubscriberStatusPresentation__3d2be580d857(subscriber: SubscriberDetail, resolvedPlanName?: string | null): SubscriberStatusPresentation__8a54b463ce40;",
        "source": "packages/farthershore-js/dist/format/subscriber-lifecycle.d.ts#L34",
        "description": "",
        "references": [
          {
            "name": "SubscriberDetail",
            "source": "packages/farthershore-js/dist/types.d.ts#L859"
          },
          {
            "name": "SubscriberStatusPresentation__8a54b463ce40",
            "source": "packages/farthershore-js/dist/format/subscriber-lifecycle.d.ts#L23"
          }
        ]
      },
      {
        "name": "humanizeMeasureKey__87b59e8494f9",
        "signature": "export declare function humanizeMeasureKey__87b59e8494f9(key: string): string;",
        "source": "packages/farthershore-js/dist/format/usage-labels.d.ts#L10",
        "description": "Humanize a builder-authored measure / meter key into a UI label:\n`\"ocr_pages\"` → `\"OCR pages\"`, `\"pages\"` → `\"Pages\"`, `\"gpu_seconds\"` →\n`\"GPU seconds\"`. Sentence case with acronyms preserved.\n\nThis is the FALLBACK only — a served meter's `display` always wins. It\nexists so a measure the product meters but does not publish in its meter\ncatalog reads as English rather than as a database column.",
        "references": []
      },
      {
        "name": "humanizeSubscriberStatus__a8dba22c416c",
        "signature": "export declare function humanizeSubscriberStatus__a8dba22c416c(status: string | null | undefined): string;",
        "source": "packages/farthershore-js/dist/format/subscriber-lifecycle.d.ts#L31",
        "description": "",
        "references": []
      },
      {
        "name": "isCheckoutOnlyTransitionError__ed7cb1b92a62",
        "signature": "export declare function isCheckoutOnlyTransitionError__ed7cb1b92a62(err: unknown): boolean;",
        "source": "packages/farthershore-js/dist/format/plan-transition.d.ts#L36",
        "description": "True when `err` is core telling us the change must start at checkout.",
        "references": []
      },
      {
        "name": "isTokenBusiness__5fb93c023117",
        "signature": "export declare function isTokenBusiness__5fb93c023117(meters: Meter[]): boolean;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L252",
        "description": "",
        "references": [
          {
            "name": "Meter",
            "source": "packages/farthershore-js/dist/types.d.ts#L15"
          }
        ]
      },
      {
        "name": "labelResourceLimitKey__6d50ec5c1da1",
        "signature": "export declare function labelResourceLimitKey__6d50ec5c1da1(key: string): string;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L166",
        "description": "Public alias: humanize a builder-defined resource key into a UI\nlabel (\"api_keys\" → \"API keys\"). The single source every surface uses to\nlabel a resource key (the resource-limit-usage card, plan cards).",
        "references": []
      },
      {
        "name": "LegalAcceptance__cc2291cc0442",
        "signature": "export interface LegalAcceptance__cc2291cc0442 {\n    kind: string;\n    version: string;\n    contentHash: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L80",
        "description": "",
        "references": []
      },
      {
        "name": "LegalConsentStatus__2c5f3ab016cd",
        "signature": "export interface LegalConsentStatus__2c5f3ab016cd {\n    required: boolean;\n    documents: LegalDocumentStatus__f2d5a2d96393[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L76",
        "description": "",
        "references": [
          {
            "name": "LegalDocumentStatus__f2d5a2d96393",
            "source": "packages/farthershore-js/dist/types.d.ts#L67"
          }
        ]
      },
      {
        "name": "LegalDocumentAcceptanceMode__6e040b71b235",
        "signature": "export type LegalDocumentAcceptanceMode__6e040b71b235 = \"agree\" | \"acknowledge\" | \"none\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L60",
        "description": "",
        "references": []
      },
      {
        "name": "LegalDocumentReference__0e8dba55b6a6",
        "signature": "export interface LegalDocumentReference__0e8dba55b6a6 {\n    title: string;\n    url: string;\n    acceptanceMode: LegalDocumentAcceptanceMode__6e040b71b235;\n    effectiveDate?: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L61",
        "description": "",
        "references": [
          {
            "name": "LegalDocumentAcceptanceMode__6e040b71b235",
            "source": "packages/farthershore-js/dist/types.d.ts#L60"
          }
        ]
      },
      {
        "name": "LegalDocumentStatus__f2d5a2d96393",
        "signature": "export interface LegalDocumentStatus__f2d5a2d96393 extends LegalDocumentReference__0e8dba55b6a6 {\n    kind: string;\n    version: string;\n    contentHash: string;\n    consentLabel?: string;\n    changeNote?: string;\n    accepted: boolean;\n    acceptedAt?: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L67",
        "description": "",
        "references": [
          {
            "name": "LegalDocumentReference__0e8dba55b6a6",
            "source": "packages/farthershore-js/dist/types.d.ts#L61"
          }
        ]
      },
      {
        "name": "LimitDescriptor__01693492a147",
        "signature": "export interface LimitDescriptor__01693492a147 {\n    /** Stable identifier for the limit that was hit, e.g. `resource:widgets`. */\n    limitCode: string;\n    /** The metered/resource dimension, when known (e.g. `widgets`, `requests`). */\n    dimension: string | null;\n    /** The cap the subscriber is at, when known. */\n    currentCapacity: number | null;\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L85",
        "description": "The machine-readable limit descriptor the gateway/core attach to a limit\ndeny body (`{ error: { code, message, limitCode, dimension, currentCapacity } }`).\nThe SDK turns this into an upgrade prompt — see {@link LimitExceededError}.",
        "references": []
      },
      {
        "name": "logPlanChangeError__b74061738e9e",
        "signature": "export declare function logPlanChangeError__b74061738e9e(err: unknown): void;",
        "source": "packages/farthershore-js/dist/format/plan-transition.d.ts#L45",
        "description": "Log the raw failure for developers while the UI shows mapped copy.",
        "references": []
      },
      {
        "name": "NonEmptyPermissionList__ca911cbb6fa0",
        "signature": "export type NonEmptyPermissionList__ca911cbb6fa0 = [string, ...string[]];",
        "source": "packages/farthershore-js/dist/types.d.ts#L440",
        "description": "A service-account authority request must contain at least one permission.",
        "references": []
      },
      {
        "name": "ObservedLimitDeny__ff379deca309",
        "signature": "export interface ObservedLimitDeny__ff379deca309 {\n    /** The semantic class, or null for an UNKNOWN/future class (T13). */\n    limitClass: FsLimitClass | null;\n    /** The raw `limitClass` string when it is outside the closed mirror (T13). */\n    unknownLimitClass?: string;\n    /** The recommended client reaction. */\n    reaction: FsLimitReaction__06a9e09be641;\n    /** Whether the platform or an upstream provider decided the deny. */\n    limitOrigin: FsLimitOrigin__1d4de1805fa7;\n    /** The provider-supplied reason verbatim, when this relayed an upstream\n     *  throttle (an adaptive deny). */\n    providerReason: string | null;\n    /** When the limit window resets, when known. */\n    reset: Date | null;\n    /** Units remaining in the window at decision time, when known. */\n    remaining: number | null;\n    /** The cap value hit, when known. */\n    limit: number | null;\n    /** The HTTP status of the deny. */\n    status: number;\n    /** The wire `code` of the deny. */\n    code: string;\n    /** The gateway decision id, when known. */\n    decisionId: string | null;\n    /** Wall-clock instant (epoch ms) the deny was observed — drives staleness. */\n    observedAt: number;\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L580",
        "description": "A5-amend (T11) — a snapshot of a single OBSERVED limit/throttle deny, captured\nas it leaves the transport. The ADVISORY input to `useLimitStatus()`: the\nfreshest known RECENT deny (NOT a live poll — the gateway stays authoritative).\nProvider-neutral; forward-compat (an unknown future class keeps `limitClass`\nnull + the raw value on `unknownLimitClass`, never crashing — T13).",
        "references": [
          {
            "name": "FsLimitClass",
            "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
          },
          {
            "name": "FsLimitOrigin__1d4de1805fa7",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
          },
          {
            "name": "FsLimitReaction__06a9e09be641",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
          }
        ]
      },
      {
        "name": "paymentHealth__82ab0e675721",
        "signature": "export declare function paymentHealth__82ab0e675721(sub: {\n    status?: string | null;\n    paymentHealth?: string | null;\n}): PaymentHealth;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L342",
        "description": "Derive a coarse payment-health state + a remediation CTA from the\nsubscription's `paymentHealth` / `status`. `past_due` and `incomplete` both\npoint the subscriber at the billing portal to fix a payment; `ok` carries no\nCTA. `<PaymentRequiredGate>` (mounted by the Root) renders this.",
        "references": [
          {
            "name": "PaymentHealth",
            "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L330"
          }
        ]
      },
      {
        "name": "PlanKindWire__a95f9171680c",
        "signature": "export type PlanKindWire__a95f9171680c = \"free\" | \"flat\" | \"usage\" | \"prepaid\" | \"hybrid\" | \"trial\" | \"custom\";",
        "source": "packages/farthershore-js/dist/generated/catalog-types.d.ts#L25",
        "description": "The DECLARED plan kind (`plan.kind.*` in the Business SDK; the ONE plan\nkind enum, `@farthershore/contracts/commerce` `planKindSchema`).",
        "references": []
      },
      {
        "name": "PlanMeterWire__47c3d2492e8a",
        "signature": "export interface PlanMeterWire__47c3d2492e8a {\n    dimension: string;\n    /** Aggregation formula (`linear` sum | `active_count` gauge |\n     *  `event_count` per-event). OPTIONAL — absent means `linear`. */\n    kind?: \"linear\" | \"active_count\" | \"event_count\";\n}",
        "source": "packages/farthershore-js/dist/generated/catalog-types.d.ts#L17",
        "description": "A structural metered dimension on a plan — dimension + aggregation kind,\nNO money (`@farthershore/contracts/portal` `PortalPlan.meters[number]`).\nRates, allowances, and projected bills come from the bill-preview API,\nnever from the plan.",
        "references": []
      },
      {
        "name": "PlanOffer__5ab47cb32b7d",
        "signature": "export interface PlanOffer__5ab47cb32b7d {\n    /** The immutable CompiledPlan version id (equals `plan.id`). */\n    compiledPlanId: string;\n    /** The plan, in the same wire shape as `list()` / the portal catalog. */\n    plan: Plan;\n    /** The billing fingerprint of THIS plan version's economic content. Pass it\n     *  to `subscribe()` / `startOnboarding()` as `offerFingerprint` to get a\n     *  409 PLAN_OFFER_CHANGED instead of a silent price change. */\n    offerFingerprint: string;\n}",
        "source": "packages/farthershore-js/dist/resources/plans.d.ts#L31",
        "description": "One entry from `getPlanOffers()` — a currently-purchasable plan version.",
        "references": [
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "planPriceHeadline__3b389a69aee5",
        "signature": "export declare function planPriceHeadline__3b389a69aee5(plan: Plan): {\n    price: string;\n    period: string;\n};",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L84",
        "description": "Headline price + period for a plan card: the declared kind + exact\nrecurring fee + real cadence, with a fee-less usage-billed plan carrying\n\"priced per the catalog\" in place of a cadence.",
        "references": [
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "planRequiresCheckoutActivation__895e488c9dd3",
        "signature": "export declare function planRequiresCheckoutActivation__895e488c9dd3(plan: Plan): boolean;",
        "source": "packages/farthershore-js/dist/format/plan-transition.d.ts#L16",
        "description": "Whether activating `plan` requires a Stripe checkout (i.e. it is chargeable).\nMirrors core's `targetRequiresCheckoutActivation`: the DECLARED kind decides,\nand only when the kind is missing does the recurring fee stand in for it.",
        "references": [
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "PlanTransitionRoute__6434afad523c",
        "signature": "export type PlanTransitionRoute__6434afad523c = \"checkout\" | \"change-plan\";",
        "source": "packages/farthershore-js/dist/format/plan-transition.d.ts#L3",
        "description": "Which endpoint a move to `plan` has to go through.",
        "references": []
      },
      {
        "name": "PlanTransitionSubscription__b3df65cdd542",
        "signature": "export interface PlanTransitionSubscription__b3df65cdd542 {\n    /** True once the subscriber has a Stripe customer/subscription core can\n     *  repin. Free subs that never touched Stripe are `false`. */\n    canManageInStripe: boolean;\n}",
        "source": "packages/farthershore-js/dist/format/plan-transition.d.ts#L6",
        "description": "The minimal subscription facts the routing decision needs. `null` means \"no\nsubscription read available\" — treated as \"no managed billing\".",
        "references": []
      },
      {
        "name": "pluralizeUnit__54c9aa5d8d69",
        "signature": "export declare function pluralizeUnit__54c9aa5d8d69(unit: string, count: number): string;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L195",
        "description": "Pluralize a meter's unit noun for `count`. Meter units are builder-authored\nsingular nouns (\"page\", \"request\"), so a fixed quota rendered \"1,000 page\nincluded\" reads as a typo. Naive English: append \"s\" unless the unit already\nlooks plural or uncountable, and leave anything non-alphabetic (symbols,\nabbreviations like \"GB\" or \"req/s\") untouched.",
        "references": []
      },
      {
        "name": "PrefetchSurface__2b22bd2b6c45",
        "signature": "export interface PrefetchSurface__2b22bd2b6c45 {\n    /** Warm the host→business resolve (joins the memoized bootstrap). */\n    boot(): void;\n    /** Warm `GET /me` (subscriber context) for dashboard/account surfaces. */\n    me(): void;\n    /** Warm the default usage snapshot (what `<UsageCard>`/the usage page read). */\n    usage(): void;\n    /** Warm the API-key list. */\n    apiKeys(): void;\n    /** Warm the subscription read (billing surfaces). */\n    subscription(): void;\n}",
        "source": "packages/farthershore-js/dist/client.d.ts#L24",
        "description": "Fire-and-forget cache warmers for navigation intent (sidebar hover/focus,\nroute preload). Each starts the same read-through-cached request the\ndestination page will make, so the page's hooks join the in-flight promise\ninstead of paying a fresh round-trip after the route renders. Bootstrap is\nensured first; all errors are swallowed — a hover is a hint, and the page's\nown read surfaces any real failure.",
        "references": []
      },
      {
        "name": "prepaidBalanceNanos__82cd3a195fcf",
        "signature": "export declare function prepaidBalanceNanos__82cd3a195fcf(preview: BillPreview | null | undefined): string | null;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L400",
        "description": "Remaining PREPAID balance in the bill preview, as nanodollars — or null when\nthere is none to report.\n\nNull is returned for an OPAQUE preview (which deliberately carries no\namounts) and for a malformed / absent `remainingNanos`. It is never coerced\nto \"0\": \"we cannot tell you your balance\" and \"your balance is zero\" are\ndifferent statements, and only one of them should make a subscriber top up.\nSums every spendable prepaid bucket — a subscriber who topped up twice has\ntwo, and showing only the first would understate the wallet.",
        "references": [
          {
            "name": "BillPreview",
            "source": "packages/farthershore-js/dist/types.d.ts#L1284"
          }
        ]
      },
      {
        "name": "prepaidFundingBucket__c3b93630376c",
        "signature": "export declare function prepaidFundingBucket__c3b93630376c(plan: Plan): PlanFunding | null;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L80",
        "description": "The plan's declared PREPAID funding bucket, or null when it declares none.\n\nA prepaid plan's money is the wallet the subscriber loads, not a recurring\nfee — this is the one amount that means anything on such a plan's card, and\nit is also the natural denomination to sell more of.",
        "references": [
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          },
          {
            "name": "PlanFunding",
            "source": "packages/farthershore-js/dist/types.d.ts#L232"
          }
        ]
      },
      {
        "name": "presentPlanPrice__dbe194aa1865",
        "signature": "export declare function presentPlanPrice__dbe194aa1865(plan: Plan, opts?: MoneyFormatOptions): PlanPricePresentation;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L63",
        "description": "Present a plan's price EXACTLY. Fixes the classic lies:\n  - `$1999/yr` presents `\"$19.99\" + \"/yr\"` — exact cents, real cadence\n    (never `.toFixed(0)`-rounded to \"$19\", never a hardcoded \"/mo\").\n  - A `usage` plan presents \"Usage-based\", NOT \"Free\"/\"$0\".\nThe plan carries no per-unit money, so there is no usage summary here —\nusage economics come from the bill preview.\nPass `{ currency, locale }` to localize; defaults to the plan's own\n`currency` (USD when the wire omitted it) and en-US.",
        "references": [
          {
            "name": "MoneyFormatOptions",
            "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L126"
          },
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          },
          {
            "name": "PlanPricePresentation",
            "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L36"
          }
        ]
      },
      {
        "name": "quotaForDimension__765de95b18ad",
        "signature": "export declare function quotaForDimension__765de95b18ad(plan: Plan | null, dimension: string): number | null;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L220",
        "description": "Monthly included quota for a dimension on a plan, or null when none — the\nplan's month-window limit rule for that dimension. (Plans carry no meter\nmoney, so there is no other source of an included allowance here; funded\nallowances come from the bill preview.)",
        "references": [
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "quotaLines__aba5f4afb4f1",
        "signature": "export declare function quotaLines__aba5f4afb4f1(plan: Plan): {\n    key: string;\n    text: string;\n}[];",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L212",
        "description": "Month-window quota lines for public plan cards (\"{capacity} {dimension}/mo\").",
        "references": [
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "RateLimitSnapshot__934527ed940b",
        "signature": "export interface RateLimitSnapshot__934527ed940b {\n    /** Requests left in the current window, or null when the header is absent. */\n    remaining: number | null;\n    /** When the window resets, or null when the header is absent. The\n     *  `X-RateLimit-Reset` value is unix-epoch SECONDS. */\n    resetAt: Date | null;\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L8",
        "description": "Parsed `X-RateLimit-*` snapshot the gateway attaches to throttle responses.\nThe gateway emits `X-RateLimit-Remaining` + `X-RateLimit-Reset` but NOT\n`X-RateLimit-Limit`, so there is deliberately no `limit` field.",
        "references": []
      },
      {
        "name": "ReadCacheEntry__ee67854da2b9",
        "signature": "export interface ReadCacheEntry__ee67854da2b9 {\n    at: number;\n    promise: Promise<unknown>;\n}",
        "source": "packages/farthershore-js/dist/cache.d.ts#L2",
        "description": "",
        "references": []
      },
      {
        "name": "ResolvedRetryConfig__fe2336bea142",
        "signature": "export interface ResolvedRetryConfig__fe2336bea142 {\n    maxAttempts: number;\n    retryOn: (err: unknown) => boolean;\n    respectRetryAfter: boolean;\n    sleep: (ms: number) => Promise<void>;\n}",
        "source": "packages/farthershore-js/dist/config.d.ts#L29",
        "description": "Resolved retry policy with all defaults applied (internal).",
        "references": []
      },
      {
        "name": "resolvePlanTransitionRoute__704c66191ea4",
        "signature": "export declare function resolvePlanTransitionRoute__704c66191ea4(plan: Plan, subscription: PlanTransitionSubscription__b3df65cdd542 | null | undefined): PlanTransitionRoute__6434afad523c;",
        "source": "packages/farthershore-js/dist/format/plan-transition.d.ts#L22",
        "description": "The endpoint a move from the subscriber's current state to `plan` must use.\n`checkout` whenever the target is chargeable and there is no managed billing\nto repin; `change-plan` otherwise (paid↔paid, or a move to the free floor).",
        "references": [
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          },
          {
            "name": "PlanTransitionRoute__6434afad523c",
            "source": "packages/farthershore-js/dist/format/plan-transition.d.ts#L3"
          },
          {
            "name": "PlanTransitionSubscription__b3df65cdd542",
            "source": "packages/farthershore-js/dist/format/plan-transition.d.ts#L6"
          }
        ]
      },
      {
        "name": "ResourceLimitUsage__a25d6e733a8f",
        "signature": "export type ResourceLimitUsage__a25d6e733a8f = Record<string, number>;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L346",
        "description": "",
        "references": []
      },
      {
        "name": "RetryConfig__bec25563219c",
        "signature": "export interface RetryConfig__bec25563219c {\n    /** Total attempts including the first (so `2` = one retry). Default 3.\n     *  Set to `1` to disable retry. */\n    maxAttempts?: number;\n    /** Predicate deciding whether a thrown error is retryable. Defaults to the\n     *  canonical {@link isRetryable} (429 + transient 502/503/504 + network faults\n     *  + the named retryable deny codes). */\n    retryOn?: (err: unknown) => boolean;\n    /** Honor a `Retry-After` header for the backoff delay when present. Default\n     *  true. */\n    respectRetryAfter?: boolean;\n    /** Override the delay primitive (tests inject a no-op; default is a\n     *  timer-based sleep). Not part of the public surface — internal/testing. */\n    sleep?: (ms: number) => Promise<void>;\n}",
        "source": "packages/farthershore-js/dist/config.d.ts#L13",
        "description": "Automatic-retry policy for transient failures. Retry is ON by default with\nsensible bounds — a developer who configures nothing already gets correct\nback-off behaviour on throttles (429), the transient gateway/dependency faults\n(502/503/504), and network failures (DNS/connection). This block only TUNES or\nopts out.\n\nOnly idempotent reads (GET) are ever retried; non-idempotent methods\n(POST/PATCH/PUT/DELETE) and aborted requests are never retried.",
        "references": []
      },
      {
        "name": "ScheduledTransitionCopy__a08f28383495",
        "signature": "export type ScheduledTransitionCopy__a08f28383495 = {\n    kind: string;\n    statusLabel: string;\n    statusSubtext: string;\n    isPendingCancellation: boolean;\n};",
        "source": "packages/farthershore-js/dist/format/subscriber-lifecycle.d.ts#L2",
        "description": "",
        "references": []
      },
      {
        "name": "selectAutoEnrollPlan__91fe58a3dbee",
        "signature": "export declare function selectAutoEnrollPlan__91fe58a3dbee(plans: readonly Plan[]): Plan | null;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L12",
        "description": "The plan a new account should land on automatically, or `null` when the\nbusiness offers no free tier.\n\nThe free tier is a FLOOR, not an option among options: new accounts are\nauto-enrolled on it, and a cancelled paid plan falls back to it at the end\nof the period. `null` is a normal outcome, not a failure: when every plan is\npaid there is no floor, so the subscriber must choose one and pay. Callers\nmust treat `null` as \"show the plan picker\".",
        "references": [
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "ServiceAccountMutationOptions__2dee3eb4c17c",
        "signature": "export interface ServiceAccountMutationOptions__2dee3eb4c17c {\n    /** Reuse this value to replay the same pending create/update request safely. */\n    idempotencyKey?: string;\n}",
        "source": "packages/farthershore-js/dist/resources/keys.d.ts#L49",
        "description": "",
        "references": []
      },
      {
        "name": "ServiceAccountUsageLimitRequest__f255b800fa4e",
        "signature": "export type ServiceAccountUsageLimitRequest__f255b800fa4e = {\n    quantity: string;\n    limitUnits: number;\n    limitCents?: never;\n    mode: \"BLOCK\";\n    notifyAtPct?: never;\n} | {\n    quantity: string;\n    limitUnits: number;\n    limitCents?: never;\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n} | {\n    quantity: string;\n    limitUnits?: never;\n    limitCents: number;\n    mode: \"BLOCK\";\n    notifyAtPct?: never;\n} | {\n    quantity: string;\n    limitUnits?: never;\n    limitCents: number;\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L399",
        "description": "Discriminated to mirror `portalServiceAccountUsageLimitRequestSchema` exactly\n(contracts): a NOTIFY limit REQUIRES `notifyAtPct`; a BLOCK limit forbids it;\nexactly one of `limitUnits`/`limitCents` is set. This keeps the public type as\nstrict as its Zod validator — invalid mode/threshold combos are compile errors,\nnot just runtime 400s. Parity is pinned by `service-account-contract-drift.test.ts`.",
        "references": []
      },
      {
        "name": "singularizeMeasure__4920b2d3814d",
        "signature": "export declare function singularizeMeasure__4920b2d3814d(measurementKey: string): string;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L376",
        "description": "The singular unit noun for a measure key. The commerce manifest carries NO\nper-measure display name (`measures` is `{ key }` under a strict schema), so\nthe key IS the label — `digital_pages` reads as \"digital page\". Naive inverse\nof {@link pluralizeUnit}; a measure keyed oddly comes back verbatim rather\nthan mangled by a guess.",
        "references": []
      },
      {
        "name": "sortPlansForDisplay__accee323738d",
        "signature": "export declare function sortPlansForDisplay__accee323738d(plans: Plan[]): Plan[];",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L94",
        "description": "Sort plans for display: the free tier first, then fee ascending, with\nfee-less usage-based plans (`usage`) last. Reads the declared kind.",
        "references": [
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "SubscriberPinnedRule__7b0d2ee36c4a",
        "signature": "export interface SubscriberPinnedRule__7b0d2ee36c4a {\n    /** Dimension index into `displayDims`. */\n    d: number;\n    /** Window length in seconds (a 30-day month is 2592000). */\n    w: number;\n    /** Capacity (the included allowance for the window). */\n    c: number;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L848",
        "description": "One pinned-plan display rule from `GET /me` (`subscriber.rules`). A\nrate-limit / quota allowance in the compiled-entitlement compact form:\n`d` = dimension index, `w` = window seconds, `c` = capacity. The usage card\nreads the `month`-window (`w === 2592000`) rules as the included quotas the\nsubscriber is ACTUALLY billed under — not the latest catalog meter list,\nwhich may have drifted from the subscriber's pinned plan.",
        "references": []
      },
      {
        "name": "SubscriberPromoCopy__237f8d642833",
        "signature": "export type SubscriberPromoCopy__237f8d642833 = {\n    title: string;\n    detail: string;\n};",
        "source": "packages/farthershore-js/dist/format/subscriber-lifecycle.d.ts#L19",
        "description": "",
        "references": []
      },
      {
        "name": "SubscriberStatusPresentation__8a54b463ce40",
        "signature": "export type SubscriberStatusPresentation__8a54b463ce40 = {\n    planName: string;\n    statusLabel: string;\n    statusSubtext: string | null;\n    pendingCancellation: boolean;\n    scheduledTransition: ScheduledTransitionCopy__a08f28383495 | null;\n    promo: SubscriberPromoCopy__237f8d642833 | null;\n};",
        "source": "packages/farthershore-js/dist/format/subscriber-lifecycle.d.ts#L23",
        "description": "",
        "references": [
          {
            "name": "ScheduledTransitionCopy__a08f28383495",
            "source": "packages/farthershore-js/dist/format/subscriber-lifecycle.d.ts#L2"
          },
          {
            "name": "SubscriberPromoCopy__237f8d642833",
            "source": "packages/farthershore-js/dist/format/subscriber-lifecycle.d.ts#L19"
          }
        ]
      },
      {
        "name": "subscriptionStatusChip__c2e919e840ee",
        "signature": "export declare function subscriptionStatusChip__c2e919e840ee(sub: {\n    status: string;\n    cancelAtPeriodEnd?: boolean | null;\n}): StatusChip;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L305",
        "description": "Render-ready status chip (label + tone) for a subscription — the single\nsource the BillingSummary card and any W10 status pill share so every surface\nlabels/colors a subscription identically. A pending `cancelAtPeriodEnd`\noverrides the lifecycle tone with a \"Cancels soon\" warning.",
        "references": [
          {
            "name": "StatusChip",
            "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L294"
          }
        ]
      },
      {
        "name": "synthesizePlanFeatures__42c0175e6f51",
        "signature": "export declare function synthesizePlanFeatures__42c0175e6f51(plan: Plan): string[];",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L180",
        "description": "Synthesize a short feature-bullet list for a plan card. Uses the builder's\n`planDetails` verbatim when present, else derives from the plan's monthly\nquotas + declared kind. Typed\nentitlement resource limits append in both paths.",
        "references": [
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "synthesizePlanFeaturesLean__5ee4c35cee39",
        "signature": "export declare function synthesizePlanFeaturesLean__5ee4c35cee39(plan: Plan): string[];",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L187",
        "description": "Synthesize a short feature list for white-label public surfaces. This differs\nfrom {@link synthesizePlanFeatures}: it uses only builder-authored or\nplan-derived facts and deliberately does not invent \"Full API access\" or\nsupport-tier promises a product may not actually offer.",
        "references": [
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "TeamInvitation__f9f120bf906d",
        "signature": "export interface TeamInvitation__f9f120bf906d {\n    id: string;\n    email: string;\n    role: TeamRole;\n    /** Managed-RBAC product roles granted on accept. */\n    businessRoleKeys: string[];\n    status: string;\n    invitedByExternalId?: string | null;\n    expiresAt: string;\n    createdAt: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L999",
        "description": "A pending subscriber-team invitation (`GET|POST /me/team/invites`).",
        "references": [
          {
            "name": "TeamRole",
            "source": "packages/farthershore-js/dist/types.d.ts#L973"
          }
        ]
      },
      {
        "name": "TeamInvitationAccepted__11c705c559ac",
        "signature": "export interface TeamInvitationAccepted__11c705c559ac {\n    membershipId: string;\n    role: TeamRole;\n    businessRoleKeys: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1017",
        "description": "Result of accepting an invitation.",
        "references": [
          {
            "name": "TeamRole",
            "source": "packages/farthershore-js/dist/types.d.ts#L973"
          }
        ]
      },
      {
        "name": "TeamInvitationCreated__c157ef151993",
        "signature": "export interface TeamInvitationCreated__c157ef151993 extends TeamInvitation__f9f120bf906d {\n    token: string;\n    emailSent: boolean;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1012",
        "description": "The one-time create response: the invitation plus the raw token (delivered\nby email; surfaced here once for the off-app / no-provider path).",
        "references": [
          {
            "name": "TeamInvitation__f9f120bf906d",
            "source": "packages/farthershore-js/dist/types.d.ts#L999"
          }
        ]
      },
      {
        "name": "trialDaysRemaining__a42e758e8e6c",
        "signature": "export declare function trialDaysRemaining__a42e758e8e6c(sub: {\n    trialEndsAt?: string | null;\n}, now?: number): number | null;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L311",
        "description": "Whole calendar days remaining until `trialEndsAt` (rounded UP), or null when\nthere's no future trial end. Pure — pass a `now` for deterministic tests.",
        "references": []
      },
      {
        "name": "unitSuffix__0244077a537f",
        "signature": "export declare function unitSuffix__0244077a537f(unit: string | null | undefined, count: number): string;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L201",
        "description": "The \" {unit}\" suffix for a quantity, pluralized — \"\" when there is no unit.\nShared by every \"used / quota included\" line so the SDK card and the\ntemplate's meter rows read identically.",
        "references": []
      },
      {
        "name": "UsageEventDimensions__f3dde72e4b29",
        "signature": "export type UsageEventDimensions__f3dde72e4b29 = Record<string, number | null>;",
        "source": "packages/farthershore-js/dist/types.d.ts#L646",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitCreateMode__f16ef2d50497",
        "signature": "type UsageLimitCreateMode__f16ef2d50497 = {\n    mode: \"BLOCK\";\n    notifyAtPct?: never;\n} | {\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L595",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitExplicitUpdateMode__577df72501b7",
        "signature": "type UsageLimitExplicitUpdateMode__577df72501b7 = {\n    mode: \"BLOCK\";\n    notifyAtPct?: null;\n} | {\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L628",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitNoUpdateValue__cd3ce2b61e4f",
        "signature": "type UsageLimitNoUpdateValue__cd3ce2b61e4f = {\n    limitUnits?: never;\n    limitCents?: never;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L614",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitUpdateMode__0a6925ca669e",
        "signature": "type UsageLimitUpdateMode__0a6925ca669e = {\n    mode?: never;\n    notifyAtPct?: number | null;\n} | {\n    mode: \"BLOCK\";\n    notifyAtPct?: null;\n} | {\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L618",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitUpdateValue__e8f19d3e563b",
        "signature": "type UsageLimitUpdateValue__e8f19d3e563b = {\n    limitUnits: number;\n    limitCents?: never;\n} | {\n    limitCents: number;\n    limitUnits?: never;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L607",
        "description": "",
        "references": []
      },
      {
        "name": "usagePeriodLabel__e8ab92f06f5c",
        "signature": "export declare function usagePeriodLabel__e8ab92f06f5c(periodStart: string | null | undefined, periodEnd: string | null | undefined): string | null;",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L210",
        "description": "The usage card's period line. A window whose start and end render as the SAME\ndate is not a period — core emitted a degenerate window (a free plan whose\nallowance is a 30-day NAMED window has no billing period of its own), and\n\"Period Sep 14, 2026 – Sep 14, 2026\" told the subscriber nothing true. Fall\nback to the open-ended \"Since …\" rather than print a zero-length range.\nReturns null when there is nothing to say.",
        "references": []
      }
    ],
    "generated/frontend-sdk/react": [
      {
        "name": "AuditLogsResource__99efa1e02380",
        "signature": "export interface AuditLogsResource__99efa1e02380 {\n    /** Cursor-paged subscriber audit log (decision ALLOW|DENY, limit ≤ 200).\n     *  Degrades to an empty page on error, like the SSR page. */\n    list(filters?: {\n        action?: string;\n        actorUserId?: string;\n        decision?: \"ALLOW\" | \"DENY\";\n        from?: string;\n        to?: string;\n        cursor?: string;\n        limit?: number;\n        signal?: AbortSignal;\n        /**\n         * `null` intentionally reads the user's default subscription without an\n         * organization header. `undefined` preserves the selected workspace.\n         */\n        organizationId?: string | null;\n    }): Promise<AuditLogPage>;\n}",
        "source": "packages/farthershore-js/dist/resources/account.d.ts#L142",
        "description": "",
        "references": [
          {
            "name": "AuditLogPage",
            "source": "packages/farthershore-js/dist/types.d.ts#L1089"
          }
        ]
      },
      {
        "name": "AuthResource__beeda8a7af1a",
        "signature": "export interface AuthResource__beeda8a7af1a {\n    /** The current session (authenticated identity + a light subscriber slice).\n     * Resolves to `{ authenticated: false }` on 401/403 rather than throwing.\n     * Test-persona identity comes from Core's verified HttpOnly cookie; no\n     * persona bearer is exposed to browser JavaScript. */\n    getSession(opts?: {\n        signal?: AbortSignal;\n    }): Promise<Session>;\n    /** Revoke the server-owned persona browser session and clear local auth\n     * caches. Clerk-strategy environments continue to sign out via Clerk. */\n    signOut(): Promise<void>;\n    /** Set a session bearer directly (for example, Clerk's session token). */\n    setToken(token: string | null): void;\n    /** Mint a short-lived Gateway bearer from the current authenticated browser\n     * session. In persona environments Core authenticates this with the\n     * same-origin HttpOnly cookie. */\n    gatewayContextToken(opts?: {\n        signal?: AbortSignal;\n        refresh?: boolean;\n    }): Promise<GatewayContextToken>;\n}",
        "source": "packages/farthershore-js/dist/resources/auth.d.ts#L3",
        "description": "",
        "references": [
          {
            "name": "GatewayContextToken",
            "source": "packages/farthershore-js/dist/types.d.ts#L803"
          },
          {
            "name": "Session",
            "source": "packages/farthershore-js/dist/types.d.ts#L326"
          }
        ]
      },
      {
        "name": "BillingResource__c8dbd9d25fa3",
        "signature": "export interface BillingResource__c8dbd9d25fa3 {\n    /** The consumer's current subscription for this product, or null.\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle); the read is unmount-safe\n     *  via the hook's active-flag and bounded by the cache TTL. */\n    subscription(opts?: {\n        signal?: AbortSignal;\n    }): Promise<Subscription | null>;\n    /** Open the Stripe-hosted billing portal (payment method + invoices). Returns\n     *  the URL to navigate to. This is also how invoices are viewed in V0. */\n    openBillingPortal(input?: {\n        returnUrl?: string;\n    }): Promise<{\n        url: string;\n    }>;\n    /** Cancel the current subscription. Free subs cancel inline; paid subs are\n     *  scheduled on the provider for the end of the current billing period and\n     *  the result carries the `cancelsAt` boundary. `reason` is recorded for\n     *  churn analytics. */\n    cancelSubscription(input?: {\n        reason?: string;\n    }): Promise<CancelSubscriptionResult>;\n    /** Buy more prepaid balance. Starts a provider checkout for `amountCents`\n     *  and returns the URL to send the subscriber to. Core gates this on\n     *  `invoice:pay` and refuses (`INVALID_STATE`) for a plan that declares no\n     *  prepaid funding. `requestId` is the idempotency handle — pass the SAME\n     *  uuid to retry one intent; omit it and the SDK mints one per call. */\n    addFunds(input: {\n        amountCents: number;\n        requestId?: string;\n        successUrl?: string;\n        cancelUrl?: string;\n    }): Promise<{\n        checkoutUrl: string;\n    }>;\n    /** Reverse a scheduled cancel — the platform lifts `cancel_at_period_end`\n     *  on the provider (paid) or flips a CANCELLED free sub back to ACTIVE. The\n     *  result carries the platform's POST-restore `cancelAtPeriodEnd` so a\n     *  caller can render the outcome instead of assuming it. */\n    restoreSubscription(): Promise<RestoreSubscriptionResult>;\n    /** Change an existing subscription to another plan. Core applies or\n     *  schedules the transition according to the product's policy. */\n    changePlan(input: {\n        compiledPlanId: string;\n    }): Promise<ChangePlanResult>;\n    /** Set (or clear, with `null`) the subscriber's monthly spend cap (in cents).\n     *  PATCHes `/me/spend-cap`. CAVEAT: the cap is currently STORED-not-ENFORCED\n     *  (held in subscription metadata pending the rate-limit migration) — do NOT\n     *  present this as a hard spend limit in UI copy. */\n    setSpendCap(input: {\n        maxMonthlySpendCents: number | null;\n    }): Promise<SpendCapResult__395300e78371>;\n    /** Read the subscriber's current monthly spend cap (in cents), or null when\n     *  none is set / signed out. P-SPENDCAP-READ — reads the additive\n     *  `subscriber.maxMonthlySpendCents` surfaced on the `/me` context (no new\n     *  route). Joins the memoized `/me` read.\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached `/me` fetch (the cache owns the fetch lifecycle); the read is\n     *  unmount-safe via the hook's active-flag and bounded by the cache TTL. */\n    getSpendCap(opts?: {\n        signal?: AbortSignal;\n    }): Promise<number | null>;\n    /** The subscriber's current-window bill preview (`GET /me/bill-preview`) —\n     *  computed by Core through the SAME rating engine + ledger state as\n     *  invoicing, so preview === invoice by construction. Honors the plan's\n     *  `spendPolicy.disclosure`: `transparent` carries windows / totals /\n     *  nanodollar allowance balances; `opaque` carries allowance shape only (no\n     *  amounts). Nanodollar fields are decimal STRINGS — format them with\n     *  `format.formatNanos`, never `Number()`. Read-through cached; every\n     *  entitlement mutation (subscribe / change plan / cancel / restore /\n     *  migrate) busts it. Signed-out / no subscription → Core serves an empty\n     *  transparent preview.\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle). */\n    getBillPreview(opts?: {\n        signal?: AbortSignal;\n    }): Promise<BillPreview>;\n}",
        "source": "packages/farthershore-js/dist/resources/billing.d.ts#L13",
        "description": "",
        "references": [
          {
            "name": "BillPreview",
            "source": "packages/farthershore-js/dist/types.d.ts#L1284"
          },
          {
            "name": "CancelSubscriptionResult",
            "source": "packages/farthershore-js/dist/types.d.ts#L1122"
          },
          {
            "name": "ChangePlanResult",
            "source": "packages/farthershore-js/dist/types.d.ts#L1144"
          },
          {
            "name": "RestoreSubscriptionResult",
            "source": "packages/farthershore-js/dist/types.d.ts#L1134"
          },
          {
            "name": "SpendCapResult__395300e78371",
            "source": "packages/farthershore-js/dist/resources/billing.d.ts#L5"
          },
          {
            "name": "Subscription",
            "source": "packages/farthershore-js/dist/types.d.ts#L739"
          }
        ]
      },
      {
        "name": "BusinessResource__933d34c2f16a",
        "signature": "export interface BusinessResource__933d34c2f16a {\n    /** The business this frontend is running for (resolved via bootstrap). */\n    get(): Promise<Business>;\n    /** The business's declared counted-resource catalog (W5.1) — name + label +\n     *  scope + per-plan cap. The same list `bootstrap()` resolves. */\n    resources(): Promise<DeclaredResource[]>;\n}",
        "source": "packages/farthershore-js/dist/resources/business.d.ts#L2",
        "description": "",
        "references": [
          {
            "name": "Business",
            "source": "packages/farthershore-js/dist/types.d.ts#L23"
          },
          {
            "name": "DeclaredResource",
            "source": "packages/farthershore-js/dist/types.d.ts#L282"
          }
        ]
      },
      {
        "name": "ClientContext__d9dbf3313290",
        "signature": "export interface ClientContext__d9dbf3313290 {\n    /** Platform Core base URL. LAZY: resolved on read as explicit config >\n     *  injected `window.__FS_CONFIG__` > the production platform default —\n     *  never throws. Reading this property is what performs the lazy window\n     *  read; never read it at module scope or client-construction time. */\n    readonly coreUrl: string;\n    /** Portal host identifying the product/env to Core. LAZY — see {@link\n     *  coreUrl}; defaults to `location.host` in the browser, read on access. */\n    readonly portalHost: string | null;\n    businessId: string | null;\n    environmentId: string | null;\n    organizationId: string | null;\n    /**\n     * The organization selection before it is reconciled against subscription\n     * contexts. Unlike `organizationId`, undefined means no explicit selection;\n     * null is a durable request for the user's default subscription. Internal\n     * runtime state used by the React organization provider.\n     */\n    organizationSelection?: string | null;\n    /** Subscribers notified when the imperative organization scope changes. */\n    organizationListeners: Set<() => void>;\n    /** Read-through cache backing `fs.prefetch.*` (see cache.ts). */\n    readCache: Map<string, ReadCacheEntry__ee67854da2b9>;\n    gatewayUrl: string | null;\n    apiKey: string | null;\n    /** Cached short-lived gateway context token for browser-session feature\n     *  calls. Cleared whenever session/org scope changes. */\n    gatewayContextToken: {\n        token: string;\n        expiresAt: string;\n        cacheKey: string;\n    } | null;\n    /** In-flight context-token mint, keyed by cacheKey — SINGLE-FLIGHT coalescing\n     *  so concurrent feature calls share ONE mint instead of stampeding Core\n     *  (W6.3). Cleared as soon as the mint settles. Internal. */\n    gatewayContextTokenInflight: {\n        cacheKey: string;\n        promise: Promise<GatewayContextToken>;\n    } | null;\n    /** Explicit session bearer (for Clerk/advanced integrations), falling back\n     *  to the configured `getToken` provider. Persona sessions are HttpOnly\n     *  cookies and never enter JavaScript. */\n    sessionToken: string | null;\n    /** True after a cookie-authenticated Core request succeeds. This lets a\n     *  later 401 trigger managed recovery without treating an anonymous first\n     *  `/me` read as a lapsed session. Contains no credential. */\n    browserSessionAuthenticated: boolean;\n    getToken?: TokenProvider__40095f0da8e4;\n    /** Runtime-installed token provider (e.g. the managed Clerk bridge inside\n     *  `<FartherShoreRoot>`). Wins over `config.getToken`; an explicitly set\n     *  `sessionToken` still wins over both. */\n    tokenProvider: TokenProvider__40095f0da8e4 | null;\n    fetch: FetchLike__7d89beec4c77;\n    /** Resolved automatic-retry policy (defaults applied). */\n    retry: ResolvedRetryConfig__fe2336bea142;\n    /** Resolved global interceptors (all optional; default no-ops elsewhere). */\n    onError?: (err: unknown) => void;\n    onLimitExceeded?: (err: LimitExceededError__7844c601e6fd) => void;\n    onUnauthorized?: (err: FartherShoreApiError__ae8b4410fda4) => void;\n    /** Runtime-installed 401 reaction (the managed auth layer's mid-session\n     *  recovery), wired by `<FsAuthProvider>` via `setOnUnauthorized`. Fires AFTER\n     *  the config-level `onUnauthorized`. Internal. */\n    onUnauthorizedManaged?: (err: FartherShoreApiError__ae8b4410fda4) => void;\n    /**\n     * LATCH: managed auth recovery has already fired for the CURRENT credential.\n     *\n     * The interceptor de-dupe is per-ERROR-OBJECT, which only collapses one\n     * logical failure surfacing through nested transports. A dashboard runs many\n     * independent reads concurrently, so a single lapsed session produces MANY\n     * distinct 401 errors — each firing its own recovery, each remounting the\n     * surface, each triggering a fresh round of reads. That feedback loop was\n     * measured at ~274 requests in 25s from ONE dashboard (~650/min against\n     * core's 100/min portal limit): the portal rate-limited itself.\n     *\n     * Recovery is a per-SESSION event, not a per-request one. Cleared whenever a\n     * new credential is installed, so a genuinely re-authed session can recover\n     * again.\n     */\n    managedRecoveryLatched?: boolean;\n    /** Last `X-RateLimit-*` snapshot observed on a gateway response (W8.5) — fed\n     *  by `fs.route.getWithMeta`, read by `useRouteRateLimit()`. Null until the first\n     *  gateway call that carried the headers. Internal. */\n    lastRateLimit: RateLimitSnapshot__934527ed940b | null;\n    /** Subscribers notified when `lastRateLimit` changes (the `useRouteRateLimit`\n     *  external store). Internal. */\n    rateLimitListeners: Set<() => void>;\n    /** A5-amend (T11) — the last LIMIT/throttle deny observed leaving the\n     *  transport, recorded by `fireInterceptors`. ADVISORY: the freshest known\n     *  RECENT deny, not a live poll (the gateway stays authoritative). Read by\n     *  `useLimitStatus()`. Null until the first limit deny is observed. Internal. */\n    lastLimitDeny: ObservedLimitDeny__ff379deca309 | null;\n    /** Subscribers notified when `lastLimitDeny` changes (the `useLimitStatus`\n     *  external store). Internal. */\n    limitDenyListeners: Set<() => void>;\n    /** Subscribers notified when the read cache is BUSTED (auth change, org\n     *  switch, entitlement mutation) — every mounted `useAsync` refetches.\n     *\n     *  Clearing the cache alone only stops the NEXT read from being served stale;\n     *  it does not re-run the reads already on screen. Without this notification a\n     *  `setSessionToken` after a 401 leaves every mounted surface showing the\n     *  signed-out result until something happens to remount it. Internal. */\n    readCacheListeners: Set<() => void>;\n    /** True when all SDK-owned network/auth paths are served by the local mock\n     *  transport. Internal, read by the managed auth layer. */\n    mockMode: boolean;\n}",
        "source": "packages/farthershore-js/dist/config.d.ts#L183",
        "description": "Mutable, per-client runtime context the resources share. Bootstrap fills in\nthe discovered product/env/gateway; sign-in fills in the session token.",
        "references": [
          {
            "name": "FartherShoreApiError__ae8b4410fda4",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
          },
          {
            "name": "FetchLike__7d89beec4c77",
            "source": "packages/farthershore-js/dist/config.d.ts#L2"
          },
          {
            "name": "GatewayContextToken",
            "source": "packages/farthershore-js/dist/types.d.ts#L803"
          },
          {
            "name": "LimitExceededError__7844c601e6fd",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L206"
          },
          {
            "name": "ObservedLimitDeny__ff379deca309",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L580"
          },
          {
            "name": "RateLimitSnapshot__934527ed940b",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
          },
          {
            "name": "ReadCacheEntry__ee67854da2b9",
            "source": "packages/farthershore-js/dist/cache.d.ts#L2"
          },
          {
            "name": "ResolvedRetryConfig__fe2336bea142",
            "source": "packages/farthershore-js/dist/config.d.ts#L29"
          },
          {
            "name": "TokenProvider__40095f0da8e4",
            "source": "packages/farthershore-js/dist/config.d.ts#L80"
          }
        ]
      },
      {
        "name": "CoreRequest__88dbed0693a0",
        "signature": "export interface CoreRequest__88dbed0693a0 {\n    method: \"GET\" | \"POST\" | \"PATCH\" | \"PUT\" | \"DELETE\";\n    path: string;\n    query?: Record<string, string | number | undefined | null>;\n    body?: unknown;\n    /** Caller-stable retry identity for durable mutation replay. */\n    idempotencyKey?: string;\n    /** \"session\" attaches the consumer session bearer; \"none\" is for public\n     *  endpoints (resolve/discover). Defaults to \"session\". */\n    auth?: \"session\" | \"none\";\n    /** When `false`, a tolerated `401` on this (authed) read does NOT trigger the\n     *  managed auth-layer recovery (`onUnauthorizedManaged` — the hosted-sign-in\n     *  redirect / persona sign-out). Use for best-effort `/me` reads that already\n     *  swallow a 401 and render a signed-out/unsubscribed surface: re-authing an\n     *  already signed-in user can't clear an authorization 401, so the redirect is\n     *  futile and loops. `onUnauthorized` (config hook) + `onError` still fire.\n     *  Defaults to `true` (a lapsed authed session still bounces to recovery). */\n    recoverAuth?: boolean;\n    /** Abort signal — when it fires (e.g. a React hook unmounts or its deps\n     *  change), the in-flight read rejects with {@link FartherShoreAbortError}. */\n    signal?: AbortSignal;\n    /**\n     * Per-request organization scope. `undefined` inherits the client selection;\n     * `null` deliberately omits the organization header without changing that\n     * shared selection. Use this for APIs whose documented default-subscription\n     * read is intentionally independent of the workspace currently shown in the\n     * rest of the portal.\n     */\n    organizationId?: string | null;\n}",
        "source": "packages/farthershore-js/dist/http.d.ts#L3",
        "description": "",
        "references": []
      },
      {
        "name": "EntitlementSnapshot__78b1daa335cc",
        "signature": "export interface EntitlementSnapshot__78b1daa335cc {\n    /** True when an ACTIVE subscriber context backed this snapshot. */\n    hasSubscriber: boolean;\n    /** Resource limits on the current subscriber's pinned plan. */\n    resourceLimits: Record<string, number>;\n}",
        "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L3",
        "description": "",
        "references": []
      },
      {
        "name": "EntitlementsResource__eae052f23903",
        "signature": "export interface EntitlementsResource__eae052f23903 {\n    /** Read the current subscriber's entitlement maps. Signed-out users get\n     *  empty maps so app code can render disabled/upsell states without a\n     *  separate auth guard. */\n    snapshot(): Promise<EntitlementSnapshot__78b1daa335cc>;\n    /** Numeric resource limit, or null when absent. */\n    resourceLimit(key: string): Promise<number | null>;\n    /** Per-resource `{ limit, current }` for the pinned plan (`N of M`). The\n     *  LIMIT side lives in the `/me` snapshot, but `current` is a live count, so\n     *  this reads the dedicated `/me/resource-limit-usage` route. Read-through cached\n     *  (the cache owns the fetch lifecycle, like the other `/me` reads — no\n     *  per-caller signal). Signed-out / no subscription → an empty map. */\n    resourceLimitUsage(): Promise<ResourceLimitUsageMap__cc534f1c9f18>;\n}",
        "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L16",
        "description": "",
        "references": [
          {
            "name": "EntitlementSnapshot__78b1daa335cc",
            "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L3"
          },
          {
            "name": "ResourceLimitUsageMap__cc534f1c9f18",
            "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L15"
          }
        ]
      },
      {
        "name": "FartherShoreApiError__ae8b4410fda4",
        "signature": "export declare class FartherShoreApiError__ae8b4410fda4 extends FartherShoreError__8dbed6dcc500 {\n    readonly status: number;\n    readonly code: string;\n    readonly body: unknown;\n    /** Seconds to wait before retrying, parsed from `Retry-After`; null when the\n     *  response carried no `Retry-After`. */\n    readonly retryAfterSeconds: number | null;\n    /** The `X-RateLimit-Remaining` / `-Reset` snapshot, or null when absent. */\n    readonly rateLimit: RateLimitSnapshot__934527ed940b | null;\n    /**\n     * Whether the request that produced this error actually carried an auth\n     * credential (a bearer was attached). Set by the transport AFTER the error is\n     * minted. A `401` with `authed === false` is a NEVER-authenticated visitor (a\n     * signed-out `/me` read sent no bearer) — the managed auth layer must treat it\n     * as a no-op, NOT a lapsed-session redirect. Defaults to `true` so any caller\n     * that doesn't thread the flag keeps the prior (always-fire) behaviour.\n     */\n    authed: boolean;\n    /**\n     * Whether a `401` on this request should trigger the MANAGED auth-layer\n     * recovery (the hosted-sign-in redirect / persona sign-out). Best-effort `/me`\n     * reads that already swallow a 401 (and render a signed-out/unsubscribed\n     * surface) set this `false`: re-authenticating an already signed-in user can\n     * never clear an authorization 401, so the redirect is futile and loops. Set\n     * by the transport from `CoreRequest.recoverAuth`. The config-level\n     * `onUnauthorized` + `onError` hooks STILL fire (observability is unaffected);\n     * only the managed reaction is gated. Defaults to `true` (always recover).\n     */\n    recoverAuth: boolean;\n    constructor(status: number, code: string, message: string, body: unknown, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot__934527ed940b | null);\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L49",
        "description": "A non-2xx response from Core or the Gateway. Exposes:\n- `.status` — the HTTP status code;\n- `.code` — the platform error code from the `{ error: { code, message } }`\n  envelope (or a fallback when the envelope is absent);\n- `.body` — the parsed response body, for richer error detail.\n\nCallers commonly branch on `.status` — e.g. `401`/`403` (re-auth), `404`\n(treat as absent), `409` (conflict/retry) — rather than parsing the message.\n\nEvery instance also carries the throttle hints the gateway attaches when\npresent: `.retryAfterSeconds` (from `Retry-After`) and `.rateLimit` (from\n`X-RateLimit-Remaining` / `-Reset`). Both are null when the headers are\nabsent — a developer who does nothing still gets them transparently.",
        "references": [
          {
            "name": "FartherShoreError__8dbed6dcc500",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L2"
          },
          {
            "name": "RateLimitSnapshot__934527ed940b",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
          }
        ]
      },
      {
        "name": "FartherShoreClient__e4fe174a542f",
        "signature": "export interface FartherShoreClient__e4fe174a542f {\n    /** The client's resolved runtime context (coreUrl, portalHost, businessId,\n     *  auth/scoping state, …). `coreUrl`/`portalHost` are LAZY getters — reading\n     *  them performs the `window.__FS_CONFIG__`/`location.host` resolution\n     *  (`coreUrl` falls back to the production platform); everything else is a\n     *  live snapshot of the client's current state. Mainly for\n     *  introspection/tests — prefer the typed resources for actual calls. */\n    readonly context: ClientContext__d9dbf3313290;\n    /** Resolve + cache the business/env/gateway for the current portal host. Safe\n     *  to call repeatedly (memoized). */\n    bootstrap(): Promise<Bootstrap>;\n    /** Set the consumer API key used for Gateway feature calls. */\n    setApiKey(key: string | null): void;\n    /** Set the Core session bearer directly (e.g. from the Clerk browser SDK). */\n    setSessionToken(token: string | null): void;\n    /** Install/replace a live token source resolved per request (short-lived\n     *  Clerk JWTs). `<FartherShoreRoot>` wires this automatically in Clerk\n     *  environments; pass null to uninstall. */\n    setTokenProvider(provider: (() => string | null | Promise<string | null>) | null): void;\n    /** Rescope subsequent Core calls to an owning org (the multi-org\n     *  subscription-context switcher) — sets the `x-fs-organization-id` header.\n     *  Pass null to return to the user's default subscription. Self-persists the\n     *  choice (restored at the next client creation). */\n    setOrganizationId(organizationId: string | null): void;\n    /** The active org id scoping Core calls, or null (the user's default\n     *  subscription). At boot this reflects the persisted choice restored from\n     *  storage; the React org provider seeds its reactive state from it. */\n    getOrganizationId(): string | null;\n    /** Imperative organization scope as an external store. This keeps a mounted\n     * React provider in sync when an application calls `setOrganizationId()`\n     * directly rather than using the managed org switcher. */\n    readonly organizationScope?: {\n        subscribe(listener: () => void): () => void;\n    };\n    /** Install/replace the global 401 reaction (fired by the transport on a 401\n     *  for an authed call). `<FartherShoreRoot>` / `<FsAuthProvider>` wire this\n     *  automatically for managed mid-session recovery (persona sign-out / Clerk\n     *  refresh); pass null to uninstall. A config-level `onUnauthorized` still\n     *  fires first. */\n    setOnUnauthorized(handler: ((err: FartherShoreApiError__ae8b4410fda4) => void) | null): void;\n    /** Drop every cached Core read (and the short-lived gateway context token), so\n     *  the next `me()` / list call goes to the network. Use after an out-of-band\n     *  state change the SDK can't observe — e.g. polling `me()` for webhook lag to\n     *  settle after returning from a Stripe Checkout (see `reconcileAfterCheckout`). */\n    invalidate(): void;\n    /** The last `X-RateLimit-*` snapshot observed on any `fs.route` gateway call,\n     *  with a subscribe primitive — the external store behind `useRouteRateLimit()`\n     *  (W8.5). `get()` is null until the first gateway response carried the\n     *  headers; `subscribe` notifies on every change. */\n    readonly rateLimit: {\n        get(): RateLimitSnapshot__934527ed940b | null;\n        subscribe(listener: () => void): () => void;\n    };\n    /** A5-amend (T11) — the last LIMIT/throttle deny observed leaving the\n     *  transport, with a subscribe primitive — the external store behind\n     *  `useLimitStatus()`. ADVISORY (the freshest known RECENT deny, not a live\n     *  poll — the gateway stays authoritative). `get()` is null until the first\n     *  limit deny is observed; `subscribe` notifies on every change. */\n    readonly limitState: {\n        get(): ObservedLimitDeny__ff379deca309 | null;\n        subscribe(listener: () => void): () => void;\n    };\n    /** Read-cache invalidation as an external store. `subscribe` fires when a\n     *  change invalidates what is ALREADY on screen: a new session/identity\n     *  (`setSessionToken`, sign-in/sign-out) or a moved entitlement (any billing\n     *  or plan action, and `invalidate()`).\n     *\n     *  It deliberately does NOT fire on an org switch (org-scoped hooks refetch\n     *  from their own deps) or on an ordinary resource mutation (the hook that\n     *  performed it refetches itself).\n     *\n     *  Every `useAsync`-backed hook subscribes automatically, so built-in hooks\n     *  and custom ones written against `useAsync` already refetch. Use this\n     *  directly only for state held OUTSIDE a hook (a store, an imperative cache\n     *  of your own) that must be invalidated in step with ours. */\n    readonly readCache: {\n        subscribe(listener: () => void): () => void;\n    };\n    /** The business this frontend runs for (resolved via bootstrap). */\n    readonly business: BusinessResource__933d34c2f16a;\n    /** Consumer session: current identity, server-owned persona logout, and\n     * short-lived Gateway context-token minting. */\n    readonly auth: AuthResource__beeda8a7af1a;\n    /** The consumer's API keys (list / create / revoke / rotate). */\n    readonly keys: KeysResource__2bf8d8c5e820;\n    /** Per-dimension usage totals + recent events for this business. */\n    readonly usage: UsageResource__a3469cda0e70;\n    /** Subscriber-managed per-actor usage limits. */\n    readonly usageLimits: UsageLimitsResource__2b1e05e6bcda;\n    /** The consumer's subscription and Stripe billing portal. */\n    readonly billing: BillingResource__c8dbd9d25fa3;\n    /** The business's plan catalog + the subscribe/checkout flow. */\n    readonly plans: PlansResource__05a484289922;\n    /** Full subscriber context (`GET /me`): lifecycle, trial, scheduled\n     *  transition, eligibility-scoped plans. Null when signed out / no\n     *  subscriber. */\n    me(opts?: {\n        signal?: AbortSignal;\n        /** `null` omits the organization header without changing the shared\n         * client selection; `undefined` uses that selection. */\n        organizationId?: string | null;\n    }): Promise<SubscriberContext | null>;\n    /** Record legal-document acceptances for the current subscriber/org. */\n    acceptLegal(acceptances: LegalAcceptance[]): Promise<void>;\n    /** Multi-org subscription contexts (the org switcher's data). */\n    readonly organizations: OrganizationsResource__18d4024e64ce;\n    /** Team management on the current subscription. */\n    readonly team: TeamResource__b9e413854377;\n    /** Managed-RBAC management on the current subscription (settings, the\n     *  derived permission catalog, role CRUD) — team-org OWNER/ADMIN only.\n     *  Configures UX + minted-token claims; the EDGE `permission` constraint\n     *  is the security boundary. */\n    readonly rbac: RbacResource__b63486266173;\n    /** The subscriber's per-category notification preferences (opt-out model):\n     *  `get` the current state, `update` a partial patch. */\n    readonly notifications: NotificationsResource__dc7aa1b64a0f;\n    /** The subscriber-side audit log (cursor-paged). */\n    readonly auditLogs: AuditLogsResource__99efa1e02380;\n    /** Current subscriber entitlement maps from the pinned plan version. */\n    readonly entitlements: EntitlementsResource__eae052f23903;\n    /** Navigation-intent data warmers — see {@link PrefetchSurface}. */\n    readonly prefetch: PrefetchSurface__2b22bd2b6c45;\n    /**\n     * One-line, zero-config calls to your business's enforced gateway — host,\n     * auth, surface, and businessId all auto-resolved from the hosted context.\n     * `fs.route.post(\"/forecast\", { city })`. Limit responses surface as\n     * `LimitExceededError` so the upgrade prompt works on any call.\n     */\n    readonly route: RouteResource__52eafab15328;\n    /**\n     * Typed CRUD over a product-declared, quota-counted resource. Rides the\n     * gateway (which diverts to core, the system of record); `create` throws\n     * `LimitExceededError` at the plan cap. `fs.resources(\"widgets\").list()`.\n     */\n    resources<T = unknown>(name: string): ResourcesResource__ef6d17bbf151<T>;\n    /** Bound named-integration helper: `fs.integration(\"clerk-admin\").fetch(...)`. */\n    integration(id: string): ManagedIntegration__68b11f8f586e;\n    /**\n     * Generic authenticated Core call — the escape hatch for platform endpoints\n     * the typed resources don't model yet (e.g. a product's `/me/team`,\n     * `/me/audit-logs`). The Core counterpart to {@link invoke}:\n     * it attaches the session bearer + the host/env/org scoping headers and maps\n     * non-2xx to {@link FartherShoreApiError}, exactly like the typed resources —\n     * the caller only supplies the path and the response type. Prefer a typed\n     * resource (`fs.usage`, `fs.keys`, …) when one exists.\n     */\n    core<T>(req: CoreRequest__88dbed0693a0): Promise<T>;\n}",
        "source": "packages/farthershore-js/dist/client.d.ts#L36",
        "description": "",
        "references": [
          {
            "name": "AuditLogsResource__99efa1e02380",
            "source": "packages/farthershore-js/dist/resources/account.d.ts#L142"
          },
          {
            "name": "AuthResource__beeda8a7af1a",
            "source": "packages/farthershore-js/dist/resources/auth.d.ts#L3"
          },
          {
            "name": "BillingResource__c8dbd9d25fa3",
            "source": "packages/farthershore-js/dist/resources/billing.d.ts#L13"
          },
          {
            "name": "Bootstrap",
            "source": "packages/farthershore-js/dist/types.d.ts#L294"
          },
          {
            "name": "BusinessResource__933d34c2f16a",
            "source": "packages/farthershore-js/dist/resources/business.d.ts#L2"
          },
          {
            "name": "ClientContext__d9dbf3313290",
            "source": "packages/farthershore-js/dist/config.d.ts#L183"
          },
          {
            "name": "CoreRequest__88dbed0693a0",
            "source": "packages/farthershore-js/dist/http.d.ts#L3"
          },
          {
            "name": "EntitlementsResource__eae052f23903",
            "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L16"
          },
          {
            "name": "FartherShoreApiError__ae8b4410fda4",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
          },
          {
            "name": "KeysResource__2bf8d8c5e820",
            "source": "packages/farthershore-js/dist/resources/keys.d.ts#L3"
          },
          {
            "name": "LegalAcceptance",
            "source": "packages/farthershore-js/dist/types.d.ts#L80"
          },
          {
            "name": "ManagedIntegration__68b11f8f586e",
            "source": "packages/farthershore-js/dist/integrations.d.ts#L6"
          },
          {
            "name": "NotificationsResource__dc7aa1b64a0f",
            "source": "packages/farthershore-js/dist/resources/account.d.ts#L169"
          },
          {
            "name": "ObservedLimitDeny__ff379deca309",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L580"
          },
          {
            "name": "OrganizationsResource__18d4024e64ce",
            "source": "packages/farthershore-js/dist/resources/account.d.ts#L3"
          },
          {
            "name": "PlansResource__05a484289922",
            "source": "packages/farthershore-js/dist/resources/plans.d.ts#L61"
          },
          {
            "name": "PrefetchSurface__2b22bd2b6c45",
            "source": "packages/farthershore-js/dist/client.d.ts#L24"
          },
          {
            "name": "RateLimitSnapshot__934527ed940b",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
          },
          {
            "name": "RbacResource__b63486266173",
            "source": "packages/farthershore-js/dist/resources/account.d.ts#L65"
          },
          {
            "name": "ResourcesResource__ef6d17bbf151",
            "source": "packages/farthershore-js/dist/resources/resources.d.ts#L25"
          },
          {
            "name": "RouteResource__52eafab15328",
            "source": "packages/farthershore-js/dist/resources/route.d.ts#L15"
          },
          {
            "name": "SubscriberContext",
            "source": "packages/farthershore-js/dist/types.d.ts#L897"
          },
          {
            "name": "TeamResource__b9e413854377",
            "source": "packages/farthershore-js/dist/resources/account.d.ts#L13"
          },
          {
            "name": "UsageLimitsResource__2b1e05e6bcda",
            "source": "packages/farthershore-js/dist/resources/usage-limits.d.ts#L3"
          },
          {
            "name": "UsageResource__a3469cda0e70",
            "source": "packages/farthershore-js/dist/resources/usage.d.ts#L7"
          }
        ]
      },
      {
        "name": "FartherShoreConfig__a72de6f5938f",
        "signature": "export interface FartherShoreConfig__a72de6f5938f {\n    /** Owning org id for org-owned subscriptions (the `x-fs-organization-id`\n     *  header / `organizationId` query). Usually set at runtime via\n     *  `fs.setOrganizationId()` / the managed org switcher rather than here. */\n    organizationId?: string | null;\n    /** The consumer API key (`fsk_…`) used to authenticate Gateway feature calls.\n     *  Settable later via `fs.setApiKey()`. */\n    apiKey?: string;\n    /** Session token provider for Core calls. Clerk browser sessions use this;\n     *  test personas use the platform's same-origin HttpOnly cookie instead. */\n    getToken?: TokenProvider__40095f0da8e4;\n    /** Injectable fetch (tests / non-browser runtimes). Defaults to global fetch. */\n    fetch?: FetchLike__7d89beec4c77;\n    /** Automatic-retry policy for transient failures (429 + transient 502/503/504\n     *  + network faults). Retry is ON by default; this only tunes/opts out. See\n     *  {@link RetryConfig}. */\n    retry?: RetryConfig__bec25563219c;\n    /** Optional global hook fired (before the error is thrown) on EVERY non-2xx /\n     *  network failure that leaves the transport. Observability only — it does not\n     *  swallow the error. Default behaviour is unchanged when unset. */\n    onError?: (err: FartherShoreApiError__ae8b4410fda4 | unknown) => void;\n    /** Optional global hook fired (before throw) when the error is a\n     *  {@link LimitExceededError} — a single place to surface an upgrade prompt. */\n    onLimitExceeded?: (err: LimitExceededError__7844c601e6fd) => void;\n    /** Optional global hook fired (before throw) on a `401` — a single place to\n     *  trigger re-auth. */\n    onUnauthorized?: (err: FartherShoreApiError__ae8b4410fda4) => void;\n    /** Render a local portal with deterministic placeholder data and no live\n     *  backend/auth. Also enabled by `window.__FS_CONFIG__.mock === true`. */\n    mock?: boolean;\n}",
        "source": "packages/farthershore-js/dist/config.d.ts#L95",
        "description": "The builder-facing client config — the ONLY shape `createFartherShoreClient`\naccepts. Every field here is something a builder legitimately owns at the app\nlayer: their session provider, their org scope, their fetch impl, mock mode,\nobservability hooks. It contains NO platform-infrastructure knobs.\n\nPlatform routing/plumbing (`coreUrl`, `portalHost`, `businessId`,\n`gatewayUrl`, `environmentId`) is deliberately absent: the edge injects it via\n`window.__FS_CONFIG__` and the SDK discovers the rest at `bootstrap()`, so a\nbuilder calls `createFartherShoreClient()` with zero config. Our own harnesses\nthat must steer a client at a non-prod environment use the internal channel\n({@link FartherShorePlatformConfig} via\n`@farthershore/farthershore-js/internal`) — never this type.",
        "references": [
          {
            "name": "FartherShoreApiError__ae8b4410fda4",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
          },
          {
            "name": "FetchLike__7d89beec4c77",
            "source": "packages/farthershore-js/dist/config.d.ts#L2"
          },
          {
            "name": "LimitExceededError__7844c601e6fd",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L206"
          },
          {
            "name": "RetryConfig__bec25563219c",
            "source": "packages/farthershore-js/dist/config.d.ts#L13"
          },
          {
            "name": "TokenProvider__40095f0da8e4",
            "source": "packages/farthershore-js/dist/config.d.ts#L80"
          }
        ]
      },
      {
        "name": "FartherShoreError__8dbed6dcc500",
        "signature": "export declare class FartherShoreError__8dbed6dcc500 extends Error {\n    constructor(message: string);\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L2",
        "description": "",
        "references": []
      },
      {
        "name": "FetchLike__7d89beec4c77",
        "signature": "export type FetchLike__7d89beec4c77 = typeof fetch;",
        "source": "packages/farthershore-js/dist/config.d.ts#L2",
        "description": "",
        "references": []
      },
      {
        "name": "FS_LIMIT_CLASSES__cf69b28be276",
        "signature": "declare const FS_LIMIT_CLASSES__cf69b28be276: readonly [\"quota\", \"rate\", \"concurrency\", \"capacity\", \"spend\", \"adaptive\"];",
        "source": "packages/farthershore-js/dist/deny-codes.d.ts#L63",
        "description": "The closed set of usage-limit classes. Mirrors the contracts `LimitClass`.",
        "references": []
      },
      {
        "name": "FsDenyEnvelope__adf7ef9f2448",
        "signature": "export interface FsDenyEnvelope__adf7ef9f2448 {\n    /**\n     * The semantic class of limit hit — the primary axis clients branch on.\n     * `null` ONLY when the wire carried a `limitClass` string the SDK's closed\n     * mirror does NOT know (a FUTURE class added to contracts but not yet shipped\n     * in this bundle, T13). In that case the raw value is preserved on\n     * {@link unknownLimitClass} and the whole `_fs` block on {@link raw} so a\n     * client can still render + introspect the deny, while the SDK refuses to\n     * invent a known-class facet for it. A KNOWN class is always non-null.\n     */\n    limitClass: FsLimitClass__2d5726601b87 | null;\n    /**\n     * T13 — the raw `limitClass` string when it is NOT a member of the closed\n     * {@link FsLimitClass} mirror (a future/unknown class). Undefined for every\n     * known class. Lets a forward-compat client surface \"a `<unknownLimitClass>`\n     * limit was hit\" + a debug breadcrumb without the SDK guessing semantics.\n     */\n    unknownLimitClass?: string;\n    /**\n     * T13 — the raw `_fs` block exactly as it arrived on the wire, preserved for\n     * debugging/forwarding. Always present (even for a known class) so a developer\n     * can inspect fields this bundle's typed projection doesn't model yet.\n     */\n    raw?: Record<string, unknown>;\n    /** The limit's scope when known (e.g. `subscription`, `org`, `route`). */\n    scope?: string;\n    /** Actor facet for actor-scoped subscriber limits. Carries kind only; raw\n     *  actor ids must never be present in deny envelopes. */\n    actorScope?: \"member\" | \"service_account\";\n    /** The metered/resource dimension when known (e.g. `tokens`, `requests`). */\n    metric?: string;\n    /** Unix epoch ms when the limit window resets, when known. */\n    reset?: number;\n    /** Units remaining in the window at decision time, when known. */\n    remaining?: number;\n    /** Units already consumed in the window at decision time, when known. */\n    used?: number;\n    /** The cap value (the ceiling that was hit), when known. */\n    limit?: number;\n    /** True when retrying the SAME request can succeed (velocity/transient cap). */\n    retrySafe: boolean;\n    /** True when the caller must MODIFY the request (reduce size / change plan)\n     *  before it can succeed — the `capacity`/`spend` affordances. */\n    mustModify: boolean;\n    /** Provider-supplied reason verbatim, when relayed upstream (an `adaptive`\n     *  throttle). */\n    providerReason?: string;\n    /** Whether the platform or an upstream provider decided the limit. */\n    limitOrigin: FsLimitOrigin__1d4de1805fa7;\n    /** Human-facing next step for the END USER, when one applies. */\n    userAction?: string;\n    /** Human-facing next step for the DEVELOPER/operator, when one applies. */\n    devAction?: string;\n    /** The per-attempt request id (correlates with logs/traces). */\n    requestId?: string;\n    /** The gateway decision id (correlates with the usage event / audit). */\n    decisionId?: string;\n    /** Which exact constraint denied (projects from\n     *  `LimitDecision.blockingConstraintId`); present on a limit deny when known. */\n    blockingConstraintId?: string;\n    /** The recommended client reaction. */\n    reaction: FsLimitReaction__06a9e09be641;\n    /** Envelope schema version. Bumped on a NON-additive envelope change. */\n    envelopeVersion?: number;\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L109",
        "description": "The `_fs` deny envelope a limit deny body carries under the `_fs` key\n(`{ error, code, _fs: FsDenyEnvelope }`). A SUPERSET of {@link LimitDescriptor}:\na single self-describing block telling a client WHAT class of limit was hit,\nWHY, and what to DO — without re-deriving it from the wire code + status. A\nhand-mirror of the contracts `FsDenyEnvelope` (the published surface stays\ncontracts-free); the field set is bound to the source by the drift guard. The\noptional fields are absent when not known so the envelope stays byte-minimal.",
        "references": [
          {
            "name": "FsLimitClass__2d5726601b87",
            "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
          },
          {
            "name": "FsLimitOrigin__1d4de1805fa7",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
          },
          {
            "name": "FsLimitReaction__06a9e09be641",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
          }
        ]
      },
      {
        "name": "FsFetchOptions__62afbd421e0f",
        "signature": "export interface FsFetchOptions__62afbd421e0f {\n    /** HTTP method for the upstream call. Defaults to `GET`. */\n    method?: string;\n    /** Browser-controlled headers. The named integration allowlists them. */\n    headers?: Record<string, string>;\n    /** Browser-controlled query parameters. The named integration allowlists\n     * each name; secret injection parameters remain server-owned. */\n    query?: Record<string, string>;\n    /** Optional, explicitly typed request body. The named integration's bounded\n     * body declaration is enforced by the gateway. */\n    body?: {\n        kind: \"json\";\n        value: unknown;\n    } | {\n        kind: \"text\";\n        value: string;\n    };\n    /** Abort signal — cancels the in-flight secure fetch (and the token mint). */\n    signal?: AbortSignal;\n}",
        "source": "packages/farthershore-js/dist/fetch.d.ts#L3",
        "description": "Options for {@link fsFetch}.",
        "references": []
      },
      {
        "name": "FsLimitClass__2d5726601b87",
        "signature": "export type FsLimitClass__2d5726601b87 = (typeof FS_LIMIT_CLASSES__cf69b28be276)[number];",
        "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65",
        "description": "The semantic class a usage-limit deny falls into. Mirrors `LimitClass`.",
        "references": [
          {
            "name": "FS_LIMIT_CLASSES__cf69b28be276",
            "source": "packages/farthershore-js/dist/deny-codes.d.ts#L63"
          }
        ]
      },
      {
        "name": "FsLimitOrigin__1d4de1805fa7",
        "signature": "export type FsLimitOrigin__1d4de1805fa7 = \"platform\" | \"provider\" | \"subscriber\";",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L96",
        "description": "Where a limit was decided. Mirrors the contracts `LimitOrigin` (`platform` —\na plan/entitlement limit the platform owns; `provider` — an upstream throttle\nthe platform relays).",
        "references": []
      },
      {
        "name": "FsLimitReaction__06a9e09be641",
        "signature": "export type FsLimitReaction__06a9e09be641 = \"none\" | \"backoff_retry\" | \"wait_then_retry\" | \"queue\" | \"reduce_then_retry\" | \"fallback\" | \"upgrade\";",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L99",
        "description": "What a client should DO about a limit deny — the recommended reaction.\nMirrors the contracts `LimitReaction`.",
        "references": []
      },
      {
        "name": "KeysResource__2bf8d8c5e820",
        "signature": "export interface KeysResource__2bf8d8c5e820 {\n    /** The consumer's API keys for this product (secrets are never returned). */\n    list(opts?: {\n        signal?: AbortSignal;\n    }): Promise<ApiKey[]>;\n    /**\n     * Create a key. The returned `secret` is shown ONCE.\n     *\n     * Consumer-principal (D2): this generic route creates PERSONAL member keys.\n     * Managed service credentials use the canonical `serviceAccounts` lifecycle,\n     * which can return PENDING without creating a secret.\n     *\n     * `roleKeys` binds the key to org RBAC roles (live-bound: a role edit reaches\n     * the key without reprovisioning); `restrictedPermissions` optionally narrows\n     * the bound roles to a Stripe-style subset. Both are grantable only within\n     * the creator's own permissions — the backend 403s an over-reaching binding.\n     * (PERSONAL keys ignore `roleKeys` — their perms track the bound member.)\n     */\n    create(input?: {\n        label?: string;\n        scopes?: string[];\n        roleKeys?: string[];\n        restrictedPermissions?: string[];\n        kind?: \"PERSONAL\";\n        /** PERSONAL — mint FOR this member (their `Membership.id`); admin-gated. */\n        memberId?: string;\n    }): Promise<CreatedApiKey>;\n    /** Permanently revoke a key by id. */\n    revoke(keyId: string): Promise<void>;\n    /** Rotate a key — revokes the old and returns a new `secret` (shown once). */\n    rotate(keyId: string): Promise<CreatedApiKey>;\n    /** Canonical managed service-account provisioning and approval lifecycle. */\n    readonly serviceAccounts: ServiceAccountsResource__abd2dd8a7d4f;\n}",
        "source": "packages/farthershore-js/dist/resources/keys.d.ts#L3",
        "description": "",
        "references": [
          {
            "name": "ApiKey",
            "source": "packages/farthershore-js/dist/types.d.ts#L347"
          },
          {
            "name": "CreatedApiKey",
            "source": "packages/farthershore-js/dist/types.d.ts#L375"
          },
          {
            "name": "ServiceAccountsResource__abd2dd8a7d4f",
            "source": "packages/farthershore-js/dist/resources/keys.d.ts#L53"
          }
        ]
      },
      {
        "name": "LimitDescriptor__01693492a147",
        "signature": "export interface LimitDescriptor__01693492a147 {\n    /** Stable identifier for the limit that was hit, e.g. `resource:widgets`. */\n    limitCode: string;\n    /** The metered/resource dimension, when known (e.g. `widgets`, `requests`). */\n    dimension: string | null;\n    /** The cap the subscriber is at, when known. */\n    currentCapacity: number | null;\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L85",
        "description": "The machine-readable limit descriptor the gateway/core attach to a limit\ndeny body (`{ error: { code, message, limitCode, dimension, currentCapacity } }`).\nThe SDK turns this into an upgrade prompt — see {@link LimitExceededError}.",
        "references": []
      },
      {
        "name": "LimitExceededError__7844c601e6fd",
        "signature": "export declare class LimitExceededError__7844c601e6fd extends FartherShoreApiError__ae8b4410fda4 {\n    readonly limitCode: string;\n    readonly dimension: string | null;\n    readonly currentCapacity: number | null;\n    /** The semantic {@link FsLimitClass} of this limit — derived from the `_fs`\n     *  envelope when present, else from the wire code + limitCode + status\n     *  ({@link classifyFsLimit}). null only when nothing classifies it. */\n    readonly limitClass: FsLimitClass__2d5726601b87 | null;\n    /** The parsed `_fs` deny envelope, when the body carried one. The richer\n     *  source for the reaction/headroom fields below. */\n    readonly envelope: FsDenyEnvelope__adf7ef9f2448 | null;\n    /** True when retrying the SAME request can succeed (a velocity/transient cap);\n     *  false when it never will (a spend cap / oversized request). */\n    readonly retrySafe: boolean;\n    /** True when the caller must MODIFY the request before it can succeed (a\n     *  `capacity` ceiling or `spend` cap). */\n    readonly mustModify: boolean;\n    /** The recommended client reaction. */\n    readonly reaction: FsLimitReaction__06a9e09be641;\n    /** Whether the platform or an upstream provider decided the limit. */\n    readonly limitOrigin: FsLimitOrigin__1d4de1805fa7;\n    /** The gateway decision id (correlates with the usage event / audit), when\n     *  the `_fs` envelope carried one. */\n    readonly decisionId: string | null;\n    /** When the limit window resets, when known (from the `_fs` envelope `reset`,\n     *  unix-epoch ms, else the `X-RateLimit-Reset` snapshot). */\n    readonly reset: Date | null;\n    /** Units remaining in the window at decision time, when known. */\n    readonly remaining: number | null;\n    /** Units already consumed in the window at decision time, when known. */\n    readonly used: number | null;\n    /** The cap value hit, when known. */\n    readonly limit: number | null;\n    constructor(status: number, code: string, message: string, body: unknown, descriptor: LimitDescriptor__01693492a147, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot__934527ed940b | null);\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L206",
        "description": "A {@link FartherShoreApiError} that is specifically a plan-limit block — a\nresource quota (`402 resource_count_limit_exceeded`), a usage quota, a rate\nlimit, or a credit cap. Carries the {@link LimitDescriptor} so the app can\nresolve an upgrade target from the bootstrap catalog and prompt the user\n(see `useUpgrade` / `<UpgradePrompt>`).",
        "references": [
          {
            "name": "FartherShoreApiError__ae8b4410fda4",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
          },
          {
            "name": "FsDenyEnvelope__adf7ef9f2448",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L109"
          },
          {
            "name": "FsLimitClass__2d5726601b87",
            "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
          },
          {
            "name": "FsLimitOrigin__1d4de1805fa7",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
          },
          {
            "name": "FsLimitReaction__06a9e09be641",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
          },
          {
            "name": "LimitDescriptor__01693492a147",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L85"
          },
          {
            "name": "RateLimitSnapshot__934527ed940b",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
          }
        ]
      },
      {
        "name": "LimitFacet__c540ead8fd1d",
        "signature": "export interface LimitFacet__c540ead8fd1d {\n    /** The semantic class — the primary axis a UI branches on. */\n    limitClass: FsLimitClass__2d5726601b87;\n    /** The recommended client reaction (from the `_fs` envelope, else a\n     *  per-class default). */\n    reaction: FsLimitReaction__06a9e09be641;\n    /** Whether the platform or an upstream provider decided the limit. */\n    limitOrigin: FsLimitOrigin__1d4de1805fa7;\n    /** True when retrying the SAME request can succeed (rate/concurrency/adaptive\n     *  are retry-safe; quota/spend/capacity are not). */\n    retrySafe: boolean;\n    /** True when the caller must MODIFY the request (capacity) or change the plan\n     *  (spend) before it can succeed. */\n    mustModify: boolean;\n    /** True ONLY for the upgrade-affording classes (`quota` / `spend`). Drives\n     *  whether a UI mounts the upgrade prompt — capacity's \"bigger model\"\n     *  is a SEPARATE affordance, NOT an upgrade. */\n    canUpgrade: boolean;\n    /** When the limit window resets, when known. */\n    reset: Date | null;\n    /** Units remaining in the window at decision time, when known. */\n    remaining: number | null;\n    /** Units already consumed, when known. */\n    used: number | null;\n    /** The cap value hit, when known. */\n    limit: number | null;\n    /** The gateway decision id, when known. */\n    decisionId: string | null;\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L531",
        "description": "The fully-resolved facet of a limit deny — the single object a UI branches on.\nComposes the semantic {@link FsLimitClass} with the REQUEST LIFECYCLE\n(retry-safe? must the request be modified? can a plan change resolve it?) and\nthe HEADROOM (remaining/used/limit/reset) the deny reported.",
        "references": [
          {
            "name": "FsLimitClass__2d5726601b87",
            "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
          },
          {
            "name": "FsLimitOrigin__1d4de1805fa7",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
          },
          {
            "name": "FsLimitReaction__06a9e09be641",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
          }
        ]
      },
      {
        "name": "ManagedIntegration__68b11f8f586e",
        "signature": "export type ManagedIntegration__68b11f8f586e = {\n    fetch(path: string, init?: ManagedIntegrationRequestInit__57e8453840f3): Promise<Response>;\n    /**\n     * Fetch-compatible adapter for native SDKs that accept a custom transport.\n     * Pair it with {@link url}; it converts the SDK's ordinary Request into the\n     * bounded named-integration envelope without exposing the injected secret.\n     */\n    transport(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;\n    /** Same-origin reserved base URL for native SDKs. It must be paired with this\n     * handle's `transport`; a raw browser fetch to the URL is not authorized. */\n    url(path?: string): string;\n};",
        "source": "packages/farthershore-js/dist/integrations.d.ts#L6",
        "description": "A frontend-safe handle to one product-declared integration. It never exposes\nits upstream origin, secret reference, or injection configuration.",
        "references": [
          {
            "name": "ManagedIntegrationRequestInit__57e8453840f3",
            "source": "packages/farthershore-js/dist/integrations.d.ts#L3"
          }
        ]
      },
      {
        "name": "ManagedIntegrationRequestInit__57e8453840f3",
        "signature": "export type ManagedIntegrationRequestInit__57e8453840f3 = FsFetchOptions__62afbd421e0f;",
        "source": "packages/farthershore-js/dist/integrations.d.ts#L3",
        "description": "",
        "references": [
          {
            "name": "FsFetchOptions__62afbd421e0f",
            "source": "packages/farthershore-js/dist/fetch.d.ts#L3"
          }
        ]
      },
      {
        "name": "MeterUsageRow__65f0c2813d76",
        "signature": "export type MeterUsageRow__65f0c2813d76 = {\n    key: string;\n    label: string;\n    used: number;\n    quota: number | null;\n    unit?: string;\n    /** True when the row is a MEASURE the product meters but does NOT publish in\n     *  its served meter catalog (`ocr_pages`, `pages`) rather than a first-class\n     *  meter. Such a row is a breakdown of the metered total, not a peer of it —\n     *  the usage surfaces render it as a secondary line under the meter rows\n     *  instead of as another top-level row. */\n    secondary?: boolean;\n};",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L226",
        "description": "",
        "references": []
      },
      {
        "name": "NotificationsResource__dc7aa1b64a0f",
        "signature": "export interface NotificationsResource__dc7aa1b64a0f {\n    /** The current preference state. Missing `master`/`categories` in a partial\n     *  wire response are normalized to the opted-in defaults. */\n    preferences(opts?: {\n        signal?: AbortSignal;\n    }): Promise<NotificationPreferences>;\n    /** Partial patch — send ONLY the changed channels/categories. Returns the\n     *  full, normalized updated state. */\n    updatePreferences(patch: NotificationPreferencesPatch): Promise<NotificationPreferences>;\n}",
        "source": "packages/farthershore-js/dist/resources/account.d.ts#L169",
        "description": "The subscriber's per-category notification preferences (the portal\n`/me/notification-preferences` surface). OPT-OUT model — see\n{@link NotificationPreferences}. Deliberately NON-degrading (like\n{@link RbacResource}): a failed read THROWS the typed `FartherShoreApiError`\nso the preferences page can render an explicit error state rather than a\nsilent all-opted-in default.",
        "references": [
          {
            "name": "NotificationPreferences",
            "source": "packages/farthershore-js/dist/types.d.ts#L1164"
          },
          {
            "name": "NotificationPreferencesPatch",
            "source": "packages/farthershore-js/dist/types.d.ts#L1170"
          }
        ]
      },
      {
        "name": "ObservedLimitDeny__ff379deca309",
        "signature": "export interface ObservedLimitDeny__ff379deca309 {\n    /** The semantic class, or null for an UNKNOWN/future class (T13). */\n    limitClass: FsLimitClass__2d5726601b87 | null;\n    /** The raw `limitClass` string when it is outside the closed mirror (T13). */\n    unknownLimitClass?: string;\n    /** The recommended client reaction. */\n    reaction: FsLimitReaction__06a9e09be641;\n    /** Whether the platform or an upstream provider decided the deny. */\n    limitOrigin: FsLimitOrigin__1d4de1805fa7;\n    /** The provider-supplied reason verbatim, when this relayed an upstream\n     *  throttle (an adaptive deny). */\n    providerReason: string | null;\n    /** When the limit window resets, when known. */\n    reset: Date | null;\n    /** Units remaining in the window at decision time, when known. */\n    remaining: number | null;\n    /** The cap value hit, when known. */\n    limit: number | null;\n    /** The HTTP status of the deny. */\n    status: number;\n    /** The wire `code` of the deny. */\n    code: string;\n    /** The gateway decision id, when known. */\n    decisionId: string | null;\n    /** Wall-clock instant (epoch ms) the deny was observed — drives staleness. */\n    observedAt: number;\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L580",
        "description": "A5-amend (T11) — a snapshot of a single OBSERVED limit/throttle deny, captured\nas it leaves the transport. The ADVISORY input to `useLimitStatus()`: the\nfreshest known RECENT deny (NOT a live poll — the gateway stays authoritative).\nProvider-neutral; forward-compat (an unknown future class keeps `limitClass`\nnull + the raw value on `unknownLimitClass`, never crashing — T13).",
        "references": [
          {
            "name": "FsLimitClass__2d5726601b87",
            "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
          },
          {
            "name": "FsLimitOrigin__1d4de1805fa7",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
          },
          {
            "name": "FsLimitReaction__06a9e09be641",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
          }
        ]
      },
      {
        "name": "OrganizationsResource__18d4024e64ce",
        "signature": "export interface OrganizationsResource__18d4024e64ce {\n    /** The orgs through which the current user holds subscriptions to this\n     *  product (B2B multi-org). Degrades to the empty shape on any error —\n     *  exactly how the SSR portal treated it. Set `strict` only when a caller\n     *  needs to render the read failure distinctly from a valid empty result. */\n    contexts(opts?: {\n        signal?: AbortSignal;\n        strict?: boolean;\n    }): Promise<SubscriptionContextsResult>;\n}",
        "source": "packages/farthershore-js/dist/resources/account.d.ts#L3",
        "description": "",
        "references": [
          {
            "name": "SubscriptionContextsResult",
            "source": "packages/farthershore-js/dist/types.d.ts#L968"
          }
        ]
      },
      {
        "name": "PlanKindWire__a95f9171680c",
        "signature": "export type PlanKindWire__a95f9171680c = \"free\" | \"flat\" | \"usage\" | \"prepaid\" | \"hybrid\" | \"trial\" | \"custom\";",
        "source": "packages/farthershore-js/dist/generated/catalog-types.d.ts#L25",
        "description": "The DECLARED plan kind (`plan.kind.*` in the Business SDK; the ONE plan\nkind enum, `@farthershore/contracts/commerce` `planKindSchema`).",
        "references": []
      },
      {
        "name": "PlanMeterWire__47c3d2492e8a",
        "signature": "export interface PlanMeterWire__47c3d2492e8a {\n    dimension: string;\n    /** Aggregation formula (`linear` sum | `active_count` gauge |\n     *  `event_count` per-event). OPTIONAL — absent means `linear`. */\n    kind?: \"linear\" | \"active_count\" | \"event_count\";\n}",
        "source": "packages/farthershore-js/dist/generated/catalog-types.d.ts#L17",
        "description": "A structural metered dimension on a plan — dimension + aggregation kind,\nNO money (`@farthershore/contracts/portal` `PortalPlan.meters[number]`).\nRates, allowances, and projected bills come from the bill-preview API,\nnever from the plan.",
        "references": []
      },
      {
        "name": "PlanOffer__5ab47cb32b7d",
        "signature": "export interface PlanOffer__5ab47cb32b7d {\n    /** The immutable CompiledPlan version id (equals `plan.id`). */\n    compiledPlanId: string;\n    /** The plan, in the same wire shape as `list()` / the portal catalog. */\n    plan: Plan;\n    /** The billing fingerprint of THIS plan version's economic content. Pass it\n     *  to `subscribe()` / `startOnboarding()` as `offerFingerprint` to get a\n     *  409 PLAN_OFFER_CHANGED instead of a silent price change. */\n    offerFingerprint: string;\n}",
        "source": "packages/farthershore-js/dist/resources/plans.d.ts#L31",
        "description": "One entry from `getPlanOffers()` — a currently-purchasable plan version.",
        "references": [
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "PlansResource__05a484289922",
        "signature": "export interface PlansResource__05a484289922 {\n    /** The product's available plans (resolved via bootstrap). Empty when the\n     *  product has no published, self-serve plans. */\n    list(): Promise<Plan[]>;\n    /** The currently-purchasable plan versions for the signed-in subscriber\n     *  (including their pinned plan version), each with the `offerFingerprint`\n     *  to echo back at `subscribe()` for price-change consent. Unlike `list()`,\n     *  this is a live core read (not bootstrap-cached). */\n    getPlanOffers(): Promise<PlanOffer__5ab47cb32b7d[]>;\n    /** Start checkout for a plan. Paid → `{ url }` (navigate to Stripe). Free →\n     *  `{ subscriber }` (activated directly). Pass `offerFingerprint` (from\n     *  `getPlanOffers()`) to fail 409 PLAN_OFFER_CHANGED on a stale price. */\n    subscribe(input: SubscribeInput__62c7cb21d77a): Promise<SubscribeResult__4b2d9557cede>;\n    /** The dashboard onboarding path (`POST /onboarding`) the SSR portal's\n     *  onboarding view uses. Differs from `subscribe()`: paid plans return\n     *  `checkoutUrl` (not `url`), and free activations may include a one-time\n     *  `autoApiKey` (drives the auto-created-key banner). */\n    startOnboarding(input?: StartOnboardingInput__af7cf0dea526): Promise<OnboardingResult>;\n}",
        "source": "packages/farthershore-js/dist/resources/plans.d.ts#L61",
        "description": "",
        "references": [
          {
            "name": "OnboardingResult",
            "source": "packages/farthershore-js/dist/types.d.ts#L1104"
          },
          {
            "name": "Plan",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          },
          {
            "name": "PlanOffer__5ab47cb32b7d",
            "source": "packages/farthershore-js/dist/resources/plans.d.ts#L31"
          },
          {
            "name": "StartOnboardingInput__af7cf0dea526",
            "source": "packages/farthershore-js/dist/resources/plans.d.ts#L27"
          },
          {
            "name": "SubscribeInput__62c7cb21d77a",
            "source": "packages/farthershore-js/dist/resources/plans.d.ts#L5"
          },
          {
            "name": "SubscribeResult__4b2d9557cede",
            "source": "packages/farthershore-js/dist/resources/plans.d.ts#L44"
          }
        ]
      },
      {
        "name": "PrefetchSurface__2b22bd2b6c45",
        "signature": "export interface PrefetchSurface__2b22bd2b6c45 {\n    /** Warm the host→business resolve (joins the memoized bootstrap). */\n    boot(): void;\n    /** Warm `GET /me` (subscriber context) for dashboard/account surfaces. */\n    me(): void;\n    /** Warm the default usage snapshot (what `<UsageCard>`/the usage page read). */\n    usage(): void;\n    /** Warm the API-key list. */\n    apiKeys(): void;\n    /** Warm the subscription read (billing surfaces). */\n    subscription(): void;\n}",
        "source": "packages/farthershore-js/dist/client.d.ts#L24",
        "description": "Fire-and-forget cache warmers for navigation intent (sidebar hover/focus,\nroute preload). Each starts the same read-through-cached request the\ndestination page will make, so the page's hooks join the in-flight promise\ninstead of paying a fresh round-trip after the route renders. Bootstrap is\nensured first; all errors are swallowed — a hover is a hint, and the page's\nown read surfaces any real failure.",
        "references": []
      },
      {
        "name": "RateLimitSnapshot__934527ed940b",
        "signature": "export interface RateLimitSnapshot__934527ed940b {\n    /** Requests left in the current window, or null when the header is absent. */\n    remaining: number | null;\n    /** When the window resets, or null when the header is absent. The\n     *  `X-RateLimit-Reset` value is unix-epoch SECONDS. */\n    resetAt: Date | null;\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L8",
        "description": "Parsed `X-RateLimit-*` snapshot the gateway attaches to throttle responses.\nThe gateway emits `X-RateLimit-Remaining` + `X-RateLimit-Reset` but NOT\n`X-RateLimit-Limit`, so there is deliberately no `limit` field.",
        "references": []
      },
      {
        "name": "RbacResource__b63486266173",
        "signature": "export interface RbacResource__b63486266173 {\n    settings: {\n        /** Current org settings: `{ enabled, defaultRoleKey? }`. */\n        get(opts?: {\n            signal?: AbortSignal;\n        }): Promise<RbacSettings>;\n        /** Full-document replace. `enabled: true` seeds the editable\n         *  Admin/Editor/Viewer templates (idempotent); omitted/null\n         *  `defaultRoleKey` clears the default. */\n        update(input: {\n            enabled: boolean;\n            defaultRoleKey?: string | null;\n        }): Promise<RbacSettings>;\n    };\n    /** The DERIVED grantable-permission catalog (never authored) — grouped by\n     *  route operation, in the `<route-id>:read|write` grammar. */\n    catalog(opts?: {\n        signal?: AbortSignal;\n    }): Promise<RbacCatalogEntry[]>;\n    roles: {\n        /** The org's role list (seeded templates + custom), sorted by key. */\n        list(opts?: {\n            signal?: AbortSignal;\n        }): Promise<RbacRole[]>;\n        /** Create a custom role. Permissions are validated against the catalog\n         *  (400 `UNKNOWN_PERMISSION` naming offenders; `\"*\"` always grantable). */\n        create(input: {\n            roleKey: string;\n            name: string;\n            permissions: string[];\n        }): Promise<RbacRole>;\n        /** Rename and/or re-permission a role. */\n        update(roleKey: string, input: {\n            name?: string;\n            permissions?: string[];\n        }): Promise<RbacRole>;\n        /** Delete a role. Member assignments referencing it are left in place\n         *  (resolution ignores stale keys); a matching `defaultRoleKey` is\n         *  cleared server-side. */\n        remove(roleKey: string): Promise<void>;\n    };\n    /**\n     * Permissions Kernel Wave 6 — per-subscriber component gate policies. An\n     * org admin (team:manage_rbac) upserts one override row per component key;\n     * `requiredPermission: null` clears the permission override back to the\n     * component's default. Throws the typed `FartherShoreApiError` — a 409\n     * `GOVERNED_BY_CHANGE_SET` means change control governs these rows.\n     */\n    componentPolicies: {\n        /** Upsert the override row for one component key\n         *  (PUT /me/component-policies). */\n        update(input: {\n            componentKey: string;\n            requiredPermission: string | null;\n            gateMode: string;\n        }): Promise<ComponentAccessPolicyRow>;\n    };\n    /**\n     * Track T3 — Notion-minimal access requests. Any member files a request for a\n     * permission; owners/admins review the queue and approve (AUTO-GRANTS the\n     * permission onto the requester's direct grants) or deny.\n     */\n    accessRequests: {\n        /** File a request for a permission. Idempotent on an open PENDING row for\n         *  the same (requester, permission). Any authenticated member. */\n        create(input: {\n            permission: string;\n            note?: string;\n        }): Promise<AccessRequest>;\n        /** The request queue (OWNER/ADMIN): pending first, then resolved. */\n        list(opts?: {\n            signal?: AbortSignal;\n        }): Promise<AccessRequest[]>;\n        /** Approve (grants the permission) or deny a pending request. */\n        resolve(requestId: string, action: \"approve\" | \"deny\"): Promise<AccessRequest>;\n    };\n}",
        "source": "packages/farthershore-js/dist/resources/account.d.ts#L65",
        "description": "Org-facing Managed-RBAC management (FAR-698/FAR-700) — the portal-customer\n`/me/rbac/*` surface. Org OWNER/ADMIN only; every method THROWS the\ntyped `FartherShoreApiError` rather than degrading, because the UI derives\nsection visibility from the error codes (`RBAC_NOT_ENABLED_BY_PRODUCT`,\n`UNKNOWN_PERMISSION`). Everything here configures UX + minted-token claims;\nthe EDGE `permission` constraint is the security boundary — never treat\nclient-side gating as enforcement.",
        "references": [
          {
            "name": "AccessRequest",
            "source": "packages/farthershore-js/dist/types.d.ts#L1061"
          },
          {
            "name": "ComponentAccessPolicyRow",
            "source": "packages/farthershore-js/dist/types.d.ts#L945"
          },
          {
            "name": "RbacCatalogEntry",
            "source": "packages/farthershore-js/dist/types.d.ts#L1053"
          },
          {
            "name": "RbacRole",
            "source": "packages/farthershore-js/dist/types.d.ts#L1035"
          },
          {
            "name": "RbacSettings",
            "source": "packages/farthershore-js/dist/types.d.ts#L1028"
          }
        ]
      },
      {
        "name": "ReadCacheEntry__ee67854da2b9",
        "signature": "export interface ReadCacheEntry__ee67854da2b9 {\n    at: number;\n    promise: Promise<unknown>;\n}",
        "source": "packages/farthershore-js/dist/cache.d.ts#L2",
        "description": "",
        "references": []
      },
      {
        "name": "ReconcileOptions__bcd46321c900",
        "signature": "export interface ReconcileOptions__bcd46321c900 {\n    /** Max number of `me()` reads before giving up. Default 6. */\n    maxAttempts?: number;\n    /** Base backoff delay in ms (doubles each attempt, capped at `maxDelayMs`).\n     *  Default 600. */\n    baseDelayMs?: number;\n    /** Backoff ceiling in ms. Default 5000. */\n    maxDelayMs?: number;\n    /** Predicate deciding whether the lifecycle has settled. Default: ACTIVE or\n     *  TRIALING. */\n    isSettled?: (subscriber: SubscriberDetail | null) => boolean;\n    /** Abort the poll loop early (e.g. component unmount). */\n    signal?: AbortSignal;\n}",
        "source": "packages/farthershore-js/dist/reconcile.d.ts#L3",
        "description": "",
        "references": [
          {
            "name": "SubscriberDetail",
            "source": "packages/farthershore-js/dist/types.d.ts#L859"
          }
        ]
      },
      {
        "name": "ResolvedRetryConfig__fe2336bea142",
        "signature": "export interface ResolvedRetryConfig__fe2336bea142 {\n    maxAttempts: number;\n    retryOn: (err: unknown) => boolean;\n    respectRetryAfter: boolean;\n    sleep: (ms: number) => Promise<void>;\n}",
        "source": "packages/farthershore-js/dist/config.d.ts#L29",
        "description": "Resolved retry policy with all defaults applied (internal).",
        "references": []
      },
      {
        "name": "ResourceLimitUsage__a2c3c3e2955a",
        "signature": "export interface ResourceLimitUsage__a2c3c3e2955a {\n    limit: number;\n    current: number;\n}",
        "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L10",
        "description": "One resource's enforced cap and the caller's current usage.",
        "references": []
      },
      {
        "name": "ResourceLimitUsageMap__cc534f1c9f18",
        "signature": "export type ResourceLimitUsageMap__cc534f1c9f18 = Record<string, ResourceLimitUsage__a2c3c3e2955a>;",
        "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L15",
        "description": "Per-resource `{ limit, current }`. Undeclared resources are unlimited.",
        "references": [
          {
            "name": "ResourceLimitUsage__a2c3c3e2955a",
            "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L10"
          }
        ]
      },
      {
        "name": "ResourceRecord__87f0c814eb51",
        "signature": "export interface ResourceRecord__87f0c814eb51<TPayload = unknown> {\n    id: string;\n    resource: string;\n    payload: TPayload;\n    createdAt: string;\n    updatedAt: string;\n}",
        "source": "packages/farthershore-js/dist/resources/resources.d.ts#L10",
        "description": "One record of a declared resource, as owned and returned by core.",
        "references": []
      },
      {
        "name": "ResourceRequestInit__06eb38c7f26b",
        "signature": "export type ResourceRequestInit__06eb38c7f26b = RouteRequestInit__7377dee5c3ef & {\n    subjectId?: string;\n};",
        "source": "packages/farthershore-js/dist/resources/resources.d.ts#L6",
        "description": "A resource verb's options — the standard request init plus an optional\n`subjectId` for SUBJECT-scoped resources (W5.4). When set, it's forwarded as\nthe `x-fs-subject-id` header so core keys the count on that subject.",
        "references": [
          {
            "name": "RouteRequestInit__7377dee5c3ef",
            "source": "packages/farthershore-js/dist/resources/route.d.ts#L2"
          }
        ]
      },
      {
        "name": "ResourcesResource__ef6d17bbf151",
        "signature": "export interface ResourcesResource__ef6d17bbf151<TPayload = unknown> {\n    /** List this subscriber's records of the resource. */\n    list(init?: ResourceRequestInit__06eb38c7f26b): Promise<ResourceRecord__87f0c814eb51<TPayload>[]>;\n    /** Fetch one record by id. */\n    get(id: string, init?: ResourceRequestInit__06eb38c7f26b): Promise<ResourceRecord__87f0c814eb51<TPayload>>;\n    /** Create a record. Throws `LimitExceededError` (402) at the plan cap. */\n    create(payload: TPayload, init?: ResourceRequestInit__06eb38c7f26b): Promise<ResourceRecord__87f0c814eb51<TPayload>>;\n    /** Replace a record's payload. */\n    update(id: string, payload: TPayload, init?: ResourceRequestInit__06eb38c7f26b): Promise<ResourceRecord__87f0c814eb51<TPayload>>;\n    /** Delete a record (frees one unit of the quota). */\n    delete(id: string, init?: ResourceRequestInit__06eb38c7f26b): Promise<void>;\n    /** Authoritative `{ count, cap }` for this resource on the caller's\n     *  subscription (W5.2). Reads core (the system of record), so it works for\n     *  backend-managed resources the SDK can't `list()`. Signed-out / no\n     *  subscription → `{ count: 0, cap: null }`. */\n    count(init?: {\n        signal?: AbortSignal;\n        subjectId?: string;\n    }): Promise<ResourceUsage__40697d865d06>;\n}",
        "source": "packages/farthershore-js/dist/resources/resources.d.ts#L25",
        "description": "",
        "references": [
          {
            "name": "ResourceRecord__87f0c814eb51",
            "source": "packages/farthershore-js/dist/resources/resources.d.ts#L10"
          },
          {
            "name": "ResourceRequestInit__06eb38c7f26b",
            "source": "packages/farthershore-js/dist/resources/resources.d.ts#L6"
          },
          {
            "name": "ResourceUsage__40697d865d06",
            "source": "packages/farthershore-js/dist/resources/resources.d.ts#L21"
          }
        ]
      },
      {
        "name": "ResourceUsage__40697d865d06",
        "signature": "export interface ResourceUsage__40697d865d06 {\n    count: number;\n    cap: number | null;\n}",
        "source": "packages/farthershore-js/dist/resources/resources.d.ts#L21",
        "description": "The authoritative current count + cap for a resource on the caller's\nsubscription (W5.2). `count` is the system-of-record count read from core;\n`cap` is the per-plan ceiling (a number, or `null` when uncapped/unlimited).\nWorks even for Model-1 backend-managed resources the SDK can't `list()`.",
        "references": []
      },
      {
        "name": "RetryConfig__bec25563219c",
        "signature": "export interface RetryConfig__bec25563219c {\n    /** Total attempts including the first (so `2` = one retry). Default 3.\n     *  Set to `1` to disable retry. */\n    maxAttempts?: number;\n    /** Predicate deciding whether a thrown error is retryable. Defaults to the\n     *  canonical {@link isRetryable} (429 + transient 502/503/504 + network faults\n     *  + the named retryable deny codes). */\n    retryOn?: (err: unknown) => boolean;\n    /** Honor a `Retry-After` header for the backoff delay when present. Default\n     *  true. */\n    respectRetryAfter?: boolean;\n    /** Override the delay primitive (tests inject a no-op; default is a\n     *  timer-based sleep). Not part of the public surface — internal/testing. */\n    sleep?: (ms: number) => Promise<void>;\n}",
        "source": "packages/farthershore-js/dist/config.d.ts#L13",
        "description": "Automatic-retry policy for transient failures. Retry is ON by default with\nsensible bounds — a developer who configures nothing already gets correct\nback-off behaviour on throttles (429), the transient gateway/dependency faults\n(502/503/504), and network failures (DNS/connection). This block only TUNES or\nopts out.\n\nOnly idempotent reads (GET) are ever retried; non-idempotent methods\n(POST/PATCH/PUT/DELETE) and aborted requests are never retried.",
        "references": []
      },
      {
        "name": "RouteRequestInit__7377dee5c3ef",
        "signature": "export type RouteRequestInit__7377dee5c3ef = RequestInit & {\n    apiKey?: string;\n};",
        "source": "packages/farthershore-js/dist/resources/route.d.ts#L2",
        "description": "",
        "references": []
      },
      {
        "name": "RouteResource__52eafab15328",
        "signature": "export interface RouteResource__52eafab15328 {\n    /** Raw gateway call — returns the `Response` for any content type. */\n    fetch(path: string, init?: RouteRequestInit__7377dee5c3ef): Promise<Response>;\n    /** `GET path` → parsed JSON. */\n    get<T = unknown>(path: string, init?: RouteRequestInit__7377dee5c3ef): Promise<T>;\n    /** `GET path` → parsed JSON PLUS the `X-RateLimit-*` snapshot read off the\n     *  live response before it's discarded (W8.5). Also publishes the snapshot to\n     *  `useRouteRateLimit()`. */\n    getWithMeta<T = unknown>(path: string, init?: RouteRequestInit__7377dee5c3ef): Promise<RouteResponseMeta__0abf9098561d<T>>;\n    /** `POST path` with a JSON body → parsed JSON. */\n    post<T = unknown>(path: string, body?: unknown, init?: RouteRequestInit__7377dee5c3ef): Promise<T>;\n    /** `PUT path` with a JSON body → parsed JSON. */\n    put<T = unknown>(path: string, body?: unknown, init?: RouteRequestInit__7377dee5c3ef): Promise<T>;\n    /** `PATCH path` with a JSON body → parsed JSON. */\n    patch<T = unknown>(path: string, body?: unknown, init?: RouteRequestInit__7377dee5c3ef): Promise<T>;\n    /** `DELETE path` → parsed JSON (or undefined on 204). */\n    delete<T = void>(path: string, init?: RouteRequestInit__7377dee5c3ef): Promise<T>;\n}",
        "source": "packages/farthershore-js/dist/resources/route.d.ts#L15",
        "description": "",
        "references": [
          {
            "name": "RouteRequestInit__7377dee5c3ef",
            "source": "packages/farthershore-js/dist/resources/route.d.ts#L2"
          },
          {
            "name": "RouteResponseMeta__0abf9098561d",
            "source": "packages/farthershore-js/dist/resources/route.d.ts#L8"
          }
        ]
      },
      {
        "name": "RouteResponseMeta__0abf9098561d",
        "signature": "export interface RouteResponseMeta__0abf9098561d<T> {\n    data: T;\n    rateLimit: {\n        remaining: number | null;\n        resetAt: Date | null;\n    };\n}",
        "source": "packages/farthershore-js/dist/resources/route.d.ts#L8",
        "description": "A `GET` response plus the throttle snapshot read off its `X-RateLimit-*`\nheaders (W8.5). `remaining`/`resetAt` are null when the gateway didn't send\nthem. The same snapshot also updates `useRouteRateLimit()`.",
        "references": []
      },
      {
        "name": "ServiceAccountApprovalsResource__52f0cefb9602",
        "signature": "export interface ServiceAccountApprovalsResource__52f0cefb9602 {\n    /** Approval requests this signed-in member is currently eligible to decide. */\n    list(opts?: {\n        signal?: AbortSignal;\n        limit?: number;\n        offset?: number;\n    }): Promise<OffsetPage<PendingServiceAccountApproval>>;\n    /** Approve the complete request or an explicitly trimmed subset. */\n    approve(approvalId: string, input?: ApproveServiceAccountInput): Promise<ServiceAccountApprovalResponse>;\n    /** Deny a pending request without minting or widening any credential. */\n    deny(approvalId: string): Promise<ServiceAccountDenyResponse>;\n}",
        "source": "packages/farthershore-js/dist/resources/keys.d.ts#L37",
        "description": "",
        "references": [
          {
            "name": "ApproveServiceAccountInput",
            "source": "packages/farthershore-js/dist/types.d.ts#L451"
          },
          {
            "name": "OffsetPage",
            "source": "packages/farthershore-js/dist/types.d.ts#L535"
          },
          {
            "name": "PendingServiceAccountApproval",
            "source": "packages/farthershore-js/dist/types.d.ts#L521"
          },
          {
            "name": "ServiceAccountApprovalResponse",
            "source": "packages/farthershore-js/dist/types.d.ts#L508"
          },
          {
            "name": "ServiceAccountDenyResponse",
            "source": "packages/farthershore-js/dist/types.d.ts#L518"
          }
        ]
      },
      {
        "name": "ServiceAccountMutationOptions__2dee3eb4c17c",
        "signature": "export interface ServiceAccountMutationOptions__2dee3eb4c17c {\n    /** Reuse this value to replay the same pending create/update request safely. */\n    idempotencyKey?: string;\n}",
        "source": "packages/farthershore-js/dist/resources/keys.d.ts#L49",
        "description": "",
        "references": []
      },
      {
        "name": "ServiceAccountsResource__abd2dd8a7d4f",
        "signature": "export interface ServiceAccountsResource__abd2dd8a7d4f {\n    /** List managed accounts, including PENDING rows with no credential material. */\n    list(opts?: {\n        signal?: AbortSignal;\n        limit?: number;\n        offset?: number;\n    }): Promise<OffsetPage<ServiceAccount>>;\n    /** Create immediately when covered, otherwise return a strict PENDING response. */\n    create(input: CreateServiceAccountInput, options?: ServiceAccountMutationOptions__2dee3eb4c17c): Promise<ServiceAccountCreateResponse>;\n    /** Replace the frozen grant snapshot or create a pending UPDATE request. */\n    update(serviceAccountId: string, input: UpdateServiceAccountInput, options?: ServiceAccountMutationOptions__2dee3eb4c17c): Promise<ServiceAccountUpdateResponse>;\n    /** Rotate the account credential and return the replacement secret once. */\n    rotate(serviceAccountId: string): Promise<ServiceAccountRotationResponse>;\n    /** Revoke the account and every active credential attached to it. */\n    revoke(serviceAccountId: string): Promise<void>;\n    readonly approvals: ServiceAccountApprovalsResource__52f0cefb9602;\n}",
        "source": "packages/farthershore-js/dist/resources/keys.d.ts#L53",
        "description": "",
        "references": [
          {
            "name": "CreateServiceAccountInput",
            "source": "packages/farthershore-js/dist/types.d.ts#L441"
          },
          {
            "name": "OffsetPage",
            "source": "packages/farthershore-js/dist/types.d.ts#L535"
          },
          {
            "name": "ServiceAccount",
            "source": "packages/farthershore-js/dist/types.d.ts#L425"
          },
          {
            "name": "ServiceAccountApprovalsResource__52f0cefb9602",
            "source": "packages/farthershore-js/dist/resources/keys.d.ts#L37"
          },
          {
            "name": "ServiceAccountCreateResponse",
            "source": "packages/farthershore-js/dist/types.d.ts#L475"
          },
          {
            "name": "ServiceAccountMutationOptions__2dee3eb4c17c",
            "source": "packages/farthershore-js/dist/resources/keys.d.ts#L49"
          },
          {
            "name": "ServiceAccountRotationResponse",
            "source": "packages/farthershore-js/dist/types.d.ts#L509"
          },
          {
            "name": "ServiceAccountUpdateResponse",
            "source": "packages/farthershore-js/dist/types.d.ts#L492"
          },
          {
            "name": "UpdateServiceAccountInput",
            "source": "packages/farthershore-js/dist/types.d.ts#L447"
          }
        ]
      },
      {
        "name": "SpendCapResult__395300e78371",
        "signature": "export interface SpendCapResult__395300e78371 {\n    /** The stored monthly spend cap in cents (null when cleared). */\n    maxMonthlySpendCents: number | null;\n    /** The subscription's entitlement version after the write, when returned. */\n    entitlementVersion?: number;\n}",
        "source": "packages/farthershore-js/dist/resources/billing.d.ts#L5",
        "description": "Result of {@link BillingResource.setSpendCap}: the stored cap (echo) + the\nbumped subscription entitlement version (cache-bust signal).",
        "references": []
      },
      {
        "name": "StartOnboardingInput__af7cf0dea526",
        "signature": "export interface StartOnboardingInput__af7cf0dea526 extends Omit<SubscribeInput__62c7cb21d77a, \"compiledPlanId\"> {\n    compiledPlanId?: string;\n}",
        "source": "packages/farthershore-js/dist/resources/plans.d.ts#L27",
        "description": "Input to `startOnboarding()`. Unlike direct checkout, the plan is optional:\nomitting it asks Core to select the business's single declared zero-price\nplan. This is the safest zero-price onboarding path because a client cannot\naccidentally name a billable plan.",
        "references": [
          {
            "name": "SubscribeInput__62c7cb21d77a",
            "source": "packages/farthershore-js/dist/resources/plans.d.ts#L5"
          }
        ]
      },
      {
        "name": "SubscribeInput__62c7cb21d77a",
        "signature": "export interface SubscribeInput__62c7cb21d77a {\n    /** The plan to subscribe to — pass `plan.id`. */\n    compiledPlanId: string;\n    /** Owning org for org-owned subscriptions (forwarded as the\n     *  `organizationId` query + header). */\n    organizationId?: string | null;\n    /** Where Stripe redirects after a successful paid checkout. */\n    successUrl?: string;\n    /** Where Stripe redirects if the subscriber abandons checkout. */\n    cancelUrl?: string;\n    /** OPTIONAL price-consent echo (E2 — Managed Stripe Price Integrity): the\n     *  `offerFingerprint` from `getPlanOffers()`. When provided and the plan's\n     *  economics changed since the offer was rendered, core rejects with\n     *  409 PLAN_OFFER_CHANGED (typed as `FartherShorePlanOfferChangedError`) and\n     *  creates NO session — catch it, refetch offers, and re-present the price.\n     *  Omit for today's unguarded behavior. */\n    offerFingerprint?: string;\n}",
        "source": "packages/farthershore-js/dist/resources/plans.d.ts#L5",
        "description": "Input to `subscribe()`. `compiledPlanId` is the `Plan.id` (immutable\nCompiledPlan pointer).",
        "references": []
      },
      {
        "name": "SubscribeResult__4b2d9557cede",
        "signature": "export interface SubscribeResult__4b2d9557cede {\n    /** Stripe Checkout URL (paid plans only). Undefined for free activations. */\n    url?: string;\n    /** The activated subscriber (free plans only). Undefined for paid checkout. */\n    subscriber?: {\n        id: string;\n        businessId?: string | null;\n        status: string;\n    };\n    /** Server-side checkout-attempt id, when returned. */\n    checkoutAttemptId?: string;\n    /** Best-effort initial API key minted on free-plan activation, when present. */\n    autoApiKey?: string;\n    /** Set when the subscriber activated but the first-key mint FAILED — surfaced\n     *  (not swallowed) so the caller can prompt a manual key creation. */\n    autoApiKeyError?: AutoApiKeyError;\n}",
        "source": "packages/farthershore-js/dist/resources/plans.d.ts#L44",
        "description": "Result of `subscribe()`. For a PAID plan, `url` is the Stripe Checkout URL to\nnavigate to. For a FREE plan, there is no `url` — the subscriber was\nactivated directly and `subscriber` describes the new row.",
        "references": [
          {
            "name": "AutoApiKeyError",
            "source": "packages/farthershore-js/dist/types.d.ts#L1097"
          }
        ]
      },
      {
        "name": "TeamResource__b9e413854377",
        "signature": "export interface TeamResource__b9e413854377 {\n    /** Team members on the current subscription. A failed read surfaces\n     *  `{ ok:false, error }` (drives the SSR portal's read-only banner) — NOT a\n     *  silent empty list. */\n    list(opts?: {\n        signal?: AbortSignal;\n    }): Promise<TeamListResult>;\n    /**\n     * Track T2 — subscriber-team invitations. Managers (OWNER/ADMIN) invite by\n     * email; the invitee accepts with the emailed token. Each method THROWS the\n     * typed `FartherShoreApiError` on validation/authz failure.\n     */\n    invites: {\n        /** Pending invitations (OWNER/ADMIN). */\n        list(opts?: {\n            signal?: AbortSignal;\n        }): Promise<TeamInvitation[]>;\n        /** Create an invitation. `role` defaults to VIEWER; `businessRoleKeys` must\n         *  be a subset of the caller's own permissions (403 otherwise). Returns the\n         *  invitation plus the one-time raw token. */\n        create(input: {\n            email: string;\n            role?: TeamRole;\n            businessRoleKeys?: string[];\n        }): Promise<TeamInvitationCreated>;\n        /** Revoke a pending invitation. */\n        revoke(invitationId: string): Promise<void>;\n        /** Accept an invitation with its token. The signed-in user's email must\n         *  match the invite (403 mismatch; 409 expired/already-used). */\n        accept(token: string): Promise<TeamInvitationAccepted>;\n    };\n    updateRole(membershipId: string, role: TeamRole): Promise<TeamMember>;\n    remove(membershipId: string): Promise<void>;\n    /**\n     * Set-replace a member's Managed-RBAC product-role assignment (FAR-698):\n     * the given list becomes the member's full assignment; `[]` clears it.\n     * Every key must reference an existing role. Throws the typed\n     * `FartherShoreApiError` on validation/authz failures.\n     * Client-side role gating is UX only; the gateway's `permission`\n     * constraint is the security boundary.\n     */\n    assignRoles(membershipId: string, roles: string[]): Promise<TeamMember>;\n}",
        "source": "packages/farthershore-js/dist/resources/account.d.ts#L13",
        "description": "",
        "references": [
          {
            "name": "TeamInvitation",
            "source": "packages/farthershore-js/dist/types.d.ts#L999"
          },
          {
            "name": "TeamInvitationAccepted",
            "source": "packages/farthershore-js/dist/types.d.ts#L1017"
          },
          {
            "name": "TeamInvitationCreated",
            "source": "packages/farthershore-js/dist/types.d.ts#L1012"
          },
          {
            "name": "TeamListResult",
            "source": "packages/farthershore-js/dist/types.d.ts#L990"
          },
          {
            "name": "TeamMember",
            "source": "packages/farthershore-js/dist/types.d.ts#L974"
          },
          {
            "name": "TeamRole",
            "source": "packages/farthershore-js/dist/types.d.ts#L973"
          }
        ]
      },
      {
        "name": "TokenProvider__40095f0da8e4",
        "signature": "export type TokenProvider__40095f0da8e4 = () => string | null | undefined | Promise<string | null | undefined>;",
        "source": "packages/farthershore-js/dist/config.d.ts#L80",
        "description": "Returns the current session bearer token (Clerk session JWT or persona JWT),\nor null/undefined when signed out. May be async (e.g. Clerk's getToken).",
        "references": []
      },
      {
        "name": "UsageLimitCreateMode__f16ef2d50497",
        "signature": "type UsageLimitCreateMode__f16ef2d50497 = {\n    mode: \"BLOCK\";\n    notifyAtPct?: never;\n} | {\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L595",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitExplicitUpdateMode__577df72501b7",
        "signature": "type UsageLimitExplicitUpdateMode__577df72501b7 = {\n    mode: \"BLOCK\";\n    notifyAtPct?: null;\n} | {\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L628",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitNoUpdateValue__cd3ce2b61e4f",
        "signature": "type UsageLimitNoUpdateValue__cd3ce2b61e4f = {\n    limitUnits?: never;\n    limitCents?: never;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L614",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitsResource__2b1e05e6bcda",
        "signature": "export interface UsageLimitsResource__2b1e05e6bcda {\n    /** List the current subscriber organization's visible per-actor limits.\n     *  `options.signal` is accepted for source compatibility but does not cancel\n     *  the shared cached fetch; the cache owns the request lifecycle. */\n    list(options?: {\n        signal?: AbortSignal;\n        limit?: number;\n        offset?: number;\n    }): Promise<UsageLimitListResponse>;\n    /** Create a subscriber-authored usage limit. */\n    create(input: CreateUsageLimitInput): Promise<UsageLimit>;\n    /** Update mutable value, mode, or threshold fields. */\n    update(limitId: string, input: UpdateUsageLimitInput): Promise<UsageLimit>;\n    /** Permanently remove a subscriber-authored usage limit. */\n    delete(limitId: string): Promise<UsageLimitDeleteResult>;\n}",
        "source": "packages/farthershore-js/dist/resources/usage-limits.d.ts#L3",
        "description": "",
        "references": [
          {
            "name": "CreateUsageLimitInput",
            "source": "packages/farthershore-js/dist/types.d.ts#L604"
          },
          {
            "name": "UpdateUsageLimitInput",
            "source": "packages/farthershore-js/dist/types.d.ts#L637"
          },
          {
            "name": "UsageLimit",
            "source": "packages/farthershore-js/dist/types.d.ts#L580"
          },
          {
            "name": "UsageLimitDeleteResult",
            "source": "packages/farthershore-js/dist/types.d.ts#L641"
          },
          {
            "name": "UsageLimitListResponse",
            "source": "packages/farthershore-js/dist/types.d.ts#L594"
          }
        ]
      },
      {
        "name": "UsageLimitUpdateMode__0a6925ca669e",
        "signature": "type UsageLimitUpdateMode__0a6925ca669e = {\n    mode?: never;\n    notifyAtPct?: number | null;\n} | {\n    mode: \"BLOCK\";\n    notifyAtPct?: null;\n} | {\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L618",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitUpdateValue__e8f19d3e563b",
        "signature": "type UsageLimitUpdateValue__e8f19d3e563b = {\n    limitUnits: number;\n    limitCents?: never;\n} | {\n    limitCents: number;\n    limitUnits?: never;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L607",
        "description": "",
        "references": []
      },
      {
        "name": "UsageRange__216cd12bcfd1",
        "signature": "export interface UsageRange__216cd12bcfd1 {\n    from?: string;\n    to?: string;\n}",
        "source": "packages/farthershore-js/dist/resources/usage.d.ts#L3",
        "description": "",
        "references": []
      },
      {
        "name": "UsageResource__a3469cda0e70",
        "signature": "export interface UsageResource__a3469cda0e70 {\n    /** Dimension → total for the period (requests/tokens/computeMs/dollars…).\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle); the read is unmount-safe\n     *  via the hook's active-flag and bounded by the cache TTL. */\n    summary(range?: UsageRange__216cd12bcfd1, opts?: {\n        signal?: AbortSignal;\n    }): Promise<UsageSummary>;\n    /** The most-recent usage events (platform caps this list).\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle); the read is unmount-safe\n     *  via the hook's active-flag and bounded by the cache TTL. */\n    events(range?: UsageRange__216cd12bcfd1, opts?: {\n        signal?: AbortSignal;\n    }): Promise<UsageEvent[]>;\n    /** Everything in one round-trip: per-dimension totals + recent events + the\n     *  billing basis (the \"Requests\" vs \"Usage\" meter-label hint).\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle); the read is unmount-safe\n     *  via the hook's active-flag and bounded by the cache TTL. */\n    snapshot(range?: UsageRange__216cd12bcfd1, opts?: {\n        signal?: AbortSignal;\n        includeEvents?: boolean;\n    }): Promise<UsageSnapshot>;\n}",
        "source": "packages/farthershore-js/dist/resources/usage.d.ts#L7",
        "description": "",
        "references": [
          {
            "name": "UsageEvent",
            "source": "packages/farthershore-js/dist/types.d.ts#L679"
          },
          {
            "name": "UsageRange__216cd12bcfd1",
            "source": "packages/farthershore-js/dist/resources/usage.d.ts#L3"
          },
          {
            "name": "UsageSnapshot",
            "source": "packages/farthershore-js/dist/types.d.ts#L701"
          },
          {
            "name": "UsageSummary",
            "source": "packages/farthershore-js/dist/types.d.ts#L645"
          }
        ]
      }
    ],
    "generated/frontend-sdk/test-utils": [
      {
        "name": "AccessRequest__e4d3f89daefa",
        "signature": "export interface AccessRequest__e4d3f89daefa {\n    id: string;\n    /** External identity id of the requesting member. */\n    requestedBy: string;\n    /** The requested permission (unified `<subject>:<verb>` grammar). */\n    permission: string;\n    note?: string | null;\n    /** PENDING | APPROVED | DENIED. */\n    status: string;\n    resolvedBy?: string | null;\n    resolvedAt?: string | null;\n    createdAt: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1061",
        "description": "A Notion-minimal access request (`/me/access-requests`). Track T3 —\napproval AUTO-GRANTS the permission onto the requester's direct grants.",
        "references": []
      },
      {
        "name": "ActiveServiceAccountCreateResponse__b15fda647836",
        "signature": "export interface ActiveServiceAccountCreateResponse__b15fda647836 {\n    status: \"ACTIVE\";\n    serviceAccountId: string;\n    apiKeyId: string;\n    keyPrefix: string;\n    /** One-time plaintext secret. */\n    plaintext: string;\n    requestedPermissions: string[];\n    grantedPermissions: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L465",
        "description": "",
        "references": []
      },
      {
        "name": "ActiveServiceAccountUpdateResponse__fe5e8ed2381b",
        "signature": "export interface ActiveServiceAccountUpdateResponse__fe5e8ed2381b {\n    status: \"ACTIVE\";\n    serviceAccountId: string;\n    requestedPermissions: string[];\n    grantedPermissions: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L486",
        "description": "",
        "references": []
      },
      {
        "name": "ApiKey__a2eadd893331",
        "signature": "export interface ApiKey__a2eadd893331 {\n    id: string;\n    keyPrefix: string;\n    label: string | null;\n    /** Normalized lowercase, e.g. \"active\" | \"revoked\". */\n    status: string;\n    createdAt: string;\n    lastUsedAt: string | null;\n    revokedAt: string | null;\n    /** Consumer-principal (D2): the key's subject kind — a PERSONAL key mints a\n     *  member subject, a SERVICE key an org-owned service account. Always present\n     *  (Core's `ApiKey.kind` is a NOT NULL column). */\n    kind: ApiKeyKind__336a38a3bc29;\n    /** PERSONAL — the bound member's stable `Membership.id` (identity + permission\n     *  source). Null for service keys / when the API omits it. */\n    memberId: string | null;\n    /** SERVICE — the org-owned `ServiceAccount.id` the key attaches to. Null for\n     *  personal keys / when the API omits it. */\n    serviceAccountId: string | null;\n    /** SERVICE — the bound service account's display name, when the API returns\n     *  it (the list groups service keys by account under this label). */\n    serviceAccountName: string | null;\n    /** Provenance: which member MINTED the key (audit only; may differ from the\n     *  bound member when an admin mints a personal key for someone — D2a). Null\n     *  for pre-attribution keys. */\n    createdBy: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L347",
        "description": "",
        "references": [
          {
            "name": "ApiKeyKind__336a38a3bc29",
            "source": "packages/farthershore-js/dist/types.d.ts#L346"
          }
        ]
      },
      {
        "name": "ApiKeyKind__336a38a3bc29",
        "signature": "export type ApiKeyKind__336a38a3bc29 = \"PERSONAL\" | \"SERVICE\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L346",
        "description": "Consumer-principal (D2): which stable identity an API key credentials.\n`PERSONAL` binds to a member (perms = the member's live roles ∩ the key's\nrestrictions; auto-revoked when the member leaves). `SERVICE` attaches to a\nnamed org-owned service account (admin-gated; survives offboarding).",
        "references": []
      },
      {
        "name": "ApprovedServiceAccountCreateResponse__b73a29c4cc94",
        "signature": "export interface ApprovedServiceAccountCreateResponse__b73a29c4cc94 {\n    status: \"ACTIVE\";\n    operation: \"CREATE\";\n    serviceAccountId: string;\n    apiKeyId: string;\n    /** One-time plaintext secret. */\n    plaintext: string;\n    grantedPermissions: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L493",
        "description": "",
        "references": []
      },
      {
        "name": "ApprovedServiceAccountUpdateResponse__e4e8de0be760",
        "signature": "export interface ApprovedServiceAccountUpdateResponse__e4e8de0be760 {\n    status: \"ACTIVE\";\n    operation: \"UPDATE\";\n    serviceAccountId: string;\n    grantedPermissions: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L502",
        "description": "",
        "references": []
      },
      {
        "name": "ApproveServiceAccountInput__db09091445e7",
        "signature": "export interface ApproveServiceAccountInput__db09091445e7 {\n    /** Omit to approve the complete original request. */\n    grantedPermissions?: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L451",
        "description": "",
        "references": []
      },
      {
        "name": "AuditLogEntry__fed61670ee17",
        "signature": "export interface AuditLogEntry__fed61670ee17 {\n    id: string;\n    createdAt: string;\n    action: string;\n    decision?: \"ALLOW\" | \"DENY\" | null;\n    actorType?: string | null;\n    actorUserId?: string | null;\n    /** Friendly display name for a user actor (subscriber / builder / maker),\n     *  resolved server-side from the actor's Clerk user id. Null for non-user\n     *  actors (gateway / admin_service) or unknown ids — render `actorUserId`\n     *  as the fallback. */\n    actorName?: string | null;\n    payloadJson?: Record<string, unknown> | null;\n    [k: string]: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1074",
        "description": "",
        "references": []
      },
      {
        "name": "AuditLogPage__2bf11a4137e1",
        "signature": "export interface AuditLogPage__2bf11a4137e1 {\n    items: AuditLogEntry__fed61670ee17[];\n    nextCursor: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1089",
        "description": "",
        "references": [
          {
            "name": "AuditLogEntry__fed61670ee17",
            "source": "packages/farthershore-js/dist/types.d.ts#L1074"
          }
        ]
      },
      {
        "name": "AuditLogsResource__99efa1e02380",
        "signature": "export interface AuditLogsResource__99efa1e02380 {\n    /** Cursor-paged subscriber audit log (decision ALLOW|DENY, limit ≤ 200).\n     *  Degrades to an empty page on error, like the SSR page. */\n    list(filters?: {\n        action?: string;\n        actorUserId?: string;\n        decision?: \"ALLOW\" | \"DENY\";\n        from?: string;\n        to?: string;\n        cursor?: string;\n        limit?: number;\n        signal?: AbortSignal;\n        /**\n         * `null` intentionally reads the user's default subscription without an\n         * organization header. `undefined` preserves the selected workspace.\n         */\n        organizationId?: string | null;\n    }): Promise<AuditLogPage__2bf11a4137e1>;\n}",
        "source": "packages/farthershore-js/dist/resources/account.d.ts#L142",
        "description": "",
        "references": [
          {
            "name": "AuditLogPage__2bf11a4137e1",
            "source": "packages/farthershore-js/dist/types.d.ts#L1089"
          }
        ]
      },
      {
        "name": "AuthResource__beeda8a7af1a",
        "signature": "export interface AuthResource__beeda8a7af1a {\n    /** The current session (authenticated identity + a light subscriber slice).\n     * Resolves to `{ authenticated: false }` on 401/403 rather than throwing.\n     * Test-persona identity comes from Core's verified HttpOnly cookie; no\n     * persona bearer is exposed to browser JavaScript. */\n    getSession(opts?: {\n        signal?: AbortSignal;\n    }): Promise<Session__d51a47154738>;\n    /** Revoke the server-owned persona browser session and clear local auth\n     * caches. Clerk-strategy environments continue to sign out via Clerk. */\n    signOut(): Promise<void>;\n    /** Set a session bearer directly (for example, Clerk's session token). */\n    setToken(token: string | null): void;\n    /** Mint a short-lived Gateway bearer from the current authenticated browser\n     * session. In persona environments Core authenticates this with the\n     * same-origin HttpOnly cookie. */\n    gatewayContextToken(opts?: {\n        signal?: AbortSignal;\n        refresh?: boolean;\n    }): Promise<GatewayContextToken__447d2a94e34b>;\n}",
        "source": "packages/farthershore-js/dist/resources/auth.d.ts#L3",
        "description": "",
        "references": [
          {
            "name": "GatewayContextToken__447d2a94e34b",
            "source": "packages/farthershore-js/dist/types.d.ts#L803"
          },
          {
            "name": "Session__d51a47154738",
            "source": "packages/farthershore-js/dist/types.d.ts#L326"
          }
        ]
      },
      {
        "name": "AuthStrategy__ccafca0932db",
        "signature": "export type AuthStrategy__ccafca0932db = \"clerk\" | \"test-personas\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L59",
        "description": "",
        "references": []
      },
      {
        "name": "AutoApiKeyError__bd378e9396dc",
        "signature": "export interface AutoApiKeyError__bd378e9396dc {\n    code: string;\n    message: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1097",
        "description": "A partial-success auto-key failure: the subscriber activated but Core could\nnot mint the first API key. Mirrors core's `autoApiKeyError` ({@code\ncheckout.ts}). The caller should prompt the user to create a key manually\nrather than silently dropping the signal.",
        "references": []
      },
      {
        "name": "BillingResource__c8dbd9d25fa3",
        "signature": "export interface BillingResource__c8dbd9d25fa3 {\n    /** The consumer's current subscription for this product, or null.\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle); the read is unmount-safe\n     *  via the hook's active-flag and bounded by the cache TTL. */\n    subscription(opts?: {\n        signal?: AbortSignal;\n    }): Promise<Subscription__3e996fafa8e7 | null>;\n    /** Open the Stripe-hosted billing portal (payment method + invoices). Returns\n     *  the URL to navigate to. This is also how invoices are viewed in V0. */\n    openBillingPortal(input?: {\n        returnUrl?: string;\n    }): Promise<{\n        url: string;\n    }>;\n    /** Cancel the current subscription. Free subs cancel inline; paid subs are\n     *  scheduled on the provider for the end of the current billing period and\n     *  the result carries the `cancelsAt` boundary. `reason` is recorded for\n     *  churn analytics. */\n    cancelSubscription(input?: {\n        reason?: string;\n    }): Promise<CancelSubscriptionResult__9dfffd11b827>;\n    /** Buy more prepaid balance. Starts a provider checkout for `amountCents`\n     *  and returns the URL to send the subscriber to. Core gates this on\n     *  `invoice:pay` and refuses (`INVALID_STATE`) for a plan that declares no\n     *  prepaid funding. `requestId` is the idempotency handle — pass the SAME\n     *  uuid to retry one intent; omit it and the SDK mints one per call. */\n    addFunds(input: {\n        amountCents: number;\n        requestId?: string;\n        successUrl?: string;\n        cancelUrl?: string;\n    }): Promise<{\n        checkoutUrl: string;\n    }>;\n    /** Reverse a scheduled cancel — the platform lifts `cancel_at_period_end`\n     *  on the provider (paid) or flips a CANCELLED free sub back to ACTIVE. The\n     *  result carries the platform's POST-restore `cancelAtPeriodEnd` so a\n     *  caller can render the outcome instead of assuming it. */\n    restoreSubscription(): Promise<RestoreSubscriptionResult__60ac2939c09d>;\n    /** Change an existing subscription to another plan. Core applies or\n     *  schedules the transition according to the product's policy. */\n    changePlan(input: {\n        compiledPlanId: string;\n    }): Promise<ChangePlanResult__11a914c015a6>;\n    /** Set (or clear, with `null`) the subscriber's monthly spend cap (in cents).\n     *  PATCHes `/me/spend-cap`. CAVEAT: the cap is currently STORED-not-ENFORCED\n     *  (held in subscription metadata pending the rate-limit migration) — do NOT\n     *  present this as a hard spend limit in UI copy. */\n    setSpendCap(input: {\n        maxMonthlySpendCents: number | null;\n    }): Promise<SpendCapResult__395300e78371>;\n    /** Read the subscriber's current monthly spend cap (in cents), or null when\n     *  none is set / signed out. P-SPENDCAP-READ — reads the additive\n     *  `subscriber.maxMonthlySpendCents` surfaced on the `/me` context (no new\n     *  route). Joins the memoized `/me` read.\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached `/me` fetch (the cache owns the fetch lifecycle); the read is\n     *  unmount-safe via the hook's active-flag and bounded by the cache TTL. */\n    getSpendCap(opts?: {\n        signal?: AbortSignal;\n    }): Promise<number | null>;\n    /** The subscriber's current-window bill preview (`GET /me/bill-preview`) —\n     *  computed by Core through the SAME rating engine + ledger state as\n     *  invoicing, so preview === invoice by construction. Honors the plan's\n     *  `spendPolicy.disclosure`: `transparent` carries windows / totals /\n     *  nanodollar allowance balances; `opaque` carries allowance shape only (no\n     *  amounts). Nanodollar fields are decimal STRINGS — format them with\n     *  `format.formatNanos`, never `Number()`. Read-through cached; every\n     *  entitlement mutation (subscribe / change plan / cancel / restore /\n     *  migrate) busts it. Signed-out / no subscription → Core serves an empty\n     *  transparent preview.\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle). */\n    getBillPreview(opts?: {\n        signal?: AbortSignal;\n    }): Promise<BillPreview__c6a85a661e87>;\n}",
        "source": "packages/farthershore-js/dist/resources/billing.d.ts#L13",
        "description": "",
        "references": [
          {
            "name": "BillPreview__c6a85a661e87",
            "source": "packages/farthershore-js/dist/types.d.ts#L1284"
          },
          {
            "name": "CancelSubscriptionResult__9dfffd11b827",
            "source": "packages/farthershore-js/dist/types.d.ts#L1122"
          },
          {
            "name": "ChangePlanResult__11a914c015a6",
            "source": "packages/farthershore-js/dist/types.d.ts#L1144"
          },
          {
            "name": "RestoreSubscriptionResult__60ac2939c09d",
            "source": "packages/farthershore-js/dist/types.d.ts#L1134"
          },
          {
            "name": "SpendCapResult__395300e78371",
            "source": "packages/farthershore-js/dist/resources/billing.d.ts#L5"
          },
          {
            "name": "Subscription__3e996fafa8e7",
            "source": "packages/farthershore-js/dist/types.d.ts#L739"
          }
        ]
      },
      {
        "name": "BillPreview__c6a85a661e87",
        "signature": "export type BillPreview__c6a85a661e87 = TransparentBillPreview__bd44f368bc40 | OpaqueBillPreview__249f4b617b5a;",
        "source": "packages/farthershore-js/dist/types.d.ts#L1284",
        "description": "",
        "references": [
          {
            "name": "OpaqueBillPreview__249f4b617b5a",
            "source": "packages/farthershore-js/dist/types.d.ts#L1277"
          },
          {
            "name": "TransparentBillPreview__bd44f368bc40",
            "source": "packages/farthershore-js/dist/types.d.ts#L1257"
          }
        ]
      },
      {
        "name": "BillPreviewAllowance__eba9c1df99be",
        "signature": "export interface BillPreviewAllowance__eba9c1df99be {\n    /** Bucket source kind (e.g. `included`, `prepaid`, `promo`). */\n    kind: string;\n    /** Bucket lifecycle state — Core's `BucketState`, verbatim. */\n    state: BucketState__c796139d57fe;\n    /** Nanodollars, decimal strings (null = unavailable). */\n    remainingNanos: NanosAmount__f9c1e22d3cbe;\n    heldNanos: NanosAmount__f9c1e22d3cbe;\n    consumedNanos: NanosAmount__f9c1e22d3cbe;\n    /** ISO timestamp, or null when the allowance does not expire. */\n    expiresAt: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1198",
        "description": "A funding allowance (balance bucket) with nanodollar balances —\ntransparent disclosure only.",
        "references": [
          {
            "name": "BucketState__c796139d57fe",
            "source": "packages/farthershore-js/dist/types.d.ts#L1184"
          },
          {
            "name": "NanosAmount__f9c1e22d3cbe",
            "source": "packages/farthershore-js/dist/types.d.ts#L1179"
          }
        ]
      },
      {
        "name": "BillPreviewUsageRating__fb184ad4d633",
        "signature": "export interface BillPreviewUsageRating__fb184ad4d633 {\n    pendingEventCount: number;\n    unratableEventCount: number;\n    /** ISO instant of the oldest unaccounted event, or null when there is none. */\n    oldestUnratedServedAt: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1251",
        "description": "Served usage this cycle that `totals` does NOT account for.\n\n`totals.ratedNanos` sums POSTED charges only, so usage that is metered but\nnot yet priced — or that can no longer be priced at all — contributes\nnothing to it. Rendering that as `$0` asserts \"you owe nothing\" when the\ntruthful statement is \"we have not priced this yet\". Render this instead of\nletting a confident zero stand.\n\n`pendingEventCount` drains on its own; `unratableEventCount` will not without\noperator action.",
        "references": []
      },
      {
        "name": "BillPreviewWindow__ebfec15d43d1",
        "signature": "export interface BillPreviewWindow__ebfec15d43d1 {\n    windowId: string;\n    /** ISO timestamps. */\n    windowStart: string;\n    windowEnd: string;\n    /** Rated charges the engine recognized in this window. */\n    chargeCount: number;\n    /** Nanodollars, decimal string (null = unavailable). */\n    ratedNanos: NanosAmount__f9c1e22d3cbe;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1186",
        "description": "One rating window's engine-exact recognized total.",
        "references": [
          {
            "name": "NanosAmount__f9c1e22d3cbe",
            "source": "packages/farthershore-js/dist/types.d.ts#L1179"
          }
        ]
      },
      {
        "name": "Bootstrap__ecb3d46aafde",
        "signature": "export interface Bootstrap__ecb3d46aafde {\n    /** Wire schema version of the resolve DTO this bootstrap was decoded from\n     *  (CC5). Additive negotiation hook; legacy payloads (no version) decode as\n     *  `1`. Informational today — the SDK reads every shape tolerantly. */\n    schemaVersion: number;\n    business: Business__3ed5dd8f7507;\n    environment: EnvironmentInfo__866e98cf165d | null;\n    branding: Branding__c1352d7b32a1;\n    /** The business's available/purchasable plans (empty when none are\n     *  published). The single source the plans/pricing UI renders from. */\n    plans: Plan__3a8348415fe9[];\n    /** The business's active custom-frontend release hash, or null. Informational\n     *  (diagnostics) — V0 serving is host-keyed at the edge. */\n    frontendReleaseHash: string | null;\n    /** Available module keys derived from the plan set (non-empty once plans exist):\n     *  e.g. \"billing\", \"usage-quota\", \"docs\", \"legal\". */\n    availableModules: string[];\n    /** The business's declared counted-resource catalog (W5.1). Empty when the\n     *  business declares none. */\n    declaredResources: DeclaredResource__b4d9315d38c7[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L294",
        "description": "What `fs.bootstrap()` returns — everything a generated/managed frontend needs\nto discover the business it's running for AND render its catalog: the full\nplan list (pricing model and included quotas), business meters, docs /\nlegal origins, and the featured-plan pointer.",
        "references": [
          {
            "name": "Branding__c1352d7b32a1",
            "source": "packages/farthershore-js/dist/types.d.ts#L2"
          },
          {
            "name": "Business__3ed5dd8f7507",
            "source": "packages/farthershore-js/dist/types.d.ts#L23"
          },
          {
            "name": "DeclaredResource__b4d9315d38c7",
            "source": "packages/farthershore-js/dist/types.d.ts#L282"
          },
          {
            "name": "EnvironmentInfo__866e98cf165d",
            "source": "packages/farthershore-js/dist/types.d.ts#L85"
          },
          {
            "name": "Plan__3a8348415fe9",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "Branding__c1352d7b32a1",
        "signature": "export interface Branding__c1352d7b32a1 {\n    displayName: string;\n    /** Square brand mark (favicon / nav mark). */\n    iconUrl: string | null;\n    /** Horizontal text logo (wordmark) — rendered in place of the displayName\n     *  text when set. Most products only have an icon. */\n    logoUrl: string | null;\n    /** Marketing/header description for the business, when set. */\n    description: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L2",
        "description": "",
        "references": []
      },
      {
        "name": "BucketState__c796139d57fe",
        "signature": "export type BucketState__c796139d57fe = \"PENDING\" | \"AVAILABLE\" | \"EXPIRY_PENDING\" | \"FROZEN\" | \"EXPIRED\" | \"CANCELLED\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L1184",
        "description": "Lifecycle state of a funding allowance (balance bucket) — mirrors Core's\n`BucketState` (Prisma) verbatim. `AVAILABLE` is the live, spendable\nstate; `EXPIRY_PENDING` is still spendable but about to expire; `PENDING`\nis not yet spendable; `FROZEN` / `EXPIRED` / `CANCELLED` are not spendable.",
        "references": []
      },
      {
        "name": "Business__3ed5dd8f7507",
        "signature": "export interface Business__3ed5dd8f7507 {\n    id: string;\n    /** Subdomain slug (the first label of the gateway/portal host). */\n    slug: string;\n    name: string;\n    description: string | null;\n    branding: Branding__c1352d7b32a1;\n    /** Gateway origin host for builder-feature calls (the business `runtimeHostname`). */\n    gatewayHost: string;\n    /** Public portal host. */\n    portalHost: string;\n    /** R2 public origin + business prefix where MDX docs live, or null when the\n     *  platform has no docs origin configured (local dev). The `/docs` view\n     *  concatenates the doc filename onto this. */\n    docsBaseUrl: string | null;\n    /** R2 public origin + business prefix for per-business legal MDX\n     *  (terms / privacy), or null. The legal view falls back to the platform\n     *  terms notice when null. */\n    legalBaseUrl: string | null;\n    /** Versioned legal documents declared by the business, keyed by extensible\n     *  kind (`terms`, `privacy`, custom kinds). URLs are public CDN MDX objects. */\n    legal?: {\n        documents: Record<string, LegalDocumentReference__0e8dba55b6a6>;\n    };\n    /** Platform-owned docs visibility flag. When `false` the portal /docs\n     *  surface is suppressed (nav item hidden, route 404s) regardless of\n     *  whether `docsBaseUrl` is set. Absent on older Core payloads — the SDK\n     *  defaults this to `true` (backward-compatible). */\n    docsEnabled: boolean;\n    /** Immutable `CompiledPlan.id` of the featured plan, or null. Used to render\n     *  the \"Most Popular\" treatment in the plans UI. */\n    featuredCompiledPlanId: string | null;\n    /** Business-level meter definitions — the dimension catalog used to label\n     *  usage rows. Empty when the business declares no meters. */\n    meters: Meter__c4ca128fcf40[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L23",
        "description": "",
        "references": [
          {
            "name": "Branding__c1352d7b32a1",
            "source": "packages/farthershore-js/dist/types.d.ts#L2"
          },
          {
            "name": "LegalDocumentReference__0e8dba55b6a6",
            "source": "packages/farthershore-js/dist/types.d.ts#L61"
          },
          {
            "name": "Meter__c4ca128fcf40",
            "source": "packages/farthershore-js/dist/types.d.ts#L15"
          }
        ]
      },
      {
        "name": "BusinessResource__933d34c2f16a",
        "signature": "export interface BusinessResource__933d34c2f16a {\n    /** The business this frontend is running for (resolved via bootstrap). */\n    get(): Promise<Business__3ed5dd8f7507>;\n    /** The business's declared counted-resource catalog (W5.1) — name + label +\n     *  scope + per-plan cap. The same list `bootstrap()` resolves. */\n    resources(): Promise<DeclaredResource__b4d9315d38c7[]>;\n}",
        "source": "packages/farthershore-js/dist/resources/business.d.ts#L2",
        "description": "",
        "references": [
          {
            "name": "Business__3ed5dd8f7507",
            "source": "packages/farthershore-js/dist/types.d.ts#L23"
          },
          {
            "name": "DeclaredResource__b4d9315d38c7",
            "source": "packages/farthershore-js/dist/types.d.ts#L282"
          }
        ]
      },
      {
        "name": "CancelSubscriptionResult__9dfffd11b827",
        "signature": "export interface CancelSubscriptionResult__9dfffd11b827 {\n    subscription?: unknown;\n    /** ISO instant the subscription ends, or null. */\n    cancelsAt: string | null;\n    raw: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1122",
        "description": "`POST /me/cancel` — the platform performs the cancel: free subs end\nimmediately, paid subs are scheduled on the provider for the end of the\ncurrent billing period. There is no hosted-page hand-off: the caller gets\na typed result back, and `cancelsAt` is the boundary the provider\nanswered with (null when it reported none, or for an immediate free\ncancel). NEVER invented client-side.",
        "references": []
      },
      {
        "name": "ChangePlanResult__11a914c015a6",
        "signature": "export interface ChangePlanResult__11a914c015a6 {\n    subscription?: unknown;\n    checkoutUrl?: string | null;\n    portalRedirect?: {\n        url: string;\n    } | null;\n    raw: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1144",
        "description": "`POST /me/change-plan` — Core decides inline-apply vs checkout vs portal\nredirect; all three surfaces normalized onto one shape.",
        "references": []
      },
      {
        "name": "ClientContext__d9dbf3313290",
        "signature": "export interface ClientContext__d9dbf3313290 {\n    /** Platform Core base URL. LAZY: resolved on read as explicit config >\n     *  injected `window.__FS_CONFIG__` > the production platform default —\n     *  never throws. Reading this property is what performs the lazy window\n     *  read; never read it at module scope or client-construction time. */\n    readonly coreUrl: string;\n    /** Portal host identifying the product/env to Core. LAZY — see {@link\n     *  coreUrl}; defaults to `location.host` in the browser, read on access. */\n    readonly portalHost: string | null;\n    businessId: string | null;\n    environmentId: string | null;\n    organizationId: string | null;\n    /**\n     * The organization selection before it is reconciled against subscription\n     * contexts. Unlike `organizationId`, undefined means no explicit selection;\n     * null is a durable request for the user's default subscription. Internal\n     * runtime state used by the React organization provider.\n     */\n    organizationSelection?: string | null;\n    /** Subscribers notified when the imperative organization scope changes. */\n    organizationListeners: Set<() => void>;\n    /** Read-through cache backing `fs.prefetch.*` (see cache.ts). */\n    readCache: Map<string, ReadCacheEntry__ee67854da2b9>;\n    gatewayUrl: string | null;\n    apiKey: string | null;\n    /** Cached short-lived gateway context token for browser-session feature\n     *  calls. Cleared whenever session/org scope changes. */\n    gatewayContextToken: {\n        token: string;\n        expiresAt: string;\n        cacheKey: string;\n    } | null;\n    /** In-flight context-token mint, keyed by cacheKey — SINGLE-FLIGHT coalescing\n     *  so concurrent feature calls share ONE mint instead of stampeding Core\n     *  (W6.3). Cleared as soon as the mint settles. Internal. */\n    gatewayContextTokenInflight: {\n        cacheKey: string;\n        promise: Promise<GatewayContextToken__447d2a94e34b>;\n    } | null;\n    /** Explicit session bearer (for Clerk/advanced integrations), falling back\n     *  to the configured `getToken` provider. Persona sessions are HttpOnly\n     *  cookies and never enter JavaScript. */\n    sessionToken: string | null;\n    /** True after a cookie-authenticated Core request succeeds. This lets a\n     *  later 401 trigger managed recovery without treating an anonymous first\n     *  `/me` read as a lapsed session. Contains no credential. */\n    browserSessionAuthenticated: boolean;\n    getToken?: TokenProvider__40095f0da8e4;\n    /** Runtime-installed token provider (e.g. the managed Clerk bridge inside\n     *  `<FartherShoreRoot>`). Wins over `config.getToken`; an explicitly set\n     *  `sessionToken` still wins over both. */\n    tokenProvider: TokenProvider__40095f0da8e4 | null;\n    fetch: FetchLike__7d89beec4c77;\n    /** Resolved automatic-retry policy (defaults applied). */\n    retry: ResolvedRetryConfig__fe2336bea142;\n    /** Resolved global interceptors (all optional; default no-ops elsewhere). */\n    onError?: (err: unknown) => void;\n    onLimitExceeded?: (err: LimitExceededError__7844c601e6fd) => void;\n    onUnauthorized?: (err: FartherShoreApiError__ae8b4410fda4) => void;\n    /** Runtime-installed 401 reaction (the managed auth layer's mid-session\n     *  recovery), wired by `<FsAuthProvider>` via `setOnUnauthorized`. Fires AFTER\n     *  the config-level `onUnauthorized`. Internal. */\n    onUnauthorizedManaged?: (err: FartherShoreApiError__ae8b4410fda4) => void;\n    /**\n     * LATCH: managed auth recovery has already fired for the CURRENT credential.\n     *\n     * The interceptor de-dupe is per-ERROR-OBJECT, which only collapses one\n     * logical failure surfacing through nested transports. A dashboard runs many\n     * independent reads concurrently, so a single lapsed session produces MANY\n     * distinct 401 errors — each firing its own recovery, each remounting the\n     * surface, each triggering a fresh round of reads. That feedback loop was\n     * measured at ~274 requests in 25s from ONE dashboard (~650/min against\n     * core's 100/min portal limit): the portal rate-limited itself.\n     *\n     * Recovery is a per-SESSION event, not a per-request one. Cleared whenever a\n     * new credential is installed, so a genuinely re-authed session can recover\n     * again.\n     */\n    managedRecoveryLatched?: boolean;\n    /** Last `X-RateLimit-*` snapshot observed on a gateway response (W8.5) — fed\n     *  by `fs.route.getWithMeta`, read by `useRouteRateLimit()`. Null until the first\n     *  gateway call that carried the headers. Internal. */\n    lastRateLimit: RateLimitSnapshot__934527ed940b | null;\n    /** Subscribers notified when `lastRateLimit` changes (the `useRouteRateLimit`\n     *  external store). Internal. */\n    rateLimitListeners: Set<() => void>;\n    /** A5-amend (T11) — the last LIMIT/throttle deny observed leaving the\n     *  transport, recorded by `fireInterceptors`. ADVISORY: the freshest known\n     *  RECENT deny, not a live poll (the gateway stays authoritative). Read by\n     *  `useLimitStatus()`. Null until the first limit deny is observed. Internal. */\n    lastLimitDeny: ObservedLimitDeny__ff379deca309 | null;\n    /** Subscribers notified when `lastLimitDeny` changes (the `useLimitStatus`\n     *  external store). Internal. */\n    limitDenyListeners: Set<() => void>;\n    /** Subscribers notified when the read cache is BUSTED (auth change, org\n     *  switch, entitlement mutation) — every mounted `useAsync` refetches.\n     *\n     *  Clearing the cache alone only stops the NEXT read from being served stale;\n     *  it does not re-run the reads already on screen. Without this notification a\n     *  `setSessionToken` after a 401 leaves every mounted surface showing the\n     *  signed-out result until something happens to remount it. Internal. */\n    readCacheListeners: Set<() => void>;\n    /** True when all SDK-owned network/auth paths are served by the local mock\n     *  transport. Internal, read by the managed auth layer. */\n    mockMode: boolean;\n}",
        "source": "packages/farthershore-js/dist/config.d.ts#L183",
        "description": "Mutable, per-client runtime context the resources share. Bootstrap fills in\nthe discovered product/env/gateway; sign-in fills in the session token.",
        "references": [
          {
            "name": "FartherShoreApiError__ae8b4410fda4",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
          },
          {
            "name": "FetchLike__7d89beec4c77",
            "source": "packages/farthershore-js/dist/config.d.ts#L2"
          },
          {
            "name": "GatewayContextToken__447d2a94e34b",
            "source": "packages/farthershore-js/dist/types.d.ts#L803"
          },
          {
            "name": "LimitExceededError__7844c601e6fd",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L206"
          },
          {
            "name": "ObservedLimitDeny__ff379deca309",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L580"
          },
          {
            "name": "RateLimitSnapshot__934527ed940b",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
          },
          {
            "name": "ReadCacheEntry__ee67854da2b9",
            "source": "packages/farthershore-js/dist/cache.d.ts#L2"
          },
          {
            "name": "ResolvedRetryConfig__fe2336bea142",
            "source": "packages/farthershore-js/dist/config.d.ts#L29"
          },
          {
            "name": "TokenProvider__40095f0da8e4",
            "source": "packages/farthershore-js/dist/config.d.ts#L80"
          }
        ]
      },
      {
        "name": "ComponentAccessPolicyRow__60d2c40fe86e",
        "signature": "export interface ComponentAccessPolicyRow__60d2c40fe86e {\n    /** A managed component id or a `custom:<slug>` key. */\n    componentKey: string;\n    /** Override render-gate permission, or null → component default. */\n    requiredPermission: string | null;\n    /** Override deny render (`hide|disable|readOnly|denied`), or null →\n     *  component default. */\n    gateMode: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L945",
        "description": "One per-subscriber component-gate override row (`GET /me`\n`componentAccessPolicies`) — shape-matches the contracts\n`ComponentAccessPolicyDto`.",
        "references": []
      },
      {
        "name": "CoreRequest__88dbed0693a0",
        "signature": "export interface CoreRequest__88dbed0693a0 {\n    method: \"GET\" | \"POST\" | \"PATCH\" | \"PUT\" | \"DELETE\";\n    path: string;\n    query?: Record<string, string | number | undefined | null>;\n    body?: unknown;\n    /** Caller-stable retry identity for durable mutation replay. */\n    idempotencyKey?: string;\n    /** \"session\" attaches the consumer session bearer; \"none\" is for public\n     *  endpoints (resolve/discover). Defaults to \"session\". */\n    auth?: \"session\" | \"none\";\n    /** When `false`, a tolerated `401` on this (authed) read does NOT trigger the\n     *  managed auth-layer recovery (`onUnauthorizedManaged` — the hosted-sign-in\n     *  redirect / persona sign-out). Use for best-effort `/me` reads that already\n     *  swallow a 401 and render a signed-out/unsubscribed surface: re-authing an\n     *  already signed-in user can't clear an authorization 401, so the redirect is\n     *  futile and loops. `onUnauthorized` (config hook) + `onError` still fire.\n     *  Defaults to `true` (a lapsed authed session still bounces to recovery). */\n    recoverAuth?: boolean;\n    /** Abort signal — when it fires (e.g. a React hook unmounts or its deps\n     *  change), the in-flight read rejects with {@link FartherShoreAbortError}. */\n    signal?: AbortSignal;\n    /**\n     * Per-request organization scope. `undefined` inherits the client selection;\n     * `null` deliberately omits the organization header without changing that\n     * shared selection. Use this for APIs whose documented default-subscription\n     * read is intentionally independent of the workspace currently shown in the\n     * rest of the portal.\n     */\n    organizationId?: string | null;\n}",
        "source": "packages/farthershore-js/dist/http.d.ts#L3",
        "description": "",
        "references": []
      },
      {
        "name": "CreatedApiKey__eee6ebdc6f61",
        "signature": "export interface CreatedApiKey__eee6ebdc6f61 extends ApiKey__a2eadd893331 {\n    /** The full key. The platform never returns it again — store it now. */\n    secret: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L375",
        "description": "Returned ONLY by create/rotate — carries the full secret, shown once.",
        "references": [
          {
            "name": "ApiKey__a2eadd893331",
            "source": "packages/farthershore-js/dist/types.d.ts#L347"
          }
        ]
      },
      {
        "name": "CreateServiceAccountInput__30c268ab08ba",
        "signature": "export interface CreateServiceAccountInput__30c268ab08ba {\n    name: string;\n    requestedPermissions: NonEmptyPermissionList__ca911cbb6fa0;\n    scopes?: string[];\n    usageLimit?: ServiceAccountUsageLimitRequest__f255b800fa4e;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L441",
        "description": "",
        "references": [
          {
            "name": "NonEmptyPermissionList__ca911cbb6fa0",
            "source": "packages/farthershore-js/dist/types.d.ts#L440"
          },
          {
            "name": "ServiceAccountUsageLimitRequest__f255b800fa4e",
            "source": "packages/farthershore-js/dist/types.d.ts#L399"
          }
        ]
      },
      {
        "name": "CreateUsageLimitInput__0aee95b69b13",
        "signature": "export type CreateUsageLimitInput__0aee95b69b13 = UsageLimitSubject__9eba54806aaa & UsageLimitValue__4ae5aa5bc7c5 & UsageLimitCreateMode__f16ef2d50497 & {\n    quantity: string;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L604",
        "description": "Strict POST body: immutable subject + quantity, one value lane, and a\ncoherent BLOCK/NOTIFY threshold.",
        "references": [
          {
            "name": "UsageLimitCreateMode__f16ef2d50497",
            "source": "packages/farthershore-js/dist/types.d.ts#L595"
          },
          {
            "name": "UsageLimitSubject__9eba54806aaa",
            "source": "packages/farthershore-js/dist/types.d.ts#L570"
          },
          {
            "name": "UsageLimitValue__4ae5aa5bc7c5",
            "source": "packages/farthershore-js/dist/types.d.ts#L563"
          }
        ]
      },
      {
        "name": "DeclaredResource__b4d9315d38c7",
        "signature": "export interface DeclaredResource__b4d9315d38c7 {\n    name: string;\n    display?: string;\n    scope: \"subscription\" | \"subject\";\n    subjectType?: string;\n    /** Per-plan cap for this resource, when a plan declares one (numeric only). */\n    cap?: number | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L282",
        "description": "A product-declared counted resource (W5.1 / P-RESCATALOG). The product's\ncatalog of `product.resource(...)` declarations, surfaced so a generated /\nmanaged frontend can discover what resources exist and render their usage\nWITHOUT a per-plan lookup.\n\n- `scope: 'subscription'` — counted once per subscription (the common case).\n- `scope: 'subject'` — counted per subject (e.g. per `project`), with\n  `subjectType` naming the subject; pass `{ subjectId }` to the resource\n  verbs so the count keys on that subject.\n\n`cap` is the per-plan ceiling read from the active plan's\n`resourceLimits[name]` (the bare resource name — NOT prefixed). It's\n`number` (a numeric cap), `true` is treated as unlimited (left undefined),\nand `null`/absent means uncapped/unknown.",
        "references": []
      },
      {
        "name": "EntitlementSnapshot__78b1daa335cc",
        "signature": "export interface EntitlementSnapshot__78b1daa335cc {\n    /** True when an ACTIVE subscriber context backed this snapshot. */\n    hasSubscriber: boolean;\n    /** Resource limits on the current subscriber's pinned plan. */\n    resourceLimits: Record<string, number>;\n}",
        "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L3",
        "description": "",
        "references": []
      },
      {
        "name": "EntitlementsResource__eae052f23903",
        "signature": "export interface EntitlementsResource__eae052f23903 {\n    /** Read the current subscriber's entitlement maps. Signed-out users get\n     *  empty maps so app code can render disabled/upsell states without a\n     *  separate auth guard. */\n    snapshot(): Promise<EntitlementSnapshot__78b1daa335cc>;\n    /** Numeric resource limit, or null when absent. */\n    resourceLimit(key: string): Promise<number | null>;\n    /** Per-resource `{ limit, current }` for the pinned plan (`N of M`). The\n     *  LIMIT side lives in the `/me` snapshot, but `current` is a live count, so\n     *  this reads the dedicated `/me/resource-limit-usage` route. Read-through cached\n     *  (the cache owns the fetch lifecycle, like the other `/me` reads — no\n     *  per-caller signal). Signed-out / no subscription → an empty map. */\n    resourceLimitUsage(): Promise<ResourceLimitUsageMap__cc534f1c9f18>;\n}",
        "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L16",
        "description": "",
        "references": [
          {
            "name": "EntitlementSnapshot__78b1daa335cc",
            "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L3"
          },
          {
            "name": "ResourceLimitUsageMap__cc534f1c9f18",
            "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L15"
          }
        ]
      },
      {
        "name": "EnvironmentInfo__866e98cf165d",
        "signature": "export interface EnvironmentInfo__866e98cf165d {\n    id: string;\n    name: string;\n    slug: string;\n    /** Which sign-in flow the portal should drive: Clerk (production) or a\n     *  platform-owned persona browser session (preview/test envs). */\n    authStrategy: AuthStrategy__ccafca0932db;\n    /** Env branch name (preview/test envs), or null for production scope. */\n    branch: string | null;\n    /** Billing provider mode for the env: \"test\" (no real money) or \"live\".\n     *  Null when the resolve was production-scoped (no env block). The plans UI\n     *  surfaces a \"Test mode\" badge when this is \"test\". */\n    stripeMode: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L85",
        "description": "",
        "references": [
          {
            "name": "AuthStrategy__ccafca0932db",
            "source": "packages/farthershore-js/dist/types.d.ts#L59"
          }
        ]
      },
      {
        "name": "FartherShoreApiError__ae8b4410fda4",
        "signature": "export declare class FartherShoreApiError__ae8b4410fda4 extends FartherShoreError__8dbed6dcc500 {\n    readonly status: number;\n    readonly code: string;\n    readonly body: unknown;\n    /** Seconds to wait before retrying, parsed from `Retry-After`; null when the\n     *  response carried no `Retry-After`. */\n    readonly retryAfterSeconds: number | null;\n    /** The `X-RateLimit-Remaining` / `-Reset` snapshot, or null when absent. */\n    readonly rateLimit: RateLimitSnapshot__934527ed940b | null;\n    /**\n     * Whether the request that produced this error actually carried an auth\n     * credential (a bearer was attached). Set by the transport AFTER the error is\n     * minted. A `401` with `authed === false` is a NEVER-authenticated visitor (a\n     * signed-out `/me` read sent no bearer) — the managed auth layer must treat it\n     * as a no-op, NOT a lapsed-session redirect. Defaults to `true` so any caller\n     * that doesn't thread the flag keeps the prior (always-fire) behaviour.\n     */\n    authed: boolean;\n    /**\n     * Whether a `401` on this request should trigger the MANAGED auth-layer\n     * recovery (the hosted-sign-in redirect / persona sign-out). Best-effort `/me`\n     * reads that already swallow a 401 (and render a signed-out/unsubscribed\n     * surface) set this `false`: re-authenticating an already signed-in user can\n     * never clear an authorization 401, so the redirect is futile and loops. Set\n     * by the transport from `CoreRequest.recoverAuth`. The config-level\n     * `onUnauthorized` + `onError` hooks STILL fire (observability is unaffected);\n     * only the managed reaction is gated. Defaults to `true` (always recover).\n     */\n    recoverAuth: boolean;\n    constructor(status: number, code: string, message: string, body: unknown, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot__934527ed940b | null);\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L49",
        "description": "A non-2xx response from Core or the Gateway. Exposes:\n- `.status` — the HTTP status code;\n- `.code` — the platform error code from the `{ error: { code, message } }`\n  envelope (or a fallback when the envelope is absent);\n- `.body` — the parsed response body, for richer error detail.\n\nCallers commonly branch on `.status` — e.g. `401`/`403` (re-auth), `404`\n(treat as absent), `409` (conflict/retry) — rather than parsing the message.\n\nEvery instance also carries the throttle hints the gateway attaches when\npresent: `.retryAfterSeconds` (from `Retry-After`) and `.rateLimit` (from\n`X-RateLimit-Remaining` / `-Reset`). Both are null when the headers are\nabsent — a developer who does nothing still gets them transparently.",
        "references": [
          {
            "name": "FartherShoreError__8dbed6dcc500",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L2"
          },
          {
            "name": "RateLimitSnapshot__934527ed940b",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
          }
        ]
      },
      {
        "name": "FartherShoreClient__e4fe174a542f",
        "signature": "export interface FartherShoreClient__e4fe174a542f {\n    /** The client's resolved runtime context (coreUrl, portalHost, businessId,\n     *  auth/scoping state, …). `coreUrl`/`portalHost` are LAZY getters — reading\n     *  them performs the `window.__FS_CONFIG__`/`location.host` resolution\n     *  (`coreUrl` falls back to the production platform); everything else is a\n     *  live snapshot of the client's current state. Mainly for\n     *  introspection/tests — prefer the typed resources for actual calls. */\n    readonly context: ClientContext__d9dbf3313290;\n    /** Resolve + cache the business/env/gateway for the current portal host. Safe\n     *  to call repeatedly (memoized). */\n    bootstrap(): Promise<Bootstrap__ecb3d46aafde>;\n    /** Set the consumer API key used for Gateway feature calls. */\n    setApiKey(key: string | null): void;\n    /** Set the Core session bearer directly (e.g. from the Clerk browser SDK). */\n    setSessionToken(token: string | null): void;\n    /** Install/replace a live token source resolved per request (short-lived\n     *  Clerk JWTs). `<FartherShoreRoot>` wires this automatically in Clerk\n     *  environments; pass null to uninstall. */\n    setTokenProvider(provider: (() => string | null | Promise<string | null>) | null): void;\n    /** Rescope subsequent Core calls to an owning org (the multi-org\n     *  subscription-context switcher) — sets the `x-fs-organization-id` header.\n     *  Pass null to return to the user's default subscription. Self-persists the\n     *  choice (restored at the next client creation). */\n    setOrganizationId(organizationId: string | null): void;\n    /** The active org id scoping Core calls, or null (the user's default\n     *  subscription). At boot this reflects the persisted choice restored from\n     *  storage; the React org provider seeds its reactive state from it. */\n    getOrganizationId(): string | null;\n    /** Imperative organization scope as an external store. This keeps a mounted\n     * React provider in sync when an application calls `setOrganizationId()`\n     * directly rather than using the managed org switcher. */\n    readonly organizationScope?: {\n        subscribe(listener: () => void): () => void;\n    };\n    /** Install/replace the global 401 reaction (fired by the transport on a 401\n     *  for an authed call). `<FartherShoreRoot>` / `<FsAuthProvider>` wire this\n     *  automatically for managed mid-session recovery (persona sign-out / Clerk\n     *  refresh); pass null to uninstall. A config-level `onUnauthorized` still\n     *  fires first. */\n    setOnUnauthorized(handler: ((err: FartherShoreApiError__ae8b4410fda4) => void) | null): void;\n    /** Drop every cached Core read (and the short-lived gateway context token), so\n     *  the next `me()` / list call goes to the network. Use after an out-of-band\n     *  state change the SDK can't observe — e.g. polling `me()` for webhook lag to\n     *  settle after returning from a Stripe Checkout (see `reconcileAfterCheckout`). */\n    invalidate(): void;\n    /** The last `X-RateLimit-*` snapshot observed on any `fs.route` gateway call,\n     *  with a subscribe primitive — the external store behind `useRouteRateLimit()`\n     *  (W8.5). `get()` is null until the first gateway response carried the\n     *  headers; `subscribe` notifies on every change. */\n    readonly rateLimit: {\n        get(): RateLimitSnapshot__934527ed940b | null;\n        subscribe(listener: () => void): () => void;\n    };\n    /** A5-amend (T11) — the last LIMIT/throttle deny observed leaving the\n     *  transport, with a subscribe primitive — the external store behind\n     *  `useLimitStatus()`. ADVISORY (the freshest known RECENT deny, not a live\n     *  poll — the gateway stays authoritative). `get()` is null until the first\n     *  limit deny is observed; `subscribe` notifies on every change. */\n    readonly limitState: {\n        get(): ObservedLimitDeny__ff379deca309 | null;\n        subscribe(listener: () => void): () => void;\n    };\n    /** Read-cache invalidation as an external store. `subscribe` fires when a\n     *  change invalidates what is ALREADY on screen: a new session/identity\n     *  (`setSessionToken`, sign-in/sign-out) or a moved entitlement (any billing\n     *  or plan action, and `invalidate()`).\n     *\n     *  It deliberately does NOT fire on an org switch (org-scoped hooks refetch\n     *  from their own deps) or on an ordinary resource mutation (the hook that\n     *  performed it refetches itself).\n     *\n     *  Every `useAsync`-backed hook subscribes automatically, so built-in hooks\n     *  and custom ones written against `useAsync` already refetch. Use this\n     *  directly only for state held OUTSIDE a hook (a store, an imperative cache\n     *  of your own) that must be invalidated in step with ours. */\n    readonly readCache: {\n        subscribe(listener: () => void): () => void;\n    };\n    /** The business this frontend runs for (resolved via bootstrap). */\n    readonly business: BusinessResource__933d34c2f16a;\n    /** Consumer session: current identity, server-owned persona logout, and\n     * short-lived Gateway context-token minting. */\n    readonly auth: AuthResource__beeda8a7af1a;\n    /** The consumer's API keys (list / create / revoke / rotate). */\n    readonly keys: KeysResource__2bf8d8c5e820;\n    /** Per-dimension usage totals + recent events for this business. */\n    readonly usage: UsageResource__a3469cda0e70;\n    /** Subscriber-managed per-actor usage limits. */\n    readonly usageLimits: UsageLimitsResource__2b1e05e6bcda;\n    /** The consumer's subscription and Stripe billing portal. */\n    readonly billing: BillingResource__c8dbd9d25fa3;\n    /** The business's plan catalog + the subscribe/checkout flow. */\n    readonly plans: PlansResource__05a484289922;\n    /** Full subscriber context (`GET /me`): lifecycle, trial, scheduled\n     *  transition, eligibility-scoped plans. Null when signed out / no\n     *  subscriber. */\n    me(opts?: {\n        signal?: AbortSignal;\n        /** `null` omits the organization header without changing the shared\n         * client selection; `undefined` uses that selection. */\n        organizationId?: string | null;\n    }): Promise<SubscriberContext__86c582775b78 | null>;\n    /** Record legal-document acceptances for the current subscriber/org. */\n    acceptLegal(acceptances: LegalAcceptance__cc2291cc0442[]): Promise<void>;\n    /** Multi-org subscription contexts (the org switcher's data). */\n    readonly organizations: OrganizationsResource__18d4024e64ce;\n    /** Team management on the current subscription. */\n    readonly team: TeamResource__b9e413854377;\n    /** Managed-RBAC management on the current subscription (settings, the\n     *  derived permission catalog, role CRUD) — team-org OWNER/ADMIN only.\n     *  Configures UX + minted-token claims; the EDGE `permission` constraint\n     *  is the security boundary. */\n    readonly rbac: RbacResource__b63486266173;\n    /** The subscriber's per-category notification preferences (opt-out model):\n     *  `get` the current state, `update` a partial patch. */\n    readonly notifications: NotificationsResource__dc7aa1b64a0f;\n    /** The subscriber-side audit log (cursor-paged). */\n    readonly auditLogs: AuditLogsResource__99efa1e02380;\n    /** Current subscriber entitlement maps from the pinned plan version. */\n    readonly entitlements: EntitlementsResource__eae052f23903;\n    /** Navigation-intent data warmers — see {@link PrefetchSurface}. */\n    readonly prefetch: PrefetchSurface__2b22bd2b6c45;\n    /**\n     * One-line, zero-config calls to your business's enforced gateway — host,\n     * auth, surface, and businessId all auto-resolved from the hosted context.\n     * `fs.route.post(\"/forecast\", { city })`. Limit responses surface as\n     * `LimitExceededError` so the upgrade prompt works on any call.\n     */\n    readonly route: RouteResource__52eafab15328;\n    /**\n     * Typed CRUD over a product-declared, quota-counted resource. Rides the\n     * gateway (which diverts to core, the system of record); `create` throws\n     * `LimitExceededError` at the plan cap. `fs.resources(\"widgets\").list()`.\n     */\n    resources<T = unknown>(name: string): ResourcesResource__ef6d17bbf151<T>;\n    /** Bound named-integration helper: `fs.integration(\"clerk-admin\").fetch(...)`. */\n    integration(id: string): ManagedIntegration__68b11f8f586e;\n    /**\n     * Generic authenticated Core call — the escape hatch for platform endpoints\n     * the typed resources don't model yet (e.g. a product's `/me/team`,\n     * `/me/audit-logs`). The Core counterpart to {@link invoke}:\n     * it attaches the session bearer + the host/env/org scoping headers and maps\n     * non-2xx to {@link FartherShoreApiError}, exactly like the typed resources —\n     * the caller only supplies the path and the response type. Prefer a typed\n     * resource (`fs.usage`, `fs.keys`, …) when one exists.\n     */\n    core<T>(req: CoreRequest__88dbed0693a0): Promise<T>;\n}",
        "source": "packages/farthershore-js/dist/client.d.ts#L36",
        "description": "",
        "references": [
          {
            "name": "AuditLogsResource__99efa1e02380",
            "source": "packages/farthershore-js/dist/resources/account.d.ts#L142"
          },
          {
            "name": "AuthResource__beeda8a7af1a",
            "source": "packages/farthershore-js/dist/resources/auth.d.ts#L3"
          },
          {
            "name": "BillingResource__c8dbd9d25fa3",
            "source": "packages/farthershore-js/dist/resources/billing.d.ts#L13"
          },
          {
            "name": "Bootstrap__ecb3d46aafde",
            "source": "packages/farthershore-js/dist/types.d.ts#L294"
          },
          {
            "name": "BusinessResource__933d34c2f16a",
            "source": "packages/farthershore-js/dist/resources/business.d.ts#L2"
          },
          {
            "name": "ClientContext__d9dbf3313290",
            "source": "packages/farthershore-js/dist/config.d.ts#L183"
          },
          {
            "name": "CoreRequest__88dbed0693a0",
            "source": "packages/farthershore-js/dist/http.d.ts#L3"
          },
          {
            "name": "EntitlementsResource__eae052f23903",
            "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L16"
          },
          {
            "name": "FartherShoreApiError__ae8b4410fda4",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
          },
          {
            "name": "KeysResource__2bf8d8c5e820",
            "source": "packages/farthershore-js/dist/resources/keys.d.ts#L3"
          },
          {
            "name": "LegalAcceptance__cc2291cc0442",
            "source": "packages/farthershore-js/dist/types.d.ts#L80"
          },
          {
            "name": "ManagedIntegration__68b11f8f586e",
            "source": "packages/farthershore-js/dist/integrations.d.ts#L6"
          },
          {
            "name": "NotificationsResource__dc7aa1b64a0f",
            "source": "packages/farthershore-js/dist/resources/account.d.ts#L169"
          },
          {
            "name": "ObservedLimitDeny__ff379deca309",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L580"
          },
          {
            "name": "OrganizationsResource__18d4024e64ce",
            "source": "packages/farthershore-js/dist/resources/account.d.ts#L3"
          },
          {
            "name": "PlansResource__05a484289922",
            "source": "packages/farthershore-js/dist/resources/plans.d.ts#L61"
          },
          {
            "name": "PrefetchSurface__2b22bd2b6c45",
            "source": "packages/farthershore-js/dist/client.d.ts#L24"
          },
          {
            "name": "RateLimitSnapshot__934527ed940b",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
          },
          {
            "name": "RbacResource__b63486266173",
            "source": "packages/farthershore-js/dist/resources/account.d.ts#L65"
          },
          {
            "name": "ResourcesResource__ef6d17bbf151",
            "source": "packages/farthershore-js/dist/resources/resources.d.ts#L25"
          },
          {
            "name": "RouteResource__52eafab15328",
            "source": "packages/farthershore-js/dist/resources/route.d.ts#L15"
          },
          {
            "name": "SubscriberContext__86c582775b78",
            "source": "packages/farthershore-js/dist/types.d.ts#L897"
          },
          {
            "name": "TeamResource__b9e413854377",
            "source": "packages/farthershore-js/dist/resources/account.d.ts#L13"
          },
          {
            "name": "UsageLimitsResource__2b1e05e6bcda",
            "source": "packages/farthershore-js/dist/resources/usage-limits.d.ts#L3"
          },
          {
            "name": "UsageResource__a3469cda0e70",
            "source": "packages/farthershore-js/dist/resources/usage.d.ts#L7"
          }
        ]
      },
      {
        "name": "FartherShoreError__8dbed6dcc500",
        "signature": "export declare class FartherShoreError__8dbed6dcc500 extends Error {\n    constructor(message: string);\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L2",
        "description": "",
        "references": []
      },
      {
        "name": "FartherShoreRateLimitedError__dbc7e0b60aee",
        "signature": "export declare class FartherShoreRateLimitedError__dbc7e0b60aee extends FartherShoreApiError__ae8b4410fda4 {\n    /** The semantic {@link FsLimitClass} when this throttle classifies to one\n     *  (`rate` / `concurrency` / `adaptive`), else null. */\n    readonly limitClass: FsLimitClass__2d5726601b87 | null;\n    /** The parsed `_fs` deny envelope when present. */\n    readonly envelope: FsDenyEnvelope__adf7ef9f2448 | null;\n    /** The recommended client reaction (default `backoff_retry` for a throttle). */\n    readonly reaction: FsLimitReaction__06a9e09be641;\n    /** Whether the platform or an upstream provider decided the throttle. */\n    readonly limitOrigin: FsLimitOrigin__1d4de1805fa7;\n    /** The gateway decision id, when the `_fs` envelope carried one. */\n    readonly decisionId: string | null;\n    constructor(status: number, code: string, message: string, body: unknown, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot__934527ed940b | null);\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L288",
        "description": "A {@link FartherShoreApiError} the caller should BACK OFF and retry — a rate\nlimit (`429`) or one of the transient throttle deny codes. `.retryAfterSeconds`\n(when the gateway sent `Retry-After`) is the hint for how long. Catch it to\nimplement a retry/backoff loop without re-parsing status codes.",
        "references": [
          {
            "name": "FartherShoreApiError__ae8b4410fda4",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
          },
          {
            "name": "FsDenyEnvelope__adf7ef9f2448",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L109"
          },
          {
            "name": "FsLimitClass__2d5726601b87",
            "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
          },
          {
            "name": "FsLimitOrigin__1d4de1805fa7",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
          },
          {
            "name": "FsLimitReaction__06a9e09be641",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
          },
          {
            "name": "RateLimitSnapshot__934527ed940b",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
          }
        ]
      },
      {
        "name": "FetchLike__7d89beec4c77",
        "signature": "export type FetchLike__7d89beec4c77 = typeof fetch;",
        "source": "packages/farthershore-js/dist/config.d.ts#L2",
        "description": "",
        "references": []
      },
      {
        "name": "FS_LIMIT_CLASSES__cf69b28be276",
        "signature": "declare const FS_LIMIT_CLASSES__cf69b28be276: readonly [\"quota\", \"rate\", \"concurrency\", \"capacity\", \"spend\", \"adaptive\"];",
        "source": "packages/farthershore-js/dist/deny-codes.d.ts#L63",
        "description": "The closed set of usage-limit classes. Mirrors the contracts `LimitClass`.",
        "references": []
      },
      {
        "name": "FsDenyEnvelope__adf7ef9f2448",
        "signature": "export interface FsDenyEnvelope__adf7ef9f2448 {\n    /**\n     * The semantic class of limit hit — the primary axis clients branch on.\n     * `null` ONLY when the wire carried a `limitClass` string the SDK's closed\n     * mirror does NOT know (a FUTURE class added to contracts but not yet shipped\n     * in this bundle, T13). In that case the raw value is preserved on\n     * {@link unknownLimitClass} and the whole `_fs` block on {@link raw} so a\n     * client can still render + introspect the deny, while the SDK refuses to\n     * invent a known-class facet for it. A KNOWN class is always non-null.\n     */\n    limitClass: FsLimitClass__2d5726601b87 | null;\n    /**\n     * T13 — the raw `limitClass` string when it is NOT a member of the closed\n     * {@link FsLimitClass} mirror (a future/unknown class). Undefined for every\n     * known class. Lets a forward-compat client surface \"a `<unknownLimitClass>`\n     * limit was hit\" + a debug breadcrumb without the SDK guessing semantics.\n     */\n    unknownLimitClass?: string;\n    /**\n     * T13 — the raw `_fs` block exactly as it arrived on the wire, preserved for\n     * debugging/forwarding. Always present (even for a known class) so a developer\n     * can inspect fields this bundle's typed projection doesn't model yet.\n     */\n    raw?: Record<string, unknown>;\n    /** The limit's scope when known (e.g. `subscription`, `org`, `route`). */\n    scope?: string;\n    /** Actor facet for actor-scoped subscriber limits. Carries kind only; raw\n     *  actor ids must never be present in deny envelopes. */\n    actorScope?: \"member\" | \"service_account\";\n    /** The metered/resource dimension when known (e.g. `tokens`, `requests`). */\n    metric?: string;\n    /** Unix epoch ms when the limit window resets, when known. */\n    reset?: number;\n    /** Units remaining in the window at decision time, when known. */\n    remaining?: number;\n    /** Units already consumed in the window at decision time, when known. */\n    used?: number;\n    /** The cap value (the ceiling that was hit), when known. */\n    limit?: number;\n    /** True when retrying the SAME request can succeed (velocity/transient cap). */\n    retrySafe: boolean;\n    /** True when the caller must MODIFY the request (reduce size / change plan)\n     *  before it can succeed — the `capacity`/`spend` affordances. */\n    mustModify: boolean;\n    /** Provider-supplied reason verbatim, when relayed upstream (an `adaptive`\n     *  throttle). */\n    providerReason?: string;\n    /** Whether the platform or an upstream provider decided the limit. */\n    limitOrigin: FsLimitOrigin__1d4de1805fa7;\n    /** Human-facing next step for the END USER, when one applies. */\n    userAction?: string;\n    /** Human-facing next step for the DEVELOPER/operator, when one applies. */\n    devAction?: string;\n    /** The per-attempt request id (correlates with logs/traces). */\n    requestId?: string;\n    /** The gateway decision id (correlates with the usage event / audit). */\n    decisionId?: string;\n    /** Which exact constraint denied (projects from\n     *  `LimitDecision.blockingConstraintId`); present on a limit deny when known. */\n    blockingConstraintId?: string;\n    /** The recommended client reaction. */\n    reaction: FsLimitReaction__06a9e09be641;\n    /** Envelope schema version. Bumped on a NON-additive envelope change. */\n    envelopeVersion?: number;\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L109",
        "description": "The `_fs` deny envelope a limit deny body carries under the `_fs` key\n(`{ error, code, _fs: FsDenyEnvelope }`). A SUPERSET of {@link LimitDescriptor}:\na single self-describing block telling a client WHAT class of limit was hit,\nWHY, and what to DO — without re-deriving it from the wire code + status. A\nhand-mirror of the contracts `FsDenyEnvelope` (the published surface stays\ncontracts-free); the field set is bound to the source by the drift guard. The\noptional fields are absent when not known so the envelope stays byte-minimal.",
        "references": [
          {
            "name": "FsLimitClass__2d5726601b87",
            "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
          },
          {
            "name": "FsLimitOrigin__1d4de1805fa7",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
          },
          {
            "name": "FsLimitReaction__06a9e09be641",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
          }
        ]
      },
      {
        "name": "FsFetchOptions__62afbd421e0f",
        "signature": "export interface FsFetchOptions__62afbd421e0f {\n    /** HTTP method for the upstream call. Defaults to `GET`. */\n    method?: string;\n    /** Browser-controlled headers. The named integration allowlists them. */\n    headers?: Record<string, string>;\n    /** Browser-controlled query parameters. The named integration allowlists\n     * each name; secret injection parameters remain server-owned. */\n    query?: Record<string, string>;\n    /** Optional, explicitly typed request body. The named integration's bounded\n     * body declaration is enforced by the gateway. */\n    body?: {\n        kind: \"json\";\n        value: unknown;\n    } | {\n        kind: \"text\";\n        value: string;\n    };\n    /** Abort signal — cancels the in-flight secure fetch (and the token mint). */\n    signal?: AbortSignal;\n}",
        "source": "packages/farthershore-js/dist/fetch.d.ts#L3",
        "description": "Options for {@link fsFetch}.",
        "references": []
      },
      {
        "name": "FsLimitClass__2d5726601b87",
        "signature": "export type FsLimitClass__2d5726601b87 = (typeof FS_LIMIT_CLASSES__cf69b28be276)[number];",
        "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65",
        "description": "The semantic class a usage-limit deny falls into. Mirrors `LimitClass`.",
        "references": [
          {
            "name": "FS_LIMIT_CLASSES__cf69b28be276",
            "source": "packages/farthershore-js/dist/deny-codes.d.ts#L63"
          }
        ]
      },
      {
        "name": "FsLimitOrigin__1d4de1805fa7",
        "signature": "export type FsLimitOrigin__1d4de1805fa7 = \"platform\" | \"provider\" | \"subscriber\";",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L96",
        "description": "Where a limit was decided. Mirrors the contracts `LimitOrigin` (`platform` —\na plan/entitlement limit the platform owns; `provider` — an upstream throttle\nthe platform relays).",
        "references": []
      },
      {
        "name": "FsLimitReaction__06a9e09be641",
        "signature": "export type FsLimitReaction__06a9e09be641 = \"none\" | \"backoff_retry\" | \"wait_then_retry\" | \"queue\" | \"reduce_then_retry\" | \"fallback\" | \"upgrade\";",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L99",
        "description": "What a client should DO about a limit deny — the recommended reaction.\nMirrors the contracts `LimitReaction`.",
        "references": []
      },
      {
        "name": "GatewayContextToken__447d2a94e34b",
        "signature": "export interface GatewayContextToken__447d2a94e34b {\n    /** Short-lived `fsc_` bearer accepted by the Gateway for this subscriber. */\n    token: string;\n    /** ISO timestamp when the token expires. */\n    expiresAt: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L803",
        "description": "",
        "references": []
      },
      {
        "name": "KeysResource__2bf8d8c5e820",
        "signature": "export interface KeysResource__2bf8d8c5e820 {\n    /** The consumer's API keys for this product (secrets are never returned). */\n    list(opts?: {\n        signal?: AbortSignal;\n    }): Promise<ApiKey__a2eadd893331[]>;\n    /**\n     * Create a key. The returned `secret` is shown ONCE.\n     *\n     * Consumer-principal (D2): this generic route creates PERSONAL member keys.\n     * Managed service credentials use the canonical `serviceAccounts` lifecycle,\n     * which can return PENDING without creating a secret.\n     *\n     * `roleKeys` binds the key to org RBAC roles (live-bound: a role edit reaches\n     * the key without reprovisioning); `restrictedPermissions` optionally narrows\n     * the bound roles to a Stripe-style subset. Both are grantable only within\n     * the creator's own permissions — the backend 403s an over-reaching binding.\n     * (PERSONAL keys ignore `roleKeys` — their perms track the bound member.)\n     */\n    create(input?: {\n        label?: string;\n        scopes?: string[];\n        roleKeys?: string[];\n        restrictedPermissions?: string[];\n        kind?: \"PERSONAL\";\n        /** PERSONAL — mint FOR this member (their `Membership.id`); admin-gated. */\n        memberId?: string;\n    }): Promise<CreatedApiKey__eee6ebdc6f61>;\n    /** Permanently revoke a key by id. */\n    revoke(keyId: string): Promise<void>;\n    /** Rotate a key — revokes the old and returns a new `secret` (shown once). */\n    rotate(keyId: string): Promise<CreatedApiKey__eee6ebdc6f61>;\n    /** Canonical managed service-account provisioning and approval lifecycle. */\n    readonly serviceAccounts: ServiceAccountsResource__abd2dd8a7d4f;\n}",
        "source": "packages/farthershore-js/dist/resources/keys.d.ts#L3",
        "description": "",
        "references": [
          {
            "name": "ApiKey__a2eadd893331",
            "source": "packages/farthershore-js/dist/types.d.ts#L347"
          },
          {
            "name": "CreatedApiKey__eee6ebdc6f61",
            "source": "packages/farthershore-js/dist/types.d.ts#L375"
          },
          {
            "name": "ServiceAccountsResource__abd2dd8a7d4f",
            "source": "packages/farthershore-js/dist/resources/keys.d.ts#L53"
          }
        ]
      },
      {
        "name": "LegalAcceptance__cc2291cc0442",
        "signature": "export interface LegalAcceptance__cc2291cc0442 {\n    kind: string;\n    version: string;\n    contentHash: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L80",
        "description": "",
        "references": []
      },
      {
        "name": "LegalConsentStatus__2c5f3ab016cd",
        "signature": "export interface LegalConsentStatus__2c5f3ab016cd {\n    required: boolean;\n    documents: LegalDocumentStatus__f2d5a2d96393[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L76",
        "description": "",
        "references": [
          {
            "name": "LegalDocumentStatus__f2d5a2d96393",
            "source": "packages/farthershore-js/dist/types.d.ts#L67"
          }
        ]
      },
      {
        "name": "LegalDocumentAcceptanceMode__6e040b71b235",
        "signature": "export type LegalDocumentAcceptanceMode__6e040b71b235 = \"agree\" | \"acknowledge\" | \"none\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L60",
        "description": "",
        "references": []
      },
      {
        "name": "LegalDocumentReference__0e8dba55b6a6",
        "signature": "export interface LegalDocumentReference__0e8dba55b6a6 {\n    title: string;\n    url: string;\n    acceptanceMode: LegalDocumentAcceptanceMode__6e040b71b235;\n    effectiveDate?: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L61",
        "description": "",
        "references": [
          {
            "name": "LegalDocumentAcceptanceMode__6e040b71b235",
            "source": "packages/farthershore-js/dist/types.d.ts#L60"
          }
        ]
      },
      {
        "name": "LegalDocumentStatus__f2d5a2d96393",
        "signature": "export interface LegalDocumentStatus__f2d5a2d96393 extends LegalDocumentReference__0e8dba55b6a6 {\n    kind: string;\n    version: string;\n    contentHash: string;\n    consentLabel?: string;\n    changeNote?: string;\n    accepted: boolean;\n    acceptedAt?: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L67",
        "description": "",
        "references": [
          {
            "name": "LegalDocumentReference__0e8dba55b6a6",
            "source": "packages/farthershore-js/dist/types.d.ts#L61"
          }
        ]
      },
      {
        "name": "LimitDescriptor__01693492a147",
        "signature": "export interface LimitDescriptor__01693492a147 {\n    /** Stable identifier for the limit that was hit, e.g. `resource:widgets`. */\n    limitCode: string;\n    /** The metered/resource dimension, when known (e.g. `widgets`, `requests`). */\n    dimension: string | null;\n    /** The cap the subscriber is at, when known. */\n    currentCapacity: number | null;\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L85",
        "description": "The machine-readable limit descriptor the gateway/core attach to a limit\ndeny body (`{ error: { code, message, limitCode, dimension, currentCapacity } }`).\nThe SDK turns this into an upgrade prompt — see {@link LimitExceededError}.",
        "references": []
      },
      {
        "name": "LimitExceededError__7844c601e6fd",
        "signature": "export declare class LimitExceededError__7844c601e6fd extends FartherShoreApiError__ae8b4410fda4 {\n    readonly limitCode: string;\n    readonly dimension: string | null;\n    readonly currentCapacity: number | null;\n    /** The semantic {@link FsLimitClass} of this limit — derived from the `_fs`\n     *  envelope when present, else from the wire code + limitCode + status\n     *  ({@link classifyFsLimit}). null only when nothing classifies it. */\n    readonly limitClass: FsLimitClass__2d5726601b87 | null;\n    /** The parsed `_fs` deny envelope, when the body carried one. The richer\n     *  source for the reaction/headroom fields below. */\n    readonly envelope: FsDenyEnvelope__adf7ef9f2448 | null;\n    /** True when retrying the SAME request can succeed (a velocity/transient cap);\n     *  false when it never will (a spend cap / oversized request). */\n    readonly retrySafe: boolean;\n    /** True when the caller must MODIFY the request before it can succeed (a\n     *  `capacity` ceiling or `spend` cap). */\n    readonly mustModify: boolean;\n    /** The recommended client reaction. */\n    readonly reaction: FsLimitReaction__06a9e09be641;\n    /** Whether the platform or an upstream provider decided the limit. */\n    readonly limitOrigin: FsLimitOrigin__1d4de1805fa7;\n    /** The gateway decision id (correlates with the usage event / audit), when\n     *  the `_fs` envelope carried one. */\n    readonly decisionId: string | null;\n    /** When the limit window resets, when known (from the `_fs` envelope `reset`,\n     *  unix-epoch ms, else the `X-RateLimit-Reset` snapshot). */\n    readonly reset: Date | null;\n    /** Units remaining in the window at decision time, when known. */\n    readonly remaining: number | null;\n    /** Units already consumed in the window at decision time, when known. */\n    readonly used: number | null;\n    /** The cap value hit, when known. */\n    readonly limit: number | null;\n    constructor(status: number, code: string, message: string, body: unknown, descriptor: LimitDescriptor__01693492a147, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot__934527ed940b | null);\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L206",
        "description": "A {@link FartherShoreApiError} that is specifically a plan-limit block — a\nresource quota (`402 resource_count_limit_exceeded`), a usage quota, a rate\nlimit, or a credit cap. Carries the {@link LimitDescriptor} so the app can\nresolve an upgrade target from the bootstrap catalog and prompt the user\n(see `useUpgrade` / `<UpgradePrompt>`).",
        "references": [
          {
            "name": "FartherShoreApiError__ae8b4410fda4",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
          },
          {
            "name": "FsDenyEnvelope__adf7ef9f2448",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L109"
          },
          {
            "name": "FsLimitClass__2d5726601b87",
            "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
          },
          {
            "name": "FsLimitOrigin__1d4de1805fa7",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
          },
          {
            "name": "FsLimitReaction__06a9e09be641",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
          },
          {
            "name": "LimitDescriptor__01693492a147",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L85"
          },
          {
            "name": "RateLimitSnapshot__934527ed940b",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
          }
        ]
      },
      {
        "name": "ManagedIntegration__68b11f8f586e",
        "signature": "export type ManagedIntegration__68b11f8f586e = {\n    fetch(path: string, init?: ManagedIntegrationRequestInit__57e8453840f3): Promise<Response>;\n    /**\n     * Fetch-compatible adapter for native SDKs that accept a custom transport.\n     * Pair it with {@link url}; it converts the SDK's ordinary Request into the\n     * bounded named-integration envelope without exposing the injected secret.\n     */\n    transport(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;\n    /** Same-origin reserved base URL for native SDKs. It must be paired with this\n     * handle's `transport`; a raw browser fetch to the URL is not authorized. */\n    url(path?: string): string;\n};",
        "source": "packages/farthershore-js/dist/integrations.d.ts#L6",
        "description": "A frontend-safe handle to one product-declared integration. It never exposes\nits upstream origin, secret reference, or injection configuration.",
        "references": [
          {
            "name": "ManagedIntegrationRequestInit__57e8453840f3",
            "source": "packages/farthershore-js/dist/integrations.d.ts#L3"
          }
        ]
      },
      {
        "name": "ManagedIntegrationRequestInit__57e8453840f3",
        "signature": "export type ManagedIntegrationRequestInit__57e8453840f3 = FsFetchOptions__62afbd421e0f;",
        "source": "packages/farthershore-js/dist/integrations.d.ts#L3",
        "description": "",
        "references": [
          {
            "name": "FsFetchOptions__62afbd421e0f",
            "source": "packages/farthershore-js/dist/fetch.d.ts#L3"
          }
        ]
      },
      {
        "name": "Meter__c4ca128fcf40",
        "signature": "export interface Meter__c4ca128fcf40 {\n    /** Stable dimension key (e.g. \"requests\", \"tokens\"). */\n    key: string;\n    /** Human-friendly label for the dimension. */\n    display: string;\n    /** Optional unit suffix (e.g. \"ms\", \"tokens\"). */\n    unit?: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L15",
        "description": "A business-level meter definition (the dimension catalog used to label/format\nusage). Mirrors the wire `MeterDefinition`; only the display-relevant fields\nare surfaced.",
        "references": []
      },
      {
        "name": "NanosAmount__f9c1e22d3cbe",
        "signature": "export type NanosAmount__f9c1e22d3cbe = string | null;",
        "source": "packages/farthershore-js/dist/types.d.ts#L1179",
        "description": "A nanodollar amount off the wire: Core's decimal-integer STRING, or `null`\nwhen the wire value was malformed (non-integer, non-string, missing). The\nreader never coerces a malformed amount to `\"0\"` — a `null` renders as\n\"unavailable\", never as `$0`. Format non-null values with\n`format.formatNanos` (bigint) — never `Number()`.",
        "references": []
      },
      {
        "name": "NonEmptyPermissionList__ca911cbb6fa0",
        "signature": "export type NonEmptyPermissionList__ca911cbb6fa0 = [string, ...string[]];",
        "source": "packages/farthershore-js/dist/types.d.ts#L440",
        "description": "A service-account authority request must contain at least one permission.",
        "references": []
      },
      {
        "name": "NotificationPreferences__f7f3c3495466",
        "signature": "export interface NotificationPreferences__f7f3c3495466 {\n    master: boolean;\n    categories: Record<string, boolean>;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1164",
        "description": "The subscriber's full notification-preference state\n(`GET /portal/businesses/:id/me/notification-preferences`). Email is the only\nnotifiable channel, so a preference is a single email OPT-OUT:\n - `master === true` suppresses EVERY category's email;\n - `categories[category] === true` additionally mutes a single category.\n\nEmail is suppressed for an event iff the master opts out OR the event's\ncategory opts out. Category keys are the contracts notification categories\n(`billing`, `usage`, …) — kept as a plain string map so the SDK stays\ncontracts-free; the UI joins them to `NOTIFICATION_CATEGORY_META`.",
        "references": []
      },
      {
        "name": "NotificationPreferencesPatch__73fed684877b",
        "signature": "export interface NotificationPreferencesPatch__73fed684877b {\n    master?: boolean;\n    categories?: Record<string, boolean>;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1170",
        "description": "The PATCH body — a PARTIAL patch of the master and/or any categories. Only\nthe master/categories present change; omit the rest. Send only the delta.",
        "references": []
      },
      {
        "name": "NotificationsResource__dc7aa1b64a0f",
        "signature": "export interface NotificationsResource__dc7aa1b64a0f {\n    /** The current preference state. Missing `master`/`categories` in a partial\n     *  wire response are normalized to the opted-in defaults. */\n    preferences(opts?: {\n        signal?: AbortSignal;\n    }): Promise<NotificationPreferences__f7f3c3495466>;\n    /** Partial patch — send ONLY the changed channels/categories. Returns the\n     *  full, normalized updated state. */\n    updatePreferences(patch: NotificationPreferencesPatch__73fed684877b): Promise<NotificationPreferences__f7f3c3495466>;\n}",
        "source": "packages/farthershore-js/dist/resources/account.d.ts#L169",
        "description": "The subscriber's per-category notification preferences (the portal\n`/me/notification-preferences` surface). OPT-OUT model — see\n{@link NotificationPreferences}. Deliberately NON-degrading (like\n{@link RbacResource}): a failed read THROWS the typed `FartherShoreApiError`\nso the preferences page can render an explicit error state rather than a\nsilent all-opted-in default.",
        "references": [
          {
            "name": "NotificationPreferences__f7f3c3495466",
            "source": "packages/farthershore-js/dist/types.d.ts#L1164"
          },
          {
            "name": "NotificationPreferencesPatch__73fed684877b",
            "source": "packages/farthershore-js/dist/types.d.ts#L1170"
          }
        ]
      },
      {
        "name": "ObservedLimitDeny__ff379deca309",
        "signature": "export interface ObservedLimitDeny__ff379deca309 {\n    /** The semantic class, or null for an UNKNOWN/future class (T13). */\n    limitClass: FsLimitClass__2d5726601b87 | null;\n    /** The raw `limitClass` string when it is outside the closed mirror (T13). */\n    unknownLimitClass?: string;\n    /** The recommended client reaction. */\n    reaction: FsLimitReaction__06a9e09be641;\n    /** Whether the platform or an upstream provider decided the deny. */\n    limitOrigin: FsLimitOrigin__1d4de1805fa7;\n    /** The provider-supplied reason verbatim, when this relayed an upstream\n     *  throttle (an adaptive deny). */\n    providerReason: string | null;\n    /** When the limit window resets, when known. */\n    reset: Date | null;\n    /** Units remaining in the window at decision time, when known. */\n    remaining: number | null;\n    /** The cap value hit, when known. */\n    limit: number | null;\n    /** The HTTP status of the deny. */\n    status: number;\n    /** The wire `code` of the deny. */\n    code: string;\n    /** The gateway decision id, when known. */\n    decisionId: string | null;\n    /** Wall-clock instant (epoch ms) the deny was observed — drives staleness. */\n    observedAt: number;\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L580",
        "description": "A5-amend (T11) — a snapshot of a single OBSERVED limit/throttle deny, captured\nas it leaves the transport. The ADVISORY input to `useLimitStatus()`: the\nfreshest known RECENT deny (NOT a live poll — the gateway stays authoritative).\nProvider-neutral; forward-compat (an unknown future class keeps `limitClass`\nnull + the raw value on `unknownLimitClass`, never crashing — T13).",
        "references": [
          {
            "name": "FsLimitClass__2d5726601b87",
            "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
          },
          {
            "name": "FsLimitOrigin__1d4de1805fa7",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
          },
          {
            "name": "FsLimitReaction__06a9e09be641",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
          }
        ]
      },
      {
        "name": "OffsetPage__af8a84ff58be",
        "signature": "export interface OffsetPage__af8a84ff58be<T> {\n    data: T[];\n    pagination: {\n        limit: number;\n        offset: number;\n        hasMore: boolean;\n    };\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L535",
        "description": "",
        "references": []
      },
      {
        "name": "OnboardingResult__d5ee678fcfed",
        "signature": "export interface OnboardingResult__d5ee678fcfed {\n    checkoutUrl?: string | null;\n    subscriber?: unknown;\n    /** One-time full key secret when Core auto-creates the first key. */\n    autoApiKey?: string | {\n        secret?: string;\n    } | null;\n    /** Set when the first-key mint failed AFTER the subscriber became active —\n     *  surfaced (not swallowed) so the client can tell the user. */\n    autoApiKeyError?: AutoApiKeyError__bd378e9396dc | null;\n    raw: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1104",
        "description": "`POST /onboarding` result: paid plans hand back `checkoutUrl` (note: NOT\n`url` like checkout-session); free plans activate inline and may include a\none-time auto-created API key (drives the auto-key banner).",
        "references": [
          {
            "name": "AutoApiKeyError__bd378e9396dc",
            "source": "packages/farthershore-js/dist/types.d.ts#L1097"
          }
        ]
      },
      {
        "name": "OpaqueAllowanceDisplay__09b08c9319dc",
        "signature": "export type OpaqueAllowanceDisplay__09b08c9319dc = {\n    kind: \"multiplier\";\n    /** Authored allowance in display units (e.g. 5 for a \"5x\" plan). */\n    allowanceUnits: number;\n    /** Remaining allowance in display units, 2 decimals, as a string. */\n    remainingUnits: string;\n    /** Consumed allowance in display units, 2 decimals, as a string. */\n    consumedUnits: string;\n} | {\n    kind: \"fraction\";\n    /** Consumed share of the allowance in basis points (0..10000). */\n    consumedBasisPoints: number;\n    /** Remaining share of the allowance in basis points (0..10000). */\n    remainingBasisPoints: number;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L1215",
        "description": "Opaque allowance display — NEVER carries a nanodollar amount. Either the\nplan-authored display units (`multiplier`: the allowance is\n`allowanceUnits` units, remaining/consumed are fractional units of it) or,\nwhen the plan authored no display, the consumption fraction in basis\npoints.",
        "references": []
      },
      {
        "name": "OpaqueBillPreview__249f4b617b5a",
        "signature": "export interface OpaqueBillPreview__249f4b617b5a {\n    currency: string;\n    disclosure: \"opaque\";\n    /** The plan's recurring fee, in cents. */\n    recurringFeeCents: number;\n    allowances: OpaqueBillPreviewAllowance__c67c601b6f42[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1277",
        "description": "Opaque plans return allowance shape ONLY — nothing a subscriber could\ndivide by a known request count to recover the per-unit rate. Amounts owed\nsurface through the invoice, not the preview.",
        "references": [
          {
            "name": "OpaqueBillPreviewAllowance__c67c601b6f42",
            "source": "packages/farthershore-js/dist/types.d.ts#L1232"
          }
        ]
      },
      {
        "name": "OpaqueBillPreviewAllowance__c67c601b6f42",
        "signature": "export interface OpaqueBillPreviewAllowance__c67c601b6f42 {\n    kind: string;\n    /** Bucket lifecycle state — Core's `BucketState`, verbatim. */\n    state: BucketState__c796139d57fe;\n    expiresAt: string | null;\n    display: OpaqueAllowanceDisplay__09b08c9319dc;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1232",
        "description": "A funding allowance under opaque disclosure — kind / state / expiry plus\nthe authored display; no amounts.",
        "references": [
          {
            "name": "BucketState__c796139d57fe",
            "source": "packages/farthershore-js/dist/types.d.ts#L1184"
          },
          {
            "name": "OpaqueAllowanceDisplay__09b08c9319dc",
            "source": "packages/farthershore-js/dist/types.d.ts#L1215"
          }
        ]
      },
      {
        "name": "OrganizationsResource__18d4024e64ce",
        "signature": "export interface OrganizationsResource__18d4024e64ce {\n    /** The orgs through which the current user holds subscriptions to this\n     *  product (B2B multi-org). Degrades to the empty shape on any error —\n     *  exactly how the SSR portal treated it. Set `strict` only when a caller\n     *  needs to render the read failure distinctly from a valid empty result. */\n    contexts(opts?: {\n        signal?: AbortSignal;\n        strict?: boolean;\n    }): Promise<SubscriptionContextsResult__fe44e57e7d49>;\n}",
        "source": "packages/farthershore-js/dist/resources/account.d.ts#L3",
        "description": "",
        "references": [
          {
            "name": "SubscriptionContextsResult__fe44e57e7d49",
            "source": "packages/farthershore-js/dist/types.d.ts#L968"
          }
        ]
      },
      {
        "name": "PendingServiceAccountApproval__5aaaeb81c691",
        "signature": "export interface PendingServiceAccountApproval__5aaaeb81c691 {\n    id: string;\n    operation: ServiceAccountApprovalOperation__d422a57b0b16;\n    serviceAccountId: string;\n    requestedBy: string;\n    requestedPermissions: string[];\n    excessPermissions: string[];\n    createdAt: string;\n    serviceAccount: {\n        name: string;\n        /** Frozen grants that stay active for a pending UPDATE. */\n        grantedPermissions: string[];\n    };\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L521",
        "description": "",
        "references": [
          {
            "name": "ServiceAccountApprovalOperation__d422a57b0b16",
            "source": "packages/farthershore-js/dist/types.d.ts#L382"
          }
        ]
      },
      {
        "name": "PendingServiceAccountCreateResponse__75eae3a7015a",
        "signature": "export interface PendingServiceAccountCreateResponse__75eae3a7015a {\n    status: \"PENDING\";\n    serviceAccountId: string;\n    approvalId: string;\n    requestedPermissions: string[];\n    /** A pending create has no live credential or frozen authority. */\n    grantedPermissions: [];\n    excessPermissions: string[];\n    eligibleApproverIds: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L455",
        "description": "",
        "references": []
      },
      {
        "name": "PendingServiceAccountUpdateResponse__97b4460d1924",
        "signature": "export interface PendingServiceAccountUpdateResponse__97b4460d1924 {\n    status: \"PENDING\";\n    serviceAccountId: string;\n    approvalId: string;\n    /** Frozen grants that remain active while approval is pending. */\n    activePermissions: string[];\n    requestedPermissions: string[];\n    excessPermissions: string[];\n    eligibleApproverIds: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L476",
        "description": "",
        "references": []
      },
      {
        "name": "PersonaAuthSession__da61c3cf64e7",
        "signature": "export interface PersonaAuthSession__da61c3cf64e7 {\n    kind: \"test-persona\";\n    personaId: string;\n    userId: string;\n    organizationId: string | null;\n    displayName: string | null;\n    expiresAt: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L334",
        "description": "Safe, non-secret view of a server-owned test-persona browser session.",
        "references": []
      },
      {
        "name": "Plan__3a8348415fe9",
        "signature": "export interface Plan__3a8348415fe9 {\n    /** Immutable `CompiledPlan.id` — the pointer passed to `subscribe()`. */\n    id: string;\n    key: string;\n    name: string;\n    description: string | null;\n    /**\n     * The builder's DECLARED plan kind. `\"free\"` is the free tier — a FLOOR,\n     * not an option: subscribers are auto-enrolled on it at sign-up and fall\n     * back to it when a paid plan is cancelled, so `<PlansTable>` and every\n     * other plan-card surface hides it rather than offering it as a choice.\n     * Read this field — do NOT infer it from a zero recurring fee, which is\n     * also true of `usage` plans that bill usage.\n     */\n    kind: PlanKind__5f6d46ef299c;\n    /** Recurring fee, in cents (0 for free / usage plans). */\n    recurringFeeCents: number;\n    /** Billing cadence for the recurring fee + metered usage — `\"month\"`\n     *  (default) or `\"year\"` (annual). Lets a pricing card render \"$X/yr\" vs\n     *  \"$X/mo\" and badge annual tiers. Defaults to `\"month\"` when the wire DTO\n     *  omits it (the platform omits the key for monthly plans). */\n    billingInterval: \"month\" | \"year\";\n    /** ISO 4217 currency of every money field on the plan. REQUIRED in the\n     *  normalized model — defaults to `\"USD\"` when the wire DTO omits it (the\n     *  USD-only platform omits the key today). */\n    currency: string;\n    /** Free-trial length in days (0 = no trial). */\n    trialDays: number;\n    /** Optional monthly spend cap, in cents. */\n    maxMonthlySpendCents: number | null;\n    /** Optional minimum monthly spend floor, in cents. */\n    minMonthlySpendCents: number | null;\n    /** Structural metered dimensions (no money). Empty for non-metered plans. */\n    meters: PlanMeter__be60c6450f51[];\n    /** Quota + rate-limit rules. Month-window rules are the included allowances. */\n    limits: PlanLimit__8541d3e44c07[];\n    /** Optional builder-authored feature bullets shown on the plan card. */\n    planDetails: string[];\n    /** Control-plane resource limits — `key → maxCount` caps (webhooks: 5)\n     *  such as api_keys or webhooks. Empty when the\n     *  plan declares none. */\n    resourceLimits: Record<string, number>;\n    /**\n     * The plan's PUBLIC catalog terms for metered usage — the price list a buyer\n     * needs to compare plans, projected by Core from the served commercial\n     * release. `null` when the plan binds no catalog, when the served release\n     * carries no matching pricing policy, or when the builder declared\n     * `fs.disclosure.opaque`; card surfaces fall back to \"priced per the\n     * catalog\" and a docs pointer in that case.\n     *\n     * This is the only place on the SDK's plan model where per-unit money lives,\n     * and it is NOT an exception to the rule the rest of this module states: a\n     * pricing catalog is a PUBLISHED commerce term the builder authored for\n     * everyone, whereas a subscriber's rated usage, funding draw-down and\n     * projected bill remain exclusive to Core's bill preview. The SDK still\n     * derives NO money: it renders these rates, it never multiplies them by a\n     * usage count.\n     */\n    pricingDisplay: PlanPricingDisplay__072fcb7dc8b6 | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L127",
        "description": "A purchasable/available plan in the product catalog. Mirrors core's\n`PortalPlan` (declared kind + recurring billing shape) so the template can\nrender the plan card, included quotas, and a subscribe button. Money for\nusage lives ONLY in the bill preview ({@link BillPreview}).",
        "references": [
          {
            "name": "PlanKind__5f6d46ef299c",
            "source": "packages/farthershore-js/dist/types.d.ts#L108"
          },
          {
            "name": "PlanLimit__8541d3e44c07",
            "source": "packages/farthershore-js/dist/types.d.ts#L111"
          },
          {
            "name": "PlanMeter__be60c6450f51",
            "source": "packages/farthershore-js/dist/types.d.ts#L103"
          },
          {
            "name": "PlanPricingDisplay__072fcb7dc8b6",
            "source": "packages/farthershore-js/dist/types.d.ts#L248"
          }
        ]
      },
      {
        "name": "PlanFunding__89a4bc119cad",
        "signature": "export interface PlanFunding__89a4bc119cad {\n    kind: \"included\" | \"promo\" | \"referral\" | \"prepaid\";\n    /** Face value in minor units of {@link PlanPricingDisplay.currency}. */\n    amountMinor: number;\n    /** Whether the bucket refreshes each billing period. */\n    recurs: boolean;\n    /** The builder's authored marketing framing: the bucket is `factor`x of a\n     *  `baseMinor` base. The base is `amountMinor / factor` by construction, so\n     *  the label cannot misstate the allowance. */\n    display: {\n        kind: \"multiplier\";\n        factor: number;\n        baseMinor: number;\n    } | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L232",
        "description": "Funding that pays for rated usage before anything is owed.",
        "references": []
      },
      {
        "name": "PlanKind__5f6d46ef299c",
        "signature": "export type PlanKind__5f6d46ef299c = PlanKindWire__a95f9171680c;",
        "source": "packages/farthershore-js/dist/types.d.ts#L108",
        "description": "The builder's DECLARED plan kind (`plan.kind.*` in the Business SDK):\n`free` | `flat` | `usage` | `prepaid` | `hybrid` | `trial` | `custom`.\nEvery card decision (badge, picker, hiding the free floor) reads it —\nnothing is inferred from shape.",
        "references": [
          {
            "name": "PlanKindWire__a95f9171680c",
            "source": "packages/farthershore-js/dist/generated/catalog-types.d.ts#L25"
          }
        ]
      },
      {
        "name": "PlanKindWire__a95f9171680c",
        "signature": "export type PlanKindWire__a95f9171680c = \"free\" | \"flat\" | \"usage\" | \"prepaid\" | \"hybrid\" | \"trial\" | \"custom\";",
        "source": "packages/farthershore-js/dist/generated/catalog-types.d.ts#L25",
        "description": "The DECLARED plan kind (`plan.kind.*` in the Business SDK; the ONE plan\nkind enum, `@farthershore/contracts/commerce` `planKindSchema`).",
        "references": []
      },
      {
        "name": "PlanLimit__8541d3e44c07",
        "signature": "export interface PlanLimit__8541d3e44c07 {\n    dimension: string;\n    window: {\n        type: \"named\";\n        name: string;\n    } | {\n        type: \"custom\";\n        seconds: number;\n    };\n    capacity: number;\n    enforcement?: \"enforce\" | \"track\";\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L111",
        "description": "A named rate-limit / quota rule on a plan. `window.name === \"month\"` rules\nare the included-quota allowances the usage card renders against.",
        "references": []
      },
      {
        "name": "PlanMeter__be60c6450f51",
        "signature": "export type PlanMeter__be60c6450f51 = PlanMeterWire__47c3d2492e8a;",
        "source": "packages/farthershore-js/dist/types.d.ts#L103",
        "description": "A structural metered dimension on a plan — `{ dimension, kind? }`, NO\nmoney. Rates, allowances, and the projected bill come from the bill-preview\nAPI ({@link BillPreview}), never from the plan. Wire-faithful — the public\n`PlanMeter` name re-exports the codegenned `PlanMeterWire`.",
        "references": [
          {
            "name": "PlanMeterWire__47c3d2492e8a",
            "source": "packages/farthershore-js/dist/generated/catalog-types.d.ts#L17"
          }
        ]
      },
      {
        "name": "PlanMeterWire__47c3d2492e8a",
        "signature": "export interface PlanMeterWire__47c3d2492e8a {\n    dimension: string;\n    /** Aggregation formula (`linear` sum | `active_count` gauge |\n     *  `event_count` per-event). OPTIONAL — absent means `linear`. */\n    kind?: \"linear\" | \"active_count\" | \"event_count\";\n}",
        "source": "packages/farthershore-js/dist/generated/catalog-types.d.ts#L17",
        "description": "A structural metered dimension on a plan — dimension + aggregation kind,\nNO money (`@farthershore/contracts/portal` `PortalPlan.meters[number]`).\nRates, allowances, and projected bills come from the bill-preview API,\nnever from the plan.",
        "references": []
      },
      {
        "name": "PlanOffer__5ab47cb32b7d",
        "signature": "export interface PlanOffer__5ab47cb32b7d {\n    /** The immutable CompiledPlan version id (equals `plan.id`). */\n    compiledPlanId: string;\n    /** The plan, in the same wire shape as `list()` / the portal catalog. */\n    plan: Plan__3a8348415fe9;\n    /** The billing fingerprint of THIS plan version's economic content. Pass it\n     *  to `subscribe()` / `startOnboarding()` as `offerFingerprint` to get a\n     *  409 PLAN_OFFER_CHANGED instead of a silent price change. */\n    offerFingerprint: string;\n}",
        "source": "packages/farthershore-js/dist/resources/plans.d.ts#L31",
        "description": "One entry from `getPlanOffers()` — a currently-purchasable plan version.",
        "references": [
          {
            "name": "Plan__3a8348415fe9",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "PlanPricingDisplay__072fcb7dc8b6",
        "signature": "export interface PlanPricingDisplay__072fcb7dc8b6 {\n    /** The pricing policy key the plan's `usagePricing` binds. */\n    pricingPolicyKey: string;\n    /** Meter the policy rates. */\n    meterKey: string;\n    /** ISO 4217 currency of every amount below. */\n    currency: string;\n    /** How the plan binds the catalog. `fixed_version` plans pin `version`. */\n    binding: {\n        kind: \"current\" | \"current_with_contract_terms\" | \"fixed_version\";\n        version: number | null;\n    };\n    /** Rates in deterministic precedence order, most specific first. */\n    rules: PricingRule__391263f593d3[];\n    /** Funding buckets declared on the plan, in authored order. */\n    funding: PlanFunding__89a4bc119cad[];\n    /** What happens when funding runs out: `block` stops requests, `overage`\n     *  keeps serving at the catalog, `prepaid` is the wallet shape. */\n    exhaustion: \"block\" | \"overage\" | \"prepaid\" | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L248",
        "description": "PUBLIC commerce terms for a plan's metered usage.",
        "references": [
          {
            "name": "PlanFunding__89a4bc119cad",
            "source": "packages/farthershore-js/dist/types.d.ts#L232"
          },
          {
            "name": "PricingRule__391263f593d3",
            "source": "packages/farthershore-js/dist/types.d.ts#L206"
          }
        ]
      },
      {
        "name": "PlansResource__05a484289922",
        "signature": "export interface PlansResource__05a484289922 {\n    /** The product's available plans (resolved via bootstrap). Empty when the\n     *  product has no published, self-serve plans. */\n    list(): Promise<Plan__3a8348415fe9[]>;\n    /** The currently-purchasable plan versions for the signed-in subscriber\n     *  (including their pinned plan version), each with the `offerFingerprint`\n     *  to echo back at `subscribe()` for price-change consent. Unlike `list()`,\n     *  this is a live core read (not bootstrap-cached). */\n    getPlanOffers(): Promise<PlanOffer__5ab47cb32b7d[]>;\n    /** Start checkout for a plan. Paid → `{ url }` (navigate to Stripe). Free →\n     *  `{ subscriber }` (activated directly). Pass `offerFingerprint` (from\n     *  `getPlanOffers()`) to fail 409 PLAN_OFFER_CHANGED on a stale price. */\n    subscribe(input: SubscribeInput__62c7cb21d77a): Promise<SubscribeResult__4b2d9557cede>;\n    /** The dashboard onboarding path (`POST /onboarding`) the SSR portal's\n     *  onboarding view uses. Differs from `subscribe()`: paid plans return\n     *  `checkoutUrl` (not `url`), and free activations may include a one-time\n     *  `autoApiKey` (drives the auto-created-key banner). */\n    startOnboarding(input?: StartOnboardingInput__af7cf0dea526): Promise<OnboardingResult__d5ee678fcfed>;\n}",
        "source": "packages/farthershore-js/dist/resources/plans.d.ts#L61",
        "description": "",
        "references": [
          {
            "name": "OnboardingResult__d5ee678fcfed",
            "source": "packages/farthershore-js/dist/types.d.ts#L1104"
          },
          {
            "name": "Plan__3a8348415fe9",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          },
          {
            "name": "PlanOffer__5ab47cb32b7d",
            "source": "packages/farthershore-js/dist/resources/plans.d.ts#L31"
          },
          {
            "name": "StartOnboardingInput__af7cf0dea526",
            "source": "packages/farthershore-js/dist/resources/plans.d.ts#L27"
          },
          {
            "name": "SubscribeInput__62c7cb21d77a",
            "source": "packages/farthershore-js/dist/resources/plans.d.ts#L5"
          },
          {
            "name": "SubscribeResult__4b2d9557cede",
            "source": "packages/farthershore-js/dist/resources/plans.d.ts#L44"
          }
        ]
      },
      {
        "name": "PrefetchSurface__2b22bd2b6c45",
        "signature": "export interface PrefetchSurface__2b22bd2b6c45 {\n    /** Warm the host→business resolve (joins the memoized bootstrap). */\n    boot(): void;\n    /** Warm `GET /me` (subscriber context) for dashboard/account surfaces. */\n    me(): void;\n    /** Warm the default usage snapshot (what `<UsageCard>`/the usage page read). */\n    usage(): void;\n    /** Warm the API-key list. */\n    apiKeys(): void;\n    /** Warm the subscription read (billing surfaces). */\n    subscription(): void;\n}",
        "source": "packages/farthershore-js/dist/client.d.ts#L24",
        "description": "Fire-and-forget cache warmers for navigation intent (sidebar hover/focus,\nroute preload). Each starts the same read-through-cached request the\ndestination page will make, so the page's hooks join the in-flight promise\ninstead of paying a fresh round-trip after the route renders. Bootstrap is\nensured first; all errors are swallowed — a hover is a hint, and the page's\nown read surfaces any real failure.",
        "references": []
      },
      {
        "name": "PricingAmount__4680e23fbfac",
        "signature": "export interface PricingAmount__4680e23fbfac {\n    num: string;\n    den: string;\n    /** `num / den` long-divided; exact where the expansion terminates. */\n    decimal: string;\n    /** True when `decimal` was truncated because the rational does not terminate. */\n    rounded: boolean;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L190",
        "description": "A catalog rate in currency-per-unit. Carries the EXACT reduced rational\nalongside its decimal projection because rates like 1/3 have no finite\ndecimal form — render `decimal`, compare `num`/`den`.",
        "references": []
      },
      {
        "name": "PricingRule__391263f593d3",
        "signature": "export type PricingRule__391263f593d3 = {\n    /** Stable catalog-entry key — the builder's semantic rule id. */\n    key: string;\n    /** Measure this rule prices (`pages`, `tokens`). There is no per-measure\n     *  display name anywhere in the commerce manifest, so the unit label a card\n     *  shows is derived from this key. */\n    measurementKey: string;\n    /** Catalog-item namespace, when the rule is provider/model scoped. */\n    item: {\n        provider: string;\n        model: string;\n        modality?: string;\n    } | null;\n    /** Dimension conditions that select this rule (`mode = ocr`). */\n    where: Array<{\n        dimensionKey: string;\n        value: string;\n    }>;\n} & ({\n    kind: \"perUnit\";\n    amount: PricingAmount__4680e23fbfac;\n} | {\n    kind: \"graduated\" | \"volume\";\n    tiers: PricingTier__f5519de88c98[];\n});",
        "source": "packages/farthershore-js/dist/types.d.ts#L206",
        "description": "One PUBLIC catalog rule, projected for display. `backendQuoted` rules are\nnever projected — a bound the backend quotes against is not a price.",
        "references": [
          {
            "name": "PricingAmount__4680e23fbfac",
            "source": "packages/farthershore-js/dist/types.d.ts#L190"
          },
          {
            "name": "PricingTier__f5519de88c98",
            "source": "packages/farthershore-js/dist/types.d.ts#L200"
          }
        ]
      },
      {
        "name": "PricingTier__f5519de88c98",
        "signature": "export interface PricingTier__f5519de88c98 {\n    upTo: string | null;\n    amount: PricingAmount__4680e23fbfac;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L200",
        "description": "One bracket of a tiered catalog rule. `upTo` is the inclusive cumulative\nupper bound as a decimal string, `null` on the open-ended final tier.",
        "references": [
          {
            "name": "PricingAmount__4680e23fbfac",
            "source": "packages/farthershore-js/dist/types.d.ts#L190"
          }
        ]
      },
      {
        "name": "PromoCodeKind__c6690a5a680c",
        "signature": "export type PromoCodeKind__c6690a5a680c = \"percent_off\" | \"amount_off\" | \"free_months\" | (string & {});",
        "source": "packages/farthershore-js/dist/types.d.ts#L812",
        "description": "Promo-code flavour on an applied subscriber promo. Mirrors the wire\n`PromoCodeKind` (`percent_off` | `amount_off` | `free_months`); kept as an\nopen union so a producer-side addition doesn't break the typed read.",
        "references": []
      },
      {
        "name": "RateLimitSnapshot__934527ed940b",
        "signature": "export interface RateLimitSnapshot__934527ed940b {\n    /** Requests left in the current window, or null when the header is absent. */\n    remaining: number | null;\n    /** When the window resets, or null when the header is absent. The\n     *  `X-RateLimit-Reset` value is unix-epoch SECONDS. */\n    resetAt: Date | null;\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L8",
        "description": "Parsed `X-RateLimit-*` snapshot the gateway attaches to throttle responses.\nThe gateway emits `X-RateLimit-Remaining` + `X-RateLimit-Reset` but NOT\n`X-RateLimit-Limit`, so there is deliberately no `limit` field.",
        "references": []
      },
      {
        "name": "RbacCatalogEntry__70378d25cd96",
        "signature": "export interface RbacCatalogEntry__70378d25cd96 {\n    subject: string;\n    /** Optional display title for the subject. */\n    title?: string;\n    permissions: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1053",
        "description": "One derived-catalog entry (`GET /me/rbac/catalog`): the permissions a\nproduct's routes make grantable, grouped by route subject. Never authored —\nderived from the product's accepted spec.",
        "references": []
      },
      {
        "name": "RbacResource__b63486266173",
        "signature": "export interface RbacResource__b63486266173 {\n    settings: {\n        /** Current org settings: `{ enabled, defaultRoleKey? }`. */\n        get(opts?: {\n            signal?: AbortSignal;\n        }): Promise<RbacSettings__15be951cf2e7>;\n        /** Full-document replace. `enabled: true` seeds the editable\n         *  Admin/Editor/Viewer templates (idempotent); omitted/null\n         *  `defaultRoleKey` clears the default. */\n        update(input: {\n            enabled: boolean;\n            defaultRoleKey?: string | null;\n        }): Promise<RbacSettings__15be951cf2e7>;\n    };\n    /** The DERIVED grantable-permission catalog (never authored) — grouped by\n     *  route operation, in the `<route-id>:read|write` grammar. */\n    catalog(opts?: {\n        signal?: AbortSignal;\n    }): Promise<RbacCatalogEntry__70378d25cd96[]>;\n    roles: {\n        /** The org's role list (seeded templates + custom), sorted by key. */\n        list(opts?: {\n            signal?: AbortSignal;\n        }): Promise<RbacRole__8a7d3e5f7c64[]>;\n        /** Create a custom role. Permissions are validated against the catalog\n         *  (400 `UNKNOWN_PERMISSION` naming offenders; `\"*\"` always grantable). */\n        create(input: {\n            roleKey: string;\n            name: string;\n            permissions: string[];\n        }): Promise<RbacRole__8a7d3e5f7c64>;\n        /** Rename and/or re-permission a role. */\n        update(roleKey: string, input: {\n            name?: string;\n            permissions?: string[];\n        }): Promise<RbacRole__8a7d3e5f7c64>;\n        /** Delete a role. Member assignments referencing it are left in place\n         *  (resolution ignores stale keys); a matching `defaultRoleKey` is\n         *  cleared server-side. */\n        remove(roleKey: string): Promise<void>;\n    };\n    /**\n     * Permissions Kernel Wave 6 — per-subscriber component gate policies. An\n     * org admin (team:manage_rbac) upserts one override row per component key;\n     * `requiredPermission: null` clears the permission override back to the\n     * component's default. Throws the typed `FartherShoreApiError` — a 409\n     * `GOVERNED_BY_CHANGE_SET` means change control governs these rows.\n     */\n    componentPolicies: {\n        /** Upsert the override row for one component key\n         *  (PUT /me/component-policies). */\n        update(input: {\n            componentKey: string;\n            requiredPermission: string | null;\n            gateMode: string;\n        }): Promise<ComponentAccessPolicyRow__60d2c40fe86e>;\n    };\n    /**\n     * Track T3 — Notion-minimal access requests. Any member files a request for a\n     * permission; owners/admins review the queue and approve (AUTO-GRANTS the\n     * permission onto the requester's direct grants) or deny.\n     */\n    accessRequests: {\n        /** File a request for a permission. Idempotent on an open PENDING row for\n         *  the same (requester, permission). Any authenticated member. */\n        create(input: {\n            permission: string;\n            note?: string;\n        }): Promise<AccessRequest__e4d3f89daefa>;\n        /** The request queue (OWNER/ADMIN): pending first, then resolved. */\n        list(opts?: {\n            signal?: AbortSignal;\n        }): Promise<AccessRequest__e4d3f89daefa[]>;\n        /** Approve (grants the permission) or deny a pending request. */\n        resolve(requestId: string, action: \"approve\" | \"deny\"): Promise<AccessRequest__e4d3f89daefa>;\n    };\n}",
        "source": "packages/farthershore-js/dist/resources/account.d.ts#L65",
        "description": "Org-facing Managed-RBAC management (FAR-698/FAR-700) — the portal-customer\n`/me/rbac/*` surface. Org OWNER/ADMIN only; every method THROWS the\ntyped `FartherShoreApiError` rather than degrading, because the UI derives\nsection visibility from the error codes (`RBAC_NOT_ENABLED_BY_PRODUCT`,\n`UNKNOWN_PERMISSION`). Everything here configures UX + minted-token claims;\nthe EDGE `permission` constraint is the security boundary — never treat\nclient-side gating as enforcement.",
        "references": [
          {
            "name": "AccessRequest__e4d3f89daefa",
            "source": "packages/farthershore-js/dist/types.d.ts#L1061"
          },
          {
            "name": "ComponentAccessPolicyRow__60d2c40fe86e",
            "source": "packages/farthershore-js/dist/types.d.ts#L945"
          },
          {
            "name": "RbacCatalogEntry__70378d25cd96",
            "source": "packages/farthershore-js/dist/types.d.ts#L1053"
          },
          {
            "name": "RbacRole__8a7d3e5f7c64",
            "source": "packages/farthershore-js/dist/types.d.ts#L1035"
          },
          {
            "name": "RbacSettings__15be951cf2e7",
            "source": "packages/farthershore-js/dist/types.d.ts#L1028"
          }
        ]
      },
      {
        "name": "RbacRole__8a7d3e5f7c64",
        "signature": "export interface RbacRole__8a7d3e5f7c64 {\n    roleKey: string;\n    name: string;\n    /** Permission strings in the `<subject>:read|write` grammar, or `\"*\"`. */\n    permissions: string[];\n    /** \"ACCOUNT\" rows are the membership-tier enforcement source: their\n     *  permissions are editable but their identity is fixed — no rename,\n     *  delete, default assignment, or credential binding. Absent ⇒ \"CUSTOM\". */\n    kind?: \"CUSTOM\" | \"ACCOUNT\";\n    /** ACCOUNT rows only: the full subscriber vocabulary — the editable\n     *  option set (restoring a removed verb needs the catalog, not just the\n     *  row's current grants). */\n    vocabulary?: string[];\n    createdAt?: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1035",
        "description": "One configurable role (`/me/rbac/roles`), template-seeded or custom.",
        "references": []
      },
      {
        "name": "RbacRoleSummary__2161df852611",
        "signature": "export interface RbacRoleSummary__2161df852611 {\n    roleKey: string;\n    name: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1023",
        "description": "One assignable role, as listed on `GET /me/team` (`availableRoles`).",
        "references": []
      },
      {
        "name": "RbacSettings__15be951cf2e7",
        "signature": "export interface RbacSettings__15be951cf2e7 {\n    /** Whether role permissions are enforced for this org's user tokens. */\n    enabled: boolean;\n    /** Role auto-assigned to members with no explicit assignment. */\n    defaultRoleKey?: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1028",
        "description": "Org-level Managed-RBAC settings (`GET|PUT /me/rbac/settings`).",
        "references": []
      },
      {
        "name": "ReadCacheEntry__ee67854da2b9",
        "signature": "export interface ReadCacheEntry__ee67854da2b9 {\n    at: number;\n    promise: Promise<unknown>;\n}",
        "source": "packages/farthershore-js/dist/cache.d.ts#L2",
        "description": "",
        "references": []
      },
      {
        "name": "ResolvedRetryConfig__fe2336bea142",
        "signature": "export interface ResolvedRetryConfig__fe2336bea142 {\n    maxAttempts: number;\n    retryOn: (err: unknown) => boolean;\n    respectRetryAfter: boolean;\n    sleep: (ms: number) => Promise<void>;\n}",
        "source": "packages/farthershore-js/dist/config.d.ts#L29",
        "description": "Resolved retry policy with all defaults applied (internal).",
        "references": []
      },
      {
        "name": "ResourceLimitUsage__a2c3c3e2955a",
        "signature": "export interface ResourceLimitUsage__a2c3c3e2955a {\n    limit: number;\n    current: number;\n}",
        "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L10",
        "description": "One resource's enforced cap and the caller's current usage.",
        "references": []
      },
      {
        "name": "ResourceLimitUsageMap__cc534f1c9f18",
        "signature": "export type ResourceLimitUsageMap__cc534f1c9f18 = Record<string, ResourceLimitUsage__a2c3c3e2955a>;",
        "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L15",
        "description": "Per-resource `{ limit, current }`. Undeclared resources are unlimited.",
        "references": [
          {
            "name": "ResourceLimitUsage__a2c3c3e2955a",
            "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L10"
          }
        ]
      },
      {
        "name": "ResourceRecord__87f0c814eb51",
        "signature": "export interface ResourceRecord__87f0c814eb51<TPayload = unknown> {\n    id: string;\n    resource: string;\n    payload: TPayload;\n    createdAt: string;\n    updatedAt: string;\n}",
        "source": "packages/farthershore-js/dist/resources/resources.d.ts#L10",
        "description": "One record of a declared resource, as owned and returned by core.",
        "references": []
      },
      {
        "name": "ResourceRequestInit__06eb38c7f26b",
        "signature": "export type ResourceRequestInit__06eb38c7f26b = RouteRequestInit__7377dee5c3ef & {\n    subjectId?: string;\n};",
        "source": "packages/farthershore-js/dist/resources/resources.d.ts#L6",
        "description": "A resource verb's options — the standard request init plus an optional\n`subjectId` for SUBJECT-scoped resources (W5.4). When set, it's forwarded as\nthe `x-fs-subject-id` header so core keys the count on that subject.",
        "references": [
          {
            "name": "RouteRequestInit__7377dee5c3ef",
            "source": "packages/farthershore-js/dist/resources/route.d.ts#L2"
          }
        ]
      },
      {
        "name": "ResourcesResource__ef6d17bbf151",
        "signature": "export interface ResourcesResource__ef6d17bbf151<TPayload = unknown> {\n    /** List this subscriber's records of the resource. */\n    list(init?: ResourceRequestInit__06eb38c7f26b): Promise<ResourceRecord__87f0c814eb51<TPayload>[]>;\n    /** Fetch one record by id. */\n    get(id: string, init?: ResourceRequestInit__06eb38c7f26b): Promise<ResourceRecord__87f0c814eb51<TPayload>>;\n    /** Create a record. Throws `LimitExceededError` (402) at the plan cap. */\n    create(payload: TPayload, init?: ResourceRequestInit__06eb38c7f26b): Promise<ResourceRecord__87f0c814eb51<TPayload>>;\n    /** Replace a record's payload. */\n    update(id: string, payload: TPayload, init?: ResourceRequestInit__06eb38c7f26b): Promise<ResourceRecord__87f0c814eb51<TPayload>>;\n    /** Delete a record (frees one unit of the quota). */\n    delete(id: string, init?: ResourceRequestInit__06eb38c7f26b): Promise<void>;\n    /** Authoritative `{ count, cap }` for this resource on the caller's\n     *  subscription (W5.2). Reads core (the system of record), so it works for\n     *  backend-managed resources the SDK can't `list()`. Signed-out / no\n     *  subscription → `{ count: 0, cap: null }`. */\n    count(init?: {\n        signal?: AbortSignal;\n        subjectId?: string;\n    }): Promise<ResourceUsage__40697d865d06>;\n}",
        "source": "packages/farthershore-js/dist/resources/resources.d.ts#L25",
        "description": "",
        "references": [
          {
            "name": "ResourceRecord__87f0c814eb51",
            "source": "packages/farthershore-js/dist/resources/resources.d.ts#L10"
          },
          {
            "name": "ResourceRequestInit__06eb38c7f26b",
            "source": "packages/farthershore-js/dist/resources/resources.d.ts#L6"
          },
          {
            "name": "ResourceUsage__40697d865d06",
            "source": "packages/farthershore-js/dist/resources/resources.d.ts#L21"
          }
        ]
      },
      {
        "name": "ResourceUsage__40697d865d06",
        "signature": "export interface ResourceUsage__40697d865d06 {\n    count: number;\n    cap: number | null;\n}",
        "source": "packages/farthershore-js/dist/resources/resources.d.ts#L21",
        "description": "The authoritative current count + cap for a resource on the caller's\nsubscription (W5.2). `count` is the system-of-record count read from core;\n`cap` is the per-plan ceiling (a number, or `null` when uncapped/unlimited).\nWorks even for Model-1 backend-managed resources the SDK can't `list()`.",
        "references": []
      },
      {
        "name": "RestoreSubscriptionResult__60ac2939c09d",
        "signature": "export interface RestoreSubscriptionResult__60ac2939c09d {\n    subscription?: unknown;\n    /** The platform's post-restore reading. `false` is the success signal; the\n     *  field is `null` only when Core's response carried no subscription state\n     *  to read it from — never guessed. */\n    cancelAtPeriodEnd: boolean | null;\n    raw: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1134",
        "description": "`POST /me/restore` — the platform performs the un-cancel: a paid sub's\nscheduled `cancel_at_period_end` is lifted on the provider, a free\nCANCELLED sub is flipped back to ACTIVE inline. Like cancel, there is no\nhosted-page hand-off — the caller gets the subscription back, and\n`cancelAtPeriodEnd` on it is what the platform read AFTER the un-cancel.\nA `false` here is the proof the notice should be gone.",
        "references": []
      },
      {
        "name": "RouteRequestInit__7377dee5c3ef",
        "signature": "export type RouteRequestInit__7377dee5c3ef = RequestInit & {\n    apiKey?: string;\n};",
        "source": "packages/farthershore-js/dist/resources/route.d.ts#L2",
        "description": "",
        "references": []
      },
      {
        "name": "RouteResource__52eafab15328",
        "signature": "export interface RouteResource__52eafab15328 {\n    /** Raw gateway call — returns the `Response` for any content type. */\n    fetch(path: string, init?: RouteRequestInit__7377dee5c3ef): Promise<Response>;\n    /** `GET path` → parsed JSON. */\n    get<T = unknown>(path: string, init?: RouteRequestInit__7377dee5c3ef): Promise<T>;\n    /** `GET path` → parsed JSON PLUS the `X-RateLimit-*` snapshot read off the\n     *  live response before it's discarded (W8.5). Also publishes the snapshot to\n     *  `useRouteRateLimit()`. */\n    getWithMeta<T = unknown>(path: string, init?: RouteRequestInit__7377dee5c3ef): Promise<RouteResponseMeta__0abf9098561d<T>>;\n    /** `POST path` with a JSON body → parsed JSON. */\n    post<T = unknown>(path: string, body?: unknown, init?: RouteRequestInit__7377dee5c3ef): Promise<T>;\n    /** `PUT path` with a JSON body → parsed JSON. */\n    put<T = unknown>(path: string, body?: unknown, init?: RouteRequestInit__7377dee5c3ef): Promise<T>;\n    /** `PATCH path` with a JSON body → parsed JSON. */\n    patch<T = unknown>(path: string, body?: unknown, init?: RouteRequestInit__7377dee5c3ef): Promise<T>;\n    /** `DELETE path` → parsed JSON (or undefined on 204). */\n    delete<T = void>(path: string, init?: RouteRequestInit__7377dee5c3ef): Promise<T>;\n}",
        "source": "packages/farthershore-js/dist/resources/route.d.ts#L15",
        "description": "",
        "references": [
          {
            "name": "RouteRequestInit__7377dee5c3ef",
            "source": "packages/farthershore-js/dist/resources/route.d.ts#L2"
          },
          {
            "name": "RouteResponseMeta__0abf9098561d",
            "source": "packages/farthershore-js/dist/resources/route.d.ts#L8"
          }
        ]
      },
      {
        "name": "RouteResponseMeta__0abf9098561d",
        "signature": "export interface RouteResponseMeta__0abf9098561d<T> {\n    data: T;\n    rateLimit: {\n        remaining: number | null;\n        resetAt: Date | null;\n    };\n}",
        "source": "packages/farthershore-js/dist/resources/route.d.ts#L8",
        "description": "A `GET` response plus the throttle snapshot read off its `X-RateLimit-*`\nheaders (W8.5). `remaining`/`resetAt` are null when the gateway didn't send\nthem. The same snapshot also updates `useRouteRateLimit()`.",
        "references": []
      },
      {
        "name": "ServiceAccount__75f27de661cf",
        "signature": "export interface ServiceAccount__75f27de661cf {\n    id: string;\n    name: string;\n    state: ServiceAccountProvisioningState__9ac900abd622;\n    requestedPermissions: string[];\n    grantedPermissions: string[];\n    createdBy: string | null;\n    approvedBy: string | null;\n    createdAt: string;\n    activatedAt: string | null;\n    revokedAt: string | null;\n    usageLimits?: ServiceAccountUsageLimitRequest__f255b800fa4e[];\n    credentialApprovals: ServiceAccountApprovalSummary__7bb90b20ec66[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L425",
        "description": "Repeatable metadata for a managed, organization-owned service account.",
        "references": [
          {
            "name": "ServiceAccountApprovalSummary__7bb90b20ec66",
            "source": "packages/farthershore-js/dist/types.d.ts#L383"
          },
          {
            "name": "ServiceAccountProvisioningState__9ac900abd622",
            "source": "packages/farthershore-js/dist/types.d.ts#L380"
          },
          {
            "name": "ServiceAccountUsageLimitRequest__f255b800fa4e",
            "source": "packages/farthershore-js/dist/types.d.ts#L399"
          }
        ]
      },
      {
        "name": "ServiceAccountApprovalOperation__d422a57b0b16",
        "signature": "export type ServiceAccountApprovalOperation__d422a57b0b16 = \"CREATE\" | \"UPDATE\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L382",
        "description": "Whether an approval creates a new account or replaces an active grant snapshot.",
        "references": []
      },
      {
        "name": "ServiceAccountApprovalResponse__03a1e6be31e0",
        "signature": "export type ServiceAccountApprovalResponse__03a1e6be31e0 = ApprovedServiceAccountCreateResponse__b73a29c4cc94 | ApprovedServiceAccountUpdateResponse__e4e8de0be760;",
        "source": "packages/farthershore-js/dist/types.d.ts#L508",
        "description": "",
        "references": [
          {
            "name": "ApprovedServiceAccountCreateResponse__b73a29c4cc94",
            "source": "packages/farthershore-js/dist/types.d.ts#L493"
          },
          {
            "name": "ApprovedServiceAccountUpdateResponse__e4e8de0be760",
            "source": "packages/farthershore-js/dist/types.d.ts#L502"
          }
        ]
      },
      {
        "name": "ServiceAccountApprovalsResource__52f0cefb9602",
        "signature": "export interface ServiceAccountApprovalsResource__52f0cefb9602 {\n    /** Approval requests this signed-in member is currently eligible to decide. */\n    list(opts?: {\n        signal?: AbortSignal;\n        limit?: number;\n        offset?: number;\n    }): Promise<OffsetPage__af8a84ff58be<PendingServiceAccountApproval__5aaaeb81c691>>;\n    /** Approve the complete request or an explicitly trimmed subset. */\n    approve(approvalId: string, input?: ApproveServiceAccountInput__db09091445e7): Promise<ServiceAccountApprovalResponse__03a1e6be31e0>;\n    /** Deny a pending request without minting or widening any credential. */\n    deny(approvalId: string): Promise<ServiceAccountDenyResponse__93ffa89effd0>;\n}",
        "source": "packages/farthershore-js/dist/resources/keys.d.ts#L37",
        "description": "",
        "references": [
          {
            "name": "ApproveServiceAccountInput__db09091445e7",
            "source": "packages/farthershore-js/dist/types.d.ts#L451"
          },
          {
            "name": "OffsetPage__af8a84ff58be",
            "source": "packages/farthershore-js/dist/types.d.ts#L535"
          },
          {
            "name": "PendingServiceAccountApproval__5aaaeb81c691",
            "source": "packages/farthershore-js/dist/types.d.ts#L521"
          },
          {
            "name": "ServiceAccountApprovalResponse__03a1e6be31e0",
            "source": "packages/farthershore-js/dist/types.d.ts#L508"
          },
          {
            "name": "ServiceAccountDenyResponse__93ffa89effd0",
            "source": "packages/farthershore-js/dist/types.d.ts#L518"
          }
        ]
      },
      {
        "name": "ServiceAccountApprovalSummary__7bb90b20ec66",
        "signature": "export interface ServiceAccountApprovalSummary__7bb90b20ec66 {\n    id: string;\n    operation: ServiceAccountApprovalOperation__d422a57b0b16;\n    requestedBy: string;\n    requestedPermissions: string[];\n    excessPermissions: string[];\n    createdAt: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L383",
        "description": "",
        "references": [
          {
            "name": "ServiceAccountApprovalOperation__d422a57b0b16",
            "source": "packages/farthershore-js/dist/types.d.ts#L382"
          }
        ]
      },
      {
        "name": "ServiceAccountCreateResponse__081d15d10c13",
        "signature": "export type ServiceAccountCreateResponse__081d15d10c13 = ActiveServiceAccountCreateResponse__b15fda647836 | PendingServiceAccountCreateResponse__75eae3a7015a;",
        "source": "packages/farthershore-js/dist/types.d.ts#L475",
        "description": "",
        "references": [
          {
            "name": "ActiveServiceAccountCreateResponse__b15fda647836",
            "source": "packages/farthershore-js/dist/types.d.ts#L465"
          },
          {
            "name": "PendingServiceAccountCreateResponse__75eae3a7015a",
            "source": "packages/farthershore-js/dist/types.d.ts#L455"
          }
        ]
      },
      {
        "name": "ServiceAccountDenyResponse__93ffa89effd0",
        "signature": "export interface ServiceAccountDenyResponse__93ffa89effd0 {\n    status: \"DENIED\";\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L518",
        "description": "",
        "references": []
      },
      {
        "name": "ServiceAccountMutationOptions__2dee3eb4c17c",
        "signature": "export interface ServiceAccountMutationOptions__2dee3eb4c17c {\n    /** Reuse this value to replay the same pending create/update request safely. */\n    idempotencyKey?: string;\n}",
        "source": "packages/farthershore-js/dist/resources/keys.d.ts#L49",
        "description": "",
        "references": []
      },
      {
        "name": "ServiceAccountProvisioningState__9ac900abd622",
        "signature": "export type ServiceAccountProvisioningState__9ac900abd622 = \"PENDING\" | \"ACTIVE\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L380",
        "description": "Durable provisioning state for an organization-owned service account.",
        "references": []
      },
      {
        "name": "ServiceAccountRotationResponse__e5e68769c407",
        "signature": "export interface ServiceAccountRotationResponse__e5e68769c407 {\n    status: \"ACTIVE\";\n    serviceAccountId: string;\n    revokedKeyId: string;\n    apiKeyId: string;\n    /** One-time replacement secret. */\n    plaintext: string;\n    grantedPermissions: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L509",
        "description": "",
        "references": []
      },
      {
        "name": "ServiceAccountsResource__abd2dd8a7d4f",
        "signature": "export interface ServiceAccountsResource__abd2dd8a7d4f {\n    /** List managed accounts, including PENDING rows with no credential material. */\n    list(opts?: {\n        signal?: AbortSignal;\n        limit?: number;\n        offset?: number;\n    }): Promise<OffsetPage__af8a84ff58be<ServiceAccount__75f27de661cf>>;\n    /** Create immediately when covered, otherwise return a strict PENDING response. */\n    create(input: CreateServiceAccountInput__30c268ab08ba, options?: ServiceAccountMutationOptions__2dee3eb4c17c): Promise<ServiceAccountCreateResponse__081d15d10c13>;\n    /** Replace the frozen grant snapshot or create a pending UPDATE request. */\n    update(serviceAccountId: string, input: UpdateServiceAccountInput__88886ec5643e, options?: ServiceAccountMutationOptions__2dee3eb4c17c): Promise<ServiceAccountUpdateResponse__e6029a12392c>;\n    /** Rotate the account credential and return the replacement secret once. */\n    rotate(serviceAccountId: string): Promise<ServiceAccountRotationResponse__e5e68769c407>;\n    /** Revoke the account and every active credential attached to it. */\n    revoke(serviceAccountId: string): Promise<void>;\n    readonly approvals: ServiceAccountApprovalsResource__52f0cefb9602;\n}",
        "source": "packages/farthershore-js/dist/resources/keys.d.ts#L53",
        "description": "",
        "references": [
          {
            "name": "CreateServiceAccountInput__30c268ab08ba",
            "source": "packages/farthershore-js/dist/types.d.ts#L441"
          },
          {
            "name": "OffsetPage__af8a84ff58be",
            "source": "packages/farthershore-js/dist/types.d.ts#L535"
          },
          {
            "name": "ServiceAccount__75f27de661cf",
            "source": "packages/farthershore-js/dist/types.d.ts#L425"
          },
          {
            "name": "ServiceAccountApprovalsResource__52f0cefb9602",
            "source": "packages/farthershore-js/dist/resources/keys.d.ts#L37"
          },
          {
            "name": "ServiceAccountCreateResponse__081d15d10c13",
            "source": "packages/farthershore-js/dist/types.d.ts#L475"
          },
          {
            "name": "ServiceAccountMutationOptions__2dee3eb4c17c",
            "source": "packages/farthershore-js/dist/resources/keys.d.ts#L49"
          },
          {
            "name": "ServiceAccountRotationResponse__e5e68769c407",
            "source": "packages/farthershore-js/dist/types.d.ts#L509"
          },
          {
            "name": "ServiceAccountUpdateResponse__e6029a12392c",
            "source": "packages/farthershore-js/dist/types.d.ts#L492"
          },
          {
            "name": "UpdateServiceAccountInput__88886ec5643e",
            "source": "packages/farthershore-js/dist/types.d.ts#L447"
          }
        ]
      },
      {
        "name": "ServiceAccountUpdateResponse__e6029a12392c",
        "signature": "export type ServiceAccountUpdateResponse__e6029a12392c = ActiveServiceAccountUpdateResponse__fe5e8ed2381b | PendingServiceAccountUpdateResponse__97b4460d1924;",
        "source": "packages/farthershore-js/dist/types.d.ts#L492",
        "description": "",
        "references": [
          {
            "name": "ActiveServiceAccountUpdateResponse__fe5e8ed2381b",
            "source": "packages/farthershore-js/dist/types.d.ts#L486"
          },
          {
            "name": "PendingServiceAccountUpdateResponse__97b4460d1924",
            "source": "packages/farthershore-js/dist/types.d.ts#L476"
          }
        ]
      },
      {
        "name": "ServiceAccountUsageLimitRequest__f255b800fa4e",
        "signature": "export type ServiceAccountUsageLimitRequest__f255b800fa4e = {\n    quantity: string;\n    limitUnits: number;\n    limitCents?: never;\n    mode: \"BLOCK\";\n    notifyAtPct?: never;\n} | {\n    quantity: string;\n    limitUnits: number;\n    limitCents?: never;\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n} | {\n    quantity: string;\n    limitUnits?: never;\n    limitCents: number;\n    mode: \"BLOCK\";\n    notifyAtPct?: never;\n} | {\n    quantity: string;\n    limitUnits?: never;\n    limitCents: number;\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L399",
        "description": "Discriminated to mirror `portalServiceAccountUsageLimitRequestSchema` exactly\n(contracts): a NOTIFY limit REQUIRES `notifyAtPct`; a BLOCK limit forbids it;\nexactly one of `limitUnits`/`limitCents` is set. This keeps the public type as\nstrict as its Zod validator — invalid mode/threshold combos are compile errors,\nnot just runtime 400s. Parity is pinned by `service-account-contract-drift.test.ts`.",
        "references": []
      },
      {
        "name": "Session__d51a47154738",
        "signature": "export interface Session__d51a47154738 {\n    authenticated: boolean;\n    subscriber: Subscriber__c8719fbb7bfa | null;\n    /** Verified browser-session identity. Present only for a server-owned test\n     * persona cookie; Clerk sessions expose their user through the Clerk bridge. */\n    authSession: PersonaAuthSession__da61c3cf64e7 | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L326",
        "description": "",
        "references": [
          {
            "name": "PersonaAuthSession__da61c3cf64e7",
            "source": "packages/farthershore-js/dist/types.d.ts#L334"
          },
          {
            "name": "Subscriber__c8719fbb7bfa",
            "source": "packages/farthershore-js/dist/types.d.ts#L315"
          }
        ]
      },
      {
        "name": "SpendCapResult__395300e78371",
        "signature": "export interface SpendCapResult__395300e78371 {\n    /** The stored monthly spend cap in cents (null when cleared). */\n    maxMonthlySpendCents: number | null;\n    /** The subscription's entitlement version after the write, when returned. */\n    entitlementVersion?: number;\n}",
        "source": "packages/farthershore-js/dist/resources/billing.d.ts#L5",
        "description": "Result of {@link BillingResource.setSpendCap}: the stored cap (echo) + the\nbumped subscription entitlement version (cache-bust signal).",
        "references": []
      },
      {
        "name": "StartOnboardingInput__af7cf0dea526",
        "signature": "export interface StartOnboardingInput__af7cf0dea526 extends Omit<SubscribeInput__62c7cb21d77a, \"compiledPlanId\"> {\n    compiledPlanId?: string;\n}",
        "source": "packages/farthershore-js/dist/resources/plans.d.ts#L27",
        "description": "Input to `startOnboarding()`. Unlike direct checkout, the plan is optional:\nomitting it asks Core to select the business's single declared zero-price\nplan. This is the safest zero-price onboarding path because a client cannot\naccidentally name a billable plan.",
        "references": [
          {
            "name": "SubscribeInput__62c7cb21d77a",
            "source": "packages/farthershore-js/dist/resources/plans.d.ts#L5"
          }
        ]
      },
      {
        "name": "SubscribeInput__62c7cb21d77a",
        "signature": "export interface SubscribeInput__62c7cb21d77a {\n    /** The plan to subscribe to — pass `plan.id`. */\n    compiledPlanId: string;\n    /** Owning org for org-owned subscriptions (forwarded as the\n     *  `organizationId` query + header). */\n    organizationId?: string | null;\n    /** Where Stripe redirects after a successful paid checkout. */\n    successUrl?: string;\n    /** Where Stripe redirects if the subscriber abandons checkout. */\n    cancelUrl?: string;\n    /** OPTIONAL price-consent echo (E2 — Managed Stripe Price Integrity): the\n     *  `offerFingerprint` from `getPlanOffers()`. When provided and the plan's\n     *  economics changed since the offer was rendered, core rejects with\n     *  409 PLAN_OFFER_CHANGED (typed as `FartherShorePlanOfferChangedError`) and\n     *  creates NO session — catch it, refetch offers, and re-present the price.\n     *  Omit for today's unguarded behavior. */\n    offerFingerprint?: string;\n}",
        "source": "packages/farthershore-js/dist/resources/plans.d.ts#L5",
        "description": "Input to `subscribe()`. `compiledPlanId` is the `Plan.id` (immutable\nCompiledPlan pointer).",
        "references": []
      },
      {
        "name": "Subscriber__c8719fbb7bfa",
        "signature": "export interface Subscriber__c8719fbb7bfa {\n    /** Lifecycle status (e.g. ONBOARDING | ACTIVE | SUSPENDED). */\n    status: string | null;\n    /** Denormalized plan key for display. */\n    planKey: string | null;\n    /** Immutable CompiledPlan id currently active for this subscriber. */\n    compiledPlanId: string | null;\n    /** True only after the selected environment's gateway has the exact active\n     * subscription projection. */\n    gatewayReady?: boolean;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L315",
        "description": "",
        "references": []
      },
      {
        "name": "SubscriberActivePromo__160abba5e892",
        "signature": "export interface SubscriberActivePromo__160abba5e892 {\n    id: string;\n    code: string;\n    kind: PromoCodeKind__c6690a5a680c;\n    /** Discount magnitude (percent or cents, per `kind`), or null/absent. */\n    amount?: number | null;\n    /** How many billing periods the promo applies for. */\n    durationMonths: number;\n    /** ISO timestamp the promo stops applying, or null. */\n    activeUntil?: string | null;\n    /** ISO timestamp the promo was applied, or null. */\n    appliedAt?: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L815",
        "description": "An active promotional code applied to a subscriber. Mirrors core's\n`PortalSubscriberContext.subscriber.activePromo`.",
        "references": [
          {
            "name": "PromoCodeKind__c6690a5a680c",
            "source": "packages/farthershore-js/dist/types.d.ts#L812"
          }
        ]
      },
      {
        "name": "SubscriberContext__86c582775b78",
        "signature": "export interface SubscriberContext__86c582775b78 {\n    subscriber: SubscriberDetail__3358181c0560 | null;\n    availablePlans: Plan__3a8348415fe9[];\n    /**\n     * E1 — the subscriber's PINNED plan, resolved server-side from the\n     * subscription's pinned CompiledPlan version (NOT the catalog head — a\n     * pinned older version may not appear in `availablePlans` at all).\n     *\n     * Tri-state for old-Core back-compat:\n     *   - `Plan`      — resolved pinned plan.\n     *   - `null`      — Core resolved it: there IS no pinned plan (no\n     *                   subscription). Do NOT fall back to guessing.\n     *   - `undefined` — the wire field was ABSENT (pre-E1 Core). Only here may\n     *                   a consumer fall back to matching `availablePlans` by\n     *                   `subscriber.compiledPlanId` (deprecated path).\n     */\n    currentPlan?: Plan__3a8348415fe9 | null;\n    /** Managed-RBAC product-role keys assigned to the CALLER within the org\n     *  (FAR-698/FAR-700). Server-resolved on `GET /me` — the same row-backed\n     *  source the gateway-token mint uses; the SDK never decodes tokens.\n     *  Empty for pre-RBAC responses. */\n    roles: string[];\n    /** The caller's resolved permission strings (`<subject>:read|write`\n     *  grammar). `[\"*\"]` means Managed RBAC is off or the caller is an OWNER;\n     *  personal-org members receive the same resolved permission sets as team-org\n     *  members. Client-side gating over these is UX ONLY — the gateway's\n     *  `permission` constraint is the security boundary. */\n    permissions: string[];\n    /** Reviewed product permissions explicitly denied by the subscriber's\n     * effective roles. Present on current Core responses. */\n    deniedPermissions?: string[];\n    /** Current product permissions that were not reviewed by the effective\n     * roles and therefore inherit the safe product-evolution default of allow.\n     * Platform/account permissions are never included. */\n    unassignedProductPermissions?: string[];\n    /** Per-subscriber ComponentAccessPolicy override rows (Permissions Kernel,\n     *  Wave 5) — `{componentKey, requiredPermission, gateMode}` as core emits\n     *  them. Consumed by the SDK's component-policy resolver; `[]` when the\n     *  subscriber has no overrides (or on older responses). */\n    componentAccessPolicies: ComponentAccessPolicyRow__60d2c40fe86e[];\n    /** Current legal acceptance state for this subscriber/org, when served by\n     *  Core. Absent on older responses. */\n    legalConsent?: LegalConsentStatus__2c5f3ab016cd;\n    raw: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L897",
        "description": "Full `GET /me` context: the subscriber (null = signed-in user has no\nsubscriber record for the selected org → onboarding) plus the\neligibility-scoped plan list (NOT identical to the public catalog).",
        "references": [
          {
            "name": "ComponentAccessPolicyRow__60d2c40fe86e",
            "source": "packages/farthershore-js/dist/types.d.ts#L945"
          },
          {
            "name": "LegalConsentStatus__2c5f3ab016cd",
            "source": "packages/farthershore-js/dist/types.d.ts#L76"
          },
          {
            "name": "Plan__3a8348415fe9",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          },
          {
            "name": "SubscriberDetail__3358181c0560",
            "source": "packages/farthershore-js/dist/types.d.ts#L859"
          }
        ]
      },
      {
        "name": "SubscriberDetail__3358181c0560",
        "signature": "export interface SubscriberDetail__3358181c0560 {\n    id?: string;\n    status: string | null;\n    planKey: string | null;\n    compiledPlanId: string | null;\n    /** True only after the selected environment's gateway has the exact active\n     * subscription projection. */\n    gatewayReady?: boolean;\n    /** Resource limits on the subscriber's pinned plan, not the latest catalog. */\n    resourceLimits?: Record<string, number>;\n    /** Per-dimension meter map (`dimension → unit`) on the subscriber's PINNED\n     *  compiled plan — the billing shape the subscriber is actually on. */\n    dimensions?: Record<string, number>;\n    /** The ordered list of meter dimensions the usage tab should display,\n     *  authored by the pinned plan. `rules[].d` indexes into this array. */\n    displayDims?: string[];\n    /** Pinned-plan rate-limit / quota allowances (the source of truth for\n     *  included quotas — see {@link SubscriberPinnedRule}). */\n    rules?: SubscriberPinnedRule__7b0d2ee36c4a[];\n    /** Stripe-driven lifecycle (e.g. ACTIVE | TRIALING | PAST_DUE | CANCELLED). */\n    subscriptionLifecycle?: string | null;\n    /** Stripe-synced trial end (ISO) — drives the trial banner countdown. */\n    trialEndsAt?: string | null;\n    /** True when a paid cancel is scheduled for period end (\"Renew\" un-schedules). */\n    cancelAtPeriodEnd?: boolean | null;\n    /** A scheduled plan transition (downgrades apply at period end). */\n    scheduledTransition?: SubscriberScheduledTransition__cd8a41b51ac1 | null;\n    /** An active promotional code applied to the subscription, when present. */\n    activePromo?: SubscriberActivePromo__160abba5e892 | null;\n    /** P-SPENDCAP-READ (W6.4) — the subscriber-set monthly spend cap, in cents,\n     *  or null when none is set. STORED-not-ENFORCED today (held in\n     *  `Subscription.customMetadata`, pending the rate-limit migration). */\n    maxMonthlySpendCents?: number | null;\n    [k: string]: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L859",
        "description": "Rich subscriber detail from `GET /me` — superset of {@link Subscriber} with\nthe lifecycle/billing fields the account pages render. Extra Core fields ride\nalong untyped.",
        "references": [
          {
            "name": "SubscriberActivePromo__160abba5e892",
            "source": "packages/farthershore-js/dist/types.d.ts#L815"
          },
          {
            "name": "SubscriberPinnedRule__7b0d2ee36c4a",
            "source": "packages/farthershore-js/dist/types.d.ts#L848"
          },
          {
            "name": "SubscriberScheduledTransition__cd8a41b51ac1",
            "source": "packages/farthershore-js/dist/types.d.ts#L832"
          }
        ]
      },
      {
        "name": "SubscribeResult__4b2d9557cede",
        "signature": "export interface SubscribeResult__4b2d9557cede {\n    /** Stripe Checkout URL (paid plans only). Undefined for free activations. */\n    url?: string;\n    /** The activated subscriber (free plans only). Undefined for paid checkout. */\n    subscriber?: {\n        id: string;\n        businessId?: string | null;\n        status: string;\n    };\n    /** Server-side checkout-attempt id, when returned. */\n    checkoutAttemptId?: string;\n    /** Best-effort initial API key minted on free-plan activation, when present. */\n    autoApiKey?: string;\n    /** Set when the subscriber activated but the first-key mint FAILED — surfaced\n     *  (not swallowed) so the caller can prompt a manual key creation. */\n    autoApiKeyError?: AutoApiKeyError__bd378e9396dc;\n}",
        "source": "packages/farthershore-js/dist/resources/plans.d.ts#L44",
        "description": "Result of `subscribe()`. For a PAID plan, `url` is the Stripe Checkout URL to\nnavigate to. For a FREE plan, there is no `url` — the subscriber was\nactivated directly and `subscriber` describes the new row.",
        "references": [
          {
            "name": "AutoApiKeyError__bd378e9396dc",
            "source": "packages/farthershore-js/dist/types.d.ts#L1097"
          }
        ]
      },
      {
        "name": "SubscriberPinnedRule__7b0d2ee36c4a",
        "signature": "export interface SubscriberPinnedRule__7b0d2ee36c4a {\n    /** Dimension index into `displayDims`. */\n    d: number;\n    /** Window length in seconds (a 30-day month is 2592000). */\n    w: number;\n    /** Capacity (the included allowance for the window). */\n    c: number;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L848",
        "description": "One pinned-plan display rule from `GET /me` (`subscriber.rules`). A\nrate-limit / quota allowance in the compiled-entitlement compact form:\n`d` = dimension index, `w` = window seconds, `c` = capacity. The usage card\nreads the `month`-window (`w === 2592000`) rules as the included quotas the\nsubscriber is ACTUALLY billed under — not the latest catalog meter list,\nwhich may have drifted from the subscriber's pinned plan.",
        "references": []
      },
      {
        "name": "SubscriberScheduledTransition__cd8a41b51ac1",
        "signature": "export interface SubscriberScheduledTransition__cd8a41b51ac1 {\n    compiledPlanId: string | null;\n    planName: string | null;\n    planType: string | null;\n    /** ISO timestamp the transition takes effect. */\n    effectiveAt: string;\n    /** Movement direction (`CANCEL` | `UPGRADE` | `DOWNGRADE` | `SIDEGRADE`),\n     *  open to producer-side additions. */\n    kind: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L832",
        "description": "A scheduled plan transition on a subscriber. Mirrors core's\n`PortalSubscriberContext.subscriber.scheduledTransition` — richer than\n{@link SubscriptionScheduledTransition} (carries the resolved plan name +\ntype).",
        "references": []
      },
      {
        "name": "Subscription__3e996fafa8e7",
        "signature": "export interface Subscription__3e996fafa8e7 {\n    id: string;\n    /** Display lifecycle status (e.g. ACTIVE | TRIALING | PAST_DUE). Falls back\n     *  across `status` / `lifecycle` on the wire. */\n    status: string;\n    planKey: string | null;\n    planName: string | null;\n    /** Owning product id, or null when absent on a lean DTO. */\n    businessId: string | null;\n    /** Immutable `CompiledPlan.id` currently active, or null. */\n    compiledPlanId: string | null;\n    /** Richer lifecycle string straight off the row (may equal `status`). */\n    lifecycle: string | null;\n    /** Payment health (`ok` | `past_due` | `incomplete` | …), or null when the\n     *  DTO doesn't carry it (free subs). */\n    paymentHealth: string | null;\n    /** ISO start of the current billing period, or null. */\n    currentPeriodStart: string | null;\n    /** ISO end of the current billing period, or null. */\n    currentPeriodEnd: string | null;\n    /** True when a paid cancel is scheduled for period end. */\n    cancelAtPeriodEnd: boolean;\n    /** ISO trial end — drives the trial countdown. */\n    trialEndsAt: string | null;\n    /** ISO timestamp the subscription was canceled, or null. */\n    canceledAt: string | null;\n    /** A scheduled plan transition, or null when none is pending. */\n    scheduledTransition: SubscriptionScheduledTransition__57a7b2f83ca5 | null;\n    /** Whether the subscriber has a Stripe customer (can open the billing\n     *  portal). Free subs that never touched Stripe are `false`. */\n    canManageInStripe: boolean;\n    /**\n     * Whether there is actually something here to cancel — SERVER-DECIDED.\n     *\n     * A subscription on a `free`-kind plan has no paid, Stripe-managed\n     * subscription behind it, so \"cancel\" has no meaning. The client cannot work\n     * this out on its own (the portal DTO always carries a real subscription id,\n     * so \"nothing to cancel\" looks identical to a lean wire body), which is why\n     * core answers it.\n     *\n     * `null` means the server did not say — treated as CANCELLABLE so an older\n     * core never strands a paying subscriber with no way to cancel.\n     */\n    cancellable: boolean | null;\n    /** The full platform subscription DTO (large + evolving) for advanced reads. */\n    raw: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L739",
        "description": "The consumer's current subscription for this product. Mirrors core's\n`PortalSubscriptionDto` (lifecycle + billing state + scheduled transition)\nmapped to the SDK's camelCase domain convention. The widened fields degrade\nto safe defaults when the wire DTO is lean (`null` / `false`).",
        "references": [
          {
            "name": "SubscriptionScheduledTransition__57a7b2f83ca5",
            "source": "packages/farthershore-js/dist/types.d.ts#L726"
          }
        ]
      },
      {
        "name": "SubscriptionContext__55ff0ed7dfb5",
        "signature": "export interface SubscriptionContext__55ff0ed7dfb5 {\n    organizationId: string;\n    /** Org display name — matches core's wire field (`name`, NOT\n     *  `organizationName`; see apps/core/src/routes/portal-customer/shared.ts). */\n    name?: string | null;\n    isDefault?: boolean;\n    /** Existing subscriber row for this business/org pair. A non-null value\n     * means this workspace already owns customer state for the product. */\n    subscriberId?: string | null;\n    /** Authoritative active-plan entitlement for the selected environment. */\n    hasEntitlement?: boolean;\n    [k: string]: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L955",
        "description": "One org through which the user holds a subscription to this product.",
        "references": []
      },
      {
        "name": "SubscriptionContextsResult__fe44e57e7d49",
        "signature": "export interface SubscriptionContextsResult__fe44e57e7d49 {\n    contexts: SubscriptionContext__55ff0ed7dfb5[];\n    defaultOrganizationId: string;\n    selectedOrganizationId: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L968",
        "description": "",
        "references": [
          {
            "name": "SubscriptionContext__55ff0ed7dfb5",
            "source": "packages/farthershore-js/dist/types.d.ts#L955"
          }
        ]
      },
      {
        "name": "SubscriptionScheduledTransition__57a7b2f83ca5",
        "signature": "export interface SubscriptionScheduledTransition__57a7b2f83ca5 {\n    /** Immutable `CompiledPlan.id` the subscription moves to, or null. */\n    compiledPlanId: string | null;\n    /** ISO timestamp the transition takes effect, or null. */\n    effectiveAt: string | null;\n    /** Movement direction (`CANCEL` | `UPGRADE` | `DOWNGRADE` | `SIDEGRADE`),\n     *  open to producer-side additions. */\n    kind: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L726",
        "description": "A scheduled plan transition on a subscription (downgrades apply at period\nend). Mirrors core's `PortalSubscriptionDto.scheduledTransition`.",
        "references": []
      },
      {
        "name": "TeamInvitation__f9f120bf906d",
        "signature": "export interface TeamInvitation__f9f120bf906d {\n    id: string;\n    email: string;\n    role: TeamRole__5a6deea9bec8;\n    /** Managed-RBAC product roles granted on accept. */\n    businessRoleKeys: string[];\n    status: string;\n    invitedByExternalId?: string | null;\n    expiresAt: string;\n    createdAt: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L999",
        "description": "A pending subscriber-team invitation (`GET|POST /me/team/invites`).",
        "references": [
          {
            "name": "TeamRole__5a6deea9bec8",
            "source": "packages/farthershore-js/dist/types.d.ts#L973"
          }
        ]
      },
      {
        "name": "TeamInvitationAccepted__11c705c559ac",
        "signature": "export interface TeamInvitationAccepted__11c705c559ac {\n    membershipId: string;\n    role: TeamRole__5a6deea9bec8;\n    businessRoleKeys: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1017",
        "description": "Result of accepting an invitation.",
        "references": [
          {
            "name": "TeamRole__5a6deea9bec8",
            "source": "packages/farthershore-js/dist/types.d.ts#L973"
          }
        ]
      },
      {
        "name": "TeamInvitationCreated__c157ef151993",
        "signature": "export interface TeamInvitationCreated__c157ef151993 extends TeamInvitation__f9f120bf906d {\n    token: string;\n    emailSent: boolean;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1012",
        "description": "The one-time create response: the invitation plus the raw token (delivered\nby email; surfaced here once for the off-app / no-provider path).",
        "references": [
          {
            "name": "TeamInvitation__f9f120bf906d",
            "source": "packages/farthershore-js/dist/types.d.ts#L999"
          }
        ]
      },
      {
        "name": "TeamListResult__85d0b172007d",
        "signature": "export interface TeamListResult__85d0b172007d {\n    ok: boolean;\n    members: TeamMember__4110e8306e32[];\n    /** The org's assignable Managed-RBAC role list (FAR-698) — what the\n     *  per-member role multi-select offers. Empty when RBAC is unused. */\n    availableRoles?: RbacRoleSummary__2161df852611[];\n    error?: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L990",
        "description": "Team read result — `ok:false` (with `error`) drives the read-only banner.",
        "references": [
          {
            "name": "RbacRoleSummary__2161df852611",
            "source": "packages/farthershore-js/dist/types.d.ts#L1023"
          },
          {
            "name": "TeamMember__4110e8306e32",
            "source": "packages/farthershore-js/dist/types.d.ts#L974"
          }
        ]
      },
      {
        "name": "TeamMember__4110e8306e32",
        "signature": "export interface TeamMember__4110e8306e32 {\n    id: string;\n    userExternalId: string;\n    role: TeamRole__5a6deea9bec8;\n    /** Managed-RBAC product-role keys assigned to this member (FAR-698).\n     *  Absent on pre-RBAC responses. */\n    businessRoleKeys?: string[];\n    /** Assigned keys whose role row no longer exists (deleted roles leave\n     *  assignments in place — resolution ignores them). Drives the portal's\n     *  stale-role warning. */\n    staleRoleKeys?: string[];\n    createdAt?: string;\n    updatedAt?: string;\n    [k: string]: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L974",
        "description": "",
        "references": [
          {
            "name": "TeamRole__5a6deea9bec8",
            "source": "packages/farthershore-js/dist/types.d.ts#L973"
          }
        ]
      },
      {
        "name": "TeamResource__b9e413854377",
        "signature": "export interface TeamResource__b9e413854377 {\n    /** Team members on the current subscription. A failed read surfaces\n     *  `{ ok:false, error }` (drives the SSR portal's read-only banner) — NOT a\n     *  silent empty list. */\n    list(opts?: {\n        signal?: AbortSignal;\n    }): Promise<TeamListResult__85d0b172007d>;\n    /**\n     * Track T2 — subscriber-team invitations. Managers (OWNER/ADMIN) invite by\n     * email; the invitee accepts with the emailed token. Each method THROWS the\n     * typed `FartherShoreApiError` on validation/authz failure.\n     */\n    invites: {\n        /** Pending invitations (OWNER/ADMIN). */\n        list(opts?: {\n            signal?: AbortSignal;\n        }): Promise<TeamInvitation__f9f120bf906d[]>;\n        /** Create an invitation. `role` defaults to VIEWER; `businessRoleKeys` must\n         *  be a subset of the caller's own permissions (403 otherwise). Returns the\n         *  invitation plus the one-time raw token. */\n        create(input: {\n            email: string;\n            role?: TeamRole__5a6deea9bec8;\n            businessRoleKeys?: string[];\n        }): Promise<TeamInvitationCreated__c157ef151993>;\n        /** Revoke a pending invitation. */\n        revoke(invitationId: string): Promise<void>;\n        /** Accept an invitation with its token. The signed-in user's email must\n         *  match the invite (403 mismatch; 409 expired/already-used). */\n        accept(token: string): Promise<TeamInvitationAccepted__11c705c559ac>;\n    };\n    updateRole(membershipId: string, role: TeamRole__5a6deea9bec8): Promise<TeamMember__4110e8306e32>;\n    remove(membershipId: string): Promise<void>;\n    /**\n     * Set-replace a member's Managed-RBAC product-role assignment (FAR-698):\n     * the given list becomes the member's full assignment; `[]` clears it.\n     * Every key must reference an existing role. Throws the typed\n     * `FartherShoreApiError` on validation/authz failures.\n     * Client-side role gating is UX only; the gateway's `permission`\n     * constraint is the security boundary.\n     */\n    assignRoles(membershipId: string, roles: string[]): Promise<TeamMember__4110e8306e32>;\n}",
        "source": "packages/farthershore-js/dist/resources/account.d.ts#L13",
        "description": "",
        "references": [
          {
            "name": "TeamInvitation__f9f120bf906d",
            "source": "packages/farthershore-js/dist/types.d.ts#L999"
          },
          {
            "name": "TeamInvitationAccepted__11c705c559ac",
            "source": "packages/farthershore-js/dist/types.d.ts#L1017"
          },
          {
            "name": "TeamInvitationCreated__c157ef151993",
            "source": "packages/farthershore-js/dist/types.d.ts#L1012"
          },
          {
            "name": "TeamListResult__85d0b172007d",
            "source": "packages/farthershore-js/dist/types.d.ts#L990"
          },
          {
            "name": "TeamMember__4110e8306e32",
            "source": "packages/farthershore-js/dist/types.d.ts#L974"
          },
          {
            "name": "TeamRole__5a6deea9bec8",
            "source": "packages/farthershore-js/dist/types.d.ts#L973"
          }
        ]
      },
      {
        "name": "TeamRole__5a6deea9bec8",
        "signature": "export type TeamRole__5a6deea9bec8 = \"OWNER\" | \"ADMIN\" | \"VIEWER\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L973",
        "description": "",
        "references": []
      },
      {
        "name": "TokenProvider__40095f0da8e4",
        "signature": "export type TokenProvider__40095f0da8e4 = () => string | null | undefined | Promise<string | null | undefined>;",
        "source": "packages/farthershore-js/dist/config.d.ts#L80",
        "description": "Returns the current session bearer token (Clerk session JWT or persona JWT),\nor null/undefined when signed out. May be async (e.g. Clerk's getToken).",
        "references": []
      },
      {
        "name": "TransparentBillPreview__bd44f368bc40",
        "signature": "export interface TransparentBillPreview__bd44f368bc40 {\n    currency: string;\n    disclosure: \"transparent\";\n    /** The plan's recurring fee, in cents. */\n    recurringFeeCents: number;\n    /** Per-rating-window engine totals. */\n    windows: BillPreviewWindow__ebfec15d43d1[];\n    totals: {\n        /** Nanodollars, decimal strings (null = unavailable). */\n        ratedNanos: NanosAmount__f9c1e22d3cbe;\n        fundedNanos: NanosAmount__f9c1e22d3cbe;\n        receivableNanos: NanosAmount__f9c1e22d3cbe;\n    };\n    allowances: BillPreviewAllowance__eba9c1df99be[];\n    /** All-zero counts mean `totals` IS the whole bill. */\n    usageRating: BillPreviewUsageRating__fb184ad4d633;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1257",
        "description": "",
        "references": [
          {
            "name": "BillPreviewAllowance__eba9c1df99be",
            "source": "packages/farthershore-js/dist/types.d.ts#L1198"
          },
          {
            "name": "BillPreviewUsageRating__fb184ad4d633",
            "source": "packages/farthershore-js/dist/types.d.ts#L1251"
          },
          {
            "name": "BillPreviewWindow__ebfec15d43d1",
            "source": "packages/farthershore-js/dist/types.d.ts#L1186"
          },
          {
            "name": "NanosAmount__f9c1e22d3cbe",
            "source": "packages/farthershore-js/dist/types.d.ts#L1179"
          }
        ]
      },
      {
        "name": "UpdateServiceAccountInput__88886ec5643e",
        "signature": "export interface UpdateServiceAccountInput__88886ec5643e {\n    requestedPermissions?: NonEmptyPermissionList__ca911cbb6fa0;\n    usageLimit?: ServiceAccountUsageLimitRequest__f255b800fa4e | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L447",
        "description": "",
        "references": [
          {
            "name": "NonEmptyPermissionList__ca911cbb6fa0",
            "source": "packages/farthershore-js/dist/types.d.ts#L440"
          },
          {
            "name": "ServiceAccountUsageLimitRequest__f255b800fa4e",
            "source": "packages/farthershore-js/dist/types.d.ts#L399"
          }
        ]
      },
      {
        "name": "UpdateUsageLimitInput__eb59c932012e",
        "signature": "export type UpdateUsageLimitInput__eb59c932012e = (UsageLimitUpdateValue__e8f19d3e563b & UsageLimitUpdateMode__0a6925ca669e) | (UsageLimitNoUpdateValue__cd3ce2b61e4f & UsageLimitExplicitUpdateMode__577df72501b7) | (UsageLimitNoUpdateValue__cd3ce2b61e4f & {\n    mode?: never;\n    notifyAtPct: number | null;\n});",
        "source": "packages/farthershore-js/dist/types.d.ts#L637",
        "description": "Strict PUT body. Scope, subject, and quantity are immutable; at least one\nvalue or mode/threshold field is required.",
        "references": [
          {
            "name": "UsageLimitExplicitUpdateMode__577df72501b7",
            "source": "packages/farthershore-js/dist/types.d.ts#L628"
          },
          {
            "name": "UsageLimitNoUpdateValue__cd3ce2b61e4f",
            "source": "packages/farthershore-js/dist/types.d.ts#L614"
          },
          {
            "name": "UsageLimitUpdateMode__0a6925ca669e",
            "source": "packages/farthershore-js/dist/types.d.ts#L618"
          },
          {
            "name": "UsageLimitUpdateValue__e8f19d3e563b",
            "source": "packages/farthershore-js/dist/types.d.ts#L607"
          }
        ]
      },
      {
        "name": "USAGE_LIMIT_STRATEGIES__42e6020ce1f4",
        "signature": "declare const USAGE_LIMIT_STRATEGIES__42e6020ce1f4: readonly [\"fixed_window\", \"sliding_window\"];",
        "source": "packages/farthershore-js/dist/types.d.ts#L553",
        "description": "",
        "references": []
      },
      {
        "name": "USAGE_TRAFFIC_CLASSES__3e7da6994f34",
        "signature": "declare const USAGE_TRAFFIC_CLASSES__3e7da6994f34: readonly [\"customer_operation\", \"control_plane\", \"admin_internal\", \"background_job\", \"webhook\", \"healthcheck\", \"unclassified\"];",
        "source": "packages/farthershore-js/dist/types.d.ts#L650",
        "description": "",
        "references": []
      },
      {
        "name": "UsageBillingBasis__f1af1792f9ef",
        "signature": "export type UsageBillingBasis__f1af1792f9ef = \"requests\" | \"usage\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L649",
        "description": "Whether usage is billed as a pure request COUNT or weighted USAGE. Drives the\nmeter label (\"Requests\" vs \"Usage\"); computed server-side.",
        "references": []
      },
      {
        "name": "UsageChargeableOutcomes__7192cca0f62f",
        "signature": "export type UsageChargeableOutcomes__7192cca0f62f = \"success_only\" | \"success_and_partial\" | \"attempted\" | \"trusted_actual_usage_only\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L654",
        "description": "",
        "references": []
      },
      {
        "name": "UsageEvent__0652cabf737c",
        "signature": "export interface UsageEvent__0652cabf737c {\n    id: string;\n    timestamp: string;\n    operation: string;\n    apiKeyPrefix: string | null;\n    statusCode: number | null;\n    status: \"success\" | \"error\";\n    /** Event kind (e.g. \"api\"); shown as the row Type. */\n    type: string | null;\n    latencyMs: number | null;\n    /** Canonical per-event meter values, keyed by product-declared meter. */\n    dimensions: UsageEventDimensions__f3dde72e4b29;\n    /** Compatibility aliases for common legacy portal displays. */\n    requests: number | null;\n    tokens: number | null;\n    /** Advisory UsagePolicy state confirmed or relayed by the gateway/core. The\n     *  frontend decides nothing from this; it is only for rendering stale-tolerant\n     *  labels, cooldowns, and prompts. */\n    usagePolicy?: UsagePolicyAdvisory__0000f21c4f54;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L679",
        "description": "",
        "references": [
          {
            "name": "UsageEventDimensions__f3dde72e4b29",
            "source": "packages/farthershore-js/dist/types.d.ts#L646"
          },
          {
            "name": "UsagePolicyAdvisory__0000f21c4f54",
            "source": "packages/farthershore-js/dist/types.d.ts#L655"
          }
        ]
      },
      {
        "name": "UsageEventDimensions__f3dde72e4b29",
        "signature": "export type UsageEventDimensions__f3dde72e4b29 = Record<string, number | null>;",
        "source": "packages/farthershore-js/dist/types.d.ts#L646",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimit__ab648bdf9611",
        "signature": "export type UsageLimit__ab648bdf9611 = UsageLimitSubject__9eba54806aaa & UsageLimitValue__4ae5aa5bc7c5 & {\n    id: string;\n    quantity: string;\n    mode: UsageLimitMode__a43840c0d8cf;\n    period: \"BILLING_PERIOD\";\n    /** Present only for NOTIFY rows. */\n    notifyAtPct?: number;\n    ceiling: UsageLimitCeiling__6c51e5a840f6;\n    /** Present when the edge accounts this limit on a non-default window. */\n    effectiveWindow?: UsageLimitEffectiveWindow__87a0c7ebed46;\n    createdBy: string | null;\n    createdAt: string;\n    updatedAt: string;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L580",
        "description": "",
        "references": [
          {
            "name": "UsageLimitCeiling__6c51e5a840f6",
            "source": "packages/farthershore-js/dist/types.d.ts#L549"
          },
          {
            "name": "UsageLimitEffectiveWindow__87a0c7ebed46",
            "source": "packages/farthershore-js/dist/types.d.ts#L559"
          },
          {
            "name": "UsageLimitMode__a43840c0d8cf",
            "source": "packages/farthershore-js/dist/types.d.ts#L548"
          },
          {
            "name": "UsageLimitSubject__9eba54806aaa",
            "source": "packages/farthershore-js/dist/types.d.ts#L570"
          },
          {
            "name": "UsageLimitValue__4ae5aa5bc7c5",
            "source": "packages/farthershore-js/dist/types.d.ts#L563"
          }
        ]
      },
      {
        "name": "UsageLimitCeiling__6c51e5a840f6",
        "signature": "export interface UsageLimitCeiling__6c51e5a840f6 {\n    limitUnits?: number;\n    limitCents?: number;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L549",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitCreateMode__f16ef2d50497",
        "signature": "type UsageLimitCreateMode__f16ef2d50497 = {\n    mode: \"BLOCK\";\n    notifyAtPct?: never;\n} | {\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L595",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitDeleteResult__734b143ab2a2",
        "signature": "export interface UsageLimitDeleteResult__734b143ab2a2 {\n    id: string;\n    deleted: true;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L641",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitEffectiveWindow__87a0c7ebed46",
        "signature": "export interface UsageLimitEffectiveWindow__87a0c7ebed46 {\n    strategy: UsageLimitStrategy__119d691e431d;\n    periodSeconds: number;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L559",
        "description": "READ-ONLY: how the limit is actually accounted at the edge. Builder-owned\n(inherited from the plan's own rule for the dimension); a `sliding_window`\nmakes the ceiling a rolling horizon of the period's length instead of one\nthat resets at the period boundary. Never writable by the subscriber.",
        "references": [
          {
            "name": "UsageLimitStrategy__119d691e431d",
            "source": "packages/farthershore-js/dist/types.d.ts#L554"
          }
        ]
      },
      {
        "name": "UsageLimitExplicitUpdateMode__577df72501b7",
        "signature": "type UsageLimitExplicitUpdateMode__577df72501b7 = {\n    mode: \"BLOCK\";\n    notifyAtPct?: null;\n} | {\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L628",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitListResponse__2eeb76f22fde",
        "signature": "export type UsageLimitListResponse__2eeb76f22fde = OffsetPage__af8a84ff58be<UsageLimit__ab648bdf9611>;",
        "source": "packages/farthershore-js/dist/types.d.ts#L594",
        "description": "",
        "references": [
          {
            "name": "OffsetPage__af8a84ff58be",
            "source": "packages/farthershore-js/dist/types.d.ts#L535"
          },
          {
            "name": "UsageLimit__ab648bdf9611",
            "source": "packages/farthershore-js/dist/types.d.ts#L580"
          }
        ]
      },
      {
        "name": "UsageLimitMode__a43840c0d8cf",
        "signature": "export type UsageLimitMode__a43840c0d8cf = \"BLOCK\" | \"NOTIFY\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L548",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitNoUpdateValue__cd3ce2b61e4f",
        "signature": "type UsageLimitNoUpdateValue__cd3ce2b61e4f = {\n    limitUnits?: never;\n    limitCents?: never;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L614",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitProfile__4ac9b6a9c466",
        "signature": "export type UsageLimitProfile__4ac9b6a9c466 = \"customer_usage\" | \"business_capacity\" | \"control_plane\" | \"admin_internal\" | \"platform_abuse_only\" | \"healthcheck\" | \"none\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L653",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitsResource__2b1e05e6bcda",
        "signature": "export interface UsageLimitsResource__2b1e05e6bcda {\n    /** List the current subscriber organization's visible per-actor limits.\n     *  `options.signal` is accepted for source compatibility but does not cancel\n     *  the shared cached fetch; the cache owns the request lifecycle. */\n    list(options?: {\n        signal?: AbortSignal;\n        limit?: number;\n        offset?: number;\n    }): Promise<UsageLimitListResponse__2eeb76f22fde>;\n    /** Create a subscriber-authored usage limit. */\n    create(input: CreateUsageLimitInput__0aee95b69b13): Promise<UsageLimit__ab648bdf9611>;\n    /** Update mutable value, mode, or threshold fields. */\n    update(limitId: string, input: UpdateUsageLimitInput__eb59c932012e): Promise<UsageLimit__ab648bdf9611>;\n    /** Permanently remove a subscriber-authored usage limit. */\n    delete(limitId: string): Promise<UsageLimitDeleteResult__734b143ab2a2>;\n}",
        "source": "packages/farthershore-js/dist/resources/usage-limits.d.ts#L3",
        "description": "",
        "references": [
          {
            "name": "CreateUsageLimitInput__0aee95b69b13",
            "source": "packages/farthershore-js/dist/types.d.ts#L604"
          },
          {
            "name": "UpdateUsageLimitInput__eb59c932012e",
            "source": "packages/farthershore-js/dist/types.d.ts#L637"
          },
          {
            "name": "UsageLimit__ab648bdf9611",
            "source": "packages/farthershore-js/dist/types.d.ts#L580"
          },
          {
            "name": "UsageLimitDeleteResult__734b143ab2a2",
            "source": "packages/farthershore-js/dist/types.d.ts#L641"
          },
          {
            "name": "UsageLimitListResponse__2eeb76f22fde",
            "source": "packages/farthershore-js/dist/types.d.ts#L594"
          }
        ]
      },
      {
        "name": "UsageLimitStrategy__119d691e431d",
        "signature": "export type UsageLimitStrategy__119d691e431d = (typeof USAGE_LIMIT_STRATEGIES__42e6020ce1f4)[number];",
        "source": "packages/farthershore-js/dist/types.d.ts#L554",
        "description": "",
        "references": [
          {
            "name": "USAGE_LIMIT_STRATEGIES__42e6020ce1f4",
            "source": "packages/farthershore-js/dist/types.d.ts#L553"
          }
        ]
      },
      {
        "name": "UsageLimitSubject__9eba54806aaa",
        "signature": "export type UsageLimitSubject__9eba54806aaa = {\n    scope: \"ORG\";\n    subjectId?: never;\n} | {\n    scope: \"MEMBER\";\n    subjectId: string;\n} | {\n    scope: \"SERVICE_ACCOUNT\";\n    subjectId: string;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L570",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitUpdateMode__0a6925ca669e",
        "signature": "type UsageLimitUpdateMode__0a6925ca669e = {\n    mode?: never;\n    notifyAtPct?: number | null;\n} | {\n    mode: \"BLOCK\";\n    notifyAtPct?: null;\n} | {\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L618",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitUpdateValue__e8f19d3e563b",
        "signature": "type UsageLimitUpdateValue__e8f19d3e563b = {\n    limitUnits: number;\n    limitCents?: never;\n} | {\n    limitCents: number;\n    limitUnits?: never;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L607",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitValue__4ae5aa5bc7c5",
        "signature": "export type UsageLimitValue__4ae5aa5bc7c5 = {\n    limitUnits: number;\n    limitCents?: never;\n} | {\n    limitCents: number;\n    limitUnits?: never;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L563",
        "description": "",
        "references": []
      },
      {
        "name": "UsagePolicyAdvisory__0000f21c4f54",
        "signature": "export interface UsagePolicyAdvisory__0000f21c4f54 {\n    /** Gateway-resolved policy id, when the usage payload includes one. */\n    usagePolicyId: string | null;\n    /** Known traffic class; null when a newer gateway sends a class this SDK\n     *  does not know yet. See `unknownTrafficClass` for the preserved raw value. */\n    trafficClass: UsageTrafficClass__530fe2057481 | null;\n    unknownTrafficClass?: string;\n    policySource: UsagePolicySource__baee26093419 | null;\n    limitProfile: UsageLimitProfile__4ac9b6a9c466 | null;\n    customerBillable: boolean | null;\n    providerCostTracked: boolean | null;\n    chargeableOutcomes: UsageChargeableOutcomes__7192cca0f62f | null;\n    meterKey: string | null;\n    cooldownResetAt: number | null;\n    retryAfterSeconds: number | null;\n    freeButLimited: boolean;\n    providerCost: boolean;\n    upgradePrompt: boolean;\n    creditPrompt: boolean;\n    genericMessage: string;\n    /** Raw gateway/core policy fields. Preserved for forward-compatible UIs and\n     *  debugging; advisory only and never an enforcement input. */\n    raw: Record<string, unknown>;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L655",
        "description": "",
        "references": [
          {
            "name": "UsageChargeableOutcomes__7192cca0f62f",
            "source": "packages/farthershore-js/dist/types.d.ts#L654"
          },
          {
            "name": "UsageLimitProfile__4ac9b6a9c466",
            "source": "packages/farthershore-js/dist/types.d.ts#L653"
          },
          {
            "name": "UsagePolicySource__baee26093419",
            "source": "packages/farthershore-js/dist/types.d.ts#L652"
          },
          {
            "name": "UsageTrafficClass__530fe2057481",
            "source": "packages/farthershore-js/dist/types.d.ts#L651"
          }
        ]
      },
      {
        "name": "UsagePolicySource__baee26093419",
        "signature": "export type UsagePolicySource__baee26093419 = \"declared\" | \"inherited\" | \"defaulted\" | \"inferred\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L652",
        "description": "",
        "references": []
      },
      {
        "name": "UsageRange__216cd12bcfd1",
        "signature": "export interface UsageRange__216cd12bcfd1 {\n    from?: string;\n    to?: string;\n}",
        "source": "packages/farthershore-js/dist/resources/usage.d.ts#L3",
        "description": "",
        "references": []
      },
      {
        "name": "UsageResource__a3469cda0e70",
        "signature": "export interface UsageResource__a3469cda0e70 {\n    /** Dimension → total for the period (requests/tokens/computeMs/dollars…).\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle); the read is unmount-safe\n     *  via the hook's active-flag and bounded by the cache TTL. */\n    summary(range?: UsageRange__216cd12bcfd1, opts?: {\n        signal?: AbortSignal;\n    }): Promise<UsageSummary__0f0a1f283e9b>;\n    /** The most-recent usage events (platform caps this list).\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle); the read is unmount-safe\n     *  via the hook's active-flag and bounded by the cache TTL. */\n    events(range?: UsageRange__216cd12bcfd1, opts?: {\n        signal?: AbortSignal;\n    }): Promise<UsageEvent__0652cabf737c[]>;\n    /** Everything in one round-trip: per-dimension totals + recent events + the\n     *  billing basis (the \"Requests\" vs \"Usage\" meter-label hint).\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle); the read is unmount-safe\n     *  via the hook's active-flag and bounded by the cache TTL. */\n    snapshot(range?: UsageRange__216cd12bcfd1, opts?: {\n        signal?: AbortSignal;\n        includeEvents?: boolean;\n    }): Promise<UsageSnapshot__f8d76d9838e8>;\n}",
        "source": "packages/farthershore-js/dist/resources/usage.d.ts#L7",
        "description": "",
        "references": [
          {
            "name": "UsageEvent__0652cabf737c",
            "source": "packages/farthershore-js/dist/types.d.ts#L679"
          },
          {
            "name": "UsageRange__216cd12bcfd1",
            "source": "packages/farthershore-js/dist/resources/usage.d.ts#L3"
          },
          {
            "name": "UsageSnapshot__f8d76d9838e8",
            "source": "packages/farthershore-js/dist/types.d.ts#L701"
          },
          {
            "name": "UsageSummary__0f0a1f283e9b",
            "source": "packages/farthershore-js/dist/types.d.ts#L645"
          }
        ]
      },
      {
        "name": "UsageSnapshot__f8d76d9838e8",
        "signature": "export interface UsageSnapshot__f8d76d9838e8 {\n    summary: UsageSummary__0f0a1f283e9b;\n    events: UsageEvent__0652cabf737c[];\n    billingBasis: UsageBillingBasis__f1af1792f9ef;\n    /** Whether `summary` is an EXACT total over the whole period (`true`, the\n     *  DB-side aggregate) or an approximation from a bounded event sample\n     *  (`false`). A `false` here means the UI should flag the figure as\n     *  approximate. Defaults to `true` (additive — older Cores omit it). */\n    exact: boolean;\n    /** Number of usage events the `summary` total was computed from over the\n     *  period. With `exact: true` this is the true event count; with\n     *  `exact: false` it's the sampled (capped) count. */\n    sampledEvents: number;\n    /** ISO start of the period the `summary` covers (the resolved `from`), or\n     *  null when the Core doesn't report it. */\n    periodStart: string | null;\n    /** ISO end of the period the `summary` covers (the resolved `to`), or null\n     *  when the Core doesn't report it. */\n    periodEnd: string | null;\n    /** Aggregated advisory policy state from the freshest event in this snapshot.\n     *  Null when no event carries policy metadata. */\n    usagePolicy: UsagePolicyAdvisory__0000f21c4f54 | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L701",
        "description": "A single round-trip's worth of usage: per-dimension totals, the recent\nevents, and the billing basis.",
        "references": [
          {
            "name": "UsageBillingBasis__f1af1792f9ef",
            "source": "packages/farthershore-js/dist/types.d.ts#L649"
          },
          {
            "name": "UsageEvent__0652cabf737c",
            "source": "packages/farthershore-js/dist/types.d.ts#L679"
          },
          {
            "name": "UsagePolicyAdvisory__0000f21c4f54",
            "source": "packages/farthershore-js/dist/types.d.ts#L655"
          },
          {
            "name": "UsageSummary__0f0a1f283e9b",
            "source": "packages/farthershore-js/dist/types.d.ts#L645"
          }
        ]
      },
      {
        "name": "UsageSummary__0f0a1f283e9b",
        "signature": "export type UsageSummary__0f0a1f283e9b = Record<string, number>;",
        "source": "packages/farthershore-js/dist/types.d.ts#L645",
        "description": "",
        "references": []
      },
      {
        "name": "UsageTrafficClass__530fe2057481",
        "signature": "export type UsageTrafficClass__530fe2057481 = (typeof USAGE_TRAFFIC_CLASSES__3e7da6994f34)[number];",
        "source": "packages/farthershore-js/dist/types.d.ts#L651",
        "description": "",
        "references": [
          {
            "name": "USAGE_TRAFFIC_CLASSES__3e7da6994f34",
            "source": "packages/farthershore-js/dist/types.d.ts#L650"
          }
        ]
      }
    ],
    "generated/frontend-sdk/errors": [
      {
        "name": "FS_LIMIT_CLASSES__cf69b28be276",
        "signature": "declare const FS_LIMIT_CLASSES__cf69b28be276: readonly [\"quota\", \"rate\", \"concurrency\", \"capacity\", \"spend\", \"adaptive\"];",
        "source": "packages/farthershore-js/dist/deny-codes.d.ts#L63",
        "description": "The closed set of usage-limit classes. Mirrors the contracts `LimitClass`.",
        "references": []
      },
      {
        "name": "FsLimitClass__2d5726601b87",
        "signature": "export type FsLimitClass__2d5726601b87 = (typeof FS_LIMIT_CLASSES__cf69b28be276)[number];",
        "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65",
        "description": "The semantic class a usage-limit deny falls into. Mirrors `LimitClass`.",
        "references": [
          {
            "name": "FS_LIMIT_CLASSES__cf69b28be276",
            "source": "packages/farthershore-js/dist/deny-codes.d.ts#L63"
          }
        ]
      }
    ],
    "generated/frontend-sdk/components": [
      {
        "name": "AccessRequest__e4d3f89daefa",
        "signature": "export interface AccessRequest__e4d3f89daefa {\n    id: string;\n    /** External identity id of the requesting member. */\n    requestedBy: string;\n    /** The requested permission (unified `<subject>:<verb>` grammar). */\n    permission: string;\n    note?: string | null;\n    /** PENDING | APPROVED | DENIED. */\n    status: string;\n    resolvedBy?: string | null;\n    resolvedAt?: string | null;\n    createdAt: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1061",
        "description": "A Notion-minimal access request (`/me/access-requests`). Track T3 —\napproval AUTO-GRANTS the permission onto the requester's direct grants.",
        "references": []
      },
      {
        "name": "ActiveServiceAccountCreateResponse__b15fda647836",
        "signature": "export interface ActiveServiceAccountCreateResponse__b15fda647836 {\n    status: \"ACTIVE\";\n    serviceAccountId: string;\n    apiKeyId: string;\n    keyPrefix: string;\n    /** One-time plaintext secret. */\n    plaintext: string;\n    requestedPermissions: string[];\n    grantedPermissions: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L465",
        "description": "",
        "references": []
      },
      {
        "name": "ActiveServiceAccountUpdateResponse__fe5e8ed2381b",
        "signature": "export interface ActiveServiceAccountUpdateResponse__fe5e8ed2381b {\n    status: \"ACTIVE\";\n    serviceAccountId: string;\n    requestedPermissions: string[];\n    grantedPermissions: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L486",
        "description": "",
        "references": []
      },
      {
        "name": "ApiKey__a2eadd893331",
        "signature": "export interface ApiKey__a2eadd893331 {\n    id: string;\n    keyPrefix: string;\n    label: string | null;\n    /** Normalized lowercase, e.g. \"active\" | \"revoked\". */\n    status: string;\n    createdAt: string;\n    lastUsedAt: string | null;\n    revokedAt: string | null;\n    /** Consumer-principal (D2): the key's subject kind — a PERSONAL key mints a\n     *  member subject, a SERVICE key an org-owned service account. Always present\n     *  (Core's `ApiKey.kind` is a NOT NULL column). */\n    kind: ApiKeyKind__336a38a3bc29;\n    /** PERSONAL — the bound member's stable `Membership.id` (identity + permission\n     *  source). Null for service keys / when the API omits it. */\n    memberId: string | null;\n    /** SERVICE — the org-owned `ServiceAccount.id` the key attaches to. Null for\n     *  personal keys / when the API omits it. */\n    serviceAccountId: string | null;\n    /** SERVICE — the bound service account's display name, when the API returns\n     *  it (the list groups service keys by account under this label). */\n    serviceAccountName: string | null;\n    /** Provenance: which member MINTED the key (audit only; may differ from the\n     *  bound member when an admin mints a personal key for someone — D2a). Null\n     *  for pre-attribution keys. */\n    createdBy: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L347",
        "description": "",
        "references": [
          {
            "name": "ApiKeyKind__336a38a3bc29",
            "source": "packages/farthershore-js/dist/types.d.ts#L346"
          }
        ]
      },
      {
        "name": "ApiKeyKind__336a38a3bc29",
        "signature": "export type ApiKeyKind__336a38a3bc29 = \"PERSONAL\" | \"SERVICE\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L346",
        "description": "Consumer-principal (D2): which stable identity an API key credentials.\n`PERSONAL` binds to a member (perms = the member's live roles ∩ the key's\nrestrictions; auto-revoked when the member leaves). `SERVICE` attaches to a\nnamed org-owned service account (admin-gated; survives offboarding).",
        "references": []
      },
      {
        "name": "ApiKeysPanelImpl__ec7052a86409",
        "signature": "declare function ApiKeysPanelImpl__ec7052a86409({ className }?: ApiKeysPanelProps): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/keys.d.ts#L5",
        "description": "",
        "references": [
          {
            "name": "ApiKeysPanelProps",
            "source": "packages/farthershore-js/dist/components/keys.d.ts#L1"
          }
        ]
      },
      {
        "name": "ApprovedServiceAccountCreateResponse__b73a29c4cc94",
        "signature": "export interface ApprovedServiceAccountCreateResponse__b73a29c4cc94 {\n    status: \"ACTIVE\";\n    operation: \"CREATE\";\n    serviceAccountId: string;\n    apiKeyId: string;\n    /** One-time plaintext secret. */\n    plaintext: string;\n    grantedPermissions: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L493",
        "description": "",
        "references": []
      },
      {
        "name": "ApprovedServiceAccountUpdateResponse__e4e8de0be760",
        "signature": "export interface ApprovedServiceAccountUpdateResponse__e4e8de0be760 {\n    status: \"ACTIVE\";\n    operation: \"UPDATE\";\n    serviceAccountId: string;\n    grantedPermissions: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L502",
        "description": "",
        "references": []
      },
      {
        "name": "ApproveServiceAccountInput__db09091445e7",
        "signature": "export interface ApproveServiceAccountInput__db09091445e7 {\n    /** Omit to approve the complete original request. */\n    grantedPermissions?: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L451",
        "description": "",
        "references": []
      },
      {
        "name": "AuditLogEntry__fed61670ee17",
        "signature": "export interface AuditLogEntry__fed61670ee17 {\n    id: string;\n    createdAt: string;\n    action: string;\n    decision?: \"ALLOW\" | \"DENY\" | null;\n    actorType?: string | null;\n    actorUserId?: string | null;\n    /** Friendly display name for a user actor (subscriber / builder / maker),\n     *  resolved server-side from the actor's Clerk user id. Null for non-user\n     *  actors (gateway / admin_service) or unknown ids — render `actorUserId`\n     *  as the fallback. */\n    actorName?: string | null;\n    payloadJson?: Record<string, unknown> | null;\n    [k: string]: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1074",
        "description": "",
        "references": []
      },
      {
        "name": "AuditLogPage__2bf11a4137e1",
        "signature": "export interface AuditLogPage__2bf11a4137e1 {\n    items: AuditLogEntry__fed61670ee17[];\n    nextCursor: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1089",
        "description": "",
        "references": [
          {
            "name": "AuditLogEntry__fed61670ee17",
            "source": "packages/farthershore-js/dist/types.d.ts#L1074"
          }
        ]
      },
      {
        "name": "AuditLogsResource__99efa1e02380",
        "signature": "export interface AuditLogsResource__99efa1e02380 {\n    /** Cursor-paged subscriber audit log (decision ALLOW|DENY, limit ≤ 200).\n     *  Degrades to an empty page on error, like the SSR page. */\n    list(filters?: {\n        action?: string;\n        actorUserId?: string;\n        decision?: \"ALLOW\" | \"DENY\";\n        from?: string;\n        to?: string;\n        cursor?: string;\n        limit?: number;\n        signal?: AbortSignal;\n        /**\n         * `null` intentionally reads the user's default subscription without an\n         * organization header. `undefined` preserves the selected workspace.\n         */\n        organizationId?: string | null;\n    }): Promise<AuditLogPage__2bf11a4137e1>;\n}",
        "source": "packages/farthershore-js/dist/resources/account.d.ts#L142",
        "description": "",
        "references": [
          {
            "name": "AuditLogPage__2bf11a4137e1",
            "source": "packages/farthershore-js/dist/types.d.ts#L1089"
          }
        ]
      },
      {
        "name": "AuditLogTableImpl__b13b7a55916f",
        "signature": "declare function AuditLogTableImpl__b13b7a55916f({ className, title, organizationId, }?: AuditLogTableProps): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/audit-log-table.d.ts#L12",
        "description": "",
        "references": [
          {
            "name": "AuditLogTableProps",
            "source": "packages/farthershore-js/dist/components/audit-log-table.d.ts#L1"
          }
        ]
      },
      {
        "name": "AuthResource__beeda8a7af1a",
        "signature": "export interface AuthResource__beeda8a7af1a {\n    /** The current session (authenticated identity + a light subscriber slice).\n     * Resolves to `{ authenticated: false }` on 401/403 rather than throwing.\n     * Test-persona identity comes from Core's verified HttpOnly cookie; no\n     * persona bearer is exposed to browser JavaScript. */\n    getSession(opts?: {\n        signal?: AbortSignal;\n    }): Promise<Session__d51a47154738>;\n    /** Revoke the server-owned persona browser session and clear local auth\n     * caches. Clerk-strategy environments continue to sign out via Clerk. */\n    signOut(): Promise<void>;\n    /** Set a session bearer directly (for example, Clerk's session token). */\n    setToken(token: string | null): void;\n    /** Mint a short-lived Gateway bearer from the current authenticated browser\n     * session. In persona environments Core authenticates this with the\n     * same-origin HttpOnly cookie. */\n    gatewayContextToken(opts?: {\n        signal?: AbortSignal;\n        refresh?: boolean;\n    }): Promise<GatewayContextToken__447d2a94e34b>;\n}",
        "source": "packages/farthershore-js/dist/resources/auth.d.ts#L3",
        "description": "",
        "references": [
          {
            "name": "GatewayContextToken__447d2a94e34b",
            "source": "packages/farthershore-js/dist/types.d.ts#L803"
          },
          {
            "name": "Session__d51a47154738",
            "source": "packages/farthershore-js/dist/types.d.ts#L326"
          }
        ]
      },
      {
        "name": "AuthStrategy__ccafca0932db",
        "signature": "export type AuthStrategy__ccafca0932db = \"clerk\" | \"test-personas\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L59",
        "description": "",
        "references": []
      },
      {
        "name": "AutoApiKeyError__bd378e9396dc",
        "signature": "export interface AutoApiKeyError__bd378e9396dc {\n    code: string;\n    message: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1097",
        "description": "A partial-success auto-key failure: the subscriber activated but Core could\nnot mint the first API key. Mirrors core's `autoApiKeyError` ({@code\ncheckout.ts}). The caller should prompt the user to create a key manually\nrather than silently dropping the signal.",
        "references": []
      },
      {
        "name": "BillingResource__c8dbd9d25fa3",
        "signature": "export interface BillingResource__c8dbd9d25fa3 {\n    /** The consumer's current subscription for this product, or null.\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle); the read is unmount-safe\n     *  via the hook's active-flag and bounded by the cache TTL. */\n    subscription(opts?: {\n        signal?: AbortSignal;\n    }): Promise<Subscription__3e996fafa8e7 | null>;\n    /** Open the Stripe-hosted billing portal (payment method + invoices). Returns\n     *  the URL to navigate to. This is also how invoices are viewed in V0. */\n    openBillingPortal(input?: {\n        returnUrl?: string;\n    }): Promise<{\n        url: string;\n    }>;\n    /** Cancel the current subscription. Free subs cancel inline; paid subs are\n     *  scheduled on the provider for the end of the current billing period and\n     *  the result carries the `cancelsAt` boundary. `reason` is recorded for\n     *  churn analytics. */\n    cancelSubscription(input?: {\n        reason?: string;\n    }): Promise<CancelSubscriptionResult__9dfffd11b827>;\n    /** Buy more prepaid balance. Starts a provider checkout for `amountCents`\n     *  and returns the URL to send the subscriber to. Core gates this on\n     *  `invoice:pay` and refuses (`INVALID_STATE`) for a plan that declares no\n     *  prepaid funding. `requestId` is the idempotency handle — pass the SAME\n     *  uuid to retry one intent; omit it and the SDK mints one per call. */\n    addFunds(input: {\n        amountCents: number;\n        requestId?: string;\n        successUrl?: string;\n        cancelUrl?: string;\n    }): Promise<{\n        checkoutUrl: string;\n    }>;\n    /** Reverse a scheduled cancel — the platform lifts `cancel_at_period_end`\n     *  on the provider (paid) or flips a CANCELLED free sub back to ACTIVE. The\n     *  result carries the platform's POST-restore `cancelAtPeriodEnd` so a\n     *  caller can render the outcome instead of assuming it. */\n    restoreSubscription(): Promise<RestoreSubscriptionResult__60ac2939c09d>;\n    /** Change an existing subscription to another plan. Core applies or\n     *  schedules the transition according to the product's policy. */\n    changePlan(input: {\n        compiledPlanId: string;\n    }): Promise<ChangePlanResult__11a914c015a6>;\n    /** Set (or clear, with `null`) the subscriber's monthly spend cap (in cents).\n     *  PATCHes `/me/spend-cap`. CAVEAT: the cap is currently STORED-not-ENFORCED\n     *  (held in subscription metadata pending the rate-limit migration) — do NOT\n     *  present this as a hard spend limit in UI copy. */\n    setSpendCap(input: {\n        maxMonthlySpendCents: number | null;\n    }): Promise<SpendCapResult__395300e78371>;\n    /** Read the subscriber's current monthly spend cap (in cents), or null when\n     *  none is set / signed out. P-SPENDCAP-READ — reads the additive\n     *  `subscriber.maxMonthlySpendCents` surfaced on the `/me` context (no new\n     *  route). Joins the memoized `/me` read.\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached `/me` fetch (the cache owns the fetch lifecycle); the read is\n     *  unmount-safe via the hook's active-flag and bounded by the cache TTL. */\n    getSpendCap(opts?: {\n        signal?: AbortSignal;\n    }): Promise<number | null>;\n    /** The subscriber's current-window bill preview (`GET /me/bill-preview`) —\n     *  computed by Core through the SAME rating engine + ledger state as\n     *  invoicing, so preview === invoice by construction. Honors the plan's\n     *  `spendPolicy.disclosure`: `transparent` carries windows / totals /\n     *  nanodollar allowance balances; `opaque` carries allowance shape only (no\n     *  amounts). Nanodollar fields are decimal STRINGS — format them with\n     *  `format.formatNanos`, never `Number()`. Read-through cached; every\n     *  entitlement mutation (subscribe / change plan / cancel / restore /\n     *  migrate) busts it. Signed-out / no subscription → Core serves an empty\n     *  transparent preview.\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle). */\n    getBillPreview(opts?: {\n        signal?: AbortSignal;\n    }): Promise<BillPreview__c6a85a661e87>;\n}",
        "source": "packages/farthershore-js/dist/resources/billing.d.ts#L13",
        "description": "",
        "references": [
          {
            "name": "BillPreview__c6a85a661e87",
            "source": "packages/farthershore-js/dist/types.d.ts#L1284"
          },
          {
            "name": "CancelSubscriptionResult__9dfffd11b827",
            "source": "packages/farthershore-js/dist/types.d.ts#L1122"
          },
          {
            "name": "ChangePlanResult__11a914c015a6",
            "source": "packages/farthershore-js/dist/types.d.ts#L1144"
          },
          {
            "name": "RestoreSubscriptionResult__60ac2939c09d",
            "source": "packages/farthershore-js/dist/types.d.ts#L1134"
          },
          {
            "name": "SpendCapResult__395300e78371",
            "source": "packages/farthershore-js/dist/resources/billing.d.ts#L5"
          },
          {
            "name": "Subscription__3e996fafa8e7",
            "source": "packages/farthershore-js/dist/types.d.ts#L739"
          }
        ]
      },
      {
        "name": "BillingSummaryImpl__8a108aa98a90",
        "signature": "declare function BillingSummaryImpl__8a108aa98a90({ className, slots }?: BillingSummaryProps): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/billing.d.ts#L13",
        "description": "",
        "references": [
          {
            "name": "BillingSummaryProps",
            "source": "packages/farthershore-js/dist/components/billing.d.ts#L2"
          }
        ]
      },
      {
        "name": "BillPreview__c6a85a661e87",
        "signature": "export type BillPreview__c6a85a661e87 = TransparentBillPreview__bd44f368bc40 | OpaqueBillPreview__249f4b617b5a;",
        "source": "packages/farthershore-js/dist/types.d.ts#L1284",
        "description": "",
        "references": [
          {
            "name": "OpaqueBillPreview__249f4b617b5a",
            "source": "packages/farthershore-js/dist/types.d.ts#L1277"
          },
          {
            "name": "TransparentBillPreview__bd44f368bc40",
            "source": "packages/farthershore-js/dist/types.d.ts#L1257"
          }
        ]
      },
      {
        "name": "BillPreviewAllowance__eba9c1df99be",
        "signature": "export interface BillPreviewAllowance__eba9c1df99be {\n    /** Bucket source kind (e.g. `included`, `prepaid`, `promo`). */\n    kind: string;\n    /** Bucket lifecycle state — Core's `BucketState`, verbatim. */\n    state: BucketState__c796139d57fe;\n    /** Nanodollars, decimal strings (null = unavailable). */\n    remainingNanos: NanosAmount__f9c1e22d3cbe;\n    heldNanos: NanosAmount__f9c1e22d3cbe;\n    consumedNanos: NanosAmount__f9c1e22d3cbe;\n    /** ISO timestamp, or null when the allowance does not expire. */\n    expiresAt: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1198",
        "description": "A funding allowance (balance bucket) with nanodollar balances —\ntransparent disclosure only.",
        "references": [
          {
            "name": "BucketState__c796139d57fe",
            "source": "packages/farthershore-js/dist/types.d.ts#L1184"
          },
          {
            "name": "NanosAmount__f9c1e22d3cbe",
            "source": "packages/farthershore-js/dist/types.d.ts#L1179"
          }
        ]
      },
      {
        "name": "BillPreviewCardImpl__d0492f0124c1",
        "signature": "declare function BillPreviewCardImpl__d0492f0124c1(): import(\"react\").JSX.Element | null;",
        "source": "packages/farthershore-js/dist/components/bill-preview-card.d.ts#L6",
        "description": "",
        "references": []
      },
      {
        "name": "BillPreviewUsageRating__fb184ad4d633",
        "signature": "export interface BillPreviewUsageRating__fb184ad4d633 {\n    pendingEventCount: number;\n    unratableEventCount: number;\n    /** ISO instant of the oldest unaccounted event, or null when there is none. */\n    oldestUnratedServedAt: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1251",
        "description": "Served usage this cycle that `totals` does NOT account for.\n\n`totals.ratedNanos` sums POSTED charges only, so usage that is metered but\nnot yet priced — or that can no longer be priced at all — contributes\nnothing to it. Rendering that as `$0` asserts \"you owe nothing\" when the\ntruthful statement is \"we have not priced this yet\". Render this instead of\nletting a confident zero stand.\n\n`pendingEventCount` drains on its own; `unratableEventCount` will not without\noperator action.",
        "references": []
      },
      {
        "name": "BillPreviewWindow__ebfec15d43d1",
        "signature": "export interface BillPreviewWindow__ebfec15d43d1 {\n    windowId: string;\n    /** ISO timestamps. */\n    windowStart: string;\n    windowEnd: string;\n    /** Rated charges the engine recognized in this window. */\n    chargeCount: number;\n    /** Nanodollars, decimal string (null = unavailable). */\n    ratedNanos: NanosAmount__f9c1e22d3cbe;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1186",
        "description": "One rating window's engine-exact recognized total.",
        "references": [
          {
            "name": "NanosAmount__f9c1e22d3cbe",
            "source": "packages/farthershore-js/dist/types.d.ts#L1179"
          }
        ]
      },
      {
        "name": "Bootstrap__ecb3d46aafde",
        "signature": "export interface Bootstrap__ecb3d46aafde {\n    /** Wire schema version of the resolve DTO this bootstrap was decoded from\n     *  (CC5). Additive negotiation hook; legacy payloads (no version) decode as\n     *  `1`. Informational today — the SDK reads every shape tolerantly. */\n    schemaVersion: number;\n    business: Business__3ed5dd8f7507;\n    environment: EnvironmentInfo__866e98cf165d | null;\n    branding: Branding__c1352d7b32a1;\n    /** The business's available/purchasable plans (empty when none are\n     *  published). The single source the plans/pricing UI renders from. */\n    plans: Plan__3a8348415fe9[];\n    /** The business's active custom-frontend release hash, or null. Informational\n     *  (diagnostics) — V0 serving is host-keyed at the edge. */\n    frontendReleaseHash: string | null;\n    /** Available module keys derived from the plan set (non-empty once plans exist):\n     *  e.g. \"billing\", \"usage-quota\", \"docs\", \"legal\". */\n    availableModules: string[];\n    /** The business's declared counted-resource catalog (W5.1). Empty when the\n     *  business declares none. */\n    declaredResources: DeclaredResource__b4d9315d38c7[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L294",
        "description": "What `fs.bootstrap()` returns — everything a generated/managed frontend needs\nto discover the business it's running for AND render its catalog: the full\nplan list (pricing model and included quotas), business meters, docs /\nlegal origins, and the featured-plan pointer.",
        "references": [
          {
            "name": "Branding__c1352d7b32a1",
            "source": "packages/farthershore-js/dist/types.d.ts#L2"
          },
          {
            "name": "Business__3ed5dd8f7507",
            "source": "packages/farthershore-js/dist/types.d.ts#L23"
          },
          {
            "name": "DeclaredResource__b4d9315d38c7",
            "source": "packages/farthershore-js/dist/types.d.ts#L282"
          },
          {
            "name": "EnvironmentInfo__866e98cf165d",
            "source": "packages/farthershore-js/dist/types.d.ts#L85"
          },
          {
            "name": "Plan__3a8348415fe9",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "Branding__c1352d7b32a1",
        "signature": "export interface Branding__c1352d7b32a1 {\n    displayName: string;\n    /** Square brand mark (favicon / nav mark). */\n    iconUrl: string | null;\n    /** Horizontal text logo (wordmark) — rendered in place of the displayName\n     *  text when set. Most products only have an icon. */\n    logoUrl: string | null;\n    /** Marketing/header description for the business, when set. */\n    description: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L2",
        "description": "",
        "references": []
      },
      {
        "name": "BucketState__c796139d57fe",
        "signature": "export type BucketState__c796139d57fe = \"PENDING\" | \"AVAILABLE\" | \"EXPIRY_PENDING\" | \"FROZEN\" | \"EXPIRED\" | \"CANCELLED\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L1184",
        "description": "Lifecycle state of a funding allowance (balance bucket) — mirrors Core's\n`BucketState` (Prisma) verbatim. `AVAILABLE` is the live, spendable\nstate; `EXPIRY_PENDING` is still spendable but about to expire; `PENDING`\nis not yet spendable; `FROZEN` / `EXPIRED` / `CANCELLED` are not spendable.",
        "references": []
      },
      {
        "name": "Business__3ed5dd8f7507",
        "signature": "export interface Business__3ed5dd8f7507 {\n    id: string;\n    /** Subdomain slug (the first label of the gateway/portal host). */\n    slug: string;\n    name: string;\n    description: string | null;\n    branding: Branding__c1352d7b32a1;\n    /** Gateway origin host for builder-feature calls (the business `runtimeHostname`). */\n    gatewayHost: string;\n    /** Public portal host. */\n    portalHost: string;\n    /** R2 public origin + business prefix where MDX docs live, or null when the\n     *  platform has no docs origin configured (local dev). The `/docs` view\n     *  concatenates the doc filename onto this. */\n    docsBaseUrl: string | null;\n    /** R2 public origin + business prefix for per-business legal MDX\n     *  (terms / privacy), or null. The legal view falls back to the platform\n     *  terms notice when null. */\n    legalBaseUrl: string | null;\n    /** Versioned legal documents declared by the business, keyed by extensible\n     *  kind (`terms`, `privacy`, custom kinds). URLs are public CDN MDX objects. */\n    legal?: {\n        documents: Record<string, LegalDocumentReference__0e8dba55b6a6>;\n    };\n    /** Platform-owned docs visibility flag. When `false` the portal /docs\n     *  surface is suppressed (nav item hidden, route 404s) regardless of\n     *  whether `docsBaseUrl` is set. Absent on older Core payloads — the SDK\n     *  defaults this to `true` (backward-compatible). */\n    docsEnabled: boolean;\n    /** Immutable `CompiledPlan.id` of the featured plan, or null. Used to render\n     *  the \"Most Popular\" treatment in the plans UI. */\n    featuredCompiledPlanId: string | null;\n    /** Business-level meter definitions — the dimension catalog used to label\n     *  usage rows. Empty when the business declares no meters. */\n    meters: Meter__c4ca128fcf40[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L23",
        "description": "",
        "references": [
          {
            "name": "Branding__c1352d7b32a1",
            "source": "packages/farthershore-js/dist/types.d.ts#L2"
          },
          {
            "name": "LegalDocumentReference__0e8dba55b6a6",
            "source": "packages/farthershore-js/dist/types.d.ts#L61"
          },
          {
            "name": "Meter__c4ca128fcf40",
            "source": "packages/farthershore-js/dist/types.d.ts#L15"
          }
        ]
      },
      {
        "name": "BusinessDocsCodeBlock__2a7a6f0b1817",
        "signature": "export type BusinessDocsCodeBlock__2a7a6f0b1817 = {\n    title: string;\n    tabs: BusinessDocsCodeTab__e20f813e5fc9[];\n    method?: string;\n    endpoint?: string;\n    status?: string;\n    latency?: string;\n    tokens?: string;\n    cost?: string;\n};",
        "source": "packages/farthershore-js/dist/components/product-docs/product-docs-mdx.d.ts#L22",
        "description": "",
        "references": [
          {
            "name": "BusinessDocsCodeTab__e20f813e5fc9",
            "source": "packages/farthershore-js/dist/components/product-docs/product-docs-mdx.d.ts#L17"
          }
        ]
      },
      {
        "name": "BusinessDocsCodeTab__e20f813e5fc9",
        "signature": "export type BusinessDocsCodeTab__e20f813e5fc9 = {\n    label: string;\n    code: string;\n    lang?: string | null;\n};",
        "source": "packages/farthershore-js/dist/components/product-docs/product-docs-mdx.d.ts#L17",
        "description": "One tab inside a code card. `lang` is the canonical language id (via\n{@link classifyTabLanguage }) for language-variant tabs, or `null` for\nauxiliary tabs (curl/response/rotate/json) that show regardless of the\nactive language.",
        "references": []
      },
      {
        "name": "BusinessDocsFrontmatter__ceffafa81da1",
        "signature": "export type BusinessDocsFrontmatter__ceffafa81da1 = {\n    title?: string;\n    description?: string;\n    layout?: \"prose\" | \"codeRail\";\n    previous?: string;\n    next?: string;\n};",
        "source": "packages/farthershore-js/dist/components/product-docs/product-docs-mdx.d.ts#L1",
        "description": "",
        "references": []
      },
      {
        "name": "BusinessDocsHeading__a6d35f30fcdc",
        "signature": "export type BusinessDocsHeading__a6d35f30fcdc = {\n    id: string;\n    text: string;\n    depth: 2 | 3;\n};",
        "source": "packages/farthershore-js/dist/components/product-docs/product-docs-mdx.d.ts#L8",
        "description": "",
        "references": []
      },
      {
        "name": "BusinessDocsLayout__e9623ab37090",
        "signature": "export type BusinessDocsLayout__e9623ab37090 = \"prose\" | \"codeRail\";",
        "source": "packages/farthershore-js/dist/components/product-docs/product-docs-index.d.ts#L2",
        "description": "",
        "references": []
      },
      {
        "name": "BusinessResource__933d34c2f16a",
        "signature": "export interface BusinessResource__933d34c2f16a {\n    /** The business this frontend is running for (resolved via bootstrap). */\n    get(): Promise<Business__3ed5dd8f7507>;\n    /** The business's declared counted-resource catalog (W5.1) — name + label +\n     *  scope + per-plan cap. The same list `bootstrap()` resolves. */\n    resources(): Promise<DeclaredResource__b4d9315d38c7[]>;\n}",
        "source": "packages/farthershore-js/dist/resources/business.d.ts#L2",
        "description": "",
        "references": [
          {
            "name": "Business__3ed5dd8f7507",
            "source": "packages/farthershore-js/dist/types.d.ts#L23"
          },
          {
            "name": "DeclaredResource__b4d9315d38c7",
            "source": "packages/farthershore-js/dist/types.d.ts#L282"
          }
        ]
      },
      {
        "name": "CancelSubscriptionImpl__11041f19fbf6",
        "signature": "declare function CancelSubscriptionImpl__11041f19fbf6({ className, onCancelled, }?: CancelSubscriptionProps): import(\"react\").JSX.Element | null;",
        "source": "packages/farthershore-js/dist/components/cancel-subscription.d.ts#L7",
        "description": "",
        "references": [
          {
            "name": "CancelSubscriptionProps",
            "source": "packages/farthershore-js/dist/components/cancel-subscription.d.ts#L1"
          }
        ]
      },
      {
        "name": "CancelSubscriptionResult__9dfffd11b827",
        "signature": "export interface CancelSubscriptionResult__9dfffd11b827 {\n    subscription?: unknown;\n    /** ISO instant the subscription ends, or null. */\n    cancelsAt: string | null;\n    raw: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1122",
        "description": "`POST /me/cancel` — the platform performs the cancel: free subs end\nimmediately, paid subs are scheduled on the provider for the end of the\ncurrent billing period. There is no hosted-page hand-off: the caller gets\na typed result back, and `cancelsAt` is the boundary the provider\nanswered with (null when it reported none, or for an immediate free\ncancel). NEVER invented client-side.",
        "references": []
      },
      {
        "name": "ChangePlanResult__11a914c015a6",
        "signature": "export interface ChangePlanResult__11a914c015a6 {\n    subscription?: unknown;\n    checkoutUrl?: string | null;\n    portalRedirect?: {\n        url: string;\n    } | null;\n    raw: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1144",
        "description": "`POST /me/change-plan` — Core decides inline-apply vs checkout vs portal\nredirect; all three surfaces normalized onto one shape.",
        "references": []
      },
      {
        "name": "ClientContext__d9dbf3313290",
        "signature": "export interface ClientContext__d9dbf3313290 {\n    /** Platform Core base URL. LAZY: resolved on read as explicit config >\n     *  injected `window.__FS_CONFIG__` > the production platform default —\n     *  never throws. Reading this property is what performs the lazy window\n     *  read; never read it at module scope or client-construction time. */\n    readonly coreUrl: string;\n    /** Portal host identifying the product/env to Core. LAZY — see {@link\n     *  coreUrl}; defaults to `location.host` in the browser, read on access. */\n    readonly portalHost: string | null;\n    businessId: string | null;\n    environmentId: string | null;\n    organizationId: string | null;\n    /**\n     * The organization selection before it is reconciled against subscription\n     * contexts. Unlike `organizationId`, undefined means no explicit selection;\n     * null is a durable request for the user's default subscription. Internal\n     * runtime state used by the React organization provider.\n     */\n    organizationSelection?: string | null;\n    /** Subscribers notified when the imperative organization scope changes. */\n    organizationListeners: Set<() => void>;\n    /** Read-through cache backing `fs.prefetch.*` (see cache.ts). */\n    readCache: Map<string, ReadCacheEntry__ee67854da2b9>;\n    gatewayUrl: string | null;\n    apiKey: string | null;\n    /** Cached short-lived gateway context token for browser-session feature\n     *  calls. Cleared whenever session/org scope changes. */\n    gatewayContextToken: {\n        token: string;\n        expiresAt: string;\n        cacheKey: string;\n    } | null;\n    /** In-flight context-token mint, keyed by cacheKey — SINGLE-FLIGHT coalescing\n     *  so concurrent feature calls share ONE mint instead of stampeding Core\n     *  (W6.3). Cleared as soon as the mint settles. Internal. */\n    gatewayContextTokenInflight: {\n        cacheKey: string;\n        promise: Promise<GatewayContextToken__447d2a94e34b>;\n    } | null;\n    /** Explicit session bearer (for Clerk/advanced integrations), falling back\n     *  to the configured `getToken` provider. Persona sessions are HttpOnly\n     *  cookies and never enter JavaScript. */\n    sessionToken: string | null;\n    /** True after a cookie-authenticated Core request succeeds. This lets a\n     *  later 401 trigger managed recovery without treating an anonymous first\n     *  `/me` read as a lapsed session. Contains no credential. */\n    browserSessionAuthenticated: boolean;\n    getToken?: TokenProvider__40095f0da8e4;\n    /** Runtime-installed token provider (e.g. the managed Clerk bridge inside\n     *  `<FartherShoreRoot>`). Wins over `config.getToken`; an explicitly set\n     *  `sessionToken` still wins over both. */\n    tokenProvider: TokenProvider__40095f0da8e4 | null;\n    fetch: FetchLike__7d89beec4c77;\n    /** Resolved automatic-retry policy (defaults applied). */\n    retry: ResolvedRetryConfig__fe2336bea142;\n    /** Resolved global interceptors (all optional; default no-ops elsewhere). */\n    onError?: (err: unknown) => void;\n    onLimitExceeded?: (err: LimitExceededError__7844c601e6fd) => void;\n    onUnauthorized?: (err: FartherShoreApiError__ae8b4410fda4) => void;\n    /** Runtime-installed 401 reaction (the managed auth layer's mid-session\n     *  recovery), wired by `<FsAuthProvider>` via `setOnUnauthorized`. Fires AFTER\n     *  the config-level `onUnauthorized`. Internal. */\n    onUnauthorizedManaged?: (err: FartherShoreApiError__ae8b4410fda4) => void;\n    /**\n     * LATCH: managed auth recovery has already fired for the CURRENT credential.\n     *\n     * The interceptor de-dupe is per-ERROR-OBJECT, which only collapses one\n     * logical failure surfacing through nested transports. A dashboard runs many\n     * independent reads concurrently, so a single lapsed session produces MANY\n     * distinct 401 errors — each firing its own recovery, each remounting the\n     * surface, each triggering a fresh round of reads. That feedback loop was\n     * measured at ~274 requests in 25s from ONE dashboard (~650/min against\n     * core's 100/min portal limit): the portal rate-limited itself.\n     *\n     * Recovery is a per-SESSION event, not a per-request one. Cleared whenever a\n     * new credential is installed, so a genuinely re-authed session can recover\n     * again.\n     */\n    managedRecoveryLatched?: boolean;\n    /** Last `X-RateLimit-*` snapshot observed on a gateway response (W8.5) — fed\n     *  by `fs.route.getWithMeta`, read by `useRouteRateLimit()`. Null until the first\n     *  gateway call that carried the headers. Internal. */\n    lastRateLimit: RateLimitSnapshot__934527ed940b | null;\n    /** Subscribers notified when `lastRateLimit` changes (the `useRouteRateLimit`\n     *  external store). Internal. */\n    rateLimitListeners: Set<() => void>;\n    /** A5-amend (T11) — the last LIMIT/throttle deny observed leaving the\n     *  transport, recorded by `fireInterceptors`. ADVISORY: the freshest known\n     *  RECENT deny, not a live poll (the gateway stays authoritative). Read by\n     *  `useLimitStatus()`. Null until the first limit deny is observed. Internal. */\n    lastLimitDeny: ObservedLimitDeny__ff379deca309 | null;\n    /** Subscribers notified when `lastLimitDeny` changes (the `useLimitStatus`\n     *  external store). Internal. */\n    limitDenyListeners: Set<() => void>;\n    /** Subscribers notified when the read cache is BUSTED (auth change, org\n     *  switch, entitlement mutation) — every mounted `useAsync` refetches.\n     *\n     *  Clearing the cache alone only stops the NEXT read from being served stale;\n     *  it does not re-run the reads already on screen. Without this notification a\n     *  `setSessionToken` after a 401 leaves every mounted surface showing the\n     *  signed-out result until something happens to remount it. Internal. */\n    readCacheListeners: Set<() => void>;\n    /** True when all SDK-owned network/auth paths are served by the local mock\n     *  transport. Internal, read by the managed auth layer. */\n    mockMode: boolean;\n}",
        "source": "packages/farthershore-js/dist/config.d.ts#L183",
        "description": "Mutable, per-client runtime context the resources share. Bootstrap fills in\nthe discovered product/env/gateway; sign-in fills in the session token.",
        "references": [
          {
            "name": "FartherShoreApiError__ae8b4410fda4",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
          },
          {
            "name": "FetchLike__7d89beec4c77",
            "source": "packages/farthershore-js/dist/config.d.ts#L2"
          },
          {
            "name": "GatewayContextToken__447d2a94e34b",
            "source": "packages/farthershore-js/dist/types.d.ts#L803"
          },
          {
            "name": "LimitExceededError__7844c601e6fd",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L206"
          },
          {
            "name": "ObservedLimitDeny__ff379deca309",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L580"
          },
          {
            "name": "RateLimitSnapshot__934527ed940b",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
          },
          {
            "name": "ReadCacheEntry__ee67854da2b9",
            "source": "packages/farthershore-js/dist/cache.d.ts#L2"
          },
          {
            "name": "ResolvedRetryConfig__fe2336bea142",
            "source": "packages/farthershore-js/dist/config.d.ts#L29"
          },
          {
            "name": "TokenProvider__40095f0da8e4",
            "source": "packages/farthershore-js/dist/config.d.ts#L80"
          }
        ]
      },
      {
        "name": "COMPONENT_GATE_MODES__3ef79af50fb5",
        "signature": "declare const COMPONENT_GATE_MODES__3ef79af50fb5: readonly [\"hide\", \"disable\", \"readOnly\", \"denied\"];",
        "source": "packages/farthershore-js/dist/component-policy.d.ts#L4",
        "description": "The single gate-mode vocabulary — a faithful copy of the contracts\n`COMPONENT_GATE_MODES` (vocabulary-equality-tested in test/).",
        "references": []
      },
      {
        "name": "ComponentAccessPolicyRow__60d2c40fe86e",
        "signature": "export interface ComponentAccessPolicyRow__60d2c40fe86e {\n    /** A managed component id or a `custom:<slug>` key. */\n    componentKey: string;\n    /** Override render-gate permission, or null → component default. */\n    requiredPermission: string | null;\n    /** Override deny render (`hide|disable|readOnly|denied`), or null →\n     *  component default. */\n    gateMode: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L945",
        "description": "One per-subscriber component-gate override row (`GET /me`\n`componentAccessPolicies`) — shape-matches the contracts\n`ComponentAccessPolicyDto`.",
        "references": []
      },
      {
        "name": "ComponentGateMode__052103626acf",
        "signature": "export type ComponentGateMode__052103626acf = (typeof COMPONENT_GATE_MODES__3ef79af50fb5)[number];",
        "source": "packages/farthershore-js/dist/component-policy.d.ts#L5",
        "description": "",
        "references": [
          {
            "name": "COMPONENT_GATE_MODES__3ef79af50fb5",
            "source": "packages/farthershore-js/dist/component-policy.d.ts#L4"
          }
        ]
      },
      {
        "name": "CoreRequest__88dbed0693a0",
        "signature": "export interface CoreRequest__88dbed0693a0 {\n    method: \"GET\" | \"POST\" | \"PATCH\" | \"PUT\" | \"DELETE\";\n    path: string;\n    query?: Record<string, string | number | undefined | null>;\n    body?: unknown;\n    /** Caller-stable retry identity for durable mutation replay. */\n    idempotencyKey?: string;\n    /** \"session\" attaches the consumer session bearer; \"none\" is for public\n     *  endpoints (resolve/discover). Defaults to \"session\". */\n    auth?: \"session\" | \"none\";\n    /** When `false`, a tolerated `401` on this (authed) read does NOT trigger the\n     *  managed auth-layer recovery (`onUnauthorizedManaged` — the hosted-sign-in\n     *  redirect / persona sign-out). Use for best-effort `/me` reads that already\n     *  swallow a 401 and render a signed-out/unsubscribed surface: re-authing an\n     *  already signed-in user can't clear an authorization 401, so the redirect is\n     *  futile and loops. `onUnauthorized` (config hook) + `onError` still fire.\n     *  Defaults to `true` (a lapsed authed session still bounces to recovery). */\n    recoverAuth?: boolean;\n    /** Abort signal — when it fires (e.g. a React hook unmounts or its deps\n     *  change), the in-flight read rejects with {@link FartherShoreAbortError}. */\n    signal?: AbortSignal;\n    /**\n     * Per-request organization scope. `undefined` inherits the client selection;\n     * `null` deliberately omits the organization header without changing that\n     * shared selection. Use this for APIs whose documented default-subscription\n     * read is intentionally independent of the workspace currently shown in the\n     * rest of the portal.\n     */\n    organizationId?: string | null;\n}",
        "source": "packages/farthershore-js/dist/http.d.ts#L3",
        "description": "",
        "references": []
      },
      {
        "name": "CreatedApiKey__eee6ebdc6f61",
        "signature": "export interface CreatedApiKey__eee6ebdc6f61 extends ApiKey__a2eadd893331 {\n    /** The full key. The platform never returns it again — store it now. */\n    secret: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L375",
        "description": "Returned ONLY by create/rotate — carries the full secret, shown once.",
        "references": [
          {
            "name": "ApiKey__a2eadd893331",
            "source": "packages/farthershore-js/dist/types.d.ts#L347"
          }
        ]
      },
      {
        "name": "CreateServiceAccountInput__30c268ab08ba",
        "signature": "export interface CreateServiceAccountInput__30c268ab08ba {\n    name: string;\n    requestedPermissions: NonEmptyPermissionList__ca911cbb6fa0;\n    scopes?: string[];\n    usageLimit?: ServiceAccountUsageLimitRequest__f255b800fa4e;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L441",
        "description": "",
        "references": [
          {
            "name": "NonEmptyPermissionList__ca911cbb6fa0",
            "source": "packages/farthershore-js/dist/types.d.ts#L440"
          },
          {
            "name": "ServiceAccountUsageLimitRequest__f255b800fa4e",
            "source": "packages/farthershore-js/dist/types.d.ts#L399"
          }
        ]
      },
      {
        "name": "CreateUsageLimitInput__0aee95b69b13",
        "signature": "export type CreateUsageLimitInput__0aee95b69b13 = UsageLimitSubject__9eba54806aaa & UsageLimitValue__4ae5aa5bc7c5 & UsageLimitCreateMode__f16ef2d50497 & {\n    quantity: string;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L604",
        "description": "Strict POST body: immutable subject + quantity, one value lane, and a\ncoherent BLOCK/NOTIFY threshold.",
        "references": [
          {
            "name": "UsageLimitCreateMode__f16ef2d50497",
            "source": "packages/farthershore-js/dist/types.d.ts#L595"
          },
          {
            "name": "UsageLimitSubject__9eba54806aaa",
            "source": "packages/farthershore-js/dist/types.d.ts#L570"
          },
          {
            "name": "UsageLimitValue__4ae5aa5bc7c5",
            "source": "packages/farthershore-js/dist/types.d.ts#L563"
          }
        ]
      },
      {
        "name": "DeclaredResource__b4d9315d38c7",
        "signature": "export interface DeclaredResource__b4d9315d38c7 {\n    name: string;\n    display?: string;\n    scope: \"subscription\" | \"subject\";\n    subjectType?: string;\n    /** Per-plan cap for this resource, when a plan declares one (numeric only). */\n    cap?: number | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L282",
        "description": "A product-declared counted resource (W5.1 / P-RESCATALOG). The product's\ncatalog of `product.resource(...)` declarations, surfaced so a generated /\nmanaged frontend can discover what resources exist and render their usage\nWITHOUT a per-plan lookup.\n\n- `scope: 'subscription'` — counted once per subscription (the common case).\n- `scope: 'subject'` — counted per subject (e.g. per `project`), with\n  `subjectType` naming the subject; pass `{ subjectId }` to the resource\n  verbs so the count keys on that subject.\n\n`cap` is the per-plan ceiling read from the active plan's\n`resourceLimits[name]` (the bare resource name — NOT prefixed). It's\n`number` (a numeric cap), `true` is treated as unlimited (left undefined),\nand `null`/absent means uncapped/unknown.",
        "references": []
      },
      {
        "name": "DirectPlanUpgradePromptProps__956ae755c97f",
        "signature": "interface DirectPlanUpgradePromptProps__956ae755c97f extends UpgradePromptBaseProps__aaa79a508e5a {\n    /** A plan already selected by an eligibility-scoped managed plan list. */\n    plan: Plan__3a8348415fe9;\n    error?: never;\n    variant: \"button\";\n    /**\n     * L11 — the subscriber's CURRENT plan, so the CTA can name the DIRECTION of\n     * the move. `PlansTable` now also offers cheaper plans and the free floor,\n     * and core applies those at the END of the billing period; labelling every\n     * one of them \"Upgrade\" (and implying it is immediate) is a lie. Omit it and\n     * the CTA falls back to the historic `Upgrade to <name>`.\n     */\n    currentPlan?: Plan__3a8348415fe9 | null;\n    /** Overrides the direction-derived label. */\n    label?: string;\n    /** Called after an inline plan change (never before a redirect). */\n    onChanged?: (plan: Plan__3a8348415fe9) => void;\n    onUpgraded?: never;\n}",
        "source": "packages/farthershore-js/dist/components/upgrade-prompt.d.ts#L25",
        "description": "",
        "references": [
          {
            "name": "Plan__3a8348415fe9",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          },
          {
            "name": "UpgradePromptBaseProps__aaa79a508e5a",
            "source": "packages/farthershore-js/dist/components/upgrade-prompt.d.ts#L4"
          }
        ]
      },
      {
        "name": "DocsModeKind__e089dfaced18",
        "signature": "export type DocsModeKind__e089dfaced18 = \"embedded\" | \"standalone\";",
        "source": "packages/farthershore-js/dist/components/product-docs/docs-mode.d.ts#L1",
        "description": "",
        "references": []
      },
      {
        "name": "EntitlementSnapshot__78b1daa335cc",
        "signature": "export interface EntitlementSnapshot__78b1daa335cc {\n    /** True when an ACTIVE subscriber context backed this snapshot. */\n    hasSubscriber: boolean;\n    /** Resource limits on the current subscriber's pinned plan. */\n    resourceLimits: Record<string, number>;\n}",
        "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L3",
        "description": "",
        "references": []
      },
      {
        "name": "EntitlementsResource__eae052f23903",
        "signature": "export interface EntitlementsResource__eae052f23903 {\n    /** Read the current subscriber's entitlement maps. Signed-out users get\n     *  empty maps so app code can render disabled/upsell states without a\n     *  separate auth guard. */\n    snapshot(): Promise<EntitlementSnapshot__78b1daa335cc>;\n    /** Numeric resource limit, or null when absent. */\n    resourceLimit(key: string): Promise<number | null>;\n    /** Per-resource `{ limit, current }` for the pinned plan (`N of M`). The\n     *  LIMIT side lives in the `/me` snapshot, but `current` is a live count, so\n     *  this reads the dedicated `/me/resource-limit-usage` route. Read-through cached\n     *  (the cache owns the fetch lifecycle, like the other `/me` reads — no\n     *  per-caller signal). Signed-out / no subscription → an empty map. */\n    resourceLimitUsage(): Promise<ResourceLimitUsageMap__cc534f1c9f18>;\n}",
        "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L16",
        "description": "",
        "references": [
          {
            "name": "EntitlementSnapshot__78b1daa335cc",
            "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L3"
          },
          {
            "name": "ResourceLimitUsageMap__cc534f1c9f18",
            "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L15"
          }
        ]
      },
      {
        "name": "EnvironmentInfo__866e98cf165d",
        "signature": "export interface EnvironmentInfo__866e98cf165d {\n    id: string;\n    name: string;\n    slug: string;\n    /** Which sign-in flow the portal should drive: Clerk (production) or a\n     *  platform-owned persona browser session (preview/test envs). */\n    authStrategy: AuthStrategy__ccafca0932db;\n    /** Env branch name (preview/test envs), or null for production scope. */\n    branch: string | null;\n    /** Billing provider mode for the env: \"test\" (no real money) or \"live\".\n     *  Null when the resolve was production-scoped (no env block). The plans UI\n     *  surfaces a \"Test mode\" badge when this is \"test\". */\n    stripeMode: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L85",
        "description": "",
        "references": [
          {
            "name": "AuthStrategy__ccafca0932db",
            "source": "packages/farthershore-js/dist/types.d.ts#L59"
          }
        ]
      },
      {
        "name": "FartherShoreApiError__ae8b4410fda4",
        "signature": "export declare class FartherShoreApiError__ae8b4410fda4 extends FartherShoreError__8dbed6dcc500 {\n    readonly status: number;\n    readonly code: string;\n    readonly body: unknown;\n    /** Seconds to wait before retrying, parsed from `Retry-After`; null when the\n     *  response carried no `Retry-After`. */\n    readonly retryAfterSeconds: number | null;\n    /** The `X-RateLimit-Remaining` / `-Reset` snapshot, or null when absent. */\n    readonly rateLimit: RateLimitSnapshot__934527ed940b | null;\n    /**\n     * Whether the request that produced this error actually carried an auth\n     * credential (a bearer was attached). Set by the transport AFTER the error is\n     * minted. A `401` with `authed === false` is a NEVER-authenticated visitor (a\n     * signed-out `/me` read sent no bearer) — the managed auth layer must treat it\n     * as a no-op, NOT a lapsed-session redirect. Defaults to `true` so any caller\n     * that doesn't thread the flag keeps the prior (always-fire) behaviour.\n     */\n    authed: boolean;\n    /**\n     * Whether a `401` on this request should trigger the MANAGED auth-layer\n     * recovery (the hosted-sign-in redirect / persona sign-out). Best-effort `/me`\n     * reads that already swallow a 401 (and render a signed-out/unsubscribed\n     * surface) set this `false`: re-authenticating an already signed-in user can\n     * never clear an authorization 401, so the redirect is futile and loops. Set\n     * by the transport from `CoreRequest.recoverAuth`. The config-level\n     * `onUnauthorized` + `onError` hooks STILL fire (observability is unaffected);\n     * only the managed reaction is gated. Defaults to `true` (always recover).\n     */\n    recoverAuth: boolean;\n    constructor(status: number, code: string, message: string, body: unknown, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot__934527ed940b | null);\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L49",
        "description": "A non-2xx response from Core or the Gateway. Exposes:\n- `.status` — the HTTP status code;\n- `.code` — the platform error code from the `{ error: { code, message } }`\n  envelope (or a fallback when the envelope is absent);\n- `.body` — the parsed response body, for richer error detail.\n\nCallers commonly branch on `.status` — e.g. `401`/`403` (re-auth), `404`\n(treat as absent), `409` (conflict/retry) — rather than parsing the message.\n\nEvery instance also carries the throttle hints the gateway attaches when\npresent: `.retryAfterSeconds` (from `Retry-After`) and `.rateLimit` (from\n`X-RateLimit-Remaining` / `-Reset`). Both are null when the headers are\nabsent — a developer who does nothing still gets them transparently.",
        "references": [
          {
            "name": "FartherShoreError__8dbed6dcc500",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L2"
          },
          {
            "name": "RateLimitSnapshot__934527ed940b",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
          }
        ]
      },
      {
        "name": "FartherShoreClient__e4fe174a542f",
        "signature": "export interface FartherShoreClient__e4fe174a542f {\n    /** The client's resolved runtime context (coreUrl, portalHost, businessId,\n     *  auth/scoping state, …). `coreUrl`/`portalHost` are LAZY getters — reading\n     *  them performs the `window.__FS_CONFIG__`/`location.host` resolution\n     *  (`coreUrl` falls back to the production platform); everything else is a\n     *  live snapshot of the client's current state. Mainly for\n     *  introspection/tests — prefer the typed resources for actual calls. */\n    readonly context: ClientContext__d9dbf3313290;\n    /** Resolve + cache the business/env/gateway for the current portal host. Safe\n     *  to call repeatedly (memoized). */\n    bootstrap(): Promise<Bootstrap__ecb3d46aafde>;\n    /** Set the consumer API key used for Gateway feature calls. */\n    setApiKey(key: string | null): void;\n    /** Set the Core session bearer directly (e.g. from the Clerk browser SDK). */\n    setSessionToken(token: string | null): void;\n    /** Install/replace a live token source resolved per request (short-lived\n     *  Clerk JWTs). `<FartherShoreRoot>` wires this automatically in Clerk\n     *  environments; pass null to uninstall. */\n    setTokenProvider(provider: (() => string | null | Promise<string | null>) | null): void;\n    /** Rescope subsequent Core calls to an owning org (the multi-org\n     *  subscription-context switcher) — sets the `x-fs-organization-id` header.\n     *  Pass null to return to the user's default subscription. Self-persists the\n     *  choice (restored at the next client creation). */\n    setOrganizationId(organizationId: string | null): void;\n    /** The active org id scoping Core calls, or null (the user's default\n     *  subscription). At boot this reflects the persisted choice restored from\n     *  storage; the React org provider seeds its reactive state from it. */\n    getOrganizationId(): string | null;\n    /** Imperative organization scope as an external store. This keeps a mounted\n     * React provider in sync when an application calls `setOrganizationId()`\n     * directly rather than using the managed org switcher. */\n    readonly organizationScope?: {\n        subscribe(listener: () => void): () => void;\n    };\n    /** Install/replace the global 401 reaction (fired by the transport on a 401\n     *  for an authed call). `<FartherShoreRoot>` / `<FsAuthProvider>` wire this\n     *  automatically for managed mid-session recovery (persona sign-out / Clerk\n     *  refresh); pass null to uninstall. A config-level `onUnauthorized` still\n     *  fires first. */\n    setOnUnauthorized(handler: ((err: FartherShoreApiError__ae8b4410fda4) => void) | null): void;\n    /** Drop every cached Core read (and the short-lived gateway context token), so\n     *  the next `me()` / list call goes to the network. Use after an out-of-band\n     *  state change the SDK can't observe — e.g. polling `me()` for webhook lag to\n     *  settle after returning from a Stripe Checkout (see `reconcileAfterCheckout`). */\n    invalidate(): void;\n    /** The last `X-RateLimit-*` snapshot observed on any `fs.route` gateway call,\n     *  with a subscribe primitive — the external store behind `useRouteRateLimit()`\n     *  (W8.5). `get()` is null until the first gateway response carried the\n     *  headers; `subscribe` notifies on every change. */\n    readonly rateLimit: {\n        get(): RateLimitSnapshot__934527ed940b | null;\n        subscribe(listener: () => void): () => void;\n    };\n    /** A5-amend (T11) — the last LIMIT/throttle deny observed leaving the\n     *  transport, with a subscribe primitive — the external store behind\n     *  `useLimitStatus()`. ADVISORY (the freshest known RECENT deny, not a live\n     *  poll — the gateway stays authoritative). `get()` is null until the first\n     *  limit deny is observed; `subscribe` notifies on every change. */\n    readonly limitState: {\n        get(): ObservedLimitDeny__ff379deca309 | null;\n        subscribe(listener: () => void): () => void;\n    };\n    /** Read-cache invalidation as an external store. `subscribe` fires when a\n     *  change invalidates what is ALREADY on screen: a new session/identity\n     *  (`setSessionToken`, sign-in/sign-out) or a moved entitlement (any billing\n     *  or plan action, and `invalidate()`).\n     *\n     *  It deliberately does NOT fire on an org switch (org-scoped hooks refetch\n     *  from their own deps) or on an ordinary resource mutation (the hook that\n     *  performed it refetches itself).\n     *\n     *  Every `useAsync`-backed hook subscribes automatically, so built-in hooks\n     *  and custom ones written against `useAsync` already refetch. Use this\n     *  directly only for state held OUTSIDE a hook (a store, an imperative cache\n     *  of your own) that must be invalidated in step with ours. */\n    readonly readCache: {\n        subscribe(listener: () => void): () => void;\n    };\n    /** The business this frontend runs for (resolved via bootstrap). */\n    readonly business: BusinessResource__933d34c2f16a;\n    /** Consumer session: current identity, server-owned persona logout, and\n     * short-lived Gateway context-token minting. */\n    readonly auth: AuthResource__beeda8a7af1a;\n    /** The consumer's API keys (list / create / revoke / rotate). */\n    readonly keys: KeysResource__2bf8d8c5e820;\n    /** Per-dimension usage totals + recent events for this business. */\n    readonly usage: UsageResource__a3469cda0e70;\n    /** Subscriber-managed per-actor usage limits. */\n    readonly usageLimits: UsageLimitsResource__2b1e05e6bcda;\n    /** The consumer's subscription and Stripe billing portal. */\n    readonly billing: BillingResource__c8dbd9d25fa3;\n    /** The business's plan catalog + the subscribe/checkout flow. */\n    readonly plans: PlansResource__05a484289922;\n    /** Full subscriber context (`GET /me`): lifecycle, trial, scheduled\n     *  transition, eligibility-scoped plans. Null when signed out / no\n     *  subscriber. */\n    me(opts?: {\n        signal?: AbortSignal;\n        /** `null` omits the organization header without changing the shared\n         * client selection; `undefined` uses that selection. */\n        organizationId?: string | null;\n    }): Promise<SubscriberContext__86c582775b78 | null>;\n    /** Record legal-document acceptances for the current subscriber/org. */\n    acceptLegal(acceptances: LegalAcceptance__cc2291cc0442[]): Promise<void>;\n    /** Multi-org subscription contexts (the org switcher's data). */\n    readonly organizations: OrganizationsResource__18d4024e64ce;\n    /** Team management on the current subscription. */\n    readonly team: TeamResource__b9e413854377;\n    /** Managed-RBAC management on the current subscription (settings, the\n     *  derived permission catalog, role CRUD) — team-org OWNER/ADMIN only.\n     *  Configures UX + minted-token claims; the EDGE `permission` constraint\n     *  is the security boundary. */\n    readonly rbac: RbacResource__b63486266173;\n    /** The subscriber's per-category notification preferences (opt-out model):\n     *  `get` the current state, `update` a partial patch. */\n    readonly notifications: NotificationsResource__dc7aa1b64a0f;\n    /** The subscriber-side audit log (cursor-paged). */\n    readonly auditLogs: AuditLogsResource__99efa1e02380;\n    /** Current subscriber entitlement maps from the pinned plan version. */\n    readonly entitlements: EntitlementsResource__eae052f23903;\n    /** Navigation-intent data warmers — see {@link PrefetchSurface}. */\n    readonly prefetch: PrefetchSurface__2b22bd2b6c45;\n    /**\n     * One-line, zero-config calls to your business's enforced gateway — host,\n     * auth, surface, and businessId all auto-resolved from the hosted context.\n     * `fs.route.post(\"/forecast\", { city })`. Limit responses surface as\n     * `LimitExceededError` so the upgrade prompt works on any call.\n     */\n    readonly route: RouteResource__52eafab15328;\n    /**\n     * Typed CRUD over a product-declared, quota-counted resource. Rides the\n     * gateway (which diverts to core, the system of record); `create` throws\n     * `LimitExceededError` at the plan cap. `fs.resources(\"widgets\").list()`.\n     */\n    resources<T = unknown>(name: string): ResourcesResource__ef6d17bbf151<T>;\n    /** Bound named-integration helper: `fs.integration(\"clerk-admin\").fetch(...)`. */\n    integration(id: string): ManagedIntegration__68b11f8f586e;\n    /**\n     * Generic authenticated Core call — the escape hatch for platform endpoints\n     * the typed resources don't model yet (e.g. a product's `/me/team`,\n     * `/me/audit-logs`). The Core counterpart to {@link invoke}:\n     * it attaches the session bearer + the host/env/org scoping headers and maps\n     * non-2xx to {@link FartherShoreApiError}, exactly like the typed resources —\n     * the caller only supplies the path and the response type. Prefer a typed\n     * resource (`fs.usage`, `fs.keys`, …) when one exists.\n     */\n    core<T>(req: CoreRequest__88dbed0693a0): Promise<T>;\n}",
        "source": "packages/farthershore-js/dist/client.d.ts#L36",
        "description": "",
        "references": [
          {
            "name": "AuditLogsResource__99efa1e02380",
            "source": "packages/farthershore-js/dist/resources/account.d.ts#L142"
          },
          {
            "name": "AuthResource__beeda8a7af1a",
            "source": "packages/farthershore-js/dist/resources/auth.d.ts#L3"
          },
          {
            "name": "BillingResource__c8dbd9d25fa3",
            "source": "packages/farthershore-js/dist/resources/billing.d.ts#L13"
          },
          {
            "name": "Bootstrap__ecb3d46aafde",
            "source": "packages/farthershore-js/dist/types.d.ts#L294"
          },
          {
            "name": "BusinessResource__933d34c2f16a",
            "source": "packages/farthershore-js/dist/resources/business.d.ts#L2"
          },
          {
            "name": "ClientContext__d9dbf3313290",
            "source": "packages/farthershore-js/dist/config.d.ts#L183"
          },
          {
            "name": "CoreRequest__88dbed0693a0",
            "source": "packages/farthershore-js/dist/http.d.ts#L3"
          },
          {
            "name": "EntitlementsResource__eae052f23903",
            "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L16"
          },
          {
            "name": "FartherShoreApiError__ae8b4410fda4",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
          },
          {
            "name": "KeysResource__2bf8d8c5e820",
            "source": "packages/farthershore-js/dist/resources/keys.d.ts#L3"
          },
          {
            "name": "LegalAcceptance__cc2291cc0442",
            "source": "packages/farthershore-js/dist/types.d.ts#L80"
          },
          {
            "name": "ManagedIntegration__68b11f8f586e",
            "source": "packages/farthershore-js/dist/integrations.d.ts#L6"
          },
          {
            "name": "NotificationsResource__dc7aa1b64a0f",
            "source": "packages/farthershore-js/dist/resources/account.d.ts#L169"
          },
          {
            "name": "ObservedLimitDeny__ff379deca309",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L580"
          },
          {
            "name": "OrganizationsResource__18d4024e64ce",
            "source": "packages/farthershore-js/dist/resources/account.d.ts#L3"
          },
          {
            "name": "PlansResource__05a484289922",
            "source": "packages/farthershore-js/dist/resources/plans.d.ts#L61"
          },
          {
            "name": "PrefetchSurface__2b22bd2b6c45",
            "source": "packages/farthershore-js/dist/client.d.ts#L24"
          },
          {
            "name": "RateLimitSnapshot__934527ed940b",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
          },
          {
            "name": "RbacResource__b63486266173",
            "source": "packages/farthershore-js/dist/resources/account.d.ts#L65"
          },
          {
            "name": "ResourcesResource__ef6d17bbf151",
            "source": "packages/farthershore-js/dist/resources/resources.d.ts#L25"
          },
          {
            "name": "RouteResource__52eafab15328",
            "source": "packages/farthershore-js/dist/resources/route.d.ts#L15"
          },
          {
            "name": "SubscriberContext__86c582775b78",
            "source": "packages/farthershore-js/dist/types.d.ts#L897"
          },
          {
            "name": "TeamResource__b9e413854377",
            "source": "packages/farthershore-js/dist/resources/account.d.ts#L13"
          },
          {
            "name": "UsageLimitsResource__2b1e05e6bcda",
            "source": "packages/farthershore-js/dist/resources/usage-limits.d.ts#L3"
          },
          {
            "name": "UsageResource__a3469cda0e70",
            "source": "packages/farthershore-js/dist/resources/usage.d.ts#L7"
          }
        ]
      },
      {
        "name": "FartherShoreError__8dbed6dcc500",
        "signature": "export declare class FartherShoreError__8dbed6dcc500 extends Error {\n    constructor(message: string);\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L2",
        "description": "",
        "references": []
      },
      {
        "name": "FetchLike__7d89beec4c77",
        "signature": "export type FetchLike__7d89beec4c77 = typeof fetch;",
        "source": "packages/farthershore-js/dist/config.d.ts#L2",
        "description": "",
        "references": []
      },
      {
        "name": "FS_LIMIT_CLASSES__cf69b28be276",
        "signature": "declare const FS_LIMIT_CLASSES__cf69b28be276: readonly [\"quota\", \"rate\", \"concurrency\", \"capacity\", \"spend\", \"adaptive\"];",
        "source": "packages/farthershore-js/dist/deny-codes.d.ts#L63",
        "description": "The closed set of usage-limit classes. Mirrors the contracts `LimitClass`.",
        "references": []
      },
      {
        "name": "FsApiKeysManagerImpl__bbce45124779",
        "signature": "declare function FsApiKeysManagerImpl__bbce45124779(): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/api-keys-manager.d.ts#L1",
        "description": "",
        "references": []
      },
      {
        "name": "FsAuthUser__f6ff4488f475",
        "signature": "export interface FsAuthUser__f6ff4488f475 {\n    /** Stable user/subscription id, or null when unknown. */\n    id: string | null;\n    firstName: string | null;\n    lastName: string | null;\n    /** Display name — Clerk's `fullName`, else `first last`, else null. */\n    fullName: string | null;\n    /** Primary email — Clerk's `primaryEmailAddress.emailAddress` (nested) or a\n     *  flat `email`, else null. */\n    email: string | null;\n    imageUrl: string | null;\n    /** The original Clerk user or safe persona identity view, untouched. */\n    raw: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L789",
        "description": "A normalized identity for the signed-in user — the same shape whether it\ncomes from Clerk or Core's safe test-persona session view. The persona\ncredential remains in an HttpOnly cookie and is never present in `raw`.",
        "references": []
      },
      {
        "name": "FsDenyEnvelope__adf7ef9f2448",
        "signature": "export interface FsDenyEnvelope__adf7ef9f2448 {\n    /**\n     * The semantic class of limit hit — the primary axis clients branch on.\n     * `null` ONLY when the wire carried a `limitClass` string the SDK's closed\n     * mirror does NOT know (a FUTURE class added to contracts but not yet shipped\n     * in this bundle, T13). In that case the raw value is preserved on\n     * {@link unknownLimitClass} and the whole `_fs` block on {@link raw} so a\n     * client can still render + introspect the deny, while the SDK refuses to\n     * invent a known-class facet for it. A KNOWN class is always non-null.\n     */\n    limitClass: FsLimitClass__2d5726601b87 | null;\n    /**\n     * T13 — the raw `limitClass` string when it is NOT a member of the closed\n     * {@link FsLimitClass} mirror (a future/unknown class). Undefined for every\n     * known class. Lets a forward-compat client surface \"a `<unknownLimitClass>`\n     * limit was hit\" + a debug breadcrumb without the SDK guessing semantics.\n     */\n    unknownLimitClass?: string;\n    /**\n     * T13 — the raw `_fs` block exactly as it arrived on the wire, preserved for\n     * debugging/forwarding. Always present (even for a known class) so a developer\n     * can inspect fields this bundle's typed projection doesn't model yet.\n     */\n    raw?: Record<string, unknown>;\n    /** The limit's scope when known (e.g. `subscription`, `org`, `route`). */\n    scope?: string;\n    /** Actor facet for actor-scoped subscriber limits. Carries kind only; raw\n     *  actor ids must never be present in deny envelopes. */\n    actorScope?: \"member\" | \"service_account\";\n    /** The metered/resource dimension when known (e.g. `tokens`, `requests`). */\n    metric?: string;\n    /** Unix epoch ms when the limit window resets, when known. */\n    reset?: number;\n    /** Units remaining in the window at decision time, when known. */\n    remaining?: number;\n    /** Units already consumed in the window at decision time, when known. */\n    used?: number;\n    /** The cap value (the ceiling that was hit), when known. */\n    limit?: number;\n    /** True when retrying the SAME request can succeed (velocity/transient cap). */\n    retrySafe: boolean;\n    /** True when the caller must MODIFY the request (reduce size / change plan)\n     *  before it can succeed — the `capacity`/`spend` affordances. */\n    mustModify: boolean;\n    /** Provider-supplied reason verbatim, when relayed upstream (an `adaptive`\n     *  throttle). */\n    providerReason?: string;\n    /** Whether the platform or an upstream provider decided the limit. */\n    limitOrigin: FsLimitOrigin__1d4de1805fa7;\n    /** Human-facing next step for the END USER, when one applies. */\n    userAction?: string;\n    /** Human-facing next step for the DEVELOPER/operator, when one applies. */\n    devAction?: string;\n    /** The per-attempt request id (correlates with logs/traces). */\n    requestId?: string;\n    /** The gateway decision id (correlates with the usage event / audit). */\n    decisionId?: string;\n    /** Which exact constraint denied (projects from\n     *  `LimitDecision.blockingConstraintId`); present on a limit deny when known. */\n    blockingConstraintId?: string;\n    /** The recommended client reaction. */\n    reaction: FsLimitReaction__06a9e09be641;\n    /** Envelope schema version. Bumped on a NON-additive envelope change. */\n    envelopeVersion?: number;\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L109",
        "description": "The `_fs` deny envelope a limit deny body carries under the `_fs` key\n(`{ error, code, _fs: FsDenyEnvelope }`). A SUPERSET of {@link LimitDescriptor}:\na single self-describing block telling a client WHAT class of limit was hit,\nWHY, and what to DO — without re-deriving it from the wire code + status. A\nhand-mirror of the contracts `FsDenyEnvelope` (the published surface stays\ncontracts-free); the field set is bound to the source by the drift guard. The\noptional fields are absent when not known so the envelope stays byte-minimal.",
        "references": [
          {
            "name": "FsLimitClass__2d5726601b87",
            "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
          },
          {
            "name": "FsLimitOrigin__1d4de1805fa7",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
          },
          {
            "name": "FsLimitReaction__06a9e09be641",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
          }
        ]
      },
      {
        "name": "FsEnvironmentBannerImpl__cd0961e9db86",
        "signature": "declare function FsEnvironmentBannerImpl__cd0961e9db86(): import(\"react\").JSX.Element | null;",
        "source": "packages/farthershore-js/dist/components/environment-banner.d.ts#L1",
        "description": "",
        "references": []
      },
      {
        "name": "FsErrorBoundaryState__e52d6cb39c9c",
        "signature": "interface FsErrorBoundaryState__e52d6cb39c9c {\n    error: Error | null;\n}",
        "source": "packages/farthershore-js/dist/components/error-boundary.d.ts#L13",
        "description": "",
        "references": []
      },
      {
        "name": "FsFetchOptions__62afbd421e0f",
        "signature": "export interface FsFetchOptions__62afbd421e0f {\n    /** HTTP method for the upstream call. Defaults to `GET`. */\n    method?: string;\n    /** Browser-controlled headers. The named integration allowlists them. */\n    headers?: Record<string, string>;\n    /** Browser-controlled query parameters. The named integration allowlists\n     * each name; secret injection parameters remain server-owned. */\n    query?: Record<string, string>;\n    /** Optional, explicitly typed request body. The named integration's bounded\n     * body declaration is enforced by the gateway. */\n    body?: {\n        kind: \"json\";\n        value: unknown;\n    } | {\n        kind: \"text\";\n        value: string;\n    };\n    /** Abort signal — cancels the in-flight secure fetch (and the token mint). */\n    signal?: AbortSignal;\n}",
        "source": "packages/farthershore-js/dist/fetch.d.ts#L3",
        "description": "Options for {@link fsFetch}.",
        "references": []
      },
      {
        "name": "FsLimitClass__2d5726601b87",
        "signature": "export type FsLimitClass__2d5726601b87 = (typeof FS_LIMIT_CLASSES__cf69b28be276)[number];",
        "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65",
        "description": "The semantic class a usage-limit deny falls into. Mirrors `LimitClass`.",
        "references": [
          {
            "name": "FS_LIMIT_CLASSES__cf69b28be276",
            "source": "packages/farthershore-js/dist/deny-codes.d.ts#L63"
          }
        ]
      },
      {
        "name": "FsLimitOrigin__1d4de1805fa7",
        "signature": "export type FsLimitOrigin__1d4de1805fa7 = \"platform\" | \"provider\" | \"subscriber\";",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L96",
        "description": "Where a limit was decided. Mirrors the contracts `LimitOrigin` (`platform` —\na plan/entitlement limit the platform owns; `provider` — an upstream throttle\nthe platform relays).",
        "references": []
      },
      {
        "name": "FsLimitReaction__06a9e09be641",
        "signature": "export type FsLimitReaction__06a9e09be641 = \"none\" | \"backoff_retry\" | \"wait_then_retry\" | \"queue\" | \"reduce_then_retry\" | \"fallback\" | \"upgrade\";",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L99",
        "description": "What a client should DO about a limit deny — the recommended reaction.\nMirrors the contracts `LimitReaction`.",
        "references": []
      },
      {
        "name": "FsNotificationPreferencesImpl__49ca85217f63",
        "signature": "declare function FsNotificationPreferencesImpl__49ca85217f63(): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/notification-preferences.d.ts#L1",
        "description": "",
        "references": []
      },
      {
        "name": "FsOnboardingPlanRailImpl__92c14436dcce",
        "signature": "declare function FsOnboardingPlanRailImpl__92c14436dcce({ boot, selectedOrganizationId, onActivated, onError, onAutoApiKey, successUrl, cancelUrl, }: FsOnboardingPlanRailProps): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/onboarding-plan-rail.d.ts#L40",
        "description": "",
        "references": [
          {
            "name": "FsOnboardingPlanRailProps",
            "source": "packages/farthershore-js/dist/components/onboarding-plan-rail.d.ts#L2"
          }
        ]
      },
      {
        "name": "FsSubscriberStatusImpl__98d87056de79",
        "signature": "declare function FsSubscriberStatusImpl__98d87056de79({ variant, className, }?: FsSubscriberStatusProps): import(\"react\").JSX.Element | null;",
        "source": "packages/farthershore-js/dist/components/subscriber-status.d.ts#L8",
        "description": "",
        "references": [
          {
            "name": "FsSubscriberStatusProps",
            "source": "packages/farthershore-js/dist/components/subscriber-status.d.ts#L1"
          }
        ]
      },
      {
        "name": "FsTeamAccessRequestsSectionImpl__5d99c180600c",
        "signature": "declare function FsTeamAccessRequestsSectionImpl__5d99c180600c({ className, canManage, }?: FsTeamAccessRequestsSectionProps): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/team.d.ts#L51",
        "description": "",
        "references": [
          {
            "name": "FsTeamAccessRequestsSectionProps",
            "source": "packages/farthershore-js/dist/components/team.d.ts#L43"
          }
        ]
      },
      {
        "name": "FsTeamComponentAccessSectionImpl__b91eefd936ec",
        "signature": "declare function FsTeamComponentAccessSectionImpl__b91eefd936ec({ className, canManage, }?: FsTeamComponentAccessSectionProps): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/team.d.ts#L64",
        "description": "",
        "references": [
          {
            "name": "FsTeamComponentAccessSectionProps",
            "source": "packages/farthershore-js/dist/components/team.d.ts#L57"
          }
        ]
      },
      {
        "name": "FsTeamImpl__401952c13e59",
        "signature": "declare function FsTeamImpl__401952c13e59({ className, canManage, canRemove }?: FsTeamProps): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/team.d.ts#L82",
        "description": "",
        "references": [
          {
            "name": "FsTeamProps",
            "source": "packages/farthershore-js/dist/components/team.d.ts#L71"
          }
        ]
      },
      {
        "name": "FsTeamMembersSectionImpl__6330b8d89acb",
        "signature": "declare function FsTeamMembersSectionImpl__6330b8d89acb({ className, canManage, canRemove, title, refreshSignal, }?: FsTeamMembersSectionProps): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/team.d.ts#L37",
        "description": "",
        "references": [
          {
            "name": "FsTeamMembersSectionProps",
            "source": "packages/farthershore-js/dist/components/team.d.ts#L22"
          }
        ]
      },
      {
        "name": "FsTeamRolesSectionImpl__5ad80c7e8f1f",
        "signature": "declare function FsTeamRolesSectionImpl__5ad80c7e8f1f({ className, canManage, onRolesChanged, }?: FsTeamRolesSectionProps): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/team.d.ts#L15",
        "description": "",
        "references": [
          {
            "name": "FsTeamRolesSectionProps",
            "source": "packages/farthershore-js/dist/components/team.d.ts#L4"
          }
        ]
      },
      {
        "name": "FsUsageEventsImpl__c310f93c9cf0",
        "signature": "declare function FsUsageEventsImpl__c310f93c9cf0({ events, limit, ariaLabel, emptyState, showControls, range, onRangeChange, periodStart, periodEnd, exportFilenamePrefix, }: FsUsageEventsProps): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/usage-surfaces.d.ts#L63",
        "description": "",
        "references": [
          {
            "name": "FsUsageEventsProps",
            "source": "packages/farthershore-js/dist/components/usage-surfaces.d.ts#L45"
          }
        ]
      },
      {
        "name": "FsUsageLimitsImpl__c99c2cc3795d",
        "signature": "declare function FsUsageLimitsImpl__c99c2cc3795d(props?: FsUsageLimitsProps): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/usage-limits.d.ts#L7",
        "description": "",
        "references": [
          {
            "name": "FsUsageLimitsProps",
            "source": "packages/farthershore-js/dist/components/usage-limits.d.ts#L1"
          }
        ]
      },
      {
        "name": "FsUsageSummaryImpl__fa0561bef1df",
        "signature": "declare function FsUsageSummaryImpl__fa0561bef1df({ plan, meters, summary, billingBasis, headMeta, billPreview, periodStart, periodEnd, pending, }: {\n    plan: Plan__3a8348415fe9 | null;\n    meters: Array<{\n        key: string;\n        display: string;\n        unit?: string;\n    }>;\n    summary: Record<string, number>;\n    billingBasis?: \"requests\" | \"usage\";\n    /** The subscriber's bill preview, when the host reads one. Supplies the\n     *  MONEY allowances (\"$60 included · $12.40 used\") a funded plan rations in\n     *  — they exist nowhere on the plan or in the usage summary. */\n    billPreview?: BillPreview__c6a85a661e87 | null;\n    /** Current billing-period bounds (the usage read returns them), rendered\n     *  through the shared `usagePeriodLabel` so a degenerate window degrades to\n     *  \"Since …\" rather than printing a zero-length range. */\n    periodStart?: string | null;\n    periodEnd?: string | null;\n    /** The usage read is still in flight.\n     *\n     *  Without this an empty `summary` renders as a confident \"0 / 10,000\",\n     *  which is a WRONG number rather than a loading state — the value then\n     *  jumps when the read lands. Prefer showing nothing to showing a zero we\n     *  have not measured. */\n    pending?: boolean;\n    /** Extra right-side header content after the rate-limit text (e.g. the\n     *  Overview's \"N active keys\"). */\n    headMeta?: ReactNode;\n}): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/usage-surfaces.d.ts#L15",
        "description": "",
        "references": [
          {
            "name": "BillPreview__c6a85a661e87",
            "source": "packages/farthershore-js/dist/types.d.ts#L1284"
          },
          {
            "name": "Plan__3a8348415fe9",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "GatewayContextToken__447d2a94e34b",
        "signature": "export interface GatewayContextToken__447d2a94e34b {\n    /** Short-lived `fsc_` bearer accepted by the Gateway for this subscriber. */\n    token: string;\n    /** ISO timestamp when the token expires. */\n    expiresAt: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L803",
        "description": "",
        "references": []
      },
      {
        "name": "KeysResource__2bf8d8c5e820",
        "signature": "export interface KeysResource__2bf8d8c5e820 {\n    /** The consumer's API keys for this product (secrets are never returned). */\n    list(opts?: {\n        signal?: AbortSignal;\n    }): Promise<ApiKey__a2eadd893331[]>;\n    /**\n     * Create a key. The returned `secret` is shown ONCE.\n     *\n     * Consumer-principal (D2): this generic route creates PERSONAL member keys.\n     * Managed service credentials use the canonical `serviceAccounts` lifecycle,\n     * which can return PENDING without creating a secret.\n     *\n     * `roleKeys` binds the key to org RBAC roles (live-bound: a role edit reaches\n     * the key without reprovisioning); `restrictedPermissions` optionally narrows\n     * the bound roles to a Stripe-style subset. Both are grantable only within\n     * the creator's own permissions — the backend 403s an over-reaching binding.\n     * (PERSONAL keys ignore `roleKeys` — their perms track the bound member.)\n     */\n    create(input?: {\n        label?: string;\n        scopes?: string[];\n        roleKeys?: string[];\n        restrictedPermissions?: string[];\n        kind?: \"PERSONAL\";\n        /** PERSONAL — mint FOR this member (their `Membership.id`); admin-gated. */\n        memberId?: string;\n    }): Promise<CreatedApiKey__eee6ebdc6f61>;\n    /** Permanently revoke a key by id. */\n    revoke(keyId: string): Promise<void>;\n    /** Rotate a key — revokes the old and returns a new `secret` (shown once). */\n    rotate(keyId: string): Promise<CreatedApiKey__eee6ebdc6f61>;\n    /** Canonical managed service-account provisioning and approval lifecycle. */\n    readonly serviceAccounts: ServiceAccountsResource__abd2dd8a7d4f;\n}",
        "source": "packages/farthershore-js/dist/resources/keys.d.ts#L3",
        "description": "",
        "references": [
          {
            "name": "ApiKey__a2eadd893331",
            "source": "packages/farthershore-js/dist/types.d.ts#L347"
          },
          {
            "name": "CreatedApiKey__eee6ebdc6f61",
            "source": "packages/farthershore-js/dist/types.d.ts#L375"
          },
          {
            "name": "ServiceAccountsResource__abd2dd8a7d4f",
            "source": "packages/farthershore-js/dist/resources/keys.d.ts#L53"
          }
        ]
      },
      {
        "name": "LegalAcceptance__cc2291cc0442",
        "signature": "export interface LegalAcceptance__cc2291cc0442 {\n    kind: string;\n    version: string;\n    contentHash: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L80",
        "description": "",
        "references": []
      },
      {
        "name": "LegalConsentStatus__2c5f3ab016cd",
        "signature": "export interface LegalConsentStatus__2c5f3ab016cd {\n    required: boolean;\n    documents: LegalDocumentStatus__f2d5a2d96393[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L76",
        "description": "",
        "references": [
          {
            "name": "LegalDocumentStatus__f2d5a2d96393",
            "source": "packages/farthershore-js/dist/types.d.ts#L67"
          }
        ]
      },
      {
        "name": "LegalDocumentAcceptanceMode__6e040b71b235",
        "signature": "export type LegalDocumentAcceptanceMode__6e040b71b235 = \"agree\" | \"acknowledge\" | \"none\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L60",
        "description": "",
        "references": []
      },
      {
        "name": "LegalDocumentReference__0e8dba55b6a6",
        "signature": "export interface LegalDocumentReference__0e8dba55b6a6 {\n    title: string;\n    url: string;\n    acceptanceMode: LegalDocumentAcceptanceMode__6e040b71b235;\n    effectiveDate?: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L61",
        "description": "",
        "references": [
          {
            "name": "LegalDocumentAcceptanceMode__6e040b71b235",
            "source": "packages/farthershore-js/dist/types.d.ts#L60"
          }
        ]
      },
      {
        "name": "LegalDocumentStatus__f2d5a2d96393",
        "signature": "export interface LegalDocumentStatus__f2d5a2d96393 extends LegalDocumentReference__0e8dba55b6a6 {\n    kind: string;\n    version: string;\n    contentHash: string;\n    consentLabel?: string;\n    changeNote?: string;\n    accepted: boolean;\n    acceptedAt?: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L67",
        "description": "",
        "references": [
          {
            "name": "LegalDocumentReference__0e8dba55b6a6",
            "source": "packages/farthershore-js/dist/types.d.ts#L61"
          }
        ]
      },
      {
        "name": "LegalIndexImpl__19dbad318e95",
        "signature": "declare function LegalIndexImpl__19dbad318e95({ className, renderItem, emptyState, }?: LegalIndexProps): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/legal-index.d.ts#L11",
        "description": "",
        "references": [
          {
            "name": "LegalIndexProps",
            "source": "packages/farthershore-js/dist/components/legal-index.d.ts#L3"
          }
        ]
      },
      {
        "name": "LegalKind__db43d04bc941",
        "signature": "export type LegalKind__db43d04bc941 = \"terms\" | \"privacy\" | (string & {});",
        "source": "packages/farthershore-js/dist/components/product-docs/fetch-product-legal.d.ts#L1",
        "description": "",
        "references": []
      },
      {
        "name": "LimitDescriptor__01693492a147",
        "signature": "export interface LimitDescriptor__01693492a147 {\n    /** Stable identifier for the limit that was hit, e.g. `resource:widgets`. */\n    limitCode: string;\n    /** The metered/resource dimension, when known (e.g. `widgets`, `requests`). */\n    dimension: string | null;\n    /** The cap the subscriber is at, when known. */\n    currentCapacity: number | null;\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L85",
        "description": "The machine-readable limit descriptor the gateway/core attach to a limit\ndeny body (`{ error: { code, message, limitCode, dimension, currentCapacity } }`).\nThe SDK turns this into an upgrade prompt — see {@link LimitExceededError}.",
        "references": []
      },
      {
        "name": "LimitExceededError__7844c601e6fd",
        "signature": "export declare class LimitExceededError__7844c601e6fd extends FartherShoreApiError__ae8b4410fda4 {\n    readonly limitCode: string;\n    readonly dimension: string | null;\n    readonly currentCapacity: number | null;\n    /** The semantic {@link FsLimitClass} of this limit — derived from the `_fs`\n     *  envelope when present, else from the wire code + limitCode + status\n     *  ({@link classifyFsLimit}). null only when nothing classifies it. */\n    readonly limitClass: FsLimitClass__2d5726601b87 | null;\n    /** The parsed `_fs` deny envelope, when the body carried one. The richer\n     *  source for the reaction/headroom fields below. */\n    readonly envelope: FsDenyEnvelope__adf7ef9f2448 | null;\n    /** True when retrying the SAME request can succeed (a velocity/transient cap);\n     *  false when it never will (a spend cap / oversized request). */\n    readonly retrySafe: boolean;\n    /** True when the caller must MODIFY the request before it can succeed (a\n     *  `capacity` ceiling or `spend` cap). */\n    readonly mustModify: boolean;\n    /** The recommended client reaction. */\n    readonly reaction: FsLimitReaction__06a9e09be641;\n    /** Whether the platform or an upstream provider decided the limit. */\n    readonly limitOrigin: FsLimitOrigin__1d4de1805fa7;\n    /** The gateway decision id (correlates with the usage event / audit), when\n     *  the `_fs` envelope carried one. */\n    readonly decisionId: string | null;\n    /** When the limit window resets, when known (from the `_fs` envelope `reset`,\n     *  unix-epoch ms, else the `X-RateLimit-Reset` snapshot). */\n    readonly reset: Date | null;\n    /** Units remaining in the window at decision time, when known. */\n    readonly remaining: number | null;\n    /** Units already consumed in the window at decision time, when known. */\n    readonly used: number | null;\n    /** The cap value hit, when known. */\n    readonly limit: number | null;\n    constructor(status: number, code: string, message: string, body: unknown, descriptor: LimitDescriptor__01693492a147, retryAfterSeconds?: number | null, rateLimit?: RateLimitSnapshot__934527ed940b | null);\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L206",
        "description": "A {@link FartherShoreApiError} that is specifically a plan-limit block — a\nresource quota (`402 resource_count_limit_exceeded`), a usage quota, a rate\nlimit, or a credit cap. Carries the {@link LimitDescriptor} so the app can\nresolve an upgrade target from the bootstrap catalog and prompt the user\n(see `useUpgrade` / `<UpgradePrompt>`).",
        "references": [
          {
            "name": "FartherShoreApiError__ae8b4410fda4",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L49"
          },
          {
            "name": "FsDenyEnvelope__adf7ef9f2448",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L109"
          },
          {
            "name": "FsLimitClass__2d5726601b87",
            "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
          },
          {
            "name": "FsLimitOrigin__1d4de1805fa7",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
          },
          {
            "name": "FsLimitReaction__06a9e09be641",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
          },
          {
            "name": "LimitDescriptor__01693492a147",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L85"
          },
          {
            "name": "RateLimitSnapshot__934527ed940b",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L8"
          }
        ]
      },
      {
        "name": "LimitLike__19863c6600b0",
        "signature": "type LimitLike__19863c6600b0 = LimitExceededError__7844c601e6fd;",
        "source": "packages/farthershore-js/dist/components/limit-boundary.d.ts#L4",
        "description": "A plan limit the boundary can surface.",
        "references": [
          {
            "name": "LimitExceededError__7844c601e6fd",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L206"
          }
        ]
      },
      {
        "name": "LimitNoticeImpl__e753a55ffa58",
        "signature": "declare function LimitNoticeImpl__e753a55ffa58({ error, className }: LimitNoticeProps): import(\"react\").JSX.Element | null;",
        "source": "packages/farthershore-js/dist/components/limit-notice.d.ts#L9",
        "description": "",
        "references": [
          {
            "name": "LimitNoticeProps",
            "source": "packages/farthershore-js/dist/components/limit-notice.d.ts#L1"
          }
        ]
      },
      {
        "name": "LimitUpgradePromptProps__0343e0f6f02c",
        "signature": "interface LimitUpgradePromptProps__0343e0f6f02c extends UpgradePromptBaseProps__aaa79a508e5a {\n    /** The block to resolve an upgrade for — a plan-limit\n     *  ({@link LimitExceededError})\n     */\n    error: LimitExceededError__7844c601e6fd;\n    plan?: never;\n    variant?: \"card\";\n    /**\n     * Called only after a plan change that completed INLINE (no checkout\n     * redirect). When `changePlan` returns a `checkoutUrl` the upgrade is not yet\n     * complete — the user is redirected and this does NOT fire.\n     */\n    onUpgraded?: (target: UpgradeTarget__4fa17b7312aa) => void;\n    onChanged?: never;\n    label?: never;\n    currentPlan?: never;\n}",
        "source": "packages/farthershore-js/dist/components/upgrade-prompt.d.ts#L8",
        "description": "",
        "references": [
          {
            "name": "LimitExceededError__7844c601e6fd",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L206"
          },
          {
            "name": "UpgradePromptBaseProps__aaa79a508e5a",
            "source": "packages/farthershore-js/dist/components/upgrade-prompt.d.ts#L4"
          },
          {
            "name": "UpgradeTarget__4fa17b7312aa",
            "source": "packages/farthershore-js/dist/react/use-upgrade.d.ts#L3"
          }
        ]
      },
      {
        "name": "ManagedIntegration__68b11f8f586e",
        "signature": "export type ManagedIntegration__68b11f8f586e = {\n    fetch(path: string, init?: ManagedIntegrationRequestInit__57e8453840f3): Promise<Response>;\n    /**\n     * Fetch-compatible adapter for native SDKs that accept a custom transport.\n     * Pair it with {@link url}; it converts the SDK's ordinary Request into the\n     * bounded named-integration envelope without exposing the injected secret.\n     */\n    transport(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;\n    /** Same-origin reserved base URL for native SDKs. It must be paired with this\n     * handle's `transport`; a raw browser fetch to the URL is not authorized. */\n    url(path?: string): string;\n};",
        "source": "packages/farthershore-js/dist/integrations.d.ts#L6",
        "description": "A frontend-safe handle to one product-declared integration. It never exposes\nits upstream origin, secret reference, or injection configuration.",
        "references": [
          {
            "name": "ManagedIntegrationRequestInit__57e8453840f3",
            "source": "packages/farthershore-js/dist/integrations.d.ts#L3"
          }
        ]
      },
      {
        "name": "ManagedIntegrationRequestInit__57e8453840f3",
        "signature": "export type ManagedIntegrationRequestInit__57e8453840f3 = FsFetchOptions__62afbd421e0f;",
        "source": "packages/farthershore-js/dist/integrations.d.ts#L3",
        "description": "",
        "references": [
          {
            "name": "FsFetchOptions__62afbd421e0f",
            "source": "packages/farthershore-js/dist/fetch.d.ts#L3"
          }
        ]
      },
      {
        "name": "Meter__c4ca128fcf40",
        "signature": "export interface Meter__c4ca128fcf40 {\n    /** Stable dimension key (e.g. \"requests\", \"tokens\"). */\n    key: string;\n    /** Human-friendly label for the dimension. */\n    display: string;\n    /** Optional unit suffix (e.g. \"ms\", \"tokens\"). */\n    unit?: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L15",
        "description": "A business-level meter definition (the dimension catalog used to label/format\nusage). Mirrors the wire `MeterDefinition`; only the display-relevant fields\nare surfaced.",
        "references": []
      },
      {
        "name": "MeterUsageRow__65f0c2813d76",
        "signature": "export type MeterUsageRow__65f0c2813d76 = {\n    key: string;\n    label: string;\n    used: number;\n    quota: number | null;\n    unit?: string;\n    /** True when the row is a MEASURE the product meters but does NOT publish in\n     *  its served meter catalog (`ocr_pages`, `pages`) rather than a first-class\n     *  meter. Such a row is a breakdown of the metered total, not a peer of it —\n     *  the usage surfaces render it as a secondary line under the meter rows\n     *  instead of as another top-level row. */\n    secondary?: boolean;\n};",
        "source": "packages/farthershore-js/dist/format/catalog-display.d.ts#L226",
        "description": "",
        "references": []
      },
      {
        "name": "NanosAmount__f9c1e22d3cbe",
        "signature": "export type NanosAmount__f9c1e22d3cbe = string | null;",
        "source": "packages/farthershore-js/dist/types.d.ts#L1179",
        "description": "A nanodollar amount off the wire: Core's decimal-integer STRING, or `null`\nwhen the wire value was malformed (non-integer, non-string, missing). The\nreader never coerces a malformed amount to `\"0\"` — a `null` renders as\n\"unavailable\", never as `$0`. Format non-null values with\n`format.formatNanos` (bigint) — never `Number()`.",
        "references": []
      },
      {
        "name": "NonEmptyPermissionList__ca911cbb6fa0",
        "signature": "export type NonEmptyPermissionList__ca911cbb6fa0 = [string, ...string[]];",
        "source": "packages/farthershore-js/dist/types.d.ts#L440",
        "description": "A service-account authority request must contain at least one permission.",
        "references": []
      },
      {
        "name": "NotificationPreferences__f7f3c3495466",
        "signature": "export interface NotificationPreferences__f7f3c3495466 {\n    master: boolean;\n    categories: Record<string, boolean>;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1164",
        "description": "The subscriber's full notification-preference state\n(`GET /portal/businesses/:id/me/notification-preferences`). Email is the only\nnotifiable channel, so a preference is a single email OPT-OUT:\n - `master === true` suppresses EVERY category's email;\n - `categories[category] === true` additionally mutes a single category.\n\nEmail is suppressed for an event iff the master opts out OR the event's\ncategory opts out. Category keys are the contracts notification categories\n(`billing`, `usage`, …) — kept as a plain string map so the SDK stays\ncontracts-free; the UI joins them to `NOTIFICATION_CATEGORY_META`.",
        "references": []
      },
      {
        "name": "NotificationPreferencesPatch__73fed684877b",
        "signature": "export interface NotificationPreferencesPatch__73fed684877b {\n    master?: boolean;\n    categories?: Record<string, boolean>;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1170",
        "description": "The PATCH body — a PARTIAL patch of the master and/or any categories. Only\nthe master/categories present change; omit the rest. Send only the delta.",
        "references": []
      },
      {
        "name": "NotificationsResource__dc7aa1b64a0f",
        "signature": "export interface NotificationsResource__dc7aa1b64a0f {\n    /** The current preference state. Missing `master`/`categories` in a partial\n     *  wire response are normalized to the opted-in defaults. */\n    preferences(opts?: {\n        signal?: AbortSignal;\n    }): Promise<NotificationPreferences__f7f3c3495466>;\n    /** Partial patch — send ONLY the changed channels/categories. Returns the\n     *  full, normalized updated state. */\n    updatePreferences(patch: NotificationPreferencesPatch__73fed684877b): Promise<NotificationPreferences__f7f3c3495466>;\n}",
        "source": "packages/farthershore-js/dist/resources/account.d.ts#L169",
        "description": "The subscriber's per-category notification preferences (the portal\n`/me/notification-preferences` surface). OPT-OUT model — see\n{@link NotificationPreferences}. Deliberately NON-degrading (like\n{@link RbacResource}): a failed read THROWS the typed `FartherShoreApiError`\nso the preferences page can render an explicit error state rather than a\nsilent all-opted-in default.",
        "references": [
          {
            "name": "NotificationPreferences__f7f3c3495466",
            "source": "packages/farthershore-js/dist/types.d.ts#L1164"
          },
          {
            "name": "NotificationPreferencesPatch__73fed684877b",
            "source": "packages/farthershore-js/dist/types.d.ts#L1170"
          }
        ]
      },
      {
        "name": "ObservedLimitDeny__ff379deca309",
        "signature": "export interface ObservedLimitDeny__ff379deca309 {\n    /** The semantic class, or null for an UNKNOWN/future class (T13). */\n    limitClass: FsLimitClass__2d5726601b87 | null;\n    /** The raw `limitClass` string when it is outside the closed mirror (T13). */\n    unknownLimitClass?: string;\n    /** The recommended client reaction. */\n    reaction: FsLimitReaction__06a9e09be641;\n    /** Whether the platform or an upstream provider decided the deny. */\n    limitOrigin: FsLimitOrigin__1d4de1805fa7;\n    /** The provider-supplied reason verbatim, when this relayed an upstream\n     *  throttle (an adaptive deny). */\n    providerReason: string | null;\n    /** When the limit window resets, when known. */\n    reset: Date | null;\n    /** Units remaining in the window at decision time, when known. */\n    remaining: number | null;\n    /** The cap value hit, when known. */\n    limit: number | null;\n    /** The HTTP status of the deny. */\n    status: number;\n    /** The wire `code` of the deny. */\n    code: string;\n    /** The gateway decision id, when known. */\n    decisionId: string | null;\n    /** Wall-clock instant (epoch ms) the deny was observed — drives staleness. */\n    observedAt: number;\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L580",
        "description": "A5-amend (T11) — a snapshot of a single OBSERVED limit/throttle deny, captured\nas it leaves the transport. The ADVISORY input to `useLimitStatus()`: the\nfreshest known RECENT deny (NOT a live poll — the gateway stays authoritative).\nProvider-neutral; forward-compat (an unknown future class keeps `limitClass`\nnull + the raw value on `unknownLimitClass`, never crashing — T13).",
        "references": [
          {
            "name": "FsLimitClass__2d5726601b87",
            "source": "packages/farthershore-js/dist/deny-codes.d.ts#L65"
          },
          {
            "name": "FsLimitOrigin__1d4de1805fa7",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L96"
          },
          {
            "name": "FsLimitReaction__06a9e09be641",
            "source": "packages/farthershore-js/dist/errors/index.d.ts#L99"
          }
        ]
      },
      {
        "name": "OffsetPage__af8a84ff58be",
        "signature": "export interface OffsetPage__af8a84ff58be<T> {\n    data: T[];\n    pagination: {\n        limit: number;\n        offset: number;\n        hasMore: boolean;\n    };\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L535",
        "description": "",
        "references": []
      },
      {
        "name": "OnboardingResult__d5ee678fcfed",
        "signature": "export interface OnboardingResult__d5ee678fcfed {\n    checkoutUrl?: string | null;\n    subscriber?: unknown;\n    /** One-time full key secret when Core auto-creates the first key. */\n    autoApiKey?: string | {\n        secret?: string;\n    } | null;\n    /** Set when the first-key mint failed AFTER the subscriber became active —\n     *  surfaced (not swallowed) so the client can tell the user. */\n    autoApiKeyError?: AutoApiKeyError__bd378e9396dc | null;\n    raw: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1104",
        "description": "`POST /onboarding` result: paid plans hand back `checkoutUrl` (note: NOT\n`url` like checkout-session); free plans activate inline and may include a\none-time auto-created API key (drives the auto-key banner).",
        "references": [
          {
            "name": "AutoApiKeyError__bd378e9396dc",
            "source": "packages/farthershore-js/dist/types.d.ts#L1097"
          }
        ]
      },
      {
        "name": "OpaqueAllowanceDisplay__09b08c9319dc",
        "signature": "export type OpaqueAllowanceDisplay__09b08c9319dc = {\n    kind: \"multiplier\";\n    /** Authored allowance in display units (e.g. 5 for a \"5x\" plan). */\n    allowanceUnits: number;\n    /** Remaining allowance in display units, 2 decimals, as a string. */\n    remainingUnits: string;\n    /** Consumed allowance in display units, 2 decimals, as a string. */\n    consumedUnits: string;\n} | {\n    kind: \"fraction\";\n    /** Consumed share of the allowance in basis points (0..10000). */\n    consumedBasisPoints: number;\n    /** Remaining share of the allowance in basis points (0..10000). */\n    remainingBasisPoints: number;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L1215",
        "description": "Opaque allowance display — NEVER carries a nanodollar amount. Either the\nplan-authored display units (`multiplier`: the allowance is\n`allowanceUnits` units, remaining/consumed are fractional units of it) or,\nwhen the plan authored no display, the consumption fraction in basis\npoints.",
        "references": []
      },
      {
        "name": "OpaqueBillPreview__249f4b617b5a",
        "signature": "export interface OpaqueBillPreview__249f4b617b5a {\n    currency: string;\n    disclosure: \"opaque\";\n    /** The plan's recurring fee, in cents. */\n    recurringFeeCents: number;\n    allowances: OpaqueBillPreviewAllowance__c67c601b6f42[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1277",
        "description": "Opaque plans return allowance shape ONLY — nothing a subscriber could\ndivide by a known request count to recover the per-unit rate. Amounts owed\nsurface through the invoice, not the preview.",
        "references": [
          {
            "name": "OpaqueBillPreviewAllowance__c67c601b6f42",
            "source": "packages/farthershore-js/dist/types.d.ts#L1232"
          }
        ]
      },
      {
        "name": "OpaqueBillPreviewAllowance__c67c601b6f42",
        "signature": "export interface OpaqueBillPreviewAllowance__c67c601b6f42 {\n    kind: string;\n    /** Bucket lifecycle state — Core's `BucketState`, verbatim. */\n    state: BucketState__c796139d57fe;\n    expiresAt: string | null;\n    display: OpaqueAllowanceDisplay__09b08c9319dc;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1232",
        "description": "A funding allowance under opaque disclosure — kind / state / expiry plus\nthe authored display; no amounts.",
        "references": [
          {
            "name": "BucketState__c796139d57fe",
            "source": "packages/farthershore-js/dist/types.d.ts#L1184"
          },
          {
            "name": "OpaqueAllowanceDisplay__09b08c9319dc",
            "source": "packages/farthershore-js/dist/types.d.ts#L1215"
          }
        ]
      },
      {
        "name": "OrganizationsResource__18d4024e64ce",
        "signature": "export interface OrganizationsResource__18d4024e64ce {\n    /** The orgs through which the current user holds subscriptions to this\n     *  product (B2B multi-org). Degrades to the empty shape on any error —\n     *  exactly how the SSR portal treated it. Set `strict` only when a caller\n     *  needs to render the read failure distinctly from a valid empty result. */\n    contexts(opts?: {\n        signal?: AbortSignal;\n        strict?: boolean;\n    }): Promise<SubscriptionContextsResult__fe44e57e7d49>;\n}",
        "source": "packages/farthershore-js/dist/resources/account.d.ts#L3",
        "description": "",
        "references": [
          {
            "name": "SubscriptionContextsResult__fe44e57e7d49",
            "source": "packages/farthershore-js/dist/types.d.ts#L968"
          }
        ]
      },
      {
        "name": "OrgSwitcherImpl__e664bc10fc1b",
        "signature": "declare function OrgSwitcherImpl__e664bc10fc1b({ className, contexts, selectedOrganizationId, collapsed, onSelect, }?: OrgSwitcherProps): import(\"react\").JSX.Element | null;",
        "source": "packages/farthershore-js/dist/components/org-switcher.d.ts#L15",
        "description": "",
        "references": [
          {
            "name": "OrgSwitcherProps",
            "source": "packages/farthershore-js/dist/components/org-switcher.d.ts#L2"
          }
        ]
      },
      {
        "name": "PendingServiceAccountApproval__5aaaeb81c691",
        "signature": "export interface PendingServiceAccountApproval__5aaaeb81c691 {\n    id: string;\n    operation: ServiceAccountApprovalOperation__d422a57b0b16;\n    serviceAccountId: string;\n    requestedBy: string;\n    requestedPermissions: string[];\n    excessPermissions: string[];\n    createdAt: string;\n    serviceAccount: {\n        name: string;\n        /** Frozen grants that stay active for a pending UPDATE. */\n        grantedPermissions: string[];\n    };\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L521",
        "description": "",
        "references": [
          {
            "name": "ServiceAccountApprovalOperation__d422a57b0b16",
            "source": "packages/farthershore-js/dist/types.d.ts#L382"
          }
        ]
      },
      {
        "name": "PendingServiceAccountCreateResponse__75eae3a7015a",
        "signature": "export interface PendingServiceAccountCreateResponse__75eae3a7015a {\n    status: \"PENDING\";\n    serviceAccountId: string;\n    approvalId: string;\n    requestedPermissions: string[];\n    /** A pending create has no live credential or frozen authority. */\n    grantedPermissions: [];\n    excessPermissions: string[];\n    eligibleApproverIds: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L455",
        "description": "",
        "references": []
      },
      {
        "name": "PendingServiceAccountUpdateResponse__97b4460d1924",
        "signature": "export interface PendingServiceAccountUpdateResponse__97b4460d1924 {\n    status: \"PENDING\";\n    serviceAccountId: string;\n    approvalId: string;\n    /** Frozen grants that remain active while approval is pending. */\n    activePermissions: string[];\n    requestedPermissions: string[];\n    excessPermissions: string[];\n    eligibleApproverIds: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L476",
        "description": "",
        "references": []
      },
      {
        "name": "PersonaAuthSession__da61c3cf64e7",
        "signature": "export interface PersonaAuthSession__da61c3cf64e7 {\n    kind: \"test-persona\";\n    personaId: string;\n    userId: string;\n    organizationId: string | null;\n    displayName: string | null;\n    expiresAt: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L334",
        "description": "Safe, non-secret view of a server-owned test-persona browser session.",
        "references": []
      },
      {
        "name": "Plan__3a8348415fe9",
        "signature": "export interface Plan__3a8348415fe9 {\n    /** Immutable `CompiledPlan.id` — the pointer passed to `subscribe()`. */\n    id: string;\n    key: string;\n    name: string;\n    description: string | null;\n    /**\n     * The builder's DECLARED plan kind. `\"free\"` is the free tier — a FLOOR,\n     * not an option: subscribers are auto-enrolled on it at sign-up and fall\n     * back to it when a paid plan is cancelled, so `<PlansTable>` and every\n     * other plan-card surface hides it rather than offering it as a choice.\n     * Read this field — do NOT infer it from a zero recurring fee, which is\n     * also true of `usage` plans that bill usage.\n     */\n    kind: PlanKind__5f6d46ef299c;\n    /** Recurring fee, in cents (0 for free / usage plans). */\n    recurringFeeCents: number;\n    /** Billing cadence for the recurring fee + metered usage — `\"month\"`\n     *  (default) or `\"year\"` (annual). Lets a pricing card render \"$X/yr\" vs\n     *  \"$X/mo\" and badge annual tiers. Defaults to `\"month\"` when the wire DTO\n     *  omits it (the platform omits the key for monthly plans). */\n    billingInterval: \"month\" | \"year\";\n    /** ISO 4217 currency of every money field on the plan. REQUIRED in the\n     *  normalized model — defaults to `\"USD\"` when the wire DTO omits it (the\n     *  USD-only platform omits the key today). */\n    currency: string;\n    /** Free-trial length in days (0 = no trial). */\n    trialDays: number;\n    /** Optional monthly spend cap, in cents. */\n    maxMonthlySpendCents: number | null;\n    /** Optional minimum monthly spend floor, in cents. */\n    minMonthlySpendCents: number | null;\n    /** Structural metered dimensions (no money). Empty for non-metered plans. */\n    meters: PlanMeter__be60c6450f51[];\n    /** Quota + rate-limit rules. Month-window rules are the included allowances. */\n    limits: PlanLimit__8541d3e44c07[];\n    /** Optional builder-authored feature bullets shown on the plan card. */\n    planDetails: string[];\n    /** Control-plane resource limits — `key → maxCount` caps (webhooks: 5)\n     *  such as api_keys or webhooks. Empty when the\n     *  plan declares none. */\n    resourceLimits: Record<string, number>;\n    /**\n     * The plan's PUBLIC catalog terms for metered usage — the price list a buyer\n     * needs to compare plans, projected by Core from the served commercial\n     * release. `null` when the plan binds no catalog, when the served release\n     * carries no matching pricing policy, or when the builder declared\n     * `fs.disclosure.opaque`; card surfaces fall back to \"priced per the\n     * catalog\" and a docs pointer in that case.\n     *\n     * This is the only place on the SDK's plan model where per-unit money lives,\n     * and it is NOT an exception to the rule the rest of this module states: a\n     * pricing catalog is a PUBLISHED commerce term the builder authored for\n     * everyone, whereas a subscriber's rated usage, funding draw-down and\n     * projected bill remain exclusive to Core's bill preview. The SDK still\n     * derives NO money: it renders these rates, it never multiplies them by a\n     * usage count.\n     */\n    pricingDisplay: PlanPricingDisplay__072fcb7dc8b6 | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L127",
        "description": "A purchasable/available plan in the product catalog. Mirrors core's\n`PortalPlan` (declared kind + recurring billing shape) so the template can\nrender the plan card, included quotas, and a subscribe button. Money for\nusage lives ONLY in the bill preview ({@link BillPreview}).",
        "references": [
          {
            "name": "PlanKind__5f6d46ef299c",
            "source": "packages/farthershore-js/dist/types.d.ts#L108"
          },
          {
            "name": "PlanLimit__8541d3e44c07",
            "source": "packages/farthershore-js/dist/types.d.ts#L111"
          },
          {
            "name": "PlanMeter__be60c6450f51",
            "source": "packages/farthershore-js/dist/types.d.ts#L103"
          },
          {
            "name": "PlanPricingDisplay__072fcb7dc8b6",
            "source": "packages/farthershore-js/dist/types.d.ts#L248"
          }
        ]
      },
      {
        "name": "PlanFunding__89a4bc119cad",
        "signature": "export interface PlanFunding__89a4bc119cad {\n    kind: \"included\" | \"promo\" | \"referral\" | \"prepaid\";\n    /** Face value in minor units of {@link PlanPricingDisplay.currency}. */\n    amountMinor: number;\n    /** Whether the bucket refreshes each billing period. */\n    recurs: boolean;\n    /** The builder's authored marketing framing: the bucket is `factor`x of a\n     *  `baseMinor` base. The base is `amountMinor / factor` by construction, so\n     *  the label cannot misstate the allowance. */\n    display: {\n        kind: \"multiplier\";\n        factor: number;\n        baseMinor: number;\n    } | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L232",
        "description": "Funding that pays for rated usage before anything is owed.",
        "references": []
      },
      {
        "name": "PlanKind__5f6d46ef299c",
        "signature": "export type PlanKind__5f6d46ef299c = PlanKindWire__a95f9171680c;",
        "source": "packages/farthershore-js/dist/types.d.ts#L108",
        "description": "The builder's DECLARED plan kind (`plan.kind.*` in the Business SDK):\n`free` | `flat` | `usage` | `prepaid` | `hybrid` | `trial` | `custom`.\nEvery card decision (badge, picker, hiding the free floor) reads it —\nnothing is inferred from shape.",
        "references": [
          {
            "name": "PlanKindWire__a95f9171680c",
            "source": "packages/farthershore-js/dist/generated/catalog-types.d.ts#L25"
          }
        ]
      },
      {
        "name": "PlanKindWire__a95f9171680c",
        "signature": "export type PlanKindWire__a95f9171680c = \"free\" | \"flat\" | \"usage\" | \"prepaid\" | \"hybrid\" | \"trial\" | \"custom\";",
        "source": "packages/farthershore-js/dist/generated/catalog-types.d.ts#L25",
        "description": "The DECLARED plan kind (`plan.kind.*` in the Business SDK; the ONE plan\nkind enum, `@farthershore/contracts/commerce` `planKindSchema`).",
        "references": []
      },
      {
        "name": "PlanLimit__8541d3e44c07",
        "signature": "export interface PlanLimit__8541d3e44c07 {\n    dimension: string;\n    window: {\n        type: \"named\";\n        name: string;\n    } | {\n        type: \"custom\";\n        seconds: number;\n    };\n    capacity: number;\n    enforcement?: \"enforce\" | \"track\";\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L111",
        "description": "A named rate-limit / quota rule on a plan. `window.name === \"month\"` rules\nare the included-quota allowances the usage card renders against.",
        "references": []
      },
      {
        "name": "PlanMeter__be60c6450f51",
        "signature": "export type PlanMeter__be60c6450f51 = PlanMeterWire__47c3d2492e8a;",
        "source": "packages/farthershore-js/dist/types.d.ts#L103",
        "description": "A structural metered dimension on a plan — `{ dimension, kind? }`, NO\nmoney. Rates, allowances, and the projected bill come from the bill-preview\nAPI ({@link BillPreview}), never from the plan. Wire-faithful — the public\n`PlanMeter` name re-exports the codegenned `PlanMeterWire`.",
        "references": [
          {
            "name": "PlanMeterWire__47c3d2492e8a",
            "source": "packages/farthershore-js/dist/generated/catalog-types.d.ts#L17"
          }
        ]
      },
      {
        "name": "PlanMeterWire__47c3d2492e8a",
        "signature": "export interface PlanMeterWire__47c3d2492e8a {\n    dimension: string;\n    /** Aggregation formula (`linear` sum | `active_count` gauge |\n     *  `event_count` per-event). OPTIONAL — absent means `linear`. */\n    kind?: \"linear\" | \"active_count\" | \"event_count\";\n}",
        "source": "packages/farthershore-js/dist/generated/catalog-types.d.ts#L17",
        "description": "A structural metered dimension on a plan — dimension + aggregation kind,\nNO money (`@farthershore/contracts/portal` `PortalPlan.meters[number]`).\nRates, allowances, and projected bills come from the bill-preview API,\nnever from the plan.",
        "references": []
      },
      {
        "name": "PlanOffer__5ab47cb32b7d",
        "signature": "export interface PlanOffer__5ab47cb32b7d {\n    /** The immutable CompiledPlan version id (equals `plan.id`). */\n    compiledPlanId: string;\n    /** The plan, in the same wire shape as `list()` / the portal catalog. */\n    plan: Plan__3a8348415fe9;\n    /** The billing fingerprint of THIS plan version's economic content. Pass it\n     *  to `subscribe()` / `startOnboarding()` as `offerFingerprint` to get a\n     *  409 PLAN_OFFER_CHANGED instead of a silent price change. */\n    offerFingerprint: string;\n}",
        "source": "packages/farthershore-js/dist/resources/plans.d.ts#L31",
        "description": "One entry from `getPlanOffers()` — a currently-purchasable plan version.",
        "references": [
          {
            "name": "Plan__3a8348415fe9",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "PlanPricingDisplay__072fcb7dc8b6",
        "signature": "export interface PlanPricingDisplay__072fcb7dc8b6 {\n    /** The pricing policy key the plan's `usagePricing` binds. */\n    pricingPolicyKey: string;\n    /** Meter the policy rates. */\n    meterKey: string;\n    /** ISO 4217 currency of every amount below. */\n    currency: string;\n    /** How the plan binds the catalog. `fixed_version` plans pin `version`. */\n    binding: {\n        kind: \"current\" | \"current_with_contract_terms\" | \"fixed_version\";\n        version: number | null;\n    };\n    /** Rates in deterministic precedence order, most specific first. */\n    rules: PricingRule__391263f593d3[];\n    /** Funding buckets declared on the plan, in authored order. */\n    funding: PlanFunding__89a4bc119cad[];\n    /** What happens when funding runs out: `block` stops requests, `overage`\n     *  keeps serving at the catalog, `prepaid` is the wallet shape. */\n    exhaustion: \"block\" | \"overage\" | \"prepaid\" | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L248",
        "description": "PUBLIC commerce terms for a plan's metered usage.",
        "references": [
          {
            "name": "PlanFunding__89a4bc119cad",
            "source": "packages/farthershore-js/dist/types.d.ts#L232"
          },
          {
            "name": "PricingRule__391263f593d3",
            "source": "packages/farthershore-js/dist/types.d.ts#L206"
          }
        ]
      },
      {
        "name": "PlansResource__05a484289922",
        "signature": "export interface PlansResource__05a484289922 {\n    /** The product's available plans (resolved via bootstrap). Empty when the\n     *  product has no published, self-serve plans. */\n    list(): Promise<Plan__3a8348415fe9[]>;\n    /** The currently-purchasable plan versions for the signed-in subscriber\n     *  (including their pinned plan version), each with the `offerFingerprint`\n     *  to echo back at `subscribe()` for price-change consent. Unlike `list()`,\n     *  this is a live core read (not bootstrap-cached). */\n    getPlanOffers(): Promise<PlanOffer__5ab47cb32b7d[]>;\n    /** Start checkout for a plan. Paid → `{ url }` (navigate to Stripe). Free →\n     *  `{ subscriber }` (activated directly). Pass `offerFingerprint` (from\n     *  `getPlanOffers()`) to fail 409 PLAN_OFFER_CHANGED on a stale price. */\n    subscribe(input: SubscribeInput__62c7cb21d77a): Promise<SubscribeResult__4b2d9557cede>;\n    /** The dashboard onboarding path (`POST /onboarding`) the SSR portal's\n     *  onboarding view uses. Differs from `subscribe()`: paid plans return\n     *  `checkoutUrl` (not `url`), and free activations may include a one-time\n     *  `autoApiKey` (drives the auto-created-key banner). */\n    startOnboarding(input?: StartOnboardingInput__af7cf0dea526): Promise<OnboardingResult__d5ee678fcfed>;\n}",
        "source": "packages/farthershore-js/dist/resources/plans.d.ts#L61",
        "description": "",
        "references": [
          {
            "name": "OnboardingResult__d5ee678fcfed",
            "source": "packages/farthershore-js/dist/types.d.ts#L1104"
          },
          {
            "name": "Plan__3a8348415fe9",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          },
          {
            "name": "PlanOffer__5ab47cb32b7d",
            "source": "packages/farthershore-js/dist/resources/plans.d.ts#L31"
          },
          {
            "name": "StartOnboardingInput__af7cf0dea526",
            "source": "packages/farthershore-js/dist/resources/plans.d.ts#L27"
          },
          {
            "name": "SubscribeInput__62c7cb21d77a",
            "source": "packages/farthershore-js/dist/resources/plans.d.ts#L5"
          },
          {
            "name": "SubscribeResult__4b2d9557cede",
            "source": "packages/farthershore-js/dist/resources/plans.d.ts#L44"
          }
        ]
      },
      {
        "name": "PlansTableImpl__acc7f730968b",
        "signature": "declare function PlansTableImpl__acc7f730968b({ availablePlans, currentPlan, featuredPlanId, className, renderRow, renderHeader, emptyState, }?: PlansTableProps): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/plans-table.d.ts#L30",
        "description": "",
        "references": [
          {
            "name": "PlansTableProps",
            "source": "packages/farthershore-js/dist/components/plans-table.d.ts#L3"
          }
        ]
      },
      {
        "name": "PrefetchSurface__2b22bd2b6c45",
        "signature": "export interface PrefetchSurface__2b22bd2b6c45 {\n    /** Warm the host→business resolve (joins the memoized bootstrap). */\n    boot(): void;\n    /** Warm `GET /me` (subscriber context) for dashboard/account surfaces. */\n    me(): void;\n    /** Warm the default usage snapshot (what `<UsageCard>`/the usage page read). */\n    usage(): void;\n    /** Warm the API-key list. */\n    apiKeys(): void;\n    /** Warm the subscription read (billing surfaces). */\n    subscription(): void;\n}",
        "source": "packages/farthershore-js/dist/client.d.ts#L24",
        "description": "Fire-and-forget cache warmers for navigation intent (sidebar hover/focus,\nroute preload). Each starts the same read-through-cached request the\ndestination page will make, so the page's hooks join the in-flight promise\ninstead of paying a fresh round-trip after the route renders. Bootstrap is\nensured first; all errors are swallowed — a hover is a hint, and the page's\nown read surfaces any real failure.",
        "references": []
      },
      {
        "name": "PricingAmount__4680e23fbfac",
        "signature": "export interface PricingAmount__4680e23fbfac {\n    num: string;\n    den: string;\n    /** `num / den` long-divided; exact where the expansion terminates. */\n    decimal: string;\n    /** True when `decimal` was truncated because the rational does not terminate. */\n    rounded: boolean;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L190",
        "description": "A catalog rate in currency-per-unit. Carries the EXACT reduced rational\nalongside its decimal projection because rates like 1/3 have no finite\ndecimal form — render `decimal`, compare `num`/`den`.",
        "references": []
      },
      {
        "name": "PricingRule__391263f593d3",
        "signature": "export type PricingRule__391263f593d3 = {\n    /** Stable catalog-entry key — the builder's semantic rule id. */\n    key: string;\n    /** Measure this rule prices (`pages`, `tokens`). There is no per-measure\n     *  display name anywhere in the commerce manifest, so the unit label a card\n     *  shows is derived from this key. */\n    measurementKey: string;\n    /** Catalog-item namespace, when the rule is provider/model scoped. */\n    item: {\n        provider: string;\n        model: string;\n        modality?: string;\n    } | null;\n    /** Dimension conditions that select this rule (`mode = ocr`). */\n    where: Array<{\n        dimensionKey: string;\n        value: string;\n    }>;\n} & ({\n    kind: \"perUnit\";\n    amount: PricingAmount__4680e23fbfac;\n} | {\n    kind: \"graduated\" | \"volume\";\n    tiers: PricingTier__f5519de88c98[];\n});",
        "source": "packages/farthershore-js/dist/types.d.ts#L206",
        "description": "One PUBLIC catalog rule, projected for display. `backendQuoted` rules are\nnever projected — a bound the backend quotes against is not a price.",
        "references": [
          {
            "name": "PricingAmount__4680e23fbfac",
            "source": "packages/farthershore-js/dist/types.d.ts#L190"
          },
          {
            "name": "PricingTier__f5519de88c98",
            "source": "packages/farthershore-js/dist/types.d.ts#L200"
          }
        ]
      },
      {
        "name": "PricingTier__f5519de88c98",
        "signature": "export interface PricingTier__f5519de88c98 {\n    upTo: string | null;\n    amount: PricingAmount__4680e23fbfac;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L200",
        "description": "One bracket of a tiered catalog rule. `upTo` is the inclusive cumulative\nupper bound as a decimal string, `null` on the open-ended final tier.",
        "references": [
          {
            "name": "PricingAmount__4680e23fbfac",
            "source": "packages/farthershore-js/dist/types.d.ts#L190"
          }
        ]
      },
      {
        "name": "PromoCodeKind__c6690a5a680c",
        "signature": "export type PromoCodeKind__c6690a5a680c = \"percent_off\" | \"amount_off\" | \"free_months\" | (string & {});",
        "source": "packages/farthershore-js/dist/types.d.ts#L812",
        "description": "Promo-code flavour on an applied subscriber promo. Mirrors the wire\n`PromoCodeKind` (`percent_off` | `amount_off` | `free_months`); kept as an\nopen union so a producer-side addition doesn't break the typed read.",
        "references": []
      },
      {
        "name": "RateLimitDisplayImpl__083c8437250b",
        "signature": "declare function RateLimitDisplayImpl__083c8437250b({ className, title, warnBelow, }?: RateLimitDisplayProps): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/rate-limit-display.d.ts#L9",
        "description": "",
        "references": [
          {
            "name": "RateLimitDisplayProps",
            "source": "packages/farthershore-js/dist/components/rate-limit-display.d.ts#L1"
          }
        ]
      },
      {
        "name": "RateLimitSnapshot__934527ed940b",
        "signature": "export interface RateLimitSnapshot__934527ed940b {\n    /** Requests left in the current window, or null when the header is absent. */\n    remaining: number | null;\n    /** When the window resets, or null when the header is absent. The\n     *  `X-RateLimit-Reset` value is unix-epoch SECONDS. */\n    resetAt: Date | null;\n}",
        "source": "packages/farthershore-js/dist/errors/index.d.ts#L8",
        "description": "Parsed `X-RateLimit-*` snapshot the gateway attaches to throttle responses.\nThe gateway emits `X-RateLimit-Remaining` + `X-RateLimit-Reset` but NOT\n`X-RateLimit-Limit`, so there is deliberately no `limit` field.",
        "references": []
      },
      {
        "name": "RbacCatalogEntry__70378d25cd96",
        "signature": "export interface RbacCatalogEntry__70378d25cd96 {\n    subject: string;\n    /** Optional display title for the subject. */\n    title?: string;\n    permissions: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1053",
        "description": "One derived-catalog entry (`GET /me/rbac/catalog`): the permissions a\nproduct's routes make grantable, grouped by route subject. Never authored —\nderived from the product's accepted spec.",
        "references": []
      },
      {
        "name": "RbacResource__b63486266173",
        "signature": "export interface RbacResource__b63486266173 {\n    settings: {\n        /** Current org settings: `{ enabled, defaultRoleKey? }`. */\n        get(opts?: {\n            signal?: AbortSignal;\n        }): Promise<RbacSettings__15be951cf2e7>;\n        /** Full-document replace. `enabled: true` seeds the editable\n         *  Admin/Editor/Viewer templates (idempotent); omitted/null\n         *  `defaultRoleKey` clears the default. */\n        update(input: {\n            enabled: boolean;\n            defaultRoleKey?: string | null;\n        }): Promise<RbacSettings__15be951cf2e7>;\n    };\n    /** The DERIVED grantable-permission catalog (never authored) — grouped by\n     *  route operation, in the `<route-id>:read|write` grammar. */\n    catalog(opts?: {\n        signal?: AbortSignal;\n    }): Promise<RbacCatalogEntry__70378d25cd96[]>;\n    roles: {\n        /** The org's role list (seeded templates + custom), sorted by key. */\n        list(opts?: {\n            signal?: AbortSignal;\n        }): Promise<RbacRole__8a7d3e5f7c64[]>;\n        /** Create a custom role. Permissions are validated against the catalog\n         *  (400 `UNKNOWN_PERMISSION` naming offenders; `\"*\"` always grantable). */\n        create(input: {\n            roleKey: string;\n            name: string;\n            permissions: string[];\n        }): Promise<RbacRole__8a7d3e5f7c64>;\n        /** Rename and/or re-permission a role. */\n        update(roleKey: string, input: {\n            name?: string;\n            permissions?: string[];\n        }): Promise<RbacRole__8a7d3e5f7c64>;\n        /** Delete a role. Member assignments referencing it are left in place\n         *  (resolution ignores stale keys); a matching `defaultRoleKey` is\n         *  cleared server-side. */\n        remove(roleKey: string): Promise<void>;\n    };\n    /**\n     * Permissions Kernel Wave 6 — per-subscriber component gate policies. An\n     * org admin (team:manage_rbac) upserts one override row per component key;\n     * `requiredPermission: null` clears the permission override back to the\n     * component's default. Throws the typed `FartherShoreApiError` — a 409\n     * `GOVERNED_BY_CHANGE_SET` means change control governs these rows.\n     */\n    componentPolicies: {\n        /** Upsert the override row for one component key\n         *  (PUT /me/component-policies). */\n        update(input: {\n            componentKey: string;\n            requiredPermission: string | null;\n            gateMode: string;\n        }): Promise<ComponentAccessPolicyRow__60d2c40fe86e>;\n    };\n    /**\n     * Track T3 — Notion-minimal access requests. Any member files a request for a\n     * permission; owners/admins review the queue and approve (AUTO-GRANTS the\n     * permission onto the requester's direct grants) or deny.\n     */\n    accessRequests: {\n        /** File a request for a permission. Idempotent on an open PENDING row for\n         *  the same (requester, permission). Any authenticated member. */\n        create(input: {\n            permission: string;\n            note?: string;\n        }): Promise<AccessRequest__e4d3f89daefa>;\n        /** The request queue (OWNER/ADMIN): pending first, then resolved. */\n        list(opts?: {\n            signal?: AbortSignal;\n        }): Promise<AccessRequest__e4d3f89daefa[]>;\n        /** Approve (grants the permission) or deny a pending request. */\n        resolve(requestId: string, action: \"approve\" | \"deny\"): Promise<AccessRequest__e4d3f89daefa>;\n    };\n}",
        "source": "packages/farthershore-js/dist/resources/account.d.ts#L65",
        "description": "Org-facing Managed-RBAC management (FAR-698/FAR-700) — the portal-customer\n`/me/rbac/*` surface. Org OWNER/ADMIN only; every method THROWS the\ntyped `FartherShoreApiError` rather than degrading, because the UI derives\nsection visibility from the error codes (`RBAC_NOT_ENABLED_BY_PRODUCT`,\n`UNKNOWN_PERMISSION`). Everything here configures UX + minted-token claims;\nthe EDGE `permission` constraint is the security boundary — never treat\nclient-side gating as enforcement.",
        "references": [
          {
            "name": "AccessRequest__e4d3f89daefa",
            "source": "packages/farthershore-js/dist/types.d.ts#L1061"
          },
          {
            "name": "ComponentAccessPolicyRow__60d2c40fe86e",
            "source": "packages/farthershore-js/dist/types.d.ts#L945"
          },
          {
            "name": "RbacCatalogEntry__70378d25cd96",
            "source": "packages/farthershore-js/dist/types.d.ts#L1053"
          },
          {
            "name": "RbacRole__8a7d3e5f7c64",
            "source": "packages/farthershore-js/dist/types.d.ts#L1035"
          },
          {
            "name": "RbacSettings__15be951cf2e7",
            "source": "packages/farthershore-js/dist/types.d.ts#L1028"
          }
        ]
      },
      {
        "name": "RbacRole__8a7d3e5f7c64",
        "signature": "export interface RbacRole__8a7d3e5f7c64 {\n    roleKey: string;\n    name: string;\n    /** Permission strings in the `<subject>:read|write` grammar, or `\"*\"`. */\n    permissions: string[];\n    /** \"ACCOUNT\" rows are the membership-tier enforcement source: their\n     *  permissions are editable but their identity is fixed — no rename,\n     *  delete, default assignment, or credential binding. Absent ⇒ \"CUSTOM\". */\n    kind?: \"CUSTOM\" | \"ACCOUNT\";\n    /** ACCOUNT rows only: the full subscriber vocabulary — the editable\n     *  option set (restoring a removed verb needs the catalog, not just the\n     *  row's current grants). */\n    vocabulary?: string[];\n    createdAt?: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1035",
        "description": "One configurable role (`/me/rbac/roles`), template-seeded or custom.",
        "references": []
      },
      {
        "name": "RbacRoleSummary__2161df852611",
        "signature": "export interface RbacRoleSummary__2161df852611 {\n    roleKey: string;\n    name: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1023",
        "description": "One assignable role, as listed on `GET /me/team` (`availableRoles`).",
        "references": []
      },
      {
        "name": "RbacSettings__15be951cf2e7",
        "signature": "export interface RbacSettings__15be951cf2e7 {\n    /** Whether role permissions are enforced for this org's user tokens. */\n    enabled: boolean;\n    /** Role auto-assigned to members with no explicit assignment. */\n    defaultRoleKey?: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1028",
        "description": "Org-level Managed-RBAC settings (`GET|PUT /me/rbac/settings`).",
        "references": []
      },
      {
        "name": "ReadCacheEntry__ee67854da2b9",
        "signature": "export interface ReadCacheEntry__ee67854da2b9 {\n    at: number;\n    promise: Promise<unknown>;\n}",
        "source": "packages/farthershore-js/dist/cache.d.ts#L2",
        "description": "",
        "references": []
      },
      {
        "name": "ResolvedComponentPolicy__89f6cd2cf9a4",
        "signature": "export interface ResolvedComponentPolicy__89f6cd2cf9a4 {\n    componentId: string;\n    /** Render-gate permission; null ONLY when `presentational`. */\n    permission: string | null;\n    /** Every render permission that must pass. Sensitive components include\n     *  their managed default as an AND-floor plus any stricter override. */\n    requiredPermissions: readonly string[];\n    /** Permission for the component's mutating affordances. */\n    writePermission: string;\n    /** How the component renders when the viewer lacks `permission`. */\n    gateMode: ComponentGateMode__052103626acf;\n    /** Where `gateMode` came from: an explicit host registration, a\n     *  subscriber-org overlay, or the platform default. Hosts that wrap a\n     *  component-gated surface (e.g. a route) must not force their own mode\n     *  when the source is not `\"default\"` — the configured choice wins. */\n    gateModeSource: \"registration\" | \"overlay\" | \"default\";\n    /** Renders ungated (explicit flag only). */\n    presentational: boolean;\n    /** Whether the id is one of the contracts-owned sensitive components. */\n    sensitive: boolean;\n    /** True when the id or its resolved permission policy is invalid: render\n     *  DENIED before evaluating any permission claim. */\n    unknown: boolean;\n}",
        "source": "packages/farthershore-js/dist/component-policy.d.ts#L73",
        "description": "The resolved gate policy for one component id.",
        "references": [
          {
            "name": "ComponentGateMode__052103626acf",
            "source": "packages/farthershore-js/dist/component-policy.d.ts#L5"
          }
        ]
      },
      {
        "name": "ResolvedRetryConfig__fe2336bea142",
        "signature": "export interface ResolvedRetryConfig__fe2336bea142 {\n    maxAttempts: number;\n    retryOn: (err: unknown) => boolean;\n    respectRetryAfter: boolean;\n    sleep: (ms: number) => Promise<void>;\n}",
        "source": "packages/farthershore-js/dist/config.d.ts#L29",
        "description": "Resolved retry policy with all defaults applied (internal).",
        "references": []
      },
      {
        "name": "ResourceLimitUsage__a2c3c3e2955a",
        "signature": "export interface ResourceLimitUsage__a2c3c3e2955a {\n    limit: number;\n    current: number;\n}",
        "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L10",
        "description": "One resource's enforced cap and the caller's current usage.",
        "references": []
      },
      {
        "name": "ResourceLimitUsageCardImpl__b73d0d5d75dd",
        "signature": "declare function ResourceLimitUsageCardImpl__b73d0d5d75dd({ className, title, }?: ResourceLimitUsageCardProps): import(\"react\").JSX.Element | null;",
        "source": "packages/farthershore-js/dist/components/resource-limit-usage-card.d.ts#L7",
        "description": "",
        "references": [
          {
            "name": "ResourceLimitUsageCardProps",
            "source": "packages/farthershore-js/dist/components/resource-limit-usage-card.d.ts#L1"
          }
        ]
      },
      {
        "name": "ResourceLimitUsageMap__cc534f1c9f18",
        "signature": "export type ResourceLimitUsageMap__cc534f1c9f18 = Record<string, ResourceLimitUsage__a2c3c3e2955a>;",
        "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L15",
        "description": "Per-resource `{ limit, current }`. Undeclared resources are unlimited.",
        "references": [
          {
            "name": "ResourceLimitUsage__a2c3c3e2955a",
            "source": "packages/farthershore-js/dist/resources/entitlements.d.ts#L10"
          }
        ]
      },
      {
        "name": "ResourceRecord__87f0c814eb51",
        "signature": "export interface ResourceRecord__87f0c814eb51<TPayload = unknown> {\n    id: string;\n    resource: string;\n    payload: TPayload;\n    createdAt: string;\n    updatedAt: string;\n}",
        "source": "packages/farthershore-js/dist/resources/resources.d.ts#L10",
        "description": "One record of a declared resource, as owned and returned by core.",
        "references": []
      },
      {
        "name": "ResourceRequestInit__06eb38c7f26b",
        "signature": "export type ResourceRequestInit__06eb38c7f26b = RouteRequestInit__7377dee5c3ef & {\n    subjectId?: string;\n};",
        "source": "packages/farthershore-js/dist/resources/resources.d.ts#L6",
        "description": "A resource verb's options — the standard request init plus an optional\n`subjectId` for SUBJECT-scoped resources (W5.4). When set, it's forwarded as\nthe `x-fs-subject-id` header so core keys the count on that subject.",
        "references": [
          {
            "name": "RouteRequestInit__7377dee5c3ef",
            "source": "packages/farthershore-js/dist/resources/route.d.ts#L2"
          }
        ]
      },
      {
        "name": "ResourcesPanelImpl__0ecc889f1253",
        "signature": "declare function ResourcesPanelImpl__0ecc889f1253({ resourceName, makePayload, renderItem, className, }: ResourcesPanelProps): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/resources-panel.d.ts#L14",
        "description": "",
        "references": [
          {
            "name": "ResourcesPanelProps",
            "source": "packages/farthershore-js/dist/components/resources-panel.d.ts#L1"
          }
        ]
      },
      {
        "name": "ResourcesResource__ef6d17bbf151",
        "signature": "export interface ResourcesResource__ef6d17bbf151<TPayload = unknown> {\n    /** List this subscriber's records of the resource. */\n    list(init?: ResourceRequestInit__06eb38c7f26b): Promise<ResourceRecord__87f0c814eb51<TPayload>[]>;\n    /** Fetch one record by id. */\n    get(id: string, init?: ResourceRequestInit__06eb38c7f26b): Promise<ResourceRecord__87f0c814eb51<TPayload>>;\n    /** Create a record. Throws `LimitExceededError` (402) at the plan cap. */\n    create(payload: TPayload, init?: ResourceRequestInit__06eb38c7f26b): Promise<ResourceRecord__87f0c814eb51<TPayload>>;\n    /** Replace a record's payload. */\n    update(id: string, payload: TPayload, init?: ResourceRequestInit__06eb38c7f26b): Promise<ResourceRecord__87f0c814eb51<TPayload>>;\n    /** Delete a record (frees one unit of the quota). */\n    delete(id: string, init?: ResourceRequestInit__06eb38c7f26b): Promise<void>;\n    /** Authoritative `{ count, cap }` for this resource on the caller's\n     *  subscription (W5.2). Reads core (the system of record), so it works for\n     *  backend-managed resources the SDK can't `list()`. Signed-out / no\n     *  subscription → `{ count: 0, cap: null }`. */\n    count(init?: {\n        signal?: AbortSignal;\n        subjectId?: string;\n    }): Promise<ResourceUsage__40697d865d06>;\n}",
        "source": "packages/farthershore-js/dist/resources/resources.d.ts#L25",
        "description": "",
        "references": [
          {
            "name": "ResourceRecord__87f0c814eb51",
            "source": "packages/farthershore-js/dist/resources/resources.d.ts#L10"
          },
          {
            "name": "ResourceRequestInit__06eb38c7f26b",
            "source": "packages/farthershore-js/dist/resources/resources.d.ts#L6"
          },
          {
            "name": "ResourceUsage__40697d865d06",
            "source": "packages/farthershore-js/dist/resources/resources.d.ts#L21"
          }
        ]
      },
      {
        "name": "ResourceUsage__40697d865d06",
        "signature": "export interface ResourceUsage__40697d865d06 {\n    count: number;\n    cap: number | null;\n}",
        "source": "packages/farthershore-js/dist/resources/resources.d.ts#L21",
        "description": "The authoritative current count + cap for a resource on the caller's\nsubscription (W5.2). `count` is the system-of-record count read from core;\n`cap` is the per-plan ceiling (a number, or `null` when uncapped/unlimited).\nWorks even for Model-1 backend-managed resources the SDK can't `list()`.",
        "references": []
      },
      {
        "name": "RestoreSubscriptionResult__60ac2939c09d",
        "signature": "export interface RestoreSubscriptionResult__60ac2939c09d {\n    subscription?: unknown;\n    /** The platform's post-restore reading. `false` is the success signal; the\n     *  field is `null` only when Core's response carried no subscription state\n     *  to read it from — never guessed. */\n    cancelAtPeriodEnd: boolean | null;\n    raw: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1134",
        "description": "`POST /me/restore` — the platform performs the un-cancel: a paid sub's\nscheduled `cancel_at_period_end` is lifted on the provider, a free\nCANCELLED sub is flipped back to ACTIVE inline. Like cancel, there is no\nhosted-page hand-off — the caller gets the subscription back, and\n`cancelAtPeriodEnd` on it is what the platform read AFTER the un-cancel.\nA `false` here is the proof the notice should be gone.",
        "references": []
      },
      {
        "name": "RoutePanelImpl__b2819b22dcb3",
        "signature": "declare function RoutePanelImpl__b2819b22dcb3({ defaultPath, className, }?: RoutePanelProps): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/route-panel.d.ts#L10",
        "description": "",
        "references": [
          {
            "name": "RoutePanelProps",
            "source": "packages/farthershore-js/dist/components/route-panel.d.ts#L4"
          }
        ]
      },
      {
        "name": "RouteRequestInit__7377dee5c3ef",
        "signature": "export type RouteRequestInit__7377dee5c3ef = RequestInit & {\n    apiKey?: string;\n};",
        "source": "packages/farthershore-js/dist/resources/route.d.ts#L2",
        "description": "",
        "references": []
      },
      {
        "name": "RouteResource__52eafab15328",
        "signature": "export interface RouteResource__52eafab15328 {\n    /** Raw gateway call — returns the `Response` for any content type. */\n    fetch(path: string, init?: RouteRequestInit__7377dee5c3ef): Promise<Response>;\n    /** `GET path` → parsed JSON. */\n    get<T = unknown>(path: string, init?: RouteRequestInit__7377dee5c3ef): Promise<T>;\n    /** `GET path` → parsed JSON PLUS the `X-RateLimit-*` snapshot read off the\n     *  live response before it's discarded (W8.5). Also publishes the snapshot to\n     *  `useRouteRateLimit()`. */\n    getWithMeta<T = unknown>(path: string, init?: RouteRequestInit__7377dee5c3ef): Promise<RouteResponseMeta__0abf9098561d<T>>;\n    /** `POST path` with a JSON body → parsed JSON. */\n    post<T = unknown>(path: string, body?: unknown, init?: RouteRequestInit__7377dee5c3ef): Promise<T>;\n    /** `PUT path` with a JSON body → parsed JSON. */\n    put<T = unknown>(path: string, body?: unknown, init?: RouteRequestInit__7377dee5c3ef): Promise<T>;\n    /** `PATCH path` with a JSON body → parsed JSON. */\n    patch<T = unknown>(path: string, body?: unknown, init?: RouteRequestInit__7377dee5c3ef): Promise<T>;\n    /** `DELETE path` → parsed JSON (or undefined on 204). */\n    delete<T = void>(path: string, init?: RouteRequestInit__7377dee5c3ef): Promise<T>;\n}",
        "source": "packages/farthershore-js/dist/resources/route.d.ts#L15",
        "description": "",
        "references": [
          {
            "name": "RouteRequestInit__7377dee5c3ef",
            "source": "packages/farthershore-js/dist/resources/route.d.ts#L2"
          },
          {
            "name": "RouteResponseMeta__0abf9098561d",
            "source": "packages/farthershore-js/dist/resources/route.d.ts#L8"
          }
        ]
      },
      {
        "name": "RouteResponseMeta__0abf9098561d",
        "signature": "export interface RouteResponseMeta__0abf9098561d<T> {\n    data: T;\n    rateLimit: {\n        remaining: number | null;\n        resetAt: Date | null;\n    };\n}",
        "source": "packages/farthershore-js/dist/resources/route.d.ts#L8",
        "description": "A `GET` response plus the throttle snapshot read off its `X-RateLimit-*`\nheaders (W8.5). `remaining`/`resetAt` are null when the gateway didn't send\nthem. The same snapshot also updates `useRouteRateLimit()`.",
        "references": []
      },
      {
        "name": "ServiceAccount__75f27de661cf",
        "signature": "export interface ServiceAccount__75f27de661cf {\n    id: string;\n    name: string;\n    state: ServiceAccountProvisioningState__9ac900abd622;\n    requestedPermissions: string[];\n    grantedPermissions: string[];\n    createdBy: string | null;\n    approvedBy: string | null;\n    createdAt: string;\n    activatedAt: string | null;\n    revokedAt: string | null;\n    usageLimits?: ServiceAccountUsageLimitRequest__f255b800fa4e[];\n    credentialApprovals: ServiceAccountApprovalSummary__7bb90b20ec66[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L425",
        "description": "Repeatable metadata for a managed, organization-owned service account.",
        "references": [
          {
            "name": "ServiceAccountApprovalSummary__7bb90b20ec66",
            "source": "packages/farthershore-js/dist/types.d.ts#L383"
          },
          {
            "name": "ServiceAccountProvisioningState__9ac900abd622",
            "source": "packages/farthershore-js/dist/types.d.ts#L380"
          },
          {
            "name": "ServiceAccountUsageLimitRequest__f255b800fa4e",
            "source": "packages/farthershore-js/dist/types.d.ts#L399"
          }
        ]
      },
      {
        "name": "ServiceAccountApprovalOperation__d422a57b0b16",
        "signature": "export type ServiceAccountApprovalOperation__d422a57b0b16 = \"CREATE\" | \"UPDATE\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L382",
        "description": "Whether an approval creates a new account or replaces an active grant snapshot.",
        "references": []
      },
      {
        "name": "ServiceAccountApprovalResponse__03a1e6be31e0",
        "signature": "export type ServiceAccountApprovalResponse__03a1e6be31e0 = ApprovedServiceAccountCreateResponse__b73a29c4cc94 | ApprovedServiceAccountUpdateResponse__e4e8de0be760;",
        "source": "packages/farthershore-js/dist/types.d.ts#L508",
        "description": "",
        "references": [
          {
            "name": "ApprovedServiceAccountCreateResponse__b73a29c4cc94",
            "source": "packages/farthershore-js/dist/types.d.ts#L493"
          },
          {
            "name": "ApprovedServiceAccountUpdateResponse__e4e8de0be760",
            "source": "packages/farthershore-js/dist/types.d.ts#L502"
          }
        ]
      },
      {
        "name": "ServiceAccountApprovalsResource__52f0cefb9602",
        "signature": "export interface ServiceAccountApprovalsResource__52f0cefb9602 {\n    /** Approval requests this signed-in member is currently eligible to decide. */\n    list(opts?: {\n        signal?: AbortSignal;\n        limit?: number;\n        offset?: number;\n    }): Promise<OffsetPage__af8a84ff58be<PendingServiceAccountApproval__5aaaeb81c691>>;\n    /** Approve the complete request or an explicitly trimmed subset. */\n    approve(approvalId: string, input?: ApproveServiceAccountInput__db09091445e7): Promise<ServiceAccountApprovalResponse__03a1e6be31e0>;\n    /** Deny a pending request without minting or widening any credential. */\n    deny(approvalId: string): Promise<ServiceAccountDenyResponse__93ffa89effd0>;\n}",
        "source": "packages/farthershore-js/dist/resources/keys.d.ts#L37",
        "description": "",
        "references": [
          {
            "name": "ApproveServiceAccountInput__db09091445e7",
            "source": "packages/farthershore-js/dist/types.d.ts#L451"
          },
          {
            "name": "OffsetPage__af8a84ff58be",
            "source": "packages/farthershore-js/dist/types.d.ts#L535"
          },
          {
            "name": "PendingServiceAccountApproval__5aaaeb81c691",
            "source": "packages/farthershore-js/dist/types.d.ts#L521"
          },
          {
            "name": "ServiceAccountApprovalResponse__03a1e6be31e0",
            "source": "packages/farthershore-js/dist/types.d.ts#L508"
          },
          {
            "name": "ServiceAccountDenyResponse__93ffa89effd0",
            "source": "packages/farthershore-js/dist/types.d.ts#L518"
          }
        ]
      },
      {
        "name": "ServiceAccountApprovalSummary__7bb90b20ec66",
        "signature": "export interface ServiceAccountApprovalSummary__7bb90b20ec66 {\n    id: string;\n    operation: ServiceAccountApprovalOperation__d422a57b0b16;\n    requestedBy: string;\n    requestedPermissions: string[];\n    excessPermissions: string[];\n    createdAt: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L383",
        "description": "",
        "references": [
          {
            "name": "ServiceAccountApprovalOperation__d422a57b0b16",
            "source": "packages/farthershore-js/dist/types.d.ts#L382"
          }
        ]
      },
      {
        "name": "ServiceAccountCreateResponse__081d15d10c13",
        "signature": "export type ServiceAccountCreateResponse__081d15d10c13 = ActiveServiceAccountCreateResponse__b15fda647836 | PendingServiceAccountCreateResponse__75eae3a7015a;",
        "source": "packages/farthershore-js/dist/types.d.ts#L475",
        "description": "",
        "references": [
          {
            "name": "ActiveServiceAccountCreateResponse__b15fda647836",
            "source": "packages/farthershore-js/dist/types.d.ts#L465"
          },
          {
            "name": "PendingServiceAccountCreateResponse__75eae3a7015a",
            "source": "packages/farthershore-js/dist/types.d.ts#L455"
          }
        ]
      },
      {
        "name": "ServiceAccountDenyResponse__93ffa89effd0",
        "signature": "export interface ServiceAccountDenyResponse__93ffa89effd0 {\n    status: \"DENIED\";\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L518",
        "description": "",
        "references": []
      },
      {
        "name": "ServiceAccountMutationOptions__2dee3eb4c17c",
        "signature": "export interface ServiceAccountMutationOptions__2dee3eb4c17c {\n    /** Reuse this value to replay the same pending create/update request safely. */\n    idempotencyKey?: string;\n}",
        "source": "packages/farthershore-js/dist/resources/keys.d.ts#L49",
        "description": "",
        "references": []
      },
      {
        "name": "ServiceAccountProvisioningState__9ac900abd622",
        "signature": "export type ServiceAccountProvisioningState__9ac900abd622 = \"PENDING\" | \"ACTIVE\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L380",
        "description": "Durable provisioning state for an organization-owned service account.",
        "references": []
      },
      {
        "name": "ServiceAccountRotationResponse__e5e68769c407",
        "signature": "export interface ServiceAccountRotationResponse__e5e68769c407 {\n    status: \"ACTIVE\";\n    serviceAccountId: string;\n    revokedKeyId: string;\n    apiKeyId: string;\n    /** One-time replacement secret. */\n    plaintext: string;\n    grantedPermissions: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L509",
        "description": "",
        "references": []
      },
      {
        "name": "ServiceAccountsResource__abd2dd8a7d4f",
        "signature": "export interface ServiceAccountsResource__abd2dd8a7d4f {\n    /** List managed accounts, including PENDING rows with no credential material. */\n    list(opts?: {\n        signal?: AbortSignal;\n        limit?: number;\n        offset?: number;\n    }): Promise<OffsetPage__af8a84ff58be<ServiceAccount__75f27de661cf>>;\n    /** Create immediately when covered, otherwise return a strict PENDING response. */\n    create(input: CreateServiceAccountInput__30c268ab08ba, options?: ServiceAccountMutationOptions__2dee3eb4c17c): Promise<ServiceAccountCreateResponse__081d15d10c13>;\n    /** Replace the frozen grant snapshot or create a pending UPDATE request. */\n    update(serviceAccountId: string, input: UpdateServiceAccountInput__88886ec5643e, options?: ServiceAccountMutationOptions__2dee3eb4c17c): Promise<ServiceAccountUpdateResponse__e6029a12392c>;\n    /** Rotate the account credential and return the replacement secret once. */\n    rotate(serviceAccountId: string): Promise<ServiceAccountRotationResponse__e5e68769c407>;\n    /** Revoke the account and every active credential attached to it. */\n    revoke(serviceAccountId: string): Promise<void>;\n    readonly approvals: ServiceAccountApprovalsResource__52f0cefb9602;\n}",
        "source": "packages/farthershore-js/dist/resources/keys.d.ts#L53",
        "description": "",
        "references": [
          {
            "name": "CreateServiceAccountInput__30c268ab08ba",
            "source": "packages/farthershore-js/dist/types.d.ts#L441"
          },
          {
            "name": "OffsetPage__af8a84ff58be",
            "source": "packages/farthershore-js/dist/types.d.ts#L535"
          },
          {
            "name": "ServiceAccount__75f27de661cf",
            "source": "packages/farthershore-js/dist/types.d.ts#L425"
          },
          {
            "name": "ServiceAccountApprovalsResource__52f0cefb9602",
            "source": "packages/farthershore-js/dist/resources/keys.d.ts#L37"
          },
          {
            "name": "ServiceAccountCreateResponse__081d15d10c13",
            "source": "packages/farthershore-js/dist/types.d.ts#L475"
          },
          {
            "name": "ServiceAccountMutationOptions__2dee3eb4c17c",
            "source": "packages/farthershore-js/dist/resources/keys.d.ts#L49"
          },
          {
            "name": "ServiceAccountRotationResponse__e5e68769c407",
            "source": "packages/farthershore-js/dist/types.d.ts#L509"
          },
          {
            "name": "ServiceAccountUpdateResponse__e6029a12392c",
            "source": "packages/farthershore-js/dist/types.d.ts#L492"
          },
          {
            "name": "UpdateServiceAccountInput__88886ec5643e",
            "source": "packages/farthershore-js/dist/types.d.ts#L447"
          }
        ]
      },
      {
        "name": "ServiceAccountUpdateResponse__e6029a12392c",
        "signature": "export type ServiceAccountUpdateResponse__e6029a12392c = ActiveServiceAccountUpdateResponse__fe5e8ed2381b | PendingServiceAccountUpdateResponse__97b4460d1924;",
        "source": "packages/farthershore-js/dist/types.d.ts#L492",
        "description": "",
        "references": [
          {
            "name": "ActiveServiceAccountUpdateResponse__fe5e8ed2381b",
            "source": "packages/farthershore-js/dist/types.d.ts#L486"
          },
          {
            "name": "PendingServiceAccountUpdateResponse__97b4460d1924",
            "source": "packages/farthershore-js/dist/types.d.ts#L476"
          }
        ]
      },
      {
        "name": "ServiceAccountUsageLimitRequest__f255b800fa4e",
        "signature": "export type ServiceAccountUsageLimitRequest__f255b800fa4e = {\n    quantity: string;\n    limitUnits: number;\n    limitCents?: never;\n    mode: \"BLOCK\";\n    notifyAtPct?: never;\n} | {\n    quantity: string;\n    limitUnits: number;\n    limitCents?: never;\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n} | {\n    quantity: string;\n    limitUnits?: never;\n    limitCents: number;\n    mode: \"BLOCK\";\n    notifyAtPct?: never;\n} | {\n    quantity: string;\n    limitUnits?: never;\n    limitCents: number;\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L399",
        "description": "Discriminated to mirror `portalServiceAccountUsageLimitRequestSchema` exactly\n(contracts): a NOTIFY limit REQUIRES `notifyAtPct`; a BLOCK limit forbids it;\nexactly one of `limitUnits`/`limitCents` is set. This keeps the public type as\nstrict as its Zod validator — invalid mode/threshold combos are compile errors,\nnot just runtime 400s. Parity is pinned by `service-account-contract-drift.test.ts`.",
        "references": []
      },
      {
        "name": "Session__d51a47154738",
        "signature": "export interface Session__d51a47154738 {\n    authenticated: boolean;\n    subscriber: Subscriber__c8719fbb7bfa | null;\n    /** Verified browser-session identity. Present only for a server-owned test\n     * persona cookie; Clerk sessions expose their user through the Clerk bridge. */\n    authSession: PersonaAuthSession__da61c3cf64e7 | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L326",
        "description": "",
        "references": [
          {
            "name": "PersonaAuthSession__da61c3cf64e7",
            "source": "packages/farthershore-js/dist/types.d.ts#L334"
          },
          {
            "name": "Subscriber__c8719fbb7bfa",
            "source": "packages/farthershore-js/dist/types.d.ts#L315"
          }
        ]
      },
      {
        "name": "SpendCapControlImpl__efe6f2b0fd95",
        "signature": "declare function SpendCapControlImpl__efe6f2b0fd95({ className, title, }: SpendCapControlProps): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/spend-cap-control.d.ts#L7",
        "description": "",
        "references": [
          {
            "name": "SpendCapControlProps",
            "source": "packages/farthershore-js/dist/components/spend-cap-control.d.ts#L1"
          }
        ]
      },
      {
        "name": "SpendCapResult__395300e78371",
        "signature": "export interface SpendCapResult__395300e78371 {\n    /** The stored monthly spend cap in cents (null when cleared). */\n    maxMonthlySpendCents: number | null;\n    /** The subscription's entitlement version after the write, when returned. */\n    entitlementVersion?: number;\n}",
        "source": "packages/farthershore-js/dist/resources/billing.d.ts#L5",
        "description": "Result of {@link BillingResource.setSpendCap}: the stored cap (echo) + the\nbumped subscription entitlement version (cache-bust signal).",
        "references": []
      },
      {
        "name": "StartOnboardingInput__af7cf0dea526",
        "signature": "export interface StartOnboardingInput__af7cf0dea526 extends Omit<SubscribeInput__62c7cb21d77a, \"compiledPlanId\"> {\n    compiledPlanId?: string;\n}",
        "source": "packages/farthershore-js/dist/resources/plans.d.ts#L27",
        "description": "Input to `startOnboarding()`. Unlike direct checkout, the plan is optional:\nomitting it asks Core to select the business's single declared zero-price\nplan. This is the safest zero-price onboarding path because a client cannot\naccidentally name a billable plan.",
        "references": [
          {
            "name": "SubscribeInput__62c7cb21d77a",
            "source": "packages/farthershore-js/dist/resources/plans.d.ts#L5"
          }
        ]
      },
      {
        "name": "SubscribeInput__62c7cb21d77a",
        "signature": "export interface SubscribeInput__62c7cb21d77a {\n    /** The plan to subscribe to — pass `plan.id`. */\n    compiledPlanId: string;\n    /** Owning org for org-owned subscriptions (forwarded as the\n     *  `organizationId` query + header). */\n    organizationId?: string | null;\n    /** Where Stripe redirects after a successful paid checkout. */\n    successUrl?: string;\n    /** Where Stripe redirects if the subscriber abandons checkout. */\n    cancelUrl?: string;\n    /** OPTIONAL price-consent echo (E2 — Managed Stripe Price Integrity): the\n     *  `offerFingerprint` from `getPlanOffers()`. When provided and the plan's\n     *  economics changed since the offer was rendered, core rejects with\n     *  409 PLAN_OFFER_CHANGED (typed as `FartherShorePlanOfferChangedError`) and\n     *  creates NO session — catch it, refetch offers, and re-present the price.\n     *  Omit for today's unguarded behavior. */\n    offerFingerprint?: string;\n}",
        "source": "packages/farthershore-js/dist/resources/plans.d.ts#L5",
        "description": "Input to `subscribe()`. `compiledPlanId` is the `Plan.id` (immutable\nCompiledPlan pointer).",
        "references": []
      },
      {
        "name": "Subscriber__c8719fbb7bfa",
        "signature": "export interface Subscriber__c8719fbb7bfa {\n    /** Lifecycle status (e.g. ONBOARDING | ACTIVE | SUSPENDED). */\n    status: string | null;\n    /** Denormalized plan key for display. */\n    planKey: string | null;\n    /** Immutable CompiledPlan id currently active for this subscriber. */\n    compiledPlanId: string | null;\n    /** True only after the selected environment's gateway has the exact active\n     * subscription projection. */\n    gatewayReady?: boolean;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L315",
        "description": "",
        "references": []
      },
      {
        "name": "SubscriberActivePromo__160abba5e892",
        "signature": "export interface SubscriberActivePromo__160abba5e892 {\n    id: string;\n    code: string;\n    kind: PromoCodeKind__c6690a5a680c;\n    /** Discount magnitude (percent or cents, per `kind`), or null/absent. */\n    amount?: number | null;\n    /** How many billing periods the promo applies for. */\n    durationMonths: number;\n    /** ISO timestamp the promo stops applying, or null. */\n    activeUntil?: string | null;\n    /** ISO timestamp the promo was applied, or null. */\n    appliedAt?: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L815",
        "description": "An active promotional code applied to a subscriber. Mirrors core's\n`PortalSubscriberContext.subscriber.activePromo`.",
        "references": [
          {
            "name": "PromoCodeKind__c6690a5a680c",
            "source": "packages/farthershore-js/dist/types.d.ts#L812"
          }
        ]
      },
      {
        "name": "SubscriberContext__86c582775b78",
        "signature": "export interface SubscriberContext__86c582775b78 {\n    subscriber: SubscriberDetail__3358181c0560 | null;\n    availablePlans: Plan__3a8348415fe9[];\n    /**\n     * E1 — the subscriber's PINNED plan, resolved server-side from the\n     * subscription's pinned CompiledPlan version (NOT the catalog head — a\n     * pinned older version may not appear in `availablePlans` at all).\n     *\n     * Tri-state for old-Core back-compat:\n     *   - `Plan`      — resolved pinned plan.\n     *   - `null`      — Core resolved it: there IS no pinned plan (no\n     *                   subscription). Do NOT fall back to guessing.\n     *   - `undefined` — the wire field was ABSENT (pre-E1 Core). Only here may\n     *                   a consumer fall back to matching `availablePlans` by\n     *                   `subscriber.compiledPlanId` (deprecated path).\n     */\n    currentPlan?: Plan__3a8348415fe9 | null;\n    /** Managed-RBAC product-role keys assigned to the CALLER within the org\n     *  (FAR-698/FAR-700). Server-resolved on `GET /me` — the same row-backed\n     *  source the gateway-token mint uses; the SDK never decodes tokens.\n     *  Empty for pre-RBAC responses. */\n    roles: string[];\n    /** The caller's resolved permission strings (`<subject>:read|write`\n     *  grammar). `[\"*\"]` means Managed RBAC is off or the caller is an OWNER;\n     *  personal-org members receive the same resolved permission sets as team-org\n     *  members. Client-side gating over these is UX ONLY — the gateway's\n     *  `permission` constraint is the security boundary. */\n    permissions: string[];\n    /** Reviewed product permissions explicitly denied by the subscriber's\n     * effective roles. Present on current Core responses. */\n    deniedPermissions?: string[];\n    /** Current product permissions that were not reviewed by the effective\n     * roles and therefore inherit the safe product-evolution default of allow.\n     * Platform/account permissions are never included. */\n    unassignedProductPermissions?: string[];\n    /** Per-subscriber ComponentAccessPolicy override rows (Permissions Kernel,\n     *  Wave 5) — `{componentKey, requiredPermission, gateMode}` as core emits\n     *  them. Consumed by the SDK's component-policy resolver; `[]` when the\n     *  subscriber has no overrides (or on older responses). */\n    componentAccessPolicies: ComponentAccessPolicyRow__60d2c40fe86e[];\n    /** Current legal acceptance state for this subscriber/org, when served by\n     *  Core. Absent on older responses. */\n    legalConsent?: LegalConsentStatus__2c5f3ab016cd;\n    raw: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L897",
        "description": "Full `GET /me` context: the subscriber (null = signed-in user has no\nsubscriber record for the selected org → onboarding) plus the\neligibility-scoped plan list (NOT identical to the public catalog).",
        "references": [
          {
            "name": "ComponentAccessPolicyRow__60d2c40fe86e",
            "source": "packages/farthershore-js/dist/types.d.ts#L945"
          },
          {
            "name": "LegalConsentStatus__2c5f3ab016cd",
            "source": "packages/farthershore-js/dist/types.d.ts#L76"
          },
          {
            "name": "Plan__3a8348415fe9",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          },
          {
            "name": "SubscriberDetail__3358181c0560",
            "source": "packages/farthershore-js/dist/types.d.ts#L859"
          }
        ]
      },
      {
        "name": "SubscriberDetail__3358181c0560",
        "signature": "export interface SubscriberDetail__3358181c0560 {\n    id?: string;\n    status: string | null;\n    planKey: string | null;\n    compiledPlanId: string | null;\n    /** True only after the selected environment's gateway has the exact active\n     * subscription projection. */\n    gatewayReady?: boolean;\n    /** Resource limits on the subscriber's pinned plan, not the latest catalog. */\n    resourceLimits?: Record<string, number>;\n    /** Per-dimension meter map (`dimension → unit`) on the subscriber's PINNED\n     *  compiled plan — the billing shape the subscriber is actually on. */\n    dimensions?: Record<string, number>;\n    /** The ordered list of meter dimensions the usage tab should display,\n     *  authored by the pinned plan. `rules[].d` indexes into this array. */\n    displayDims?: string[];\n    /** Pinned-plan rate-limit / quota allowances (the source of truth for\n     *  included quotas — see {@link SubscriberPinnedRule}). */\n    rules?: SubscriberPinnedRule__7b0d2ee36c4a[];\n    /** Stripe-driven lifecycle (e.g. ACTIVE | TRIALING | PAST_DUE | CANCELLED). */\n    subscriptionLifecycle?: string | null;\n    /** Stripe-synced trial end (ISO) — drives the trial banner countdown. */\n    trialEndsAt?: string | null;\n    /** True when a paid cancel is scheduled for period end (\"Renew\" un-schedules). */\n    cancelAtPeriodEnd?: boolean | null;\n    /** A scheduled plan transition (downgrades apply at period end). */\n    scheduledTransition?: SubscriberScheduledTransition__cd8a41b51ac1 | null;\n    /** An active promotional code applied to the subscription, when present. */\n    activePromo?: SubscriberActivePromo__160abba5e892 | null;\n    /** P-SPENDCAP-READ (W6.4) — the subscriber-set monthly spend cap, in cents,\n     *  or null when none is set. STORED-not-ENFORCED today (held in\n     *  `Subscription.customMetadata`, pending the rate-limit migration). */\n    maxMonthlySpendCents?: number | null;\n    [k: string]: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L859",
        "description": "Rich subscriber detail from `GET /me` — superset of {@link Subscriber} with\nthe lifecycle/billing fields the account pages render. Extra Core fields ride\nalong untyped.",
        "references": [
          {
            "name": "SubscriberActivePromo__160abba5e892",
            "source": "packages/farthershore-js/dist/types.d.ts#L815"
          },
          {
            "name": "SubscriberPinnedRule__7b0d2ee36c4a",
            "source": "packages/farthershore-js/dist/types.d.ts#L848"
          },
          {
            "name": "SubscriberScheduledTransition__cd8a41b51ac1",
            "source": "packages/farthershore-js/dist/types.d.ts#L832"
          }
        ]
      },
      {
        "name": "SubscribeResult__4b2d9557cede",
        "signature": "export interface SubscribeResult__4b2d9557cede {\n    /** Stripe Checkout URL (paid plans only). Undefined for free activations. */\n    url?: string;\n    /** The activated subscriber (free plans only). Undefined for paid checkout. */\n    subscriber?: {\n        id: string;\n        businessId?: string | null;\n        status: string;\n    };\n    /** Server-side checkout-attempt id, when returned. */\n    checkoutAttemptId?: string;\n    /** Best-effort initial API key minted on free-plan activation, when present. */\n    autoApiKey?: string;\n    /** Set when the subscriber activated but the first-key mint FAILED — surfaced\n     *  (not swallowed) so the caller can prompt a manual key creation. */\n    autoApiKeyError?: AutoApiKeyError__bd378e9396dc;\n}",
        "source": "packages/farthershore-js/dist/resources/plans.d.ts#L44",
        "description": "Result of `subscribe()`. For a PAID plan, `url` is the Stripe Checkout URL to\nnavigate to. For a FREE plan, there is no `url` — the subscriber was\nactivated directly and `subscriber` describes the new row.",
        "references": [
          {
            "name": "AutoApiKeyError__bd378e9396dc",
            "source": "packages/farthershore-js/dist/types.d.ts#L1097"
          }
        ]
      },
      {
        "name": "SubscriberPinnedRule__7b0d2ee36c4a",
        "signature": "export interface SubscriberPinnedRule__7b0d2ee36c4a {\n    /** Dimension index into `displayDims`. */\n    d: number;\n    /** Window length in seconds (a 30-day month is 2592000). */\n    w: number;\n    /** Capacity (the included allowance for the window). */\n    c: number;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L848",
        "description": "One pinned-plan display rule from `GET /me` (`subscriber.rules`). A\nrate-limit / quota allowance in the compiled-entitlement compact form:\n`d` = dimension index, `w` = window seconds, `c` = capacity. The usage card\nreads the `month`-window (`w === 2592000`) rules as the included quotas the\nsubscriber is ACTUALLY billed under — not the latest catalog meter list,\nwhich may have drifted from the subscriber's pinned plan.",
        "references": []
      },
      {
        "name": "SubscriberScheduledTransition__cd8a41b51ac1",
        "signature": "export interface SubscriberScheduledTransition__cd8a41b51ac1 {\n    compiledPlanId: string | null;\n    planName: string | null;\n    planType: string | null;\n    /** ISO timestamp the transition takes effect. */\n    effectiveAt: string;\n    /** Movement direction (`CANCEL` | `UPGRADE` | `DOWNGRADE` | `SIDEGRADE`),\n     *  open to producer-side additions. */\n    kind: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L832",
        "description": "A scheduled plan transition on a subscriber. Mirrors core's\n`PortalSubscriberContext.subscriber.scheduledTransition` — richer than\n{@link SubscriptionScheduledTransition} (carries the resolved plan name +\ntype).",
        "references": []
      },
      {
        "name": "Subscription__3e996fafa8e7",
        "signature": "export interface Subscription__3e996fafa8e7 {\n    id: string;\n    /** Display lifecycle status (e.g. ACTIVE | TRIALING | PAST_DUE). Falls back\n     *  across `status` / `lifecycle` on the wire. */\n    status: string;\n    planKey: string | null;\n    planName: string | null;\n    /** Owning product id, or null when absent on a lean DTO. */\n    businessId: string | null;\n    /** Immutable `CompiledPlan.id` currently active, or null. */\n    compiledPlanId: string | null;\n    /** Richer lifecycle string straight off the row (may equal `status`). */\n    lifecycle: string | null;\n    /** Payment health (`ok` | `past_due` | `incomplete` | …), or null when the\n     *  DTO doesn't carry it (free subs). */\n    paymentHealth: string | null;\n    /** ISO start of the current billing period, or null. */\n    currentPeriodStart: string | null;\n    /** ISO end of the current billing period, or null. */\n    currentPeriodEnd: string | null;\n    /** True when a paid cancel is scheduled for period end. */\n    cancelAtPeriodEnd: boolean;\n    /** ISO trial end — drives the trial countdown. */\n    trialEndsAt: string | null;\n    /** ISO timestamp the subscription was canceled, or null. */\n    canceledAt: string | null;\n    /** A scheduled plan transition, or null when none is pending. */\n    scheduledTransition: SubscriptionScheduledTransition__57a7b2f83ca5 | null;\n    /** Whether the subscriber has a Stripe customer (can open the billing\n     *  portal). Free subs that never touched Stripe are `false`. */\n    canManageInStripe: boolean;\n    /**\n     * Whether there is actually something here to cancel — SERVER-DECIDED.\n     *\n     * A subscription on a `free`-kind plan has no paid, Stripe-managed\n     * subscription behind it, so \"cancel\" has no meaning. The client cannot work\n     * this out on its own (the portal DTO always carries a real subscription id,\n     * so \"nothing to cancel\" looks identical to a lean wire body), which is why\n     * core answers it.\n     *\n     * `null` means the server did not say — treated as CANCELLABLE so an older\n     * core never strands a paying subscriber with no way to cancel.\n     */\n    cancellable: boolean | null;\n    /** The full platform subscription DTO (large + evolving) for advanced reads. */\n    raw: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L739",
        "description": "The consumer's current subscription for this product. Mirrors core's\n`PortalSubscriptionDto` (lifecycle + billing state + scheduled transition)\nmapped to the SDK's camelCase domain convention. The widened fields degrade\nto safe defaults when the wire DTO is lean (`null` / `false`).",
        "references": [
          {
            "name": "SubscriptionScheduledTransition__57a7b2f83ca5",
            "source": "packages/farthershore-js/dist/types.d.ts#L726"
          }
        ]
      },
      {
        "name": "SubscriptionContext__55ff0ed7dfb5",
        "signature": "export interface SubscriptionContext__55ff0ed7dfb5 {\n    organizationId: string;\n    /** Org display name — matches core's wire field (`name`, NOT\n     *  `organizationName`; see apps/core/src/routes/portal-customer/shared.ts). */\n    name?: string | null;\n    isDefault?: boolean;\n    /** Existing subscriber row for this business/org pair. A non-null value\n     * means this workspace already owns customer state for the product. */\n    subscriberId?: string | null;\n    /** Authoritative active-plan entitlement for the selected environment. */\n    hasEntitlement?: boolean;\n    [k: string]: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L955",
        "description": "One org through which the user holds a subscription to this product.",
        "references": []
      },
      {
        "name": "SubscriptionContextsResult__fe44e57e7d49",
        "signature": "export interface SubscriptionContextsResult__fe44e57e7d49 {\n    contexts: SubscriptionContext__55ff0ed7dfb5[];\n    defaultOrganizationId: string;\n    selectedOrganizationId: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L968",
        "description": "",
        "references": [
          {
            "name": "SubscriptionContext__55ff0ed7dfb5",
            "source": "packages/farthershore-js/dist/types.d.ts#L955"
          }
        ]
      },
      {
        "name": "SubscriptionScheduledTransition__57a7b2f83ca5",
        "signature": "export interface SubscriptionScheduledTransition__57a7b2f83ca5 {\n    /** Immutable `CompiledPlan.id` the subscription moves to, or null. */\n    compiledPlanId: string | null;\n    /** ISO timestamp the transition takes effect, or null. */\n    effectiveAt: string | null;\n    /** Movement direction (`CANCEL` | `UPGRADE` | `DOWNGRADE` | `SIDEGRADE`),\n     *  open to producer-side additions. */\n    kind: string | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L726",
        "description": "A scheduled plan transition on a subscription (downgrades apply at period\nend). Mirrors core's `PortalSubscriptionDto.scheduledTransition`.",
        "references": []
      },
      {
        "name": "TeamInvitation__f9f120bf906d",
        "signature": "export interface TeamInvitation__f9f120bf906d {\n    id: string;\n    email: string;\n    role: TeamRole__5a6deea9bec8;\n    /** Managed-RBAC product roles granted on accept. */\n    businessRoleKeys: string[];\n    status: string;\n    invitedByExternalId?: string | null;\n    expiresAt: string;\n    createdAt: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L999",
        "description": "A pending subscriber-team invitation (`GET|POST /me/team/invites`).",
        "references": [
          {
            "name": "TeamRole__5a6deea9bec8",
            "source": "packages/farthershore-js/dist/types.d.ts#L973"
          }
        ]
      },
      {
        "name": "TeamInvitationAccepted__11c705c559ac",
        "signature": "export interface TeamInvitationAccepted__11c705c559ac {\n    membershipId: string;\n    role: TeamRole__5a6deea9bec8;\n    businessRoleKeys: string[];\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1017",
        "description": "Result of accepting an invitation.",
        "references": [
          {
            "name": "TeamRole__5a6deea9bec8",
            "source": "packages/farthershore-js/dist/types.d.ts#L973"
          }
        ]
      },
      {
        "name": "TeamInvitationCreated__c157ef151993",
        "signature": "export interface TeamInvitationCreated__c157ef151993 extends TeamInvitation__f9f120bf906d {\n    token: string;\n    emailSent: boolean;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1012",
        "description": "The one-time create response: the invitation plus the raw token (delivered\nby email; surfaced here once for the off-app / no-provider path).",
        "references": [
          {
            "name": "TeamInvitation__f9f120bf906d",
            "source": "packages/farthershore-js/dist/types.d.ts#L999"
          }
        ]
      },
      {
        "name": "TeamListResult__85d0b172007d",
        "signature": "export interface TeamListResult__85d0b172007d {\n    ok: boolean;\n    members: TeamMember__4110e8306e32[];\n    /** The org's assignable Managed-RBAC role list (FAR-698) — what the\n     *  per-member role multi-select offers. Empty when RBAC is unused. */\n    availableRoles?: RbacRoleSummary__2161df852611[];\n    error?: string;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L990",
        "description": "Team read result — `ok:false` (with `error`) drives the read-only banner.",
        "references": [
          {
            "name": "RbacRoleSummary__2161df852611",
            "source": "packages/farthershore-js/dist/types.d.ts#L1023"
          },
          {
            "name": "TeamMember__4110e8306e32",
            "source": "packages/farthershore-js/dist/types.d.ts#L974"
          }
        ]
      },
      {
        "name": "TeamMember__4110e8306e32",
        "signature": "export interface TeamMember__4110e8306e32 {\n    id: string;\n    userExternalId: string;\n    role: TeamRole__5a6deea9bec8;\n    /** Managed-RBAC product-role keys assigned to this member (FAR-698).\n     *  Absent on pre-RBAC responses. */\n    businessRoleKeys?: string[];\n    /** Assigned keys whose role row no longer exists (deleted roles leave\n     *  assignments in place — resolution ignores them). Drives the portal's\n     *  stale-role warning. */\n    staleRoleKeys?: string[];\n    createdAt?: string;\n    updatedAt?: string;\n    [k: string]: unknown;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L974",
        "description": "",
        "references": [
          {
            "name": "TeamRole__5a6deea9bec8",
            "source": "packages/farthershore-js/dist/types.d.ts#L973"
          }
        ]
      },
      {
        "name": "TeamPanelImpl__c348298e2aa6",
        "signature": "declare function TeamPanelImpl__c348298e2aa6({ className, title }?: TeamPanelProps): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/team-panel.d.ts#L7",
        "description": "",
        "references": [
          {
            "name": "TeamPanelProps",
            "source": "packages/farthershore-js/dist/components/team-panel.d.ts#L1"
          }
        ]
      },
      {
        "name": "TeamResource__b9e413854377",
        "signature": "export interface TeamResource__b9e413854377 {\n    /** Team members on the current subscription. A failed read surfaces\n     *  `{ ok:false, error }` (drives the SSR portal's read-only banner) — NOT a\n     *  silent empty list. */\n    list(opts?: {\n        signal?: AbortSignal;\n    }): Promise<TeamListResult__85d0b172007d>;\n    /**\n     * Track T2 — subscriber-team invitations. Managers (OWNER/ADMIN) invite by\n     * email; the invitee accepts with the emailed token. Each method THROWS the\n     * typed `FartherShoreApiError` on validation/authz failure.\n     */\n    invites: {\n        /** Pending invitations (OWNER/ADMIN). */\n        list(opts?: {\n            signal?: AbortSignal;\n        }): Promise<TeamInvitation__f9f120bf906d[]>;\n        /** Create an invitation. `role` defaults to VIEWER; `businessRoleKeys` must\n         *  be a subset of the caller's own permissions (403 otherwise). Returns the\n         *  invitation plus the one-time raw token. */\n        create(input: {\n            email: string;\n            role?: TeamRole__5a6deea9bec8;\n            businessRoleKeys?: string[];\n        }): Promise<TeamInvitationCreated__c157ef151993>;\n        /** Revoke a pending invitation. */\n        revoke(invitationId: string): Promise<void>;\n        /** Accept an invitation with its token. The signed-in user's email must\n         *  match the invite (403 mismatch; 409 expired/already-used). */\n        accept(token: string): Promise<TeamInvitationAccepted__11c705c559ac>;\n    };\n    updateRole(membershipId: string, role: TeamRole__5a6deea9bec8): Promise<TeamMember__4110e8306e32>;\n    remove(membershipId: string): Promise<void>;\n    /**\n     * Set-replace a member's Managed-RBAC product-role assignment (FAR-698):\n     * the given list becomes the member's full assignment; `[]` clears it.\n     * Every key must reference an existing role. Throws the typed\n     * `FartherShoreApiError` on validation/authz failures.\n     * Client-side role gating is UX only; the gateway's `permission`\n     * constraint is the security boundary.\n     */\n    assignRoles(membershipId: string, roles: string[]): Promise<TeamMember__4110e8306e32>;\n}",
        "source": "packages/farthershore-js/dist/resources/account.d.ts#L13",
        "description": "",
        "references": [
          {
            "name": "TeamInvitation__f9f120bf906d",
            "source": "packages/farthershore-js/dist/types.d.ts#L999"
          },
          {
            "name": "TeamInvitationAccepted__11c705c559ac",
            "source": "packages/farthershore-js/dist/types.d.ts#L1017"
          },
          {
            "name": "TeamInvitationCreated__c157ef151993",
            "source": "packages/farthershore-js/dist/types.d.ts#L1012"
          },
          {
            "name": "TeamListResult__85d0b172007d",
            "source": "packages/farthershore-js/dist/types.d.ts#L990"
          },
          {
            "name": "TeamMember__4110e8306e32",
            "source": "packages/farthershore-js/dist/types.d.ts#L974"
          },
          {
            "name": "TeamRole__5a6deea9bec8",
            "source": "packages/farthershore-js/dist/types.d.ts#L973"
          }
        ]
      },
      {
        "name": "TeamRole__5a6deea9bec8",
        "signature": "export type TeamRole__5a6deea9bec8 = \"OWNER\" | \"ADMIN\" | \"VIEWER\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L973",
        "description": "",
        "references": []
      },
      {
        "name": "TokenProvider__40095f0da8e4",
        "signature": "export type TokenProvider__40095f0da8e4 = () => string | null | undefined | Promise<string | null | undefined>;",
        "source": "packages/farthershore-js/dist/config.d.ts#L80",
        "description": "Returns the current session bearer token (Clerk session JWT or persona JWT),\nor null/undefined when signed out. May be async (e.g. Clerk's getToken).",
        "references": []
      },
      {
        "name": "TransparentBillPreview__bd44f368bc40",
        "signature": "export interface TransparentBillPreview__bd44f368bc40 {\n    currency: string;\n    disclosure: \"transparent\";\n    /** The plan's recurring fee, in cents. */\n    recurringFeeCents: number;\n    /** Per-rating-window engine totals. */\n    windows: BillPreviewWindow__ebfec15d43d1[];\n    totals: {\n        /** Nanodollars, decimal strings (null = unavailable). */\n        ratedNanos: NanosAmount__f9c1e22d3cbe;\n        fundedNanos: NanosAmount__f9c1e22d3cbe;\n        receivableNanos: NanosAmount__f9c1e22d3cbe;\n    };\n    allowances: BillPreviewAllowance__eba9c1df99be[];\n    /** All-zero counts mean `totals` IS the whole bill. */\n    usageRating: BillPreviewUsageRating__fb184ad4d633;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L1257",
        "description": "",
        "references": [
          {
            "name": "BillPreviewAllowance__eba9c1df99be",
            "source": "packages/farthershore-js/dist/types.d.ts#L1198"
          },
          {
            "name": "BillPreviewUsageRating__fb184ad4d633",
            "source": "packages/farthershore-js/dist/types.d.ts#L1251"
          },
          {
            "name": "BillPreviewWindow__ebfec15d43d1",
            "source": "packages/farthershore-js/dist/types.d.ts#L1186"
          },
          {
            "name": "NanosAmount__f9c1e22d3cbe",
            "source": "packages/farthershore-js/dist/types.d.ts#L1179"
          }
        ]
      },
      {
        "name": "TrialBannerImpl__d471bab52484",
        "signature": "declare function TrialBannerImpl__d471bab52484({ className, onUpgrade, upgradeLabel, }?: TrialBannerProps): import(\"react\").JSX.Element | null;",
        "source": "packages/farthershore-js/dist/components/trial-banner.d.ts#L10",
        "description": "",
        "references": [
          {
            "name": "TrialBannerProps",
            "source": "packages/farthershore-js/dist/components/trial-banner.d.ts#L1"
          }
        ]
      },
      {
        "name": "UpdateServiceAccountInput__88886ec5643e",
        "signature": "export interface UpdateServiceAccountInput__88886ec5643e {\n    requestedPermissions?: NonEmptyPermissionList__ca911cbb6fa0;\n    usageLimit?: ServiceAccountUsageLimitRequest__f255b800fa4e | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L447",
        "description": "",
        "references": [
          {
            "name": "NonEmptyPermissionList__ca911cbb6fa0",
            "source": "packages/farthershore-js/dist/types.d.ts#L440"
          },
          {
            "name": "ServiceAccountUsageLimitRequest__f255b800fa4e",
            "source": "packages/farthershore-js/dist/types.d.ts#L399"
          }
        ]
      },
      {
        "name": "UpdateUsageLimitInput__eb59c932012e",
        "signature": "export type UpdateUsageLimitInput__eb59c932012e = (UsageLimitUpdateValue__e8f19d3e563b & UsageLimitUpdateMode__0a6925ca669e) | (UsageLimitNoUpdateValue__cd3ce2b61e4f & UsageLimitExplicitUpdateMode__577df72501b7) | (UsageLimitNoUpdateValue__cd3ce2b61e4f & {\n    mode?: never;\n    notifyAtPct: number | null;\n});",
        "source": "packages/farthershore-js/dist/types.d.ts#L637",
        "description": "Strict PUT body. Scope, subject, and quantity are immutable; at least one\nvalue or mode/threshold field is required.",
        "references": [
          {
            "name": "UsageLimitExplicitUpdateMode__577df72501b7",
            "source": "packages/farthershore-js/dist/types.d.ts#L628"
          },
          {
            "name": "UsageLimitNoUpdateValue__cd3ce2b61e4f",
            "source": "packages/farthershore-js/dist/types.d.ts#L614"
          },
          {
            "name": "UsageLimitUpdateMode__0a6925ca669e",
            "source": "packages/farthershore-js/dist/types.d.ts#L618"
          },
          {
            "name": "UsageLimitUpdateValue__e8f19d3e563b",
            "source": "packages/farthershore-js/dist/types.d.ts#L607"
          }
        ]
      },
      {
        "name": "UpgradePromptBaseProps__aaa79a508e5a",
        "signature": "interface UpgradePromptBaseProps__aaa79a508e5a {\n    /** Appended to the root card or direct-plan button. */\n    className?: string;\n}",
        "source": "packages/farthershore-js/dist/components/upgrade-prompt.d.ts#L4",
        "description": "",
        "references": []
      },
      {
        "name": "UpgradePromptImpl__8f7c125f9324",
        "signature": "declare function UpgradePromptImpl__8f7c125f9324(props: UpgradePromptProps): import(\"react\").JSX.Element | null;",
        "source": "packages/farthershore-js/dist/components/upgrade-prompt.d.ts#L45",
        "description": "",
        "references": [
          {
            "name": "UpgradePromptProps",
            "source": "packages/farthershore-js/dist/components/upgrade-prompt.d.ts#L44"
          }
        ]
      },
      {
        "name": "UpgradeTarget__4fa17b7312aa",
        "signature": "export interface UpgradeTarget__4fa17b7312aa {\n    /** The plan to upgrade to (pass `plan.id` to `billing.changePlan`). */\n    plan: Plan__3a8348415fe9;\n    /** The new cap for the offending dimension, or null when unlimited/unknown.\n     */\n    raisesTo: number | null;\n}",
        "source": "packages/farthershore-js/dist/react/use-upgrade.d.ts#L3",
        "description": "",
        "references": [
          {
            "name": "Plan__3a8348415fe9",
            "source": "packages/farthershore-js/dist/types.d.ts#L127"
          }
        ]
      },
      {
        "name": "USAGE_LIMIT_STRATEGIES__42e6020ce1f4",
        "signature": "declare const USAGE_LIMIT_STRATEGIES__42e6020ce1f4: readonly [\"fixed_window\", \"sliding_window\"];",
        "source": "packages/farthershore-js/dist/types.d.ts#L553",
        "description": "",
        "references": []
      },
      {
        "name": "USAGE_TRAFFIC_CLASSES__3e7da6994f34",
        "signature": "declare const USAGE_TRAFFIC_CLASSES__3e7da6994f34: readonly [\"customer_operation\", \"control_plane\", \"admin_internal\", \"background_job\", \"webhook\", \"healthcheck\", \"unclassified\"];",
        "source": "packages/farthershore-js/dist/types.d.ts#L650",
        "description": "",
        "references": []
      },
      {
        "name": "UsageBillingBasis__f1af1792f9ef",
        "signature": "export type UsageBillingBasis__f1af1792f9ef = \"requests\" | \"usage\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L649",
        "description": "Whether usage is billed as a pure request COUNT or weighted USAGE. Drives the\nmeter label (\"Requests\" vs \"Usage\"); computed server-side.",
        "references": []
      },
      {
        "name": "UsageCardImpl__1cd3adcc9ade",
        "signature": "declare function UsageCardImpl__1cd3adcc9ade({ activeCompiledPlanId, className, renderRow, }?: UsageCardProps): import(\"react\").JSX.Element;",
        "source": "packages/farthershore-js/dist/components/usage.d.ts#L15",
        "description": "",
        "references": [
          {
            "name": "UsageCardProps",
            "source": "packages/farthershore-js/dist/components/usage.d.ts#L7"
          }
        ]
      },
      {
        "name": "UsageChargeableOutcomes__7192cca0f62f",
        "signature": "export type UsageChargeableOutcomes__7192cca0f62f = \"success_only\" | \"success_and_partial\" | \"attempted\" | \"trusted_actual_usage_only\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L654",
        "description": "",
        "references": []
      },
      {
        "name": "UsageEvent__0652cabf737c",
        "signature": "export interface UsageEvent__0652cabf737c {\n    id: string;\n    timestamp: string;\n    operation: string;\n    apiKeyPrefix: string | null;\n    statusCode: number | null;\n    status: \"success\" | \"error\";\n    /** Event kind (e.g. \"api\"); shown as the row Type. */\n    type: string | null;\n    latencyMs: number | null;\n    /** Canonical per-event meter values, keyed by product-declared meter. */\n    dimensions: UsageEventDimensions__f3dde72e4b29;\n    /** Compatibility aliases for common legacy portal displays. */\n    requests: number | null;\n    tokens: number | null;\n    /** Advisory UsagePolicy state confirmed or relayed by the gateway/core. The\n     *  frontend decides nothing from this; it is only for rendering stale-tolerant\n     *  labels, cooldowns, and prompts. */\n    usagePolicy?: UsagePolicyAdvisory__0000f21c4f54;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L679",
        "description": "",
        "references": [
          {
            "name": "UsageEventDimensions__f3dde72e4b29",
            "source": "packages/farthershore-js/dist/types.d.ts#L646"
          },
          {
            "name": "UsagePolicyAdvisory__0000f21c4f54",
            "source": "packages/farthershore-js/dist/types.d.ts#L655"
          }
        ]
      },
      {
        "name": "UsageEventDimensions__f3dde72e4b29",
        "signature": "export type UsageEventDimensions__f3dde72e4b29 = Record<string, number | null>;",
        "source": "packages/farthershore-js/dist/types.d.ts#L646",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimit__ab648bdf9611",
        "signature": "export type UsageLimit__ab648bdf9611 = UsageLimitSubject__9eba54806aaa & UsageLimitValue__4ae5aa5bc7c5 & {\n    id: string;\n    quantity: string;\n    mode: UsageLimitMode__a43840c0d8cf;\n    period: \"BILLING_PERIOD\";\n    /** Present only for NOTIFY rows. */\n    notifyAtPct?: number;\n    ceiling: UsageLimitCeiling__6c51e5a840f6;\n    /** Present when the edge accounts this limit on a non-default window. */\n    effectiveWindow?: UsageLimitEffectiveWindow__87a0c7ebed46;\n    createdBy: string | null;\n    createdAt: string;\n    updatedAt: string;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L580",
        "description": "",
        "references": [
          {
            "name": "UsageLimitCeiling__6c51e5a840f6",
            "source": "packages/farthershore-js/dist/types.d.ts#L549"
          },
          {
            "name": "UsageLimitEffectiveWindow__87a0c7ebed46",
            "source": "packages/farthershore-js/dist/types.d.ts#L559"
          },
          {
            "name": "UsageLimitMode__a43840c0d8cf",
            "source": "packages/farthershore-js/dist/types.d.ts#L548"
          },
          {
            "name": "UsageLimitSubject__9eba54806aaa",
            "source": "packages/farthershore-js/dist/types.d.ts#L570"
          },
          {
            "name": "UsageLimitValue__4ae5aa5bc7c5",
            "source": "packages/farthershore-js/dist/types.d.ts#L563"
          }
        ]
      },
      {
        "name": "UsageLimitCeiling__6c51e5a840f6",
        "signature": "export interface UsageLimitCeiling__6c51e5a840f6 {\n    limitUnits?: number;\n    limitCents?: number;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L549",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitCreateMode__f16ef2d50497",
        "signature": "type UsageLimitCreateMode__f16ef2d50497 = {\n    mode: \"BLOCK\";\n    notifyAtPct?: never;\n} | {\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L595",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitDeleteResult__734b143ab2a2",
        "signature": "export interface UsageLimitDeleteResult__734b143ab2a2 {\n    id: string;\n    deleted: true;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L641",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitEffectiveWindow__87a0c7ebed46",
        "signature": "export interface UsageLimitEffectiveWindow__87a0c7ebed46 {\n    strategy: UsageLimitStrategy__119d691e431d;\n    periodSeconds: number;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L559",
        "description": "READ-ONLY: how the limit is actually accounted at the edge. Builder-owned\n(inherited from the plan's own rule for the dimension); a `sliding_window`\nmakes the ceiling a rolling horizon of the period's length instead of one\nthat resets at the period boundary. Never writable by the subscriber.",
        "references": [
          {
            "name": "UsageLimitStrategy__119d691e431d",
            "source": "packages/farthershore-js/dist/types.d.ts#L554"
          }
        ]
      },
      {
        "name": "UsageLimitExplicitUpdateMode__577df72501b7",
        "signature": "type UsageLimitExplicitUpdateMode__577df72501b7 = {\n    mode: \"BLOCK\";\n    notifyAtPct?: null;\n} | {\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L628",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitListResponse__2eeb76f22fde",
        "signature": "export type UsageLimitListResponse__2eeb76f22fde = OffsetPage__af8a84ff58be<UsageLimit__ab648bdf9611>;",
        "source": "packages/farthershore-js/dist/types.d.ts#L594",
        "description": "",
        "references": [
          {
            "name": "OffsetPage__af8a84ff58be",
            "source": "packages/farthershore-js/dist/types.d.ts#L535"
          },
          {
            "name": "UsageLimit__ab648bdf9611",
            "source": "packages/farthershore-js/dist/types.d.ts#L580"
          }
        ]
      },
      {
        "name": "UsageLimitMode__a43840c0d8cf",
        "signature": "export type UsageLimitMode__a43840c0d8cf = \"BLOCK\" | \"NOTIFY\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L548",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitNoUpdateValue__cd3ce2b61e4f",
        "signature": "type UsageLimitNoUpdateValue__cd3ce2b61e4f = {\n    limitUnits?: never;\n    limitCents?: never;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L614",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitProfile__4ac9b6a9c466",
        "signature": "export type UsageLimitProfile__4ac9b6a9c466 = \"customer_usage\" | \"business_capacity\" | \"control_plane\" | \"admin_internal\" | \"platform_abuse_only\" | \"healthcheck\" | \"none\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L653",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitsResource__2b1e05e6bcda",
        "signature": "export interface UsageLimitsResource__2b1e05e6bcda {\n    /** List the current subscriber organization's visible per-actor limits.\n     *  `options.signal` is accepted for source compatibility but does not cancel\n     *  the shared cached fetch; the cache owns the request lifecycle. */\n    list(options?: {\n        signal?: AbortSignal;\n        limit?: number;\n        offset?: number;\n    }): Promise<UsageLimitListResponse__2eeb76f22fde>;\n    /** Create a subscriber-authored usage limit. */\n    create(input: CreateUsageLimitInput__0aee95b69b13): Promise<UsageLimit__ab648bdf9611>;\n    /** Update mutable value, mode, or threshold fields. */\n    update(limitId: string, input: UpdateUsageLimitInput__eb59c932012e): Promise<UsageLimit__ab648bdf9611>;\n    /** Permanently remove a subscriber-authored usage limit. */\n    delete(limitId: string): Promise<UsageLimitDeleteResult__734b143ab2a2>;\n}",
        "source": "packages/farthershore-js/dist/resources/usage-limits.d.ts#L3",
        "description": "",
        "references": [
          {
            "name": "CreateUsageLimitInput__0aee95b69b13",
            "source": "packages/farthershore-js/dist/types.d.ts#L604"
          },
          {
            "name": "UpdateUsageLimitInput__eb59c932012e",
            "source": "packages/farthershore-js/dist/types.d.ts#L637"
          },
          {
            "name": "UsageLimit__ab648bdf9611",
            "source": "packages/farthershore-js/dist/types.d.ts#L580"
          },
          {
            "name": "UsageLimitDeleteResult__734b143ab2a2",
            "source": "packages/farthershore-js/dist/types.d.ts#L641"
          },
          {
            "name": "UsageLimitListResponse__2eeb76f22fde",
            "source": "packages/farthershore-js/dist/types.d.ts#L594"
          }
        ]
      },
      {
        "name": "UsageLimitStrategy__119d691e431d",
        "signature": "export type UsageLimitStrategy__119d691e431d = (typeof USAGE_LIMIT_STRATEGIES__42e6020ce1f4)[number];",
        "source": "packages/farthershore-js/dist/types.d.ts#L554",
        "description": "",
        "references": [
          {
            "name": "USAGE_LIMIT_STRATEGIES__42e6020ce1f4",
            "source": "packages/farthershore-js/dist/types.d.ts#L553"
          }
        ]
      },
      {
        "name": "UsageLimitSubject__9eba54806aaa",
        "signature": "export type UsageLimitSubject__9eba54806aaa = {\n    scope: \"ORG\";\n    subjectId?: never;\n} | {\n    scope: \"MEMBER\";\n    subjectId: string;\n} | {\n    scope: \"SERVICE_ACCOUNT\";\n    subjectId: string;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L570",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitUpdateMode__0a6925ca669e",
        "signature": "type UsageLimitUpdateMode__0a6925ca669e = {\n    mode?: never;\n    notifyAtPct?: number | null;\n} | {\n    mode: \"BLOCK\";\n    notifyAtPct?: null;\n} | {\n    mode: \"NOTIFY\";\n    notifyAtPct: number;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L618",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitUpdateValue__e8f19d3e563b",
        "signature": "type UsageLimitUpdateValue__e8f19d3e563b = {\n    limitUnits: number;\n    limitCents?: never;\n} | {\n    limitCents: number;\n    limitUnits?: never;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L607",
        "description": "",
        "references": []
      },
      {
        "name": "UsageLimitValue__4ae5aa5bc7c5",
        "signature": "export type UsageLimitValue__4ae5aa5bc7c5 = {\n    limitUnits: number;\n    limitCents?: never;\n} | {\n    limitCents: number;\n    limitUnits?: never;\n};",
        "source": "packages/farthershore-js/dist/types.d.ts#L563",
        "description": "",
        "references": []
      },
      {
        "name": "UsagePolicyAdvisory__0000f21c4f54",
        "signature": "export interface UsagePolicyAdvisory__0000f21c4f54 {\n    /** Gateway-resolved policy id, when the usage payload includes one. */\n    usagePolicyId: string | null;\n    /** Known traffic class; null when a newer gateway sends a class this SDK\n     *  does not know yet. See `unknownTrafficClass` for the preserved raw value. */\n    trafficClass: UsageTrafficClass__530fe2057481 | null;\n    unknownTrafficClass?: string;\n    policySource: UsagePolicySource__baee26093419 | null;\n    limitProfile: UsageLimitProfile__4ac9b6a9c466 | null;\n    customerBillable: boolean | null;\n    providerCostTracked: boolean | null;\n    chargeableOutcomes: UsageChargeableOutcomes__7192cca0f62f | null;\n    meterKey: string | null;\n    cooldownResetAt: number | null;\n    retryAfterSeconds: number | null;\n    freeButLimited: boolean;\n    providerCost: boolean;\n    upgradePrompt: boolean;\n    creditPrompt: boolean;\n    genericMessage: string;\n    /** Raw gateway/core policy fields. Preserved for forward-compatible UIs and\n     *  debugging; advisory only and never an enforcement input. */\n    raw: Record<string, unknown>;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L655",
        "description": "",
        "references": [
          {
            "name": "UsageChargeableOutcomes__7192cca0f62f",
            "source": "packages/farthershore-js/dist/types.d.ts#L654"
          },
          {
            "name": "UsageLimitProfile__4ac9b6a9c466",
            "source": "packages/farthershore-js/dist/types.d.ts#L653"
          },
          {
            "name": "UsagePolicySource__baee26093419",
            "source": "packages/farthershore-js/dist/types.d.ts#L652"
          },
          {
            "name": "UsageTrafficClass__530fe2057481",
            "source": "packages/farthershore-js/dist/types.d.ts#L651"
          }
        ]
      },
      {
        "name": "UsagePolicySource__baee26093419",
        "signature": "export type UsagePolicySource__baee26093419 = \"declared\" | \"inherited\" | \"defaulted\" | \"inferred\";",
        "source": "packages/farthershore-js/dist/types.d.ts#L652",
        "description": "",
        "references": []
      },
      {
        "name": "UsageRange__216cd12bcfd1",
        "signature": "export interface UsageRange__216cd12bcfd1 {\n    from?: string;\n    to?: string;\n}",
        "source": "packages/farthershore-js/dist/resources/usage.d.ts#L3",
        "description": "",
        "references": []
      },
      {
        "name": "UsageResource__a3469cda0e70",
        "signature": "export interface UsageResource__a3469cda0e70 {\n    /** Dimension → total for the period (requests/tokens/computeMs/dollars…).\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle); the read is unmount-safe\n     *  via the hook's active-flag and bounded by the cache TTL. */\n    summary(range?: UsageRange__216cd12bcfd1, opts?: {\n        signal?: AbortSignal;\n    }): Promise<UsageSummary__0f0a1f283e9b>;\n    /** The most-recent usage events (platform caps this list).\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle); the read is unmount-safe\n     *  via the hook's active-flag and bounded by the cache TTL. */\n    events(range?: UsageRange__216cd12bcfd1, opts?: {\n        signal?: AbortSignal;\n    }): Promise<UsageEvent__0652cabf737c[]>;\n    /** Everything in one round-trip: per-dimension totals + recent events + the\n     *  billing basis (the \"Requests\" vs \"Usage\" meter-label hint).\n     *\n     *  `opts.signal` is accepted for source-compat but does NOT cancel the shared\n     *  cached fetch (the cache owns the fetch lifecycle); the read is unmount-safe\n     *  via the hook's active-flag and bounded by the cache TTL. */\n    snapshot(range?: UsageRange__216cd12bcfd1, opts?: {\n        signal?: AbortSignal;\n        includeEvents?: boolean;\n    }): Promise<UsageSnapshot__f8d76d9838e8>;\n}",
        "source": "packages/farthershore-js/dist/resources/usage.d.ts#L7",
        "description": "",
        "references": [
          {
            "name": "UsageEvent__0652cabf737c",
            "source": "packages/farthershore-js/dist/types.d.ts#L679"
          },
          {
            "name": "UsageRange__216cd12bcfd1",
            "source": "packages/farthershore-js/dist/resources/usage.d.ts#L3"
          },
          {
            "name": "UsageSnapshot__f8d76d9838e8",
            "source": "packages/farthershore-js/dist/types.d.ts#L701"
          },
          {
            "name": "UsageSummary__0f0a1f283e9b",
            "source": "packages/farthershore-js/dist/types.d.ts#L645"
          }
        ]
      },
      {
        "name": "UsageSnapshot__f8d76d9838e8",
        "signature": "export interface UsageSnapshot__f8d76d9838e8 {\n    summary: UsageSummary__0f0a1f283e9b;\n    events: UsageEvent__0652cabf737c[];\n    billingBasis: UsageBillingBasis__f1af1792f9ef;\n    /** Whether `summary` is an EXACT total over the whole period (`true`, the\n     *  DB-side aggregate) or an approximation from a bounded event sample\n     *  (`false`). A `false` here means the UI should flag the figure as\n     *  approximate. Defaults to `true` (additive — older Cores omit it). */\n    exact: boolean;\n    /** Number of usage events the `summary` total was computed from over the\n     *  period. With `exact: true` this is the true event count; with\n     *  `exact: false` it's the sampled (capped) count. */\n    sampledEvents: number;\n    /** ISO start of the period the `summary` covers (the resolved `from`), or\n     *  null when the Core doesn't report it. */\n    periodStart: string | null;\n    /** ISO end of the period the `summary` covers (the resolved `to`), or null\n     *  when the Core doesn't report it. */\n    periodEnd: string | null;\n    /** Aggregated advisory policy state from the freshest event in this snapshot.\n     *  Null when no event carries policy metadata. */\n    usagePolicy: UsagePolicyAdvisory__0000f21c4f54 | null;\n}",
        "source": "packages/farthershore-js/dist/types.d.ts#L701",
        "description": "A single round-trip's worth of usage: per-dimension totals, the recent\nevents, and the billing basis.",
        "references": [
          {
            "name": "UsageBillingBasis__f1af1792f9ef",
            "source": "packages/farthershore-js/dist/types.d.ts#L649"
          },
          {
            "name": "UsageEvent__0652cabf737c",
            "source": "packages/farthershore-js/dist/types.d.ts#L679"
          },
          {
            "name": "UsagePolicyAdvisory__0000f21c4f54",
            "source": "packages/farthershore-js/dist/types.d.ts#L655"
          },
          {
            "name": "UsageSummary__0f0a1f283e9b",
            "source": "packages/farthershore-js/dist/types.d.ts#L645"
          }
        ]
      },
      {
        "name": "UsageSummary__0f0a1f283e9b",
        "signature": "export type UsageSummary__0f0a1f283e9b = Record<string, number>;",
        "source": "packages/farthershore-js/dist/types.d.ts#L645",
        "description": "",
        "references": []
      },
      {
        "name": "UsageTrafficClass__530fe2057481",
        "signature": "export type UsageTrafficClass__530fe2057481 = (typeof USAGE_TRAFFIC_CLASSES__3e7da6994f34)[number];",
        "source": "packages/farthershore-js/dist/types.d.ts#L651",
        "description": "",
        "references": [
          {
            "name": "USAGE_TRAFFIC_CLASSES__3e7da6994f34",
            "source": "packages/farthershore-js/dist/types.d.ts#L650"
          }
        ]
      }
    ],
    "generated/frontend-sdk/components-docs-chrome": []
  },
  "sourceCommit": "10d3029de26218a283d8957422d8cc074c3055e6"
}
