@kaminari-ad/mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shared/result.ts","../src/shared/version.ts","../src/domain/value-objects/bearer-token.ts","../src/domain/value-objects/request-id.ts","../src/infrastructure/api/error-mapping.ts","../src/shared/api/zod-schemas.ts","../src/infrastructure/api/parsers/parse-with-schema.ts","../src/infrastructure/api/parsers/parse-alert.ts","../src/infrastructure/api/parsers/parse-api-key.ts","../src/infrastructure/api/parsers/parse-billing-summary.ts","../src/infrastructure/api/parsers/parse-campaign.ts","../src/infrastructure/api/parsers/parse-campaign-group.ts","../src/infrastructure/api/parsers/shared.ts","../src/infrastructure/api/parsers/parse-count-envelope.ts","../src/infrastructure/api/parsers/parse-custom-rule.ts","../src/infrastructure/api/parsers/parse-empty.ts","../src/infrastructure/api/parsers/parse-emulator.ts","../src/infrastructure/api/parsers/parse-generic.ts","../src/infrastructure/api/parsers/parse-geo-list.ts","../src/infrastructure/api/parsers/parse-policy-set.ts","../src/infrastructure/api/parsers/parse-run.ts","../src/infrastructure/api/parsers/parse-scan.ts","../src/infrastructure/api/parsers/parse-scan-page.ts","../src/infrastructure/api/parsers/parse-tag.ts","../src/infrastructure/api/parsers/parse-webhook.ts","../src/infrastructure/api/http-api-gateway.ts","../src/infrastructure/logging/pino-logger.ts","../src/application/services/api-error-mapper.ts","../src/application/tools/account/create-api-key.tool.ts","../src/application/tools/account/get-account.tool.ts","../src/application/tools/account/invite-user.tool.ts","../src/application/tools/account/list-api-keys.tool.ts","../src/application/tools/account/list-org-roles.tool.ts","../src/application/tools/account/list-org-users.tool.ts","../src/application/tools/account/remove-user.tool.ts","../src/application/tools/account/revoke-api-key.tool.ts","../src/application/tools/account/transfer-ownership.tool.ts","../src/application/tools/account/update-org.tool.ts","../src/application/tools/account/update-user-role.tool.ts","../src/application/tools/alert-notifications/delete-alert-destination.tool.ts","../src/application/tools/alert-notifications/get-campaign-alert-overrides.tool.ts","../src/application/tools/alert-notifications/list-alert-destinations.tool.ts","../src/application/tools/alert-notifications/set-alert-destination-version.tool.ts","../src/application/tools/alert-notifications/set-campaign-alert-overrides.tool.ts","../src/application/tools/alerts/get-alert-stats.tool.ts","../src/application/tools/alerts/list-alerts.tool.ts","../src/application/tools/alerts/update-alert-status.tool.ts","../src/application/tools/billing/get-billing-summary.tool.ts","../src/application/tools/billing/get-usage-summary.tool.ts","../src/application/tools/billing/list-balance-history.tool.ts","../src/application/tools/billing/list-usage.tool.ts","../src/application/tools/campaign-groups/archive-campaign-group.tool.ts","../src/application/tools/campaign-groups/cancel-campaign-group.tool.ts","../src/application/tools/campaign-groups/create-campaign-group.tool.ts","../src/application/tools/campaign-groups/get-campaign-group.tool.ts","../src/application/tools/campaign-groups/list-campaign-groups.tool.ts","../src/application/tools/campaign-groups/pause-campaign-group-schedule.tool.ts","../src/application/tools/campaign-groups/resume-campaign-group-schedule.tool.ts","../src/application/tools/campaign-groups/run-campaign-group.tool.ts","../src/application/tools/campaign-groups/unarchive-campaign-group.tool.ts","../src/application/tools/campaign-groups/update-campaign-group.tool.ts","../src/application/tools/campaigns/archive-campaign.tool.ts","../src/application/tools/campaigns/cancel-campaign.tool.ts","../src/application/tools/campaigns/create-campaign.tool.ts","../src/application/tools/campaigns/get-campaign.tool.ts","../src/application/tools/campaigns/list-campaign-runs.tool.ts","../src/application/tools/campaigns/list-campaigns.tool.ts","../src/application/tools/campaigns/run-campaign.tool.ts","../src/application/tools/campaigns/unarchive-campaign.tool.ts","../src/application/tools/campaigns/update-campaign.tool.ts","../src/application/tools/custom-rules/create-custom-rule.tool.ts","../src/application/tools/custom-rules/delete-custom-rule.tool.ts","../src/application/tools/custom-rules/get-custom-rule.tool.ts","../src/application/tools/custom-rules/list-custom-rules.tool.ts","../src/application/tools/custom-rules/test-custom-rule.tool.ts","../src/application/tools/custom-rules/update-custom-rule.tool.ts","../src/application/tools/emulators/list-emulators.tool.ts","../src/application/tools/geos/list-geos.tool.ts","../src/application/tools/invoicing/list-invoices.tool.ts","../src/application/tools/policy-sets/create-policy-set.tool.ts","../src/application/tools/policy-sets/delete-policy-set.tool.ts","../src/application/tools/policy-sets/get-policy-set.tool.ts","../src/application/tools/policy-sets/list-policy-sets.tool.ts","../src/application/tools/policy-sets/request-policy-set-approval.tool.ts","../src/application/tools/policy-sets/update-policy-set.tool.ts","../src/application/tools/runs/cancel-run.tool.ts","../src/application/tools/runs/get-run.tool.ts","../src/application/tools/runs/list-run-scans.tool.ts","../src/application/tools/scans/cancel-scan.tool.ts","../src/application/tools/scans/create-bulk-scans.tool.ts","../src/application/tools/scans/create-scan.tool.ts","../src/application/tools/scans/get-scan.tool.ts","../src/application/tools/scans/list-scans.tool.ts","../src/application/tools/scans/recheck-scans.tool.ts","../src/application/tools/tags/delete-tag-definition.tool.ts","../src/application/tools/tags/get-tag-definition.tool.ts","../src/application/tools/tags/list-scan-tags.tool.ts","../src/application/tools/tags/list-tags.tool.ts","../src/application/tools/tags/update-tag-definition.tool.ts","../src/application/tools/webhooks/bulk-replay-webhook.tool.ts","../src/application/tools/webhooks/create-webhook.tool.ts","../src/application/tools/webhooks/delete-webhook.tool.ts","../src/application/tools/webhooks/get-webhook.tool.ts","../src/application/tools/webhooks/list-webhook-deliveries.tool.ts","../src/application/tools/webhooks/list-webhook-event-types.tool.ts","../src/application/tools/webhooks/list-webhooks.tool.ts","../src/application/tools/webhooks/replay-webhook-delivery.tool.ts","../src/application/tools/webhooks/rotate-webhook-secret.tool.ts","../src/application/tools/webhooks/test-webhook.tool.ts","../src/application/tools/webhooks/update-webhook.tool.ts","../src/application/tool-registry.ts","../src/presentation/shared/wire-tools.ts","../src/presentation/stdio/stdio-bootstrap.ts","../src/infrastructure/clock/system-clock.ts","../src/infrastructure/rate-limit/leaky-bucket-rate-limiter.ts","../src/infrastructure/session/in-memory-session-store.ts","../src/domain/value-objects/session-id.ts","../src/presentation/http/mcp-session-factory.ts","../src/domain/services/session-binding-policy.ts","../src/presentation/http/session-resolver.ts","../src/presentation/http/http-request-handler.ts","../src/presentation/http/http-bootstrap.ts","../src/shared/config.ts","../src/bin.ts"],"names":["status","z","first","detail","undiciFetch","PolicyEntryShape","process","McpServer","randomUUID","writeJson","bootstrapStdio","bootstrapHttp"],"mappings":"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","file":"bin.js","sourcesContent":["/**\n * Re-export of `neverthrow` Result types and constructors, plus a few\n * project-specific helpers. Importing from this barrel (rather than\n * directly from `neverthrow`) keeps a single seam if we ever swap the\n * library.\n *\n * Discipline note: domain and application code uses `Result<T, E>` for\n * expected errors. Throwing is reserved for programmer errors. The\n * transport layer is the only place a `Result.Err` is mapped to an MCP\n * error envelope.\n */\n\nexport {\n type Err,\n err,\n errAsync,\n fromAsyncThrowable,\n fromPromise,\n fromSafePromise,\n fromThrowable,\n type Ok,\n ok,\n okAsync,\n Result,\n ResultAsync,\n} from \"neverthrow\";\n","/**\n * Package version and name. Hard-coded as constants here, asserted to\n * match `package.json` by a unit test.\n *\n * Why not import `package.json`: it would force JSON-module support at\n * runtime and tsup-bundling would inline the entire manifest. Two\n * constants + one assertion test is simpler and gives the same safety.\n */\n\nexport const NAME = \"@kaminari-ad/mcp\";\nexport const VERSION = \"0.1.0\";\n","/**\n * Opaque value object wrapping a Bearer API token.\n *\n * The raw token is stored in a private field that is **never** exposed\n * via `toString` / `toJSON` / structured-clone. The only ways to use it\n * are:\n *\n * - {@link BearerToken.hash} — short hex prefix for log correlation.\n * - {@link BearerToken.toAuthorizationHeader} — the literal header\n * value, used only by the HTTP API adapter when building an\n * outbound request.\n *\n * This deliberately makes accidental token leakage hard: a logger or\n * structured-clone of a `BearerToken` instance yields a placeholder, not\n * the secret.\n */\n\nimport { createHash } from \"node:crypto\";\n\nconst REDACTED = \"[BearerToken redacted]\";\n\n/**\n * SHA-256 hex prefix length used for the {@link BearerToken.hash}\n * correlation field. 8 chars (32 bits) is enough to correlate one\n * customer's activity, not enough to invert the hash.\n */\nexport const BEARER_HASH_PREFIX_LEN = 8;\n\n/**\n * Hard cap on the inbound `Authorization` header length. Real Kaminari\n * Ad API keys are ~40 chars; padding generously for JWT-style tokens\n * (which the API doesn't issue today but may in the future) and the\n * `Bearer ` prefix. Anything beyond this is rejected as malformed —\n * stops a pathological client from forcing the server to hash multi-MB\n * blobs.\n */\nconst MAX_HEADER_LEN = 4096;\n\n/**\n * Opaque, self-redacting wrapper around a Kaminari Ad API key. Use\n * {@link BearerToken.fromAuthorizationHeader} on the wire-side and\n * {@link BearerToken.fromString} for stdio (`KAMINARI_AD_API_KEY`).\n */\nexport class BearerToken {\n readonly #raw: string;\n\n private constructor(raw: string) {\n this.#raw = raw;\n }\n\n /**\n * Construct from a raw string. Trims surrounding whitespace; rejects\n * empty input. Does NOT validate format — the API is the single\n * source of truth for token validity.\n */\n static fromString(raw: string): BearerToken | undefined {\n const trimmed = raw.trim();\n if (trimmed.length === 0) return undefined;\n return new BearerToken(trimmed);\n }\n\n /**\n * Parse from a raw `Authorization` header value. Returns `undefined`\n * for missing / malformed input (anything not `Bearer <token>`).\n *\n * **Normalization policy.** The regex is case-insensitive on the\n * `Bearer` scheme (per RFC 6750 §2.1, the scheme name is\n * case-insensitive) but the outbound header is always re-emitted\n * with the canonical capitalization (`Bearer <token>`) by\n * {@link toAuthorizationHeader}. We intentionally do NOT preserve\n * the inbound casing byte-for-byte:\n *\n * - The Kaminari Ad API accepts the canonical form.\n * - Outbound canonicalization simplifies any future signature /\n * proxy that re-hashes the header.\n * - The TOKEN value itself is preserved exactly (the capture\n * group's `\\S+` keeps the secret intact); only the SCHEME word\n * is normalized.\n *\n * Token length is capped at {@link MAX_TOKEN_LEN} bytes to keep a\n * pathological client from blowing the heap; longer headers are\n * rejected as malformed.\n */\n static fromAuthorizationHeader(headerValue: string | undefined): BearerToken | undefined {\n if (headerValue === undefined) return undefined;\n if (headerValue.length > MAX_HEADER_LEN) return undefined;\n const match = /^Bearer\\s+(\\S+)\\s*$/i.exec(headerValue);\n if (match?.[1] === undefined) return undefined;\n return BearerToken.fromString(match[1]);\n }\n\n /**\n * Returns the first {@link BEARER_HASH_PREFIX_LEN} hex chars of\n * `sha256(token)`. Used as the `bearer_hash` log field.\n */\n hash(): string {\n return createHash(\"sha256\").update(this.#raw).digest(\"hex\").slice(0, BEARER_HASH_PREFIX_LEN);\n }\n\n /**\n * Returns the full SHA-256 hex digest. Used as the session-binding\n * key in {@link SessionStore}. Not for logs.\n */\n fullHash(): string {\n return createHash(\"sha256\").update(this.#raw).digest(\"hex\");\n }\n\n /**\n * Returns the literal `Authorization` header value. Use ONLY when\n * constructing an outbound HTTP request to the API.\n */\n toAuthorizationHeader(): string {\n return `Bearer ${this.#raw}`;\n }\n\n /**\n * Redaction. Logger / JSON serialisation / template strings see the\n * placeholder, not the token.\n */\n toString(): string {\n return REDACTED;\n }\n\n /**\n * `JSON.stringify(bearer)` -> `\"[BearerToken redacted]\"`. Same\n * intent as {@link toString}: any path that serializes the VO never\n * sees the secret.\n */\n toJSON(): string {\n return REDACTED;\n }\n\n /**\n * Node's `util.inspect` hook — keeps `console.log(token)` /\n * structured logs from accidentally revealing the secret.\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")](): string {\n return REDACTED;\n }\n}\n","/**\n * Per-incoming-request correlation ID. UUID v4 (Node `randomUUID`).\n *\n * Used as the `request_id` log field and propagated to the API as\n * `X-Request-Id` so a single user action can be traced across MCP and\n * the API.\n *\n * Branded string so it cannot be confused with a `tool_name`, a\n * `session_id`, or any other identifier the codebase passes around.\n */\n\nimport { randomUUID } from \"node:crypto\";\n\ndeclare const requestIdBrand: unique symbol;\n\nexport type RequestId = string & { readonly [requestIdBrand]: never };\n\n/**\n * Generates a fresh {@link RequestId}.\n */\nexport function newRequestId(): RequestId {\n return randomUUID() as RequestId;\n}\n\n/**\n * Wraps an externally-supplied UUID string as a {@link RequestId}.\n * Returns `undefined` if the input is not a v4-ish UUID.\n */\nexport function parseRequestId(raw: string): RequestId | undefined {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-7][0-9a-f]{3}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(raw)\n ? (raw as RequestId)\n : undefined;\n}\n","/**\n * Convert an HTTP response (status + parsed body) into an {@link ApiError}.\n *\n * Lives outside `http-api-gateway.ts` because it's pure (no I/O), reused\n * across every endpoint call, and benefits from independent test coverage.\n */\n\nimport type { ApiError } from \"../../domain/ports/api-gateway.js\";\n\n/**\n * Extract a human-readable error message from an API response body.\n *\n * FastAPI uses TWO shapes for the `detail` field:\n * - String (`\"Not found\"` from a `HTTPException(detail=...)`)\n * - Array of `{loc, msg, type, ...}` objects (Pydantic 422 validation)\n *\n * Both need to surface in MCP tool error output. Without the array\n * branch, EVERY 422 across every tool degrades to opaque\n * \"Upstream error\", which makes diagnosing missing/wrong request\n * bodies (and similar drift) impossible from the agent log alone.\n */\nfunction detail(parsed: unknown): string {\n if (parsed === null || typeof parsed !== \"object\") return \"Upstream error\";\n if (!(\"detail\" in parsed)) return \"Upstream error\";\n const d = (parsed as { detail: unknown }).detail;\n if (typeof d === \"string\") return d;\n if (Array.isArray(d)) {\n const messages = d\n .map((entry): string | undefined => {\n if (entry === null || typeof entry !== \"object\") return undefined;\n const e = entry as { loc?: unknown; msg?: unknown };\n const loc = Array.isArray(e.loc)\n ? e.loc.filter((p) => typeof p === \"string\").join(\".\")\n : \"\";\n const msg = typeof e.msg === \"string\" ? e.msg : \"\";\n if (loc === \"\" && msg === \"\") return undefined;\n return loc === \"\" ? msg : `${loc}: ${msg}`;\n })\n .filter((m): m is string => m !== undefined);\n if (messages.length > 0) return messages.join(\"; \");\n }\n return \"Upstream error\";\n}\n\nfunction errCode(parsed: unknown): string | undefined {\n if (parsed !== null && typeof parsed === \"object\" && \"code\" in parsed) {\n const c = (parsed as { code: unknown }).code;\n if (typeof c === \"string\") return c;\n }\n return undefined;\n}\n\n/**\n * Convert an HTTP `(status, parsedBody, retry-after)` tuple to a\n * typed `ApiError`. Pure — used by `HttpApiGateway.call()` after every\n * non-2xx response.\n */\nexport function toApiError(\n status: number,\n parsed: unknown,\n retryAfterHeader: string | string[] | undefined\n): ApiError {\n const message = detail(parsed);\n if (status === 401) return { kind: \"unauthorized\", detail: message };\n if (status === 403) {\n const code = errCode(parsed);\n return code === undefined\n ? { kind: \"forbidden\", detail: message }\n : { kind: \"forbidden\", detail: message, code };\n }\n if (status === 404) return { kind: \"not-found\", detail: message };\n if (status === 422 || status === 400) return { kind: \"invalid-input\", detail: message };\n if (status === 429) {\n const ra = Array.isArray(retryAfterHeader) ? retryAfterHeader[0] : retryAfterHeader;\n const retryMs = ra === undefined ? undefined : Number.parseInt(ra, 10) * 1000;\n return retryMs === undefined || Number.isNaN(retryMs)\n ? { kind: \"rate-limited\", detail: message }\n : { kind: \"rate-limited\", detail: message, retryAfterMs: retryMs };\n }\n return { kind: \"upstream\", detail: message, status };\n}\n","/**\n * GENERATED FILE — do not edit by hand.\n *\n * Source : https://app.kaminari.ad/openapi.json (regen via `npm run gen:api-types`).\n * Tool : openapi-zod-client\n *\n * Exposes runtime zod schemas for every `#/components/schemas/X`\n * plus a Zodios `endpoints` definition for every `/api/v1` route.\n * The MCP HTTP gateway uses `schemas.X.safeParse(raw)` at the\n * response boundary so a future API drift surfaces as a typed\n * `upstream` MCP error (with the zod issue message), not as a\n * runtime `undefined.id` crash.\n *\n * CI drift-checks this file the same way it drift-checks openapi.ts.\n */\n\n/* eslint-disable */\n\nimport { z } from \"zod\";\n\ntype SubRequestResponse = {\n url: string;\n resource_type: string;\n status_code: number;\n content_type: string;\n body_size: number;\n timestamp_ms: number;\n children?: Array<SubRequestResponse> | undefined;\n};\n\nconst OrgResponse = z\n .object({\n id: z.string().uuid(),\n name: z.string(),\n owner_id: z.string().uuid(),\n is_active: z.boolean(),\n created_at: z.string().datetime({ offset: true }),\n })\n .passthrough();\nconst UpdateOrgRequest = z\n .object({ name: z.union([z.string(), z.null()]) })\n .partial()\n .passthrough();\nconst ValidationError = z\n .object({\n loc: z.array(z.union([z.string(), z.number()])),\n msg: z.string(),\n type: z.string(),\n input: z.unknown().optional(),\n ctx: z.object({}).partial().passthrough().optional(),\n })\n .passthrough();\nconst HTTPValidationError = z\n .object({ detail: z.array(ValidationError) })\n .partial()\n .passthrough();\nconst LabelDefinitionResponse = z\n .object({\n key: z.string(),\n display_name: z.string(),\n position: z.number().int(),\n auto_extract: z.boolean(),\n })\n .passthrough();\nconst LabelDefinitionItem = z\n .object({\n key: z.string().max(50),\n display_name: z.string().max(100),\n auto_extract: z.boolean().optional().default(false),\n })\n .passthrough();\nconst UpdateLabelDefinitionsRequest = z\n .object({ labels: z.array(LabelDefinitionItem) })\n .passthrough();\nconst UserResponse = z\n .object({\n id: z.string().uuid(),\n email: z.string(),\n name: z.string(),\n role_name: z.string(),\n is_active: z.boolean(),\n created_at: z.string().datetime({ offset: true }),\n })\n .passthrough();\nconst InviteUserRequest = z.object({\n email: z.string().max(254),\n name: z.string().max(200).optional().default(\"\"),\n role_id: z.string().uuid(),\n timezone: z.union([z.string(), z.null()]).optional(),\n});\nconst UpdateUserRoleRequest = z.object({ role_id: z.string().uuid() }).passthrough();\nconst ApiKeyResponse = z\n .object({\n id: z.string().uuid(),\n key_prefix: z.string(),\n name: z.string(),\n expires_at: z.union([z.string(), z.null()]),\n created_at: z.string().datetime({ offset: true }),\n })\n .passthrough();\nconst CreateApiKeyRequest = z\n .object({\n name: z.string(),\n expires_at: z.union([z.string(), z.null()]).optional(),\n })\n .passthrough();\nconst ApiKeyCreatedResponse = z\n .object({\n id: z.string().uuid(),\n key_prefix: z.string(),\n full_key: z.string(),\n name: z.string(),\n expires_at: z.union([z.string(), z.null()]),\n created_at: z.string().datetime({ offset: true }),\n })\n .passthrough();\nconst RoleResponse = z\n .object({\n id: z.string().uuid(),\n name: z.string(),\n scope: z.string(),\n is_system: z.boolean(),\n permissions: z.array(z.string()),\n })\n .passthrough();\nconst CreateCustomRoleRequest = z\n .object({ name: z.string(), permissions: z.array(z.string()) })\n .passthrough();\nconst ProxyTargetRequest = z\n .object({\n proxy_type: z.string().default(\"residential\"),\n region: z.string().default(\"\"),\n city: z.string().default(\"\"),\n isp: z.string().default(\"\"),\n })\n .partial()\n .passthrough();\nconst CreateScanRequest = z\n .object({\n url: z.union([z.string(), z.null()]).optional(),\n ad_tag: z.union([z.string(), z.null()]).optional(),\n country_code: z.string().min(2).max(2),\n emulator_id: z.string().min(1).max(100),\n proxy: ProxyTargetRequest.optional(),\n labels: z.record(z.string()).optional(),\n campaign_id: z.union([z.string(), z.null()]).optional(),\n run_id: z.union([z.string(), z.null()]).optional(),\n })\n .passthrough();\nconst ScanStatus = z.enum([\n \"pending\",\n \"running\",\n \"crawled\",\n \"checking\",\n \"checking_async\",\n \"completed\",\n \"partial\",\n \"failed\",\n \"cancelled\",\n]);\nconst SubRequestResponse: z.ZodType<SubRequestResponse> = z.lazy(() =>\n z\n .object({\n url: z.string(),\n resource_type: z.string(),\n status_code: z.number().int(),\n content_type: z.string(),\n body_size: z.number().int(),\n timestamp_ms: z.number().int(),\n children: z.array(SubRequestResponse).optional(),\n })\n .passthrough()\n);\nconst RedirectHopResponse = z\n .object({\n url: z.string(),\n status_code: z.number().int(),\n content_type: z.string(),\n body_size: z.number().int(),\n timestamp_ms: z.number().int(),\n redirected_from: z.string(),\n sub_requests: z.array(SubRequestResponse),\n })\n .passthrough();\nconst ProxyTargetResponse = z\n .object({\n proxy_type: z.string(),\n region: z.string().optional().default(\"\"),\n city: z.string().optional().default(\"\"),\n isp: z.string().optional().default(\"\"),\n })\n .passthrough();\nconst IabCategoryResponse = z\n .object({\n tier1: z.string(),\n tier2: z.union([z.string(), z.null()]).optional(),\n tier3: z.union([z.string(), z.null()]).optional(),\n tier4: z.union([z.string(), z.null()]).optional(),\n })\n .passthrough();\nconst ScanClassificationResponse = z\n .object({\n brand: z.union([z.string(), z.null()]),\n iab_v2: z.union([IabCategoryResponse, z.null()]),\n iab_v3: z.union([IabCategoryResponse, z.null()]),\n })\n .partial()\n .passthrough();\nconst LandingResponse = z\n .object({\n ord: z.number().int(),\n opener_url: z.string().optional().default(\"\"),\n final_url: z.string().optional().default(\"\"),\n offer_url: z.string().optional().default(\"\"),\n page_title: z.string().optional().default(\"\"),\n screenshot_url: z.string().optional().default(\"\"),\n redirect_chain: z.array(RedirectHopResponse).optional(),\n elapsed_ms: z.number().int().optional().default(0),\n created_at: z.string().datetime({ offset: true }),\n })\n .passthrough();\nconst ScanResponse = z\n .object({\n id: z.string().uuid(),\n url: z.string(),\n country_code: z.string(),\n emulator_id: z.string(),\n status: ScanStatus,\n offer_url: z.string(),\n redirect_chain: z.array(RedirectHopResponse),\n screenshot_url: z.string().optional().default(\"\"),\n ad_tag: z.union([z.string(), z.null()]).optional(),\n creative_screenshot_url: z.string().optional().default(\"\"),\n creative_width: z.number().int().optional().default(0),\n creative_height: z.number().int().optional().default(0),\n proxy: z.union([ProxyTargetResponse, z.null()]).optional(),\n page_title: z.string(),\n elapsed_ms: z.number().int(),\n error: z.string(),\n labels: z.record(z.string()).optional(),\n classification: z.union([ScanClassificationResponse, z.null()]).optional(),\n campaign_id: z.union([z.string(), z.null()]).optional(),\n campaign_name: z.union([z.string(), z.null()]).optional(),\n created_at: z.string().datetime({ offset: true }),\n completed_at: z.union([z.string(), z.null()]),\n landings: z.array(LandingResponse).optional(),\n })\n .passthrough();\nconst status = z.union([z.string(), z.null()]).optional();\nconst ScanBriefResponse = z\n .object({\n id: z.string().uuid(),\n url: z.string(),\n country_code: z.string(),\n proxy_type: z.string().optional().default(\"residential\"),\n status: ScanStatus,\n offer_url: z.string(),\n screenshot_url: z.string().optional().default(\"\"),\n labels: z.record(z.string()).optional(),\n classification: z.union([ScanClassificationResponse, z.null()]).optional(),\n elapsed_ms: z.number().int(),\n created_at: z.string().datetime({ offset: true }),\n campaign_id: z.union([z.string(), z.null()]).optional(),\n campaign_name: z.union([z.string(), z.null()]).optional(),\n is_ad_tag: z.boolean().optional().default(false),\n })\n .passthrough();\nconst PaginatedResponse_ScanBriefResponse_ = z\n .object({\n items: z.array(ScanBriefResponse),\n total: z.number().int(),\n page: z.number().int(),\n limit: z.number().int(),\n pages: z.number().int(),\n })\n .passthrough();\nconst BulkScanRequest = z\n .object({\n url: z.union([z.string(), z.null()]).optional(),\n ad_tag: z.union([z.string(), z.null()]).optional(),\n country_codes: z.array(z.string()).min(1),\n emulator_id: z.string().min(1).max(100),\n proxy: ProxyTargetRequest.optional(),\n labels: z.record(z.string()).optional(),\n })\n .passthrough();\nconst RecheckRequest = z\n .object({\n scope_type: z.enum([\"last_n\", \"hours\"]),\n scope_value: z.number().int().gt(0),\n })\n .passthrough();\nconst RecheckResponse = z.object({ queued_count: z.number().int() }).passthrough();\nconst CancelPendingResponse = z.object({ cancelled_count: z.number().int() }).passthrough();\nconst w = z.union([z.number(), z.null()]).optional();\nconst GeoResponse = z\n .object({\n country_code: z.string(),\n name: z.string(),\n region: z.string(),\n tier: z.string(),\n })\n .passthrough();\nconst EmulatorResponse = z\n .object({\n id: z.string(),\n display_name: z.string(),\n category: z.string(),\n browser: z.string(),\n })\n .passthrough();\nconst CreateCampaignGroupRequest = z.object({ name: z.string().min(1).max(200) }).passthrough();\nconst CampaignGroupResponse = z\n .object({\n id: z.string().uuid(),\n name: z.string(),\n is_default: z.boolean(),\n is_archived: z.boolean(),\n schedule_paused: z.boolean(),\n created_at: z.string().datetime({ offset: true }),\n campaign_count: z.union([z.number(), z.null()]).optional(),\n })\n .passthrough();\nconst UpdateCampaignGroupRequest = z\n .object({ name: z.union([z.string(), z.null()]) })\n .partial()\n .passthrough();\nconst BulkCampaignFailure = z\n .object({\n campaign_id: z.string().uuid(),\n error_code: z.string(),\n detail: z.string(),\n })\n .passthrough();\nconst GroupActionResponse = z\n .object({\n group_id: z.string().uuid(),\n affected_campaigns: z.number().int(),\n cancelled_count: z.number().int().optional().default(0),\n run_ids: z.array(z.string().uuid()).optional(),\n failures: z.array(BulkCampaignFailure).optional(),\n })\n .passthrough();\nconst CreateCampaignRequest = z\n .object({\n name: z.string().min(1).max(200),\n campaign_type: z.string().optional().default(\"url\"),\n url: z.union([z.string(), z.null()]).optional(),\n ad_tag: z.union([z.string(), z.null()]).optional(),\n country_codes: z.array(z.string()).min(1),\n group_id: z.union([z.string(), z.null()]).optional(),\n emulator_categories: z.array(z.string()).optional(),\n emulator_specific_ids: z.array(z.string()).optional(),\n emulator_mode: z.string().optional().default(\"random\"),\n proxy_type: z.string().optional().default(\"residential\"),\n proxy_region: z.string().optional().default(\"\"),\n proxy_city: z.string().optional().default(\"\"),\n proxy_isp: z.string().optional().default(\"\"),\n labels: z.record(z.string()).optional(),\n policy_set_id: z.union([z.string(), z.null()]).optional(),\n schedule_type: z.union([z.string(), z.null()]).optional(),\n schedule_weekly: z.union([z.record(z.array(z.number().int())), z.null()]).optional(),\n schedule_interval_seconds: z.union([z.number(), z.null()]).optional(),\n schedule_enabled: z.union([z.boolean(), z.null()]).optional(),\n schedule_timezone: z.union([z.string(), z.null()]).optional(),\n })\n .passthrough();\nconst EmulatorSelectionResponse = z\n .object({\n categories: z.array(z.string()),\n specific_ids: z.array(z.string()),\n mode: z.string(),\n })\n .passthrough();\nconst CampaignResponse = z\n .object({\n id: z.string().uuid(),\n name: z.string(),\n campaign_type: z.string().optional().default(\"url\"),\n url: z.string(),\n ad_tag: z.union([z.string(), z.null()]).optional(),\n country_codes: z.array(z.string()),\n group_id: z.string().uuid(),\n emulator_selection: EmulatorSelectionResponse,\n proxy_type: z.string().optional().default(\"residential\"),\n proxy_region: z.string().optional().default(\"\"),\n proxy_city: z.string().optional().default(\"\"),\n proxy_isp: z.string().optional().default(\"\"),\n schedule_type: z.union([z.string(), z.null()]).optional(),\n schedule_weekly: z.union([z.record(z.array(z.number().int())), z.null()]).optional(),\n schedule_interval_seconds: z.union([z.number(), z.null()]).optional(),\n schedule_timezone: z.union([z.string(), z.null()]).optional(),\n labels: z.record(z.string()).optional(),\n policy_set_id: z.union([z.string(), z.null()]).optional(),\n schedule_enabled: z.boolean(),\n is_archived: z.boolean(),\n created_at: z.string().datetime({ offset: true }),\n last_run_at: z.union([z.string(), z.null()]).optional(),\n })\n .passthrough();\nconst PaginatedResponse_CampaignResponse_ = z\n .object({\n items: z.array(CampaignResponse),\n total: z.number().int(),\n page: z.number().int(),\n limit: z.number().int(),\n pages: z.number().int(),\n })\n .passthrough();\nconst CampaignPickerItem = z\n .object({\n id: z.string().uuid(),\n name: z.string(),\n group_id: z.string().uuid(),\n is_archived: z.boolean(),\n })\n .passthrough();\nconst UpdateCampaignRequest = z\n .object({\n name: z.union([z.string(), z.null()]),\n url: z.union([z.string(), z.null()]),\n ad_tag: z.union([z.string(), z.null()]),\n country_codes: z.union([z.array(z.string()), z.null()]),\n group_id: z.union([z.string(), z.null()]),\n emulator_categories: z.union([z.array(z.string()), z.null()]),\n emulator_specific_ids: z.union([z.array(z.string()), z.null()]),\n emulator_mode: z.union([z.string(), z.null()]),\n proxy_type: z.union([z.string(), z.null()]),\n proxy_region: z.union([z.string(), z.null()]),\n proxy_city: z.union([z.string(), z.null()]),\n proxy_isp: z.union([z.string(), z.null()]),\n labels: z.union([z.record(z.string()), z.null()]),\n policy_set_id: z.union([z.string(), z.null()]),\n schedule_type: z.union([z.string(), z.null()]),\n schedule_weekly: z.union([z.record(z.array(z.number().int())), z.null()]),\n schedule_interval_seconds: z.union([z.number(), z.null()]),\n schedule_enabled: z.union([z.boolean(), z.null()]),\n schedule_timezone: z.union([z.string(), z.null()]),\n })\n .partial()\n .passthrough();\nconst RunSource = z.enum([\"ui\", \"api\"]);\nconst RunResponse = z\n .object({\n id: z.string().uuid(),\n campaign_id: z.string().uuid(),\n label: z.string(),\n total: z.number().int(),\n completed: z.number().int(),\n failed: z.number().int(),\n partial: z.number().int(),\n cancelled: z.number().int(),\n source: RunSource,\n created_at: z.string().datetime({ offset: true }),\n })\n .passthrough();\nconst PaginatedResponse_RunResponse_ = z\n .object({\n items: z.array(RunResponse),\n total: z.number().int(),\n page: z.number().int(),\n limit: z.number().int(),\n pages: z.number().int(),\n })\n .passthrough();\nconst ScanTileResponse = z\n .object({\n id: z.string().uuid(),\n country_code: z.string(),\n status: z.string(),\n offer_url: z.string().optional().default(\"\"),\n screenshot_url: z.string().optional().default(\"\"),\n elapsed_ms: z.number().int().optional().default(0),\n error: z.string().optional().default(\"\"),\n })\n .passthrough();\nconst PaginatedResponse_ScanTileResponse_ = z\n .object({\n items: z.array(ScanTileResponse),\n total: z.number().int(),\n page: z.number().int(),\n limit: z.number().int(),\n pages: z.number().int(),\n })\n .passthrough();\nconst ScanTagResponse = z\n .object({\n id: z.string().uuid(),\n scan_id: z.string().uuid(),\n tag_slug: z.string(),\n detail: z.string(),\n url: z.string().optional().default(\"\"),\n display_name: z.string().optional().default(\"\"),\n category: z.string().optional().default(\"\"),\n severity: z.string().optional().default(\"\"),\n created_at: z.string().datetime({ offset: true }),\n })\n .passthrough();\nconst TagDefinitionWithStatsResponse = z\n .object({\n slug: z.string(),\n category: z.string(),\n source: z.string(),\n display_name: z.string(),\n description: z.string(),\n is_system: z.boolean(),\n organization_id: z.union([z.string(), z.null()]),\n show_in_public_report: z.boolean(),\n severity: z.string(),\n scans_count: z.number().int(),\n rules_count: z.number().int(),\n })\n .passthrough();\nconst LinkedRuleResponse = z\n .object({\n id: z.string().uuid(),\n name: z.string(),\n rule_type: z.string(),\n target: z.string(),\n is_active: z.boolean(),\n })\n .passthrough();\nconst TagDefinitionDetailResponse = z\n .object({\n slug: z.string(),\n category: z.string(),\n source: z.string(),\n display_name: z.string(),\n description: z.string(),\n is_system: z.boolean(),\n organization_id: z.union([z.string(), z.null()]),\n show_in_public_report: z.boolean(),\n severity: z.string(),\n scans_count: z.number().int(),\n rules_count: z.number().int(),\n linked_rules: z.array(LinkedRuleResponse).optional(),\n })\n .passthrough();\nconst TagSeverity = z.enum([\"high\", \"medium\", \"low\"]);\nconst UpdateTagDefinitionRequest = z\n .object({\n display_name: z.union([z.string(), z.null()]),\n description: z.union([z.string(), z.null()]),\n show_in_public_report: z.union([z.boolean(), z.null()]),\n severity: z.union([TagSeverity, z.null()]),\n })\n .partial()\n .passthrough();\nconst CreateCustomRuleRequest = z\n .object({\n name: z.string().min(1).max(200),\n tag_slug: z.string().max(100).optional().default(\"\"),\n rule_type: z.string().max(50),\n config: z.object({}).partial().passthrough(),\n target: z.string().max(30).optional().default(\"page\"),\n })\n .passthrough();\nconst CustomRuleResponse = z\n .object({\n id: z.string().uuid(),\n organization_id: z.string().uuid(),\n name: z.string(),\n tag_slug: z.string(),\n rule_type: z.string(),\n config: z.object({}).partial().passthrough(),\n target: z.string(),\n is_active: z.boolean(),\n created_at: z.string().datetime({ offset: true }),\n })\n .passthrough();\nconst PaginatedResponse_CustomRuleResponse_ = z\n .object({\n items: z.array(CustomRuleResponse),\n total: z.number().int(),\n page: z.number().int(),\n limit: z.number().int(),\n pages: z.number().int(),\n })\n .passthrough();\nconst UpdateCustomRuleRequest = z\n .object({\n name: z.union([z.string(), z.null()]),\n tag_slug: z.union([z.string(), z.null()]),\n config: z.union([z.object({}).partial().passthrough(), z.null()]),\n target: z.union([z.string(), z.null()]),\n is_active: z.union([z.boolean(), z.null()]),\n })\n .partial()\n .passthrough();\nconst RuleTestRequest = z\n .object({\n scan_id: z.string().uuid(),\n rule_type: z.string(),\n config: z.object({}).partial().passthrough(),\n target: z.string().optional().default(\"page\"),\n })\n .passthrough();\nconst RuleTestTagResult = z\n .object({ tag_slug: z.string(), detail: z.string().optional().default(\"\") })\n .passthrough();\nconst RuleTestResponse = z\n .object({\n matched: z.boolean(),\n tags: z.array(RuleTestTagResult),\n elapsed_ms: z.number().int(),\n llm_failed: z.boolean().optional().default(false),\n llm_call_id: z.union([z.string(), z.null()]).optional(),\n llm_prompt_url: z.string().optional().default(\"\"),\n llm_response_url: z.string().optional().default(\"\"),\n })\n .passthrough();\nconst PolicyEntryRequest = z\n .object({\n tag_slug: z.string().min(1).max(100),\n country_codes: z.array(z.string()).max(50).optional(),\n })\n .passthrough();\nconst CreatePolicySetRequest = z\n .object({\n name: z.string().min(1).max(200),\n description: z.string().max(2000).optional().default(\"\"),\n entries: z.array(PolicyEntryRequest).min(1).max(500),\n })\n .passthrough();\nconst PolicyEntryResponse = z\n .object({\n id: z.string().uuid(),\n tag_slug: z.string(),\n country_codes: z.array(z.string()),\n })\n .passthrough();\nconst PolicySetResponse = z\n .object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string(),\n organization_id: z.string().uuid(),\n visibility: z.string(),\n is_approved: z.boolean(),\n entries: z.array(PolicyEntryResponse),\n created_at: z.string().datetime({ offset: true }),\n })\n .passthrough();\nconst VisibilityType = z.enum([\"private\", \"public\"]);\nconst visibility = z.union([VisibilityType, z.null()]).optional();\nconst PolicySetListItem = z\n .object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string(),\n organization_id: z.string().uuid(),\n visibility: z.string(),\n is_approved: z.boolean(),\n created_at: z.string().datetime({ offset: true }),\n })\n .passthrough();\nconst PaginatedResponse_PolicySetListItem_ = z\n .object({\n items: z.array(PolicySetListItem),\n total: z.number().int(),\n page: z.number().int(),\n limit: z.number().int(),\n pages: z.number().int(),\n })\n .passthrough();\nconst UpdatePolicySetRequest = z\n .object({\n name: z.string().min(1).max(200),\n description: z.string().max(2000).optional().default(\"\"),\n entries: z.array(PolicyEntryRequest).min(1).max(500),\n })\n .passthrough();\nconst AlertStatus = z.enum([\"open\", \"acknowledged\", \"resolved\", \"dismissed\"]);\nconst status__2 = z.union([AlertStatus, z.null()]).optional();\nconst AlertResponse = z\n .object({\n id: z.string().uuid(),\n scan_id: z.string().uuid(),\n campaign_id: z.string().uuid(),\n policy_set_id: z.union([z.string(), z.null()]),\n violation_rule_id: z.union([z.string(), z.null()]),\n organization_id: z.string().uuid(),\n tag_slug: z.string(),\n country_code: z.string(),\n status: z.string(),\n closed_by: z.union([z.string(), z.null()]),\n created_at: z.string().datetime({ offset: true }),\n updated_at: z.union([z.string(), z.null()]),\n scan_url: z.string(),\n offer_url: z.string(),\n tag_display_name: z.string(),\n })\n .passthrough();\nconst PaginatedResponse_AlertResponse_ = z\n .object({\n items: z.array(AlertResponse),\n total: z.number().int(),\n page: z.number().int(),\n limit: z.number().int(),\n pages: z.number().int(),\n })\n .passthrough();\nconst UpdateAlertStatusRequest = z.object({ status: AlertStatus }).passthrough();\nconst AlertStatsResponse = z\n .object({\n open: z.number().int(),\n acknowledged: z.number().int(),\n resolved: z.number().int(),\n dismissed: z.number().int(),\n })\n .passthrough();\nconst BlockReason = z.enum([\"no_subscription\", \"suspended\", \"insufficient_funds\"]);\nconst BillingSummaryResponse = z\n .object({\n balance_micros: z.number().int(),\n plan_name: z.union([z.string(), z.null()]),\n plan_id: z.union([z.string(), z.null()]),\n checks_per_period: z.union([z.number(), z.null()]),\n checks_used: z.union([z.number(), z.null()]),\n period_start: z.union([z.string(), z.null()]),\n period_end: z.union([z.string(), z.null()]),\n price_per_extra_check_micros: z.union([z.number(), z.null()]),\n current_plan_is_custom: z.boolean().optional().default(false),\n is_suspended: z.boolean().optional().default(false),\n scheduled_next_plan_id: z.union([z.string(), z.null()]).optional(),\n scheduled_next_plan_name: z.union([z.string(), z.null()]).optional(),\n scheduled_effective_at: z.union([z.string(), z.null()]).optional(),\n can_create_scan: z.boolean().optional().default(true),\n block_reason: z.union([BlockReason, z.null()]).optional(),\n billing_mode: z.string().optional().default(\"prepaid\"),\n credit_limit_micros: z.number().int().optional().default(0),\n effective_minimum_balance_micros: z.number().int().optional().default(0),\n })\n .passthrough();\nconst UsageResponse = z\n .object({\n id: z.string().uuid(),\n scan_id: z.string().uuid(),\n charged_micros: z.number().int(),\n balance_after_micros: z.number().int(),\n within_plan: z.boolean(),\n event_type: z.string(),\n created_at: z.string().datetime({ offset: true }),\n })\n .passthrough();\nconst PaginatedResponse_UsageResponse_ = z\n .object({\n items: z.array(UsageResponse),\n total: z.number().int(),\n page: z.number().int(),\n limit: z.number().int(),\n pages: z.number().int(),\n })\n .passthrough();\nconst UsagePeriodSummaryResponse = z\n .object({\n period_start: z.string().datetime({ offset: true }),\n period_end: z.string().datetime({ offset: true }),\n checks: z.number().int(),\n rechecks: z.number().int(),\n within_plan: z.number().int(),\n overage: z.number().int(),\n charged_micros: z.number().int(),\n })\n .passthrough();\nconst BalanceTransactionType = z.enum([\n \"initial_balance\",\n \"top_up_manual\",\n \"usage_charge\",\n \"subscription_renewal\",\n \"subscription_upgrade\",\n \"admin_adjustment\",\n \"refund\",\n \"invoice_settlement\",\n \"crypto_top_up\",\n]);\nconst type = z.union([z.array(BalanceTransactionType), z.null()]).optional();\nconst BalanceTransactionResponse = z\n .object({\n id: z.string().uuid(),\n type: z.string(),\n amount_micros: z.number().int(),\n balance_after_micros: z.number().int(),\n description: z.string(),\n reference_kind: z.union([z.string(), z.null()]),\n reference_id: z.union([z.string(), z.null()]),\n actor_user_id: z.union([z.string(), z.null()]),\n created_at: z.string().datetime({ offset: true }),\n })\n .passthrough();\nconst PaginatedResponse_BalanceTransactionResponse_ = z\n .object({\n items: z.array(BalanceTransactionResponse),\n total: z.number().int(),\n page: z.number().int(),\n limit: z.number().int(),\n pages: z.number().int(),\n })\n .passthrough();\nconst EndpointHealthResponse = z\n .object({\n consecutive_failures: z.number().int(),\n last_delivery_at: z.union([z.string(), z.null()]),\n last_delivery_status: z.union([z.number(), z.null()]),\n success_rate_7d: z.number(),\n })\n .passthrough();\nconst WebhookResponse = z\n .object({\n id: z.string().uuid(),\n url: z.string(),\n description: z.string(),\n event_types: z.array(z.string()),\n campaign_ids: z.union([z.array(z.string().uuid()), z.null()]),\n is_active: z.boolean(),\n disabled_reason: z.union([z.string(), z.null()]),\n disabled_reason_detail: z.union([z.string(), z.null()]),\n disabled_at: z.union([z.string(), z.null()]),\n health: EndpointHealthResponse,\n created_at: z.string().datetime({ offset: true }),\n updated_at: z.string().datetime({ offset: true }),\n })\n .passthrough();\nconst CreateWebhookRequest = z\n .object({\n url: z.string().min(1).max(2048),\n description: z.string().max(256).optional().default(\"\"),\n event_types: z.array(z.string()).optional(),\n campaign_ids: z.union([z.array(z.string().uuid()), z.null()]).optional(),\n })\n .passthrough();\nconst WebhookCreatedResponse = z\n .object({ webhook: WebhookResponse, secret: z.string() })\n .passthrough();\nconst EventCatalogEntryResponse = z\n .object({\n event_type: z.string(),\n description: z.string(),\n sample_payload: z.object({}).partial().passthrough(),\n })\n .passthrough();\nconst EventCatalogResponse = z\n .object({ entries: z.array(EventCatalogEntryResponse) })\n .passthrough();\nconst UpdateWebhookRequest = z\n .object({\n url: z.union([z.string(), z.null()]),\n description: z.union([z.string(), z.null()]),\n event_types: z.union([z.array(z.string()), z.null()]),\n campaign_ids: z.union([z.array(z.string().uuid()), z.null()]),\n clear_campaign_ids: z.boolean().default(false),\n is_active: z.union([z.boolean(), z.null()]),\n })\n .partial()\n .passthrough();\nconst TestWebhookRequest = z.object({ event_type: z.string() }).passthrough();\nconst TestWebhookResponse = z\n .object({\n success: z.boolean(),\n response_status: z.union([z.number(), z.null()]),\n elapsed_ms: z.number().int(),\n error_code: z.union([z.string(), z.null()]),\n response_body: z.string(),\n })\n .passthrough();\nconst success = z.union([z.boolean(), z.null()]).optional();\nconst DeliveryAttemptResponse = z\n .object({\n id: z.string().uuid(),\n event_id: z.string().uuid(),\n event_type: z.string(),\n response_status: z.union([z.number(), z.null()]),\n response_body: z.union([z.string(), z.null()]),\n success: z.boolean(),\n attempt_number: z.number().int(),\n error_code: z.union([z.string(), z.null()]),\n elapsed_ms: z.union([z.number(), z.null()]),\n created_at: z.string().datetime({ offset: true }),\n })\n .passthrough();\nconst PaginatedResponse_DeliveryAttemptResponse_ = z\n .object({\n items: z.array(DeliveryAttemptResponse),\n total: z.number().int(),\n page: z.number().int(),\n limit: z.number().int(),\n pages: z.number().int(),\n })\n .passthrough();\nconst BulkReplayRequest = z\n .object({\n from_ts: z.string().datetime({ offset: true }),\n to_ts: z.string().datetime({ offset: true }),\n })\n .passthrough();\nconst BulkReplayResponse = z\n .object({ replayed: z.number().int(), skipped: z.number().int() })\n .passthrough();\nconst AlertNotificationVersion = z.enum([\"public\", \"internal\"]);\nconst AlertNotificationDestinationResponse = z\n .object({\n id: z.string().uuid(),\n organization_id: z.string().uuid(),\n channel: z.string(),\n name: z.string(),\n is_active: z.boolean(),\n is_default_target: z.boolean(),\n version: AlertNotificationVersion,\n consecutive_failures: z.number().int(),\n last_delivery_at: z.union([z.string(), z.null()]),\n last_delivery_status: z.union([z.number(), z.null()]),\n slack_workspace_id: z.union([z.string(), z.null()]),\n slack_channel_id: z.union([z.string(), z.null()]),\n slack_channel_name: z.union([z.string(), z.null()]),\n telegram_chat_id: z.union([z.number(), z.null()]),\n telegram_chat_title: z.union([z.string(), z.null()]),\n telegram_chat_type: z.union([z.string(), z.null()]),\n email_address: z.union([z.string(), z.null()]),\n included_label_keys: z.array(z.string()),\n created_at: z.string().datetime({ offset: true }),\n updated_at: z.string().datetime({ offset: true }),\n })\n .passthrough();\nconst SetDestinationVersionRequest = z.object({ version: AlertNotificationVersion }).passthrough();\nconst CampaignOverridesResponse = z\n .object({\n campaign_id: z.string().uuid(),\n mode: z.string(),\n destination_ids: z.array(z.string().uuid()),\n })\n .passthrough();\nconst SetCampaignOverridesRequest = z\n .object({\n mode: z.string().min(1).max(16),\n destination_ids: z.array(z.string().uuid()).optional().default([]),\n })\n .passthrough();\nconst InvoiceType = z.enum([\"proforma\", \"final\"]);\nconst type__2 = z.union([InvoiceType, z.null()]).optional();\nconst InvoiceStatus = z.enum([\"draft\", \"issued\", \"paid\", \"voided\", \"overdue\"]);\nconst status__3 = z.union([InvoiceStatus, z.null()]).optional();\nconst InvoiceResponse = z\n .object({\n id: z.string().uuid(),\n number: z.string(),\n organization_id: z.string().uuid(),\n type: z.string(),\n status: z.string(),\n total_micros: z.number().int(),\n currency: z.string(),\n period_start: z.union([z.string(), z.null()]),\n period_end: z.union([z.string(), z.null()]),\n issued_at: z.union([z.string(), z.null()]),\n paid_at: z.union([z.string(), z.null()]),\n voided_at: z.union([z.string(), z.null()]),\n has_pdf: z.boolean(),\n description: z.string(),\n payment_method: z.string(),\n created_at: z.string().datetime({ offset: true }),\n })\n .passthrough();\nconst PaginatedResponse_InvoiceResponse_ = z\n .object({\n items: z.array(InvoiceResponse),\n total: z.number().int(),\n page: z.number().int(),\n limit: z.number().int(),\n pages: z.number().int(),\n })\n .passthrough();\nconst InvoicePdfUrlResponse = z\n .object({ url: z.union([z.string(), z.null()]), ready: z.boolean() })\n .passthrough();\nconst SubmitContactInquiryRequest = z\n .object({\n name: z.string().min(2).max(100),\n email: z.string().email(),\n message: z.string().min(10).max(2000),\n source: z.string().max(512).optional().default(\"\"),\n })\n .passthrough();\nconst ContactInquiryAcknowledgement = z\n .object({\n id: z.string().uuid(),\n received_at: z.string().datetime({ offset: true }),\n })\n .passthrough();\nconst PreferredContactChannel = z.enum([\"telegram\", \"whatsapp\", \"email\"]);\nconst SubmitDemoInquiryRequest = z\n .object({\n first_name: z.string().min(2).max(60),\n last_name: z.string().min(2).max(60),\n company_email: z.string().email(),\n company_name: z.string().min(2).max(120),\n preferred_channel: PreferredContactChannel,\n contact_handle: z.string().max(120).optional().default(\"\"),\n comment: z.string().max(2000).optional().default(\"\"),\n privacy_accepted: z.boolean(),\n source: z.string().max(512).optional().default(\"\"),\n })\n .passthrough();\nconst DemoInquiryAcknowledgement = z\n .object({\n id: z.string().uuid(),\n received_at: z.string().datetime({ offset: true }),\n })\n .passthrough();\n\nexport const schemas = {\n OrgResponse,\n UpdateOrgRequest,\n ValidationError,\n HTTPValidationError,\n LabelDefinitionResponse,\n LabelDefinitionItem,\n UpdateLabelDefinitionsRequest,\n UserResponse,\n InviteUserRequest,\n UpdateUserRoleRequest,\n ApiKeyResponse,\n CreateApiKeyRequest,\n ApiKeyCreatedResponse,\n RoleResponse,\n CreateCustomRoleRequest,\n ProxyTargetRequest,\n CreateScanRequest,\n ScanStatus,\n SubRequestResponse,\n RedirectHopResponse,\n ProxyTargetResponse,\n IabCategoryResponse,\n ScanClassificationResponse,\n LandingResponse,\n ScanResponse,\n status,\n ScanBriefResponse,\n PaginatedResponse_ScanBriefResponse_,\n BulkScanRequest,\n RecheckRequest,\n RecheckResponse,\n CancelPendingResponse,\n w,\n GeoResponse,\n EmulatorResponse,\n CreateCampaignGroupRequest,\n CampaignGroupResponse,\n UpdateCampaignGroupRequest,\n BulkCampaignFailure,\n GroupActionResponse,\n CreateCampaignRequest,\n EmulatorSelectionResponse,\n CampaignResponse,\n PaginatedResponse_CampaignResponse_,\n CampaignPickerItem,\n UpdateCampaignRequest,\n RunSource,\n RunResponse,\n PaginatedResponse_RunResponse_,\n ScanTileResponse,\n PaginatedResponse_ScanTileResponse_,\n ScanTagResponse,\n TagDefinitionWithStatsResponse,\n LinkedRuleResponse,\n TagDefinitionDetailResponse,\n TagSeverity,\n UpdateTagDefinitionRequest,\n CreateCustomRuleRequest,\n CustomRuleResponse,\n PaginatedResponse_CustomRuleResponse_,\n UpdateCustomRuleRequest,\n RuleTestRequest,\n RuleTestTagResult,\n RuleTestResponse,\n PolicyEntryRequest,\n CreatePolicySetRequest,\n PolicyEntryResponse,\n PolicySetResponse,\n VisibilityType,\n visibility,\n PolicySetListItem,\n PaginatedResponse_PolicySetListItem_,\n UpdatePolicySetRequest,\n AlertStatus,\n status__2,\n AlertResponse,\n PaginatedResponse_AlertResponse_,\n UpdateAlertStatusRequest,\n AlertStatsResponse,\n BlockReason,\n BillingSummaryResponse,\n UsageResponse,\n PaginatedResponse_UsageResponse_,\n UsagePeriodSummaryResponse,\n BalanceTransactionType,\n type,\n BalanceTransactionResponse,\n PaginatedResponse_BalanceTransactionResponse_,\n EndpointHealthResponse,\n WebhookResponse,\n CreateWebhookRequest,\n WebhookCreatedResponse,\n EventCatalogEntryResponse,\n EventCatalogResponse,\n UpdateWebhookRequest,\n TestWebhookRequest,\n TestWebhookResponse,\n success,\n DeliveryAttemptResponse,\n PaginatedResponse_DeliveryAttemptResponse_,\n BulkReplayRequest,\n BulkReplayResponse,\n AlertNotificationVersion,\n AlertNotificationDestinationResponse,\n SetDestinationVersionRequest,\n CampaignOverridesResponse,\n SetCampaignOverridesRequest,\n InvoiceType,\n type__2,\n InvoiceStatus,\n status__3,\n InvoiceResponse,\n PaginatedResponse_InvoiceResponse_,\n InvoicePdfUrlResponse,\n SubmitContactInquiryRequest,\n ContactInquiryAcknowledgement,\n PreferredContactChannel,\n SubmitDemoInquiryRequest,\n DemoInquiryAcknowledgement,\n};\n","/**\n * Shared helper that validates an unknown JSON body against a zod\n * schema (the canonical source of truth, generated from openapi.ts\n * via `npm run gen:api-types` — see `src/shared/api/zod-schemas.ts`).\n *\n * Every per-endpoint parser is now a one-liner that calls into this\n * helper with `schemas.X.pick({...})` for the fields the MCP port\n * actually exposes. If the API drops or renames a field, the schema\n * regen surfaces it as a TS error at the parser site; if the\n * production payload disagrees with the schema at runtime, the agent\n * sees a typed `Upstream` MCP error with the zod issue message\n * instead of a runtime `undefined.id` crash.\n */\n\nimport { z } from \"zod\";\n\nimport type { ApiError } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\n\n/**\n * Validate `raw` against `schema`; on success return `Ok(data)`,\n * on failure return a typed upstream `ApiError` whose detail string\n * carries the zod issue message verbatim.\n *\n * `label` is the bounded-context noun (\"campaign\", \"policy-set\",\n * \"webhook\") — used to produce a readable error like\n * `\"malformed campaign: Expected string, received null\"`.\n */\nexport function parseWithSchema<S extends z.ZodTypeAny>(\n schema: S,\n raw: unknown,\n label: string\n): Result<z.infer<S>, ApiError> {\n const parsed = schema.safeParse(raw);\n if (parsed.success) return ok(stripUndefinedKeys(parsed.data) as z.infer<S>);\n const first = parsed.error.issues[0];\n const path = first?.path.join(\".\") ?? \"\";\n const message = first?.message ?? \"validation failed\";\n const detail =\n path === \"\" ? `malformed ${label}: ${message}` : `malformed ${label}: ${path}: ${message}`;\n return err({ kind: \"upstream\", detail });\n}\n\n/**\n * Walk a parsed object and drop keys whose value is exactly\n * `undefined`. Zod's `.optional()` decoder emits explicit\n * `{ key: undefined }` for absent fields when the underlying\n * OpenAPI schema marked them with `default: []` (or similar).\n * Port DTOs use openapi-typescript's `?:` style which under\n * `exactOptionalPropertyTypes: true` means \"the key may be ABSENT\n * or present with the declared type\" — explicitly `undefined` is\n * NOT acceptable. Strip the undefined keys to match.\n */\nfunction stripUndefinedKeys(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stripUndefinedKeys);\n if (value === null || typeof value !== \"object\") return value;\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n if (v === undefined) continue;\n out[k] = stripUndefinedKeys(v);\n }\n return out;\n}\n\n/**\n * Validate a paginated envelope shaped as\n * `{ items: T[], total, page, limit, pages? }` and return the\n * canonical {@link PaginatedResponse} the MCP port exposes (drops\n * the `pages` field — agents don't need it; total + limit is enough\n * to derive page count when relevant).\n */\nexport function parsePagedWithItemSchema<S extends z.ZodTypeAny>(\n itemSchema: S,\n raw: unknown,\n label: string\n): Result<\n {\n readonly items: readonly z.infer<S>[];\n readonly total: number;\n readonly page: number;\n readonly limit: number;\n },\n ApiError\n> {\n const envelope = z\n .object({\n items: z.array(itemSchema),\n total: z.number(),\n page: z.number(),\n limit: z.number(),\n })\n .passthrough();\n return parseWithSchema(envelope, raw, `${label} page`);\n}\n\n/**\n * Validate either a bare `T[]` or a paginated envelope `{ items: T[], … }`\n * and return the inner array. Defensive — used for list endpoints whose\n * OpenAPI contract is currently bare-array but might gain envelope\n * wrapping in a future API release (and vice-versa). Matches the\n * `unwrapItems` pattern from `parsePolicySetList`.\n */\nexport function parseArrayOrItemsWithSchema<S extends z.ZodTypeAny>(\n itemSchema: S,\n raw: unknown,\n label: string\n): Result<readonly z.infer<S>[], ApiError> {\n if (Array.isArray(raw)) {\n return parseWithSchema(z.array(itemSchema), raw, label);\n }\n if (raw !== null && typeof raw === \"object\" && \"items\" in raw) {\n const items = (raw as { items: unknown }).items;\n return parseWithSchema(z.array(itemSchema), items, label);\n }\n return err({\n kind: \"upstream\",\n detail: `expected array (or {items:[]}) of ${label}`,\n });\n}\n","/**\n * Parsers for `/api/v1/alerts` — single + paginated page envelope.\n */\n\nimport type {\n AlertResponse,\n ApiError,\n PaginatedResponse,\n} from \"../../../domain/ports/api-gateway.js\";\nimport { schemas } from \"../../../shared/api/zod-schemas.js\";\nimport type { Result } from \"../../../shared/result.js\";\nimport { parsePagedWithItemSchema, parseWithSchema } from \"./parse-with-schema.js\";\n\nconst AlertSchema = schemas.AlertResponse.pick({\n id: true,\n scan_id: true,\n campaign_id: true,\n policy_set_id: true,\n violation_rule_id: true,\n tag_slug: true,\n tag_display_name: true,\n country_code: true,\n status: true,\n closed_by: true,\n scan_url: true,\n offer_url: true,\n created_at: true,\n updated_at: true,\n}).strip();\n\nexport const parseAlert = (raw: unknown): Result<AlertResponse, ApiError> =>\n parseWithSchema(AlertSchema, raw, \"alert\") as Result<AlertResponse, ApiError>;\n\nexport const parseAlertPage = (raw: unknown): Result<PaginatedResponse<AlertResponse>, ApiError> =>\n parsePagedWithItemSchema(AlertSchema, raw, \"alerts\") as Result<\n PaginatedResponse<AlertResponse>,\n ApiError\n >;\n","/**\n * Parser for `GET /api/v1/account/api-keys` — list of API keys.\n */\n\nimport { z } from \"zod\";\n\nimport type { ApiError, ApiKeyResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { schemas } from \"../../../shared/api/zod-schemas.js\";\nimport type { Result } from \"../../../shared/result.js\";\nimport { parseWithSchema } from \"./parse-with-schema.js\";\n\nconst ApiKeySchema = schemas.ApiKeyResponse.pick({\n id: true,\n key_prefix: true,\n name: true,\n expires_at: true,\n created_at: true,\n}).strip();\n\nconst ApiKeyListSchema = z.array(ApiKeySchema);\n\nexport const parseApiKeyList = (raw: unknown): Result<readonly ApiKeyResponse[], ApiError> =>\n parseWithSchema(ApiKeyListSchema, raw, \"api-keys\") as Result<readonly ApiKeyResponse[], ApiError>;\n","/**\n * Parser for `GET /api/v1/billing` — billing summary.\n */\n\nimport type { ApiError, BillingSummaryResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { schemas } from \"../../../shared/api/zod-schemas.js\";\nimport type { Result } from \"../../../shared/result.js\";\nimport { parseWithSchema } from \"./parse-with-schema.js\";\n\nconst BillingSummarySchema = schemas.BillingSummaryResponse.pick({\n balance_micros: true,\n plan_id: true,\n plan_name: true,\n checks_per_period: true,\n checks_used: true,\n period_start: true,\n period_end: true,\n price_per_extra_check_micros: true,\n is_suspended: true,\n can_create_scan: true,\n billing_mode: true,\n block_reason: true,\n}).strip();\n\nexport const parseBillingSummary = (raw: unknown): Result<BillingSummaryResponse, ApiError> =>\n parseWithSchema(BillingSummarySchema, raw, \"billing-summary\") as Result<\n BillingSummaryResponse,\n ApiError\n >;\n","/**\n * Parsers for `/api/v1/campaigns` — single + paginated page envelope.\n */\n\nimport type {\n ApiError,\n CampaignResponse,\n PaginatedResponse,\n} from \"../../../domain/ports/api-gateway.js\";\nimport { schemas } from \"../../../shared/api/zod-schemas.js\";\nimport type { Result } from \"../../../shared/result.js\";\nimport { parsePagedWithItemSchema, parseWithSchema } from \"./parse-with-schema.js\";\n\nconst CampaignSchema = schemas.CampaignResponse.pick({\n id: true,\n name: true,\n campaign_type: true,\n url: true,\n ad_tag: true,\n country_codes: true,\n group_id: true,\n labels: true,\n policy_set_id: true,\n schedule_enabled: true,\n schedule_type: true,\n is_archived: true,\n created_at: true,\n last_run_at: true,\n}).strip();\n\nexport const parseCampaign = (raw: unknown): Result<CampaignResponse, ApiError> =>\n parseWithSchema(CampaignSchema, raw, \"campaign\") as Result<CampaignResponse, ApiError>;\n\nexport const parseCampaignPage = (\n raw: unknown\n): Result<PaginatedResponse<CampaignResponse>, ApiError> =>\n parsePagedWithItemSchema(CampaignSchema, raw, \"campaigns\") as Result<\n PaginatedResponse<CampaignResponse>,\n ApiError\n >;\n","/**\n * Parsers for the `/api/v1/campaign-groups` family.\n *\n * `GET /api/v1/campaign-groups` returns a BARE ARRAY per OpenAPI (no\n * paginated envelope). `parseCampaignGroupArray` accepts both shapes\n * defensively — same `unwrapItems` pattern used in `parsePolicySetList`\n * — so a future API release that wraps the response in an envelope\n * does not break the MCP gateway.\n */\n\nimport type { ApiError, CampaignGroupResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { schemas } from \"../../../shared/api/zod-schemas.js\";\nimport type { Result } from \"../../../shared/result.js\";\nimport { parseArrayOrItemsWithSchema, parseWithSchema } from \"./parse-with-schema.js\";\n\nconst CampaignGroupSchema = schemas.CampaignGroupResponse.pick({\n id: true,\n name: true,\n is_default: true,\n is_archived: true,\n schedule_paused: true,\n campaign_count: true,\n created_at: true,\n}).strip();\n\nexport const parseCampaignGroup = (raw: unknown): Result<CampaignGroupResponse, ApiError> =>\n parseWithSchema(CampaignGroupSchema, raw, \"campaign-group\") as Result<\n CampaignGroupResponse,\n ApiError\n >;\n\nexport const parseCampaignGroupArray = (\n raw: unknown\n): Result<readonly CampaignGroupResponse[], ApiError> =>\n parseArrayOrItemsWithSchema(CampaignGroupSchema, raw, \"campaign-groups\") as Result<\n readonly CampaignGroupResponse[],\n ApiError\n >;\n","/**\n * Tiny parser primitives shared across the per-endpoint parsers.\n *\n * Kept here rather than next to one parser because they belong to\n * every parser — putting them in one file makes their reuse explicit.\n */\n\n/**\n *\n */\nexport function isStringRecord(v: unknown): v is Record<string, unknown> {\n return v !== null && typeof v === \"object\" && !Array.isArray(v);\n}\n","/**\n * Generic parser for response envelopes that carry a single integer\n * field, e.g. `{ \"queued_count\": 42 }` or `{ \"cancelled_count\": 3 }`.\n *\n * Returns the integer wrapped in an object that uses the original\n * field name, so the caller can type the result narrowly.\n */\n\nimport type { ApiError } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { isStringRecord } from \"./shared.js\";\n\n/**\n * Validates `{ [fieldName]: number }` envelopes and returns the field\n * wrapped in an object that uses the original field name (so the\n * caller can keep its strong type), or a typed `upstream` ApiError.\n *\n * The API uses this shape for one-off operation summaries (e.g.\n * `POST /scans/recheck → { queued_count }`, `POST /campaigns/{id}/cancel\n * → { cancelled_count }`) that have no dedicated DTO. Hand-written\n * here because emitting a one-field zod schema per call site would be\n * more noise than it saves; the `check:no-handwritten-parsers` gate\n * explicitly exempts this file.\n */\nexport function parseIntField<TKey extends string>(\n raw: unknown,\n fieldName: TKey\n): Result<Record<TKey, number>, ApiError> {\n if (!isStringRecord(raw)) {\n return err({ kind: \"upstream\", detail: `expected object with ${fieldName}` });\n }\n const value = raw[fieldName];\n if (typeof value !== \"number\" || !Number.isInteger(value)) {\n return err({ kind: \"upstream\", detail: `${fieldName} must be an integer` });\n }\n return ok({ [fieldName]: value } as Record<TKey, number>);\n}\n","/**\n * Parsers for `/api/v1/custom-rules`.\n *\n * `GET /api/v1/custom-rules` returns the standard FastAPI paginated\n * envelope `{ items, total, page, limit, pages }`. `parseCustomRuleArray`\n * accepts both envelope and bare-array shapes defensively.\n */\n\nimport type { ApiError, CustomRuleResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { schemas } from \"../../../shared/api/zod-schemas.js\";\nimport type { Result } from \"../../../shared/result.js\";\nimport { parseArrayOrItemsWithSchema, parseWithSchema } from \"./parse-with-schema.js\";\n\nconst CustomRuleSchema = schemas.CustomRuleResponse.pick({\n id: true,\n organization_id: true,\n name: true,\n tag_slug: true,\n rule_type: true,\n config: true,\n target: true,\n is_active: true,\n created_at: true,\n}).strip();\n\nexport const parseCustomRule = (raw: unknown): Result<CustomRuleResponse, ApiError> =>\n parseWithSchema(CustomRuleSchema, raw, \"custom-rule\") as Result<CustomRuleResponse, ApiError>;\n\nexport const parseCustomRuleArray = (\n raw: unknown\n): Result<readonly CustomRuleResponse[], ApiError> =>\n parseArrayOrItemsWithSchema(CustomRuleSchema, raw, \"custom-rules\") as Result<\n readonly CustomRuleResponse[],\n ApiError\n >;\n","/**\n * Parser for endpoints that return no body (HTTP 204 / 200 with empty\n * body). Always returns `ok(null)`.\n */\n\nimport type { ApiError } from \"../../../domain/ports/api-gateway.js\";\nimport { ok, type Result } from \"../../../shared/result.js\";\n\n/**\n * Parser for `204 No Content` responses. Ignores the input (which is\n * `null` for a successful empty body, or whatever undici left in `data`)\n * and always returns `Ok(null)`. Used by every mutator that the API\n * answers without echoing the entity back — see e.g. `removeUser`,\n * `revokeApiKey`, `requestPolicySetApproval`, `setAlertDestinationVersion`.\n */\nexport function parseEmpty(_raw: unknown): Result<null, ApiError> {\n return ok(null);\n}\n","/**\n * Parser for `GET /api/v1/emulators` — list of available emulators.\n */\n\nimport { z } from \"zod\";\n\nimport type { ApiError, EmulatorResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { schemas } from \"../../../shared/api/zod-schemas.js\";\nimport type { Result } from \"../../../shared/result.js\";\nimport { parseWithSchema } from \"./parse-with-schema.js\";\n\nconst EmulatorSchema = schemas.EmulatorResponse.pick({\n id: true,\n display_name: true,\n category: true,\n browser: true,\n}).strip();\n\nconst EmulatorListSchema = z.array(EmulatorSchema);\n\nexport const parseEmulatorList = (raw: unknown): Result<readonly EmulatorResponse[], ApiError> =>\n parseWithSchema(EmulatorListSchema, raw, \"emulators\") as Result<\n readonly EmulatorResponse[],\n ApiError\n >;\n","/**\n * Per-DTO parsers backed by `schemas.X.pick({...}).strip()` from\n * `src/shared/api/zod-schemas.ts` (generated by `openapi-zod-client`\n * from the API's live OpenAPI spec — see `scripts/gen-api-types.ts`).\n *\n * Pattern: each parser is a one-liner that\n * 1. picks only the fields the MCP port exposes\n * (the `Pick<S[\"X\"], …>` projection in `api-gateway.ts`),\n * 2. calls `.strip()` to drop unknown keys at the top level\n * (the schemas use `.passthrough()` so a future API addition\n * never breaks us at runtime; `.strip()` keeps the tool output\n * JSON small),\n * 3. hands the result to {@link parseWithSchema} which converts\n * `safeParse` failure into a typed `ApiError` and runtime-strips\n * keys whose value is explicitly `undefined` (zod's encoding for\n * `default-backed optional` fields), matching the\n * `exactOptionalPropertyTypes: true` semantics of port DTOs.\n *\n * Each parser carries an explicit `Result<PortDtoType, ApiError>`\n * return-type annotation. The `as` cast at the end is runtime-safe\n * because `parseWithSchema` strips `undefined`-valued keys —\n * TypeScript just cannot see this transformation through `z.infer<>`.\n *\n * If the API drops or renames a field, schema regen + tsc surfaces\n * the drift here as a TS error on the `.pick({…})` mask. Runtime\n * drift surfaces as a typed `upstream` MCP error with the zod issue\n * message — never as an `undefined.id` crash.\n */\n\nimport type {\n AlertNotificationDestinationResponse,\n AlertStatsResponse,\n ApiError,\n ApiKeyCreatedResponse,\n BalanceTransactionResponse,\n BulkReplayResponse,\n CampaignOverridesResponse,\n DeliveryAttemptResponse,\n EventCatalogResponse,\n GroupActionResponse,\n InvoiceResponse,\n OrgResponse,\n PolicyEntryResponse,\n RoleResponse,\n RuleTestResponse,\n ScanTagResponse,\n TagDefinitionDetailResponse,\n UsagePeriodSummaryResponse,\n UsageResponse,\n UserResponse,\n} from \"../../../domain/ports/api-gateway.js\";\nimport { schemas } from \"../../../shared/api/zod-schemas.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { parsePagedWithItemSchema, parseWithSchema } from \"./parse-with-schema.js\";\n\n/**\n * Generic per-item paginated parser — kept for callers that need\n * an `(raw) => Result<PaginatedResponse<T>>` thunk (the legacy\n * `parsePageOf(parseItem)` shape). The item parser is decoupled from\n * the envelope so callers compose freely.\n */\nexport function parsePageOf<T>(parseItem: (raw: unknown) => Result<T, ApiError>): (\n raw: unknown\n) => Result<\n {\n readonly items: readonly T[];\n readonly total: number;\n readonly page: number;\n readonly limit: number;\n },\n ApiError\n> {\n return (raw) => {\n if (raw === null || typeof raw !== \"object\") {\n return err({ kind: \"upstream\", detail: \"malformed page envelope\" });\n }\n const r = raw as { items?: unknown; total?: unknown; page?: unknown; limit?: unknown };\n if (\n !Array.isArray(r.items) ||\n typeof r.total !== \"number\" ||\n typeof r.page !== \"number\" ||\n typeof r.limit !== \"number\"\n ) {\n return err({ kind: \"upstream\", detail: \"page envelope: wrong field types\" });\n }\n const out: T[] = [];\n for (const item of r.items) {\n const parsed = parseItem(item);\n if (parsed.isErr()) return err(parsed.error);\n out.push(parsed.value);\n }\n return ok({ items: out, total: r.total, page: r.page, limit: r.limit });\n };\n}\n\n/** Generic per-item array parser. */\nexport function parseArrayOf<T>(\n parseItem: (raw: unknown) => Result<T, ApiError>\n): (raw: unknown) => Result<readonly T[], ApiError> {\n return (raw) => {\n if (!Array.isArray(raw)) return err({ kind: \"upstream\", detail: \"expected array\" });\n const out: T[] = [];\n for (const item of raw) {\n const r = parseItem(item);\n if (r.isErr()) return err(r.error);\n out.push(r.value);\n }\n return ok(out);\n };\n}\n\n// ── Per-DTO parsers ──────────────────────────────────────────────\n\nconst OrgSchema = schemas.OrgResponse.pick({\n id: true,\n name: true,\n owner_id: true,\n is_active: true,\n created_at: true,\n}).strip();\n\nexport const parseOrg = (raw: unknown): Result<OrgResponse, ApiError> =>\n parseWithSchema(OrgSchema, raw, \"org\") as Result<OrgResponse, ApiError>;\n\nconst UserSchema = schemas.UserResponse.pick({\n id: true,\n email: true,\n name: true,\n role_name: true,\n is_active: true,\n created_at: true,\n}).strip();\n\nexport const parseUser = (raw: unknown): Result<UserResponse, ApiError> =>\n parseWithSchema(UserSchema, raw, \"user\") as Result<UserResponse, ApiError>;\n\nconst RoleSchema = schemas.RoleResponse.pick({\n id: true,\n name: true,\n scope: true,\n is_system: true,\n permissions: true,\n}).strip();\n\nexport const parseRole = (raw: unknown): Result<RoleResponse, ApiError> =>\n parseWithSchema(RoleSchema, raw, \"role\") as Result<RoleResponse, ApiError>;\n\nconst ApiKeyCreatedSchema = schemas.ApiKeyCreatedResponse.pick({\n id: true,\n key_prefix: true,\n full_key: true,\n name: true,\n expires_at: true,\n created_at: true,\n}).strip();\n\nexport const parseApiKeyCreated = (raw: unknown): Result<ApiKeyCreatedResponse, ApiError> =>\n parseWithSchema(ApiKeyCreatedSchema, raw, \"api-key-created\") as Result<\n ApiKeyCreatedResponse,\n ApiError\n >;\n\nconst ScanTagSchema = schemas.ScanTagResponse.pick({\n id: true,\n scan_id: true,\n tag_slug: true,\n detail: true,\n url: true,\n display_name: true,\n category: true,\n severity: true,\n created_at: true,\n}).strip();\n\nexport const parseScanTag = (raw: unknown): Result<ScanTagResponse, ApiError> =>\n parseWithSchema(ScanTagSchema, raw, \"scan-tag\") as Result<ScanTagResponse, ApiError>;\n\nconst TagDetailSchema = schemas.TagDefinitionWithStatsResponse.pick({\n slug: true,\n category: true,\n source: true,\n display_name: true,\n description: true,\n severity: true,\n is_system: true,\n organization_id: true,\n show_in_public_report: true,\n scans_count: true,\n rules_count: true,\n}).strip();\n\nexport const parseTagDetail = (raw: unknown): Result<TagDefinitionDetailResponse, ApiError> =>\n parseWithSchema(TagDetailSchema, raw, \"tag-definition\") as Result<\n TagDefinitionDetailResponse,\n ApiError\n >;\n\nconst RuleTestSchema = schemas.RuleTestResponse.pick({\n matched: true,\n elapsed_ms: true,\n tags: true,\n}).strip();\n\nexport const parseRuleTest = (raw: unknown): Result<RuleTestResponse, ApiError> =>\n parseWithSchema(RuleTestSchema, raw, \"rule-test\") as Result<RuleTestResponse, ApiError>;\n\nconst AlertStatsSchema = schemas.AlertStatsResponse.pick({\n open: true,\n acknowledged: true,\n resolved: true,\n dismissed: true,\n}).strip();\n\nexport const parseAlertStats = (raw: unknown): Result<AlertStatsResponse, ApiError> =>\n parseWithSchema(AlertStatsSchema, raw, \"alert-stats\") as Result<AlertStatsResponse, ApiError>;\n\nconst UsageSchema = schemas.UsageResponse.pick({\n id: true,\n scan_id: true,\n charged_micros: true,\n balance_after_micros: true,\n within_plan: true,\n event_type: true,\n created_at: true,\n}).strip();\n\nexport const parseUsage = (raw: unknown): Result<UsageResponse, ApiError> =>\n parseWithSchema(UsageSchema, raw, \"usage\") as Result<UsageResponse, ApiError>;\n\nconst UsageSummarySchema = schemas.UsagePeriodSummaryResponse.pick({\n period_start: true,\n period_end: true,\n checks: true,\n rechecks: true,\n within_plan: true,\n overage: true,\n charged_micros: true,\n}).strip();\n\nexport const parseUsageSummary = (raw: unknown): Result<UsagePeriodSummaryResponse, ApiError> =>\n parseWithSchema(UsageSummarySchema, raw, \"usage-summary\") as Result<\n UsagePeriodSummaryResponse,\n ApiError\n >;\n\nconst BalanceTxSchema = schemas.BalanceTransactionResponse.pick({\n id: true,\n type: true,\n amount_micros: true,\n balance_after_micros: true,\n description: true,\n reference_kind: true,\n reference_id: true,\n actor_user_id: true,\n created_at: true,\n}).strip();\n\nexport const parseBalanceTx = (raw: unknown): Result<BalanceTransactionResponse, ApiError> =>\n parseWithSchema(BalanceTxSchema, raw, \"balance-tx\") as Result<\n BalanceTransactionResponse,\n ApiError\n >;\n\nconst InvoiceSchema = schemas.InvoiceResponse.pick({\n id: true,\n number: true,\n type: true,\n status: true,\n total_micros: true,\n currency: true,\n period_start: true,\n period_end: true,\n issued_at: true,\n paid_at: true,\n voided_at: true,\n has_pdf: true,\n description: true,\n payment_method: true,\n created_at: true,\n}).strip();\n\nexport const parseInvoice = (raw: unknown): Result<InvoiceResponse, ApiError> =>\n parseWithSchema(InvoiceSchema, raw, \"invoice\") as Result<InvoiceResponse, ApiError>;\n\nconst WebhookDeliverySchema = schemas.DeliveryAttemptResponse.pick({\n id: true,\n event_id: true,\n event_type: true,\n response_status: true,\n success: true,\n attempt_number: true,\n error_code: true,\n elapsed_ms: true,\n created_at: true,\n}).strip();\n\nexport const parseWebhookDelivery = (raw: unknown): Result<DeliveryAttemptResponse, ApiError> =>\n parseWithSchema(WebhookDeliverySchema, raw, \"webhook-delivery\") as Result<\n DeliveryAttemptResponse,\n ApiError\n >;\n\nconst EventCatalogSchema = schemas.EventCatalogResponse.pick({\n entries: true,\n}).strip();\n\nexport const parseEventCatalog = (raw: unknown): Result<EventCatalogResponse, ApiError> =>\n parseWithSchema(EventCatalogSchema, raw, \"event-catalog\") as Result<\n EventCatalogResponse,\n ApiError\n >;\n\nconst AlertDestinationSchema = schemas.AlertNotificationDestinationResponse.pick({\n id: true,\n channel: true,\n name: true,\n is_active: true,\n is_default_target: true,\n version: true,\n consecutive_failures: true,\n last_delivery_at: true,\n last_delivery_status: true,\n slack_workspace_id: true,\n slack_channel_name: true,\n telegram_chat_title: true,\n telegram_chat_type: true,\n email_address: true,\n included_label_keys: true,\n created_at: true,\n updated_at: true,\n}).strip();\n\nexport const parseAlertDestination = (\n raw: unknown\n): Result<AlertNotificationDestinationResponse, ApiError> =>\n parseWithSchema(AlertDestinationSchema, raw, \"alert-destination\") as Result<\n AlertNotificationDestinationResponse,\n ApiError\n >;\n\nconst CampaignOverridesSchema = schemas.CampaignOverridesResponse.pick({\n campaign_id: true,\n mode: true,\n destination_ids: true,\n}).strip();\n\nexport const parseCampaignAlertOverrides = (\n raw: unknown\n): Result<CampaignOverridesResponse, ApiError> =>\n parseWithSchema(CampaignOverridesSchema, raw, \"campaign-overrides\") as Result<\n CampaignOverridesResponse,\n ApiError\n >;\n\nconst BulkReplaySchema = schemas.BulkReplayResponse.pick({\n replayed: true,\n skipped: true,\n}).strip();\n\nexport const parseBulkReplay = (raw: unknown): Result<BulkReplayResponse, ApiError> =>\n parseWithSchema(BulkReplaySchema, raw, \"bulk-replay\") as Result<BulkReplayResponse, ApiError>;\n\nconst GroupActionSchema = schemas.GroupActionResponse.pick({\n group_id: true,\n affected_campaigns: true,\n cancelled_count: true,\n run_ids: true,\n failures: true,\n}).strip();\n\nexport const parseGroupAction = (raw: unknown): Result<GroupActionResponse, ApiError> =>\n parseWithSchema(GroupActionSchema, raw, \"group-action\") as Result<GroupActionResponse, ApiError>;\n\nconst PolicyEntrySchema = schemas.PolicyEntryResponse.pick({\n id: true,\n tag_slug: true,\n country_codes: true,\n}).strip();\n\nexport const parsePolicyEntry = (raw: unknown): Result<PolicyEntryResponse, ApiError> =>\n parseWithSchema(PolicyEntrySchema, raw, \"policy-entry\") as Result<PolicyEntryResponse, ApiError>;\n\n// `parsePagedWithItemSchema` re-exported for callers using schema-based\n// item validation directly.\nexport { parsePagedWithItemSchema };\n","/**\n * Parser for `GET /api/v1/geos` — list of supported geographies.\n */\n\nimport { z } from \"zod\";\n\nimport type { ApiError, GeoResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { schemas } from \"../../../shared/api/zod-schemas.js\";\nimport type { Result } from \"../../../shared/result.js\";\nimport { parseWithSchema } from \"./parse-with-schema.js\";\n\nconst GeoSchema = schemas.GeoResponse.pick({\n country_code: true,\n name: true,\n region: true,\n tier: true,\n}).strip();\n\nconst GeoListSchema = z.array(GeoSchema);\n\nexport const parseGeoList = (raw: unknown): Result<readonly GeoResponse[], ApiError> =>\n parseWithSchema(GeoListSchema, raw, \"geos\") as Result<readonly GeoResponse[], ApiError>;\n","/**\n * Parsers for `/api/v1/policy-sets`.\n *\n * The API exposes TWO shapes for policy sets:\n *\n * - `PolicySetResponse` — full entity, used by `GET /policy-sets/{id}`\n * and `POST /policy-sets`. Includes `entries` (the tag/country\n * bindings) inline.\n * - `PolicySetListItem` — slim per-item shape returned inside the\n * paginated envelope from `GET /policy-sets`. **Omits `entries`**;\n * callers that need them must follow up with `getPolicySet(id)`.\n *\n * `parsePolicySetList` MUST use the slim schema — using the full\n * schema would fail zod parse on every real list call because\n * `entries` is required there but absent in the list payload. The\n * list parser still accepts both bare-array and `{items: [...]}`\n * envelope shapes defensively (same `parseArrayOrItemsWithSchema`\n * pattern used in `parseCustomRuleArray` / `parseCampaignGroupArray`).\n */\n\nimport type {\n ApiError,\n PolicySetListItemResponse,\n PolicySetResponse,\n} from \"../../../domain/ports/api-gateway.js\";\nimport { schemas } from \"../../../shared/api/zod-schemas.js\";\nimport type { Result } from \"../../../shared/result.js\";\nimport { parseArrayOrItemsWithSchema, parseWithSchema } from \"./parse-with-schema.js\";\n\nconst PolicySetSchema = schemas.PolicySetResponse.pick({\n id: true,\n name: true,\n description: true,\n organization_id: true,\n visibility: true,\n is_approved: true,\n entries: true,\n created_at: true,\n}).strip();\n\nconst PolicySetListItemSchema = schemas.PolicySetListItem.pick({\n id: true,\n name: true,\n description: true,\n organization_id: true,\n visibility: true,\n is_approved: true,\n created_at: true,\n}).strip();\n\nexport const parsePolicySet = (raw: unknown): Result<PolicySetResponse, ApiError> =>\n parseWithSchema(PolicySetSchema, raw, \"policy-set\") as Result<PolicySetResponse, ApiError>;\n\nexport const parsePolicySetList = (\n raw: unknown\n): Result<readonly PolicySetListItemResponse[], ApiError> =>\n parseArrayOrItemsWithSchema(PolicySetListItemSchema, raw, \"policy-sets\") as Result<\n readonly PolicySetListItemResponse[],\n ApiError\n >;\n","/**\n * Parser for `GET /api/v1/runs/{id}` and the run-shape that\n * `POST /api/v1/campaigns/{id}/run` returns.\n */\n\nimport type { ApiError, RunResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { schemas } from \"../../../shared/api/zod-schemas.js\";\nimport type { Result } from \"../../../shared/result.js\";\nimport { parseWithSchema } from \"./parse-with-schema.js\";\n\nconst RunSchema = schemas.RunResponse.pick({\n id: true,\n campaign_id: true,\n label: true,\n total: true,\n completed: true,\n failed: true,\n partial: true,\n cancelled: true,\n source: true,\n created_at: true,\n}).strip();\n\nexport const parseRun = (raw: unknown): Result<RunResponse, ApiError> =>\n parseWithSchema(RunSchema, raw, \"run\") as Result<RunResponse, ApiError>;\n","/**\n * Parsers for `/api/v1/scans/{id}` (single scan detail) and\n * `POST /api/v1/scans/bulk` (array of scan detail responses).\n */\n\nimport { z } from \"zod\";\n\nimport type { ApiError, ScanResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { schemas } from \"../../../shared/api/zod-schemas.js\";\nimport type { Result } from \"../../../shared/result.js\";\nimport { parseWithSchema } from \"./parse-with-schema.js\";\n\nconst ScanSchema = schemas.ScanResponse.pick({\n id: true,\n url: true,\n country_code: true,\n emulator_id: true,\n status: true,\n offer_url: true,\n screenshot_url: true,\n ad_tag: true,\n creative_screenshot_url: true,\n page_title: true,\n elapsed_ms: true,\n error: true,\n labels: true,\n campaign_id: true,\n campaign_name: true,\n created_at: true,\n completed_at: true,\n}).strip();\n\nconst ScanArraySchema = z.array(ScanSchema);\n\nexport const parseScan = (raw: unknown): Result<ScanResponse, ApiError> =>\n parseWithSchema(ScanSchema, raw, \"scan\") as Result<ScanResponse, ApiError>;\n\nexport const parseScanArray = (raw: unknown): Result<readonly ScanResponse[], ApiError> =>\n parseWithSchema(ScanArraySchema, raw, \"scans\") as Result<readonly ScanResponse[], ApiError>;\n","/**\n * Parser for `GET /api/v1/scans` — paginated brief-scan envelope.\n */\n\nimport type {\n ApiError,\n PaginatedResponse,\n ScanBriefResponse,\n} from \"../../../domain/ports/api-gateway.js\";\nimport { schemas } from \"../../../shared/api/zod-schemas.js\";\nimport type { Result } from \"../../../shared/result.js\";\nimport { parsePagedWithItemSchema } from \"./parse-with-schema.js\";\n\nconst ScanBriefSchema = schemas.ScanBriefResponse.pick({\n id: true,\n url: true,\n country_code: true,\n status: true,\n offer_url: true,\n screenshot_url: true,\n labels: true,\n elapsed_ms: true,\n campaign_id: true,\n campaign_name: true,\n is_ad_tag: true,\n created_at: true,\n}).strip();\n\nexport const parseScanPage = (\n raw: unknown\n): Result<PaginatedResponse<ScanBriefResponse>, ApiError> =>\n parsePagedWithItemSchema(ScanBriefSchema, raw, \"scans\") as Result<\n PaginatedResponse<ScanBriefResponse>,\n ApiError\n >;\n","/**\n * Parsers for `/api/v1/tag-definitions`.\n */\n\nimport { z } from \"zod\";\n\nimport type { ApiError, TagDefinitionResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { schemas } from \"../../../shared/api/zod-schemas.js\";\nimport type { Result } from \"../../../shared/result.js\";\nimport { parseWithSchema } from \"./parse-with-schema.js\";\n\nconst TagDefinitionSchema = schemas.TagDefinitionWithStatsResponse.pick({\n slug: true,\n category: true,\n source: true,\n display_name: true,\n description: true,\n severity: true,\n is_system: true,\n organization_id: true,\n show_in_public_report: true,\n scans_count: true,\n rules_count: true,\n}).strip();\n\nconst TagDefinitionArraySchema = z.array(TagDefinitionSchema);\n\nexport const parseTag = (raw: unknown): Result<TagDefinitionResponse, ApiError> =>\n parseWithSchema(TagDefinitionSchema, raw, \"tag-definition\") as Result<\n TagDefinitionResponse,\n ApiError\n >;\n\nexport const parseTagDefinitionArray = (\n raw: unknown\n): Result<readonly TagDefinitionResponse[], ApiError> =>\n parseWithSchema(TagDefinitionArraySchema, raw, \"tag-definitions\") as Result<\n readonly TagDefinitionResponse[],\n ApiError\n >;\n","/**\n * Parsers for `/api/v1/webhooks`.\n *\n * `POST /api/v1/webhooks` and `POST /webhooks/{id}/rotate-secret`\n * return the envelope `{ webhook: WebhookResponse, secret: string }`\n * — the secret is shown exactly once on creation / rotation.\n *\n * `POST /api/v1/webhooks/{id}/test` returns `TestWebhookResponse`\n * synchronously (success + status + elapsed + error + body).\n */\n\nimport { z } from \"zod\";\n\nimport type {\n ApiError,\n TestWebhookResponse,\n WebhookCreatedResponse,\n WebhookResponse,\n} from \"../../../domain/ports/api-gateway.js\";\nimport { schemas } from \"../../../shared/api/zod-schemas.js\";\nimport type { Result } from \"../../../shared/result.js\";\nimport { parseWithSchema } from \"./parse-with-schema.js\";\n\nconst WebhookSchema = schemas.WebhookResponse.pick({\n id: true,\n url: true,\n description: true,\n event_types: true,\n campaign_ids: true,\n is_active: true,\n disabled_reason: true,\n disabled_at: true,\n health: true,\n created_at: true,\n updated_at: true,\n}).strip();\n\nconst WebhookListSchema = z.array(WebhookSchema);\n\nconst WebhookCreatedSchema = z\n .object({\n webhook: WebhookSchema,\n secret: z.string(),\n })\n .strip();\n\nconst TestWebhookResponseSchema = schemas.TestWebhookResponse.pick({\n success: true,\n response_status: true,\n elapsed_ms: true,\n error_code: true,\n response_body: true,\n}).strip();\n\nexport const parseWebhook = (raw: unknown): Result<WebhookResponse, ApiError> =>\n parseWithSchema(WebhookSchema, raw, \"webhook\") as Result<WebhookResponse, ApiError>;\n\nexport const parseWebhookList = (raw: unknown): Result<readonly WebhookResponse[], ApiError> =>\n parseWithSchema(WebhookListSchema, raw, \"webhooks\") as Result<\n readonly WebhookResponse[],\n ApiError\n >;\n\nexport const parseWebhookCreated = (raw: unknown): Result<WebhookCreatedResponse, ApiError> =>\n parseWithSchema(WebhookCreatedSchema, raw, \"webhook-created\") as Result<\n WebhookCreatedResponse,\n ApiError\n >;\n\nexport const parseTestWebhookResponse = (raw: unknown): Result<TestWebhookResponse, ApiError> =>\n parseWithSchema(TestWebhookResponseSchema, raw, \"test-webhook\") as Result<\n TestWebhookResponse,\n ApiError\n >;\n","/**\n * Production {@link ApiGateway} adapter.\n *\n * Backed by `openapi-fetch` over `paths` generated from the API's live\n * OpenAPI spec (see `scripts/gen-api-types.ts`):\n *\n * - Every endpoint path is a literal type constrained by `paths`.\n * Renaming or removing an endpoint on the API side fails this\n * gateway at `tsc --noEmit` immediately, no runtime drift.\n * - Path / query / body shapes are validated by the same generated\n * types, with the agent-facing `Pick<S[K], ...>` projections in\n * `domain/ports/api-gateway.ts` narrowing the surface to the\n * fields the MCP exposes.\n * - Response decoding still goes through the typed parsers under\n * `./parsers/*` (each one a one-liner backed by\n * `parseWithSchema(schemas.X.pick({...}))`), so a wrong-shape\n * payload at runtime degrades to a typed `upstream` MCP error\n * instead of a crash.\n *\n * Tenant-isolation contract: built per-request in HTTP mode, holding\n * exactly ONE caller's Bearer in a private closure plus a fresh\n * `openapi-fetch` client. The factory is never used to build a\n * singleton — each MCP request gets its own gateway, gc'd when the\n * request ends.\n *\n * Network transport: undici. Tests pass a `MockAgent`-backed\n * `Dispatcher`; production uses the default global agent.\n */\n\nimport createClient from \"openapi-fetch\";\nimport { type Dispatcher, fetch as undiciFetch } from \"undici\";\n\nimport type {\n AlertNotificationDestinationResponse,\n AlertResponse,\n AlertStatsResponse,\n ApiError,\n ApiGateway,\n ApiKeyCreatedResponse,\n ApiKeyResponse,\n BalanceTransactionResponse,\n BillingSummaryResponse,\n BulkReplayRequest,\n BulkReplayResponse,\n BulkScanRequest,\n CampaignGroupResponse,\n CampaignOverridesResponse,\n CampaignResponse,\n CancelPendingResponse,\n CreateApiKeyRequest,\n CreateCampaignGroupRequest,\n CreateCampaignRequest,\n CreateCustomRuleRequest,\n CreatePolicySetRequest,\n CreateScanRequest,\n CreateWebhookRequest,\n CustomRuleResponse,\n DeliveryAttemptResponse,\n EmulatorResponse,\n EventCatalogResponse,\n GeoResponse,\n GroupActionResponse,\n InviteUserRequest,\n InvoiceResponse,\n ListAlertsFilters,\n ListBalanceHistoryFilters,\n ListCampaignsFilters,\n ListScansFilters,\n ListUsageFilters,\n OrgResponse,\n PageFilters,\n PaginatedResponse,\n PolicySetListItemResponse,\n PolicySetResponse,\n RecheckRequest,\n RecheckResponse,\n RoleResponse,\n RuleTestRequest,\n RuleTestResponse,\n RunResponse,\n ScanBriefResponse,\n ScanResponse,\n ScanTagResponse,\n SetCampaignOverridesRequest,\n SetDestinationVersionRequest,\n TagDefinitionDetailResponse,\n TagDefinitionResponse,\n TestWebhookRequest,\n TestWebhookResponse,\n UpdateAlertStatusRequest,\n UpdateCampaignGroupRequest,\n UpdateCampaignRequest,\n UpdateCustomRuleRequest,\n UpdateOrgRequest,\n UpdatePolicySetRequest,\n UpdateTagDefinitionRequest,\n UpdateUserRoleRequest,\n UpdateWebhookRequest,\n UsagePeriodSummaryResponse,\n UsageResponse,\n UserResponse,\n WebhookCreatedResponse,\n WebhookResponse,\n} from \"../../domain/ports/api-gateway.js\";\nimport type { Logger } from \"../../domain/ports/logger.js\";\nimport type { BearerToken } from \"../../domain/value-objects/bearer-token.js\";\nimport type { RequestId } from \"../../domain/value-objects/request-id.js\";\nimport type { paths } from \"../../shared/api/openapi.js\";\nimport { err, type Result } from \"../../shared/result.js\";\nimport { toApiError } from \"./error-mapping.js\";\nimport { parseAlertPage } from \"./parsers/parse-alert.js\";\nimport { parseApiKeyList } from \"./parsers/parse-api-key.js\";\nimport { parseBillingSummary } from \"./parsers/parse-billing-summary.js\";\nimport { parseCampaign, parseCampaignPage } from \"./parsers/parse-campaign.js\";\nimport { parseCampaignGroup, parseCampaignGroupArray } from \"./parsers/parse-campaign-group.js\";\nimport { parseIntField } from \"./parsers/parse-count-envelope.js\";\nimport { parseCustomRule, parseCustomRuleArray } from \"./parsers/parse-custom-rule.js\";\nimport { parseEmpty } from \"./parsers/parse-empty.js\";\nimport { parseEmulatorList } from \"./parsers/parse-emulator.js\";\nimport {\n parseAlertDestination,\n parseAlertStats,\n parseApiKeyCreated,\n parseArrayOf,\n parseBalanceTx,\n parseBulkReplay,\n parseCampaignAlertOverrides,\n parseEventCatalog,\n parseGroupAction,\n parseInvoice,\n parseOrg,\n parsePageOf,\n parseRole,\n parseRuleTest,\n parseScanTag,\n parseTagDetail,\n parseUsage,\n parseUsageSummary,\n parseUser,\n parseWebhookDelivery,\n} from \"./parsers/parse-generic.js\";\nimport { parseGeoList } from \"./parsers/parse-geo-list.js\";\nimport { parsePolicySet, parsePolicySetList } from \"./parsers/parse-policy-set.js\";\nimport { parseRun } from \"./parsers/parse-run.js\";\nimport { parseScan, parseScanArray } from \"./parsers/parse-scan.js\";\nimport { parseScanPage } from \"./parsers/parse-scan-page.js\";\nimport { parseTagDefinitionArray } from \"./parsers/parse-tag.js\";\nimport {\n parseTestWebhookResponse,\n parseWebhook,\n parseWebhookCreated,\n parseWebhookList,\n} from \"./parsers/parse-webhook.js\";\n\nexport interface HttpApiGatewayConfig {\n readonly baseUrl: string;\n readonly bearer: BearerToken;\n readonly requestId: RequestId;\n readonly logger: Logger;\n /**\n * Optional undici dispatcher — tests pass a `MockAgent`; production\n * uses the default global agent.\n */\n readonly dispatcher?: Dispatcher;\n}\n\n/**\n * openapi-fetch's `init` argument differs per method (GET vs POST etc.)\n * and per endpoint (which params it accepts). The typed surface is\n * enforced by the per-method literal path passed at the call site:\n * `client.GET(\"/api/v1/scans/{scan_id}\", { params: { path: { scan_id: id } } })`\n * is fully type-checked. Inside the generic `call()` helper we erase\n * `init` to `unknown` because the helper is generic over arbitrary\n * endpoint shapes — the eslint suppression below covers ONLY this\n * internal erasure, not the per-method call sites.\n */\ntype OpenapiInit = unknown;\n\n/** Build a fresh `ApiGateway` for one logical request scope. */\nexport function createHttpApiGateway(config: HttpApiGatewayConfig): ApiGateway {\n const { baseUrl, bearer, requestId, logger, dispatcher } = config;\n\n // Custom fetch — wraps undici.fetch so we can inject the per-request\n // dispatcher (used by tests). In production `dispatcher` is undefined\n // and undici.fetch uses the global agent.\n //\n // openapi-fetch passes a Request object as `input` (with headers,\n // method and body bound to it); we splice those onto init so undici\n // sees the auth header / body. If we passed `input` directly, undici\n // ignores the Request and only reads init — auth headers vanish.\n const fetchImpl: typeof fetch = async (input, init) => {\n // openapi-fetch ALWAYS calls us with a fully-formed `Request`\n // (it constructs one internally even when the consumer never\n // passes one). The `string | URL` branches of the `typeof fetch`\n // signature are dead in this codepath; narrow up-front so the\n // hot path below can assume Request without re-typing every\n // line. The branch IS reachable in isolation tests that hand-call\n // `fetchImpl` to exercise the contract — see the smoke test in\n // tests/unit/infrastructure/api/http-api-gateway.test.ts.\n /* c8 ignore next 5 — defensive narrow, exercised via the typed call path; openapi-fetch never hits it */\n if (typeof input === \"string\" || input instanceof URL) {\n throw new TypeError(\n \"createHttpApiGateway.fetchImpl: openapi-fetch is expected to always pass a Request\"\n );\n }\n\n // undici's RequestInit and the global RequestInit have subtly\n // different `BodyInit` shapes (undici-types vs undici/types).\n // We forward fields as an opaque bag — openapi-fetch already\n // constructed a fully-formed Request, we just rebind it for\n // undici.fetch + the per-request dispatcher.\n const baseInit: Record<string, unknown> = { ...(init ?? {}) };\n baseInit[\"method\"] ??= input.method;\n if (baseInit[\"headers\"] === undefined) {\n const merged: Record<string, string> = {};\n input.headers.forEach((value, key) => {\n merged[key] = value;\n });\n baseInit[\"headers\"] = merged;\n }\n // Request body is a ReadableStream; openapi-fetch has already\n // serialised the JSON body and the Request wraps it. Read it\n // back as text so undici sees a concrete payload — passing the\n // ReadableStream straight through requires `duplex: \"half\"` AND\n // triggers chunked transfer in some setups (and MockAgent does\n // not understand chunked).\n if (baseInit[\"body\"] === undefined && input.body !== null) {\n baseInit[\"body\"] = await input.text();\n baseInit[\"duplex\"] ??= \"half\";\n }\n\n if (dispatcher !== undefined) {\n baseInit[\"dispatcher\"] = dispatcher;\n }\n\n // undici's Response and the global `Response` share the same\n // primitive shape in Node 18+ (undici backs both). The narrow\n // assertion here is the cross-library boundary.\n /* eslint-disable @typescript-eslint/consistent-type-assertions */\n return undiciFetch(\n input.url,\n baseInit as Parameters<typeof undiciFetch>[1]\n ) as unknown as Response;\n /* eslint-enable @typescript-eslint/consistent-type-assertions */\n };\n\n // Pinned outbound header allowlist — must match the 5-key contract\n // documented in `CONTRIBUTING.md` \"Tenant isolation\" §9. Enforced by\n // `tests/isolation/header-injection-e2e.test.ts` (source-text regex\n // gate) and `tests/isolation/header-injection.test.ts` (behavioural\n // assertion that the same five keys reach the wire).\n const client = createClient<paths>({\n baseUrl,\n fetch: fetchImpl,\n headers: {\n authorization: bearer.toAuthorizationHeader(),\n \"content-type\": \"application/json\",\n accept: \"application/json\",\n \"user-agent\": \"kaminari-ad-mcp\",\n \"x-request-id\": requestId,\n },\n });\n\n type HttpMethod = \"GET\" | \"POST\" | \"PATCH\" | \"PUT\" | \"DELETE\";\n\n interface OpenapiResult {\n readonly data?: unknown;\n readonly error?: unknown;\n readonly response: Response;\n }\n\n // Type-erased dispatch table over the openapi-fetch client's typed\n // method surface (`client.GET(\"/api/v1/...\", { params... })`). The\n // per-call-site narrowing through the helper below preserves end-to-\n // end path/body typing — the erasure here is purely so the helper\n // can be generic over method name. The functions are bound to the\n // client to preserve `this`.\n /* eslint-disable @typescript-eslint/consistent-type-assertions */\n const dispatch: Record<HttpMethod, (p: string, i: OpenapiInit) => Promise<OpenapiResult>> = {\n GET: client.GET.bind(client) as (p: string, i: OpenapiInit) => Promise<OpenapiResult>,\n POST: client.POST.bind(client) as (p: string, i: OpenapiInit) => Promise<OpenapiResult>,\n PATCH: client.PATCH.bind(client) as (p: string, i: OpenapiInit) => Promise<OpenapiResult>,\n PUT: client.PUT.bind(client) as (p: string, i: OpenapiInit) => Promise<OpenapiResult>,\n DELETE: client.DELETE.bind(client) as (p: string, i: OpenapiInit) => Promise<OpenapiResult>,\n };\n /* eslint-enable @typescript-eslint/consistent-type-assertions */\n\n async function call<T>(\n method: HttpMethod,\n path: string,\n init: OpenapiInit,\n parse: (raw: unknown) => Result<T, ApiError>\n ): Promise<Result<T, ApiError>> {\n const startedAtMs = Date.now();\n let result: OpenapiResult;\n try {\n result = await dispatch[method](path, init);\n } catch (cause) {\n logger.warn({ api_path: path, elapsed_ms: Date.now() - startedAtMs }, \"api.network_error\");\n // undici.fetch wraps the underlying connection error as\n // `TypeError(\"fetch failed\")` with `.cause = the original Error`.\n // The raw message (\"ECONNRESET\", \"ENOTFOUND\", \"self-signed\n // certificate\"…) is the operator-actionable bit — unwrap it.\n const inner =\n cause instanceof Error && cause.cause instanceof Error\n ? cause.cause\n : cause instanceof Error\n ? cause\n : null;\n return err({\n kind: \"upstream\",\n detail: inner !== null ? inner.message : \"network error\",\n });\n }\n\n const { data, error, response } = result;\n const status = response.status;\n logger.info(\n { api_path: path, api_status: status, elapsed_ms: Date.now() - startedAtMs },\n \"api.done\"\n );\n\n if (status >= 200 && status < 300) {\n return parse(data === undefined ? null : data);\n }\n return err(toApiError(status, error ?? data, response.headers.get(\"retry-after\") ?? undefined));\n }\n\n return {\n // ── Account ───────────────────────────────────────────────────\n async getAccount(): Promise<Result<OrgResponse, ApiError>> {\n return call(\"GET\", \"/api/v1/account\", {}, parseOrg);\n },\n async updateOrg(body: UpdateOrgRequest): Promise<Result<OrgResponse, ApiError>> {\n return call(\"PATCH\", \"/api/v1/account\", { body }, parseOrg);\n },\n async listOrgUsers(): Promise<Result<readonly UserResponse[], ApiError>> {\n return call(\"GET\", \"/api/v1/account/users\", {}, parseArrayOf(parseUser));\n },\n async inviteUser(body: InviteUserRequest): Promise<Result<UserResponse, ApiError>> {\n return call(\"POST\", \"/api/v1/account/users/invite\", { body }, parseUser);\n },\n async updateUserRole(\n userId: string,\n body: UpdateUserRoleRequest\n ): Promise<Result<null, ApiError>> {\n return call(\n \"PATCH\",\n \"/api/v1/account/users/{user_id}/role\",\n { params: { path: { user_id: userId } }, body },\n parseEmpty\n );\n },\n async removeUser(userId: string): Promise<Result<null, ApiError>> {\n return call(\n \"DELETE\",\n \"/api/v1/account/users/{user_id}\",\n { params: { path: { user_id: userId } } },\n parseEmpty\n );\n },\n async transferOwnership(userId: string): Promise<Result<null, ApiError>> {\n return call(\n \"POST\",\n \"/api/v1/account/users/{user_id}/transfer-ownership\",\n { params: { path: { user_id: userId } } },\n parseEmpty\n );\n },\n async listOrgRoles(): Promise<Result<readonly RoleResponse[], ApiError>> {\n return call(\"GET\", \"/api/v1/account/roles\", {}, parseArrayOf(parseRole));\n },\n async listApiKeys(): Promise<Result<readonly ApiKeyResponse[], ApiError>> {\n return call(\"GET\", \"/api/v1/account/api-keys\", {}, parseApiKeyList);\n },\n async createApiKey(\n body: CreateApiKeyRequest\n ): Promise<Result<ApiKeyCreatedResponse, ApiError>> {\n return call(\"POST\", \"/api/v1/account/api-keys\", { body }, parseApiKeyCreated);\n },\n async revokeApiKey(keyId: string): Promise<Result<null, ApiError>> {\n return call(\n \"DELETE\",\n \"/api/v1/account/api-keys/{key_id}\",\n { params: { path: { key_id: keyId } } },\n parseEmpty\n );\n },\n\n // ── Scans ─────────────────────────────────────────────────────\n async listScans(\n filters: ListScansFilters\n ): Promise<Result<PaginatedResponse<ScanBriefResponse>, ApiError>> {\n return call(\"GET\", \"/api/v1/scans\", { params: { query: filters } }, parseScanPage);\n },\n async getScan(scanId: string): Promise<Result<ScanResponse, ApiError>> {\n return call(\n \"GET\",\n \"/api/v1/scans/{scan_id}\",\n { params: { path: { scan_id: scanId } } },\n parseScan\n );\n },\n async createScan(body: CreateScanRequest): Promise<Result<ScanResponse, ApiError>> {\n return call(\"POST\", \"/api/v1/scans\", { body }, parseScan);\n },\n async createBulkScans(\n body: BulkScanRequest\n ): Promise<Result<readonly ScanResponse[], ApiError>> {\n return call(\"POST\", \"/api/v1/scans/bulk\", { body }, parseScanArray);\n },\n async recheckScans(body: RecheckRequest): Promise<Result<RecheckResponse, ApiError>> {\n return call(\"POST\", \"/api/v1/scans/recheck\", { body }, (raw) =>\n parseIntField(raw, \"queued_count\")\n );\n },\n async cancelScan(scanId: string): Promise<Result<CancelPendingResponse, ApiError>> {\n return call(\n \"POST\",\n \"/api/v1/scans/{scan_id}/cancel\",\n { params: { path: { scan_id: scanId } } },\n (raw) => parseIntField(raw, \"cancelled_count\")\n );\n },\n async listScanTags(scanId: string): Promise<Result<readonly ScanTagResponse[], ApiError>> {\n return call(\n \"GET\",\n \"/api/v1/scans/{scan_id}/tags\",\n { params: { path: { scan_id: scanId } } },\n parseArrayOf(parseScanTag)\n );\n },\n\n // ── Geos / emulators ──────────────────────────────────────────\n async listGeos(): Promise<Result<readonly GeoResponse[], ApiError>> {\n return call(\"GET\", \"/api/v1/geos\", {}, parseGeoList);\n },\n async listEmulators(): Promise<Result<readonly EmulatorResponse[], ApiError>> {\n return call(\"GET\", \"/api/v1/emulators\", {}, parseEmulatorList);\n },\n\n // ── Campaigns ─────────────────────────────────────────────────\n async listCampaigns(\n filters: ListCampaignsFilters\n ): Promise<Result<PaginatedResponse<CampaignResponse>, ApiError>> {\n return call(\"GET\", \"/api/v1/campaigns\", { params: { query: filters } }, parseCampaignPage);\n },\n async getCampaign(id: string): Promise<Result<CampaignResponse, ApiError>> {\n return call(\n \"GET\",\n \"/api/v1/campaigns/{campaign_id}\",\n { params: { path: { campaign_id: id } } },\n parseCampaign\n );\n },\n async createCampaign(body: CreateCampaignRequest): Promise<Result<CampaignResponse, ApiError>> {\n return call(\"POST\", \"/api/v1/campaigns\", { body }, parseCampaign);\n },\n async updateCampaign(\n id: string,\n body: UpdateCampaignRequest\n ): Promise<Result<CampaignResponse, ApiError>> {\n return call(\n \"PATCH\",\n \"/api/v1/campaigns/{campaign_id}\",\n { params: { path: { campaign_id: id } }, body },\n parseCampaign\n );\n },\n async runCampaign(id: string): Promise<Result<RunResponse, ApiError>> {\n return call(\n \"POST\",\n \"/api/v1/campaigns/{campaign_id}/run\",\n { params: { path: { campaign_id: id } } },\n parseRun\n );\n },\n async archiveCampaign(id: string): Promise<Result<CampaignResponse, ApiError>> {\n return call(\n \"POST\",\n \"/api/v1/campaigns/{campaign_id}/archive\",\n { params: { path: { campaign_id: id } } },\n parseCampaign\n );\n },\n async unarchiveCampaign(id: string): Promise<Result<CampaignResponse, ApiError>> {\n return call(\n \"POST\",\n \"/api/v1/campaigns/{campaign_id}/unarchive\",\n { params: { path: { campaign_id: id } } },\n parseCampaign\n );\n },\n async cancelCampaign(id: string): Promise<Result<CancelPendingResponse, ApiError>> {\n return call(\n \"POST\",\n \"/api/v1/campaigns/{campaign_id}/cancel\",\n { params: { path: { campaign_id: id } } },\n (raw) => parseIntField(raw, \"cancelled_count\")\n );\n },\n async listCampaignRuns(\n campaignId: string,\n filters: PageFilters\n ): Promise<Result<PaginatedResponse<RunResponse>, ApiError>> {\n return call(\n \"GET\",\n \"/api/v1/campaigns/{campaign_id}/runs\",\n { params: { path: { campaign_id: campaignId }, query: filters } },\n parsePageOf(parseRun)\n );\n },\n\n // ── Runs ──────────────────────────────────────────────────────\n async getRun(id: string): Promise<Result<RunResponse, ApiError>> {\n return call(\"GET\", \"/api/v1/runs/{run_id}\", { params: { path: { run_id: id } } }, parseRun);\n },\n async cancelRun(id: string): Promise<Result<CancelPendingResponse, ApiError>> {\n return call(\n \"POST\",\n \"/api/v1/runs/{run_id}/cancel\",\n { params: { path: { run_id: id } } },\n (raw) => parseIntField(raw, \"cancelled_count\")\n );\n },\n async listRunScans(\n runId: string,\n filters: PageFilters\n ): Promise<Result<PaginatedResponse<ScanBriefResponse>, ApiError>> {\n return call(\n \"GET\",\n \"/api/v1/runs/{run_id}/scans\",\n { params: { path: { run_id: runId }, query: filters } },\n parseScanPage\n );\n },\n\n // ── Campaign groups ───────────────────────────────────────────\n async listCampaignGroups(filters?: {\n readonly archived?: boolean;\n }): Promise<Result<readonly CampaignGroupResponse[], ApiError>> {\n return call(\n \"GET\",\n \"/api/v1/campaign-groups\",\n { params: { query: filters ?? {} } },\n parseCampaignGroupArray\n );\n },\n async getCampaignGroup(id: string): Promise<Result<CampaignGroupResponse, ApiError>> {\n return call(\n \"GET\",\n \"/api/v1/campaign-groups/{group_id}\",\n { params: { path: { group_id: id } } },\n parseCampaignGroup\n );\n },\n async createCampaignGroup(\n body: CreateCampaignGroupRequest\n ): Promise<Result<CampaignGroupResponse, ApiError>> {\n return call(\"POST\", \"/api/v1/campaign-groups\", { body }, parseCampaignGroup);\n },\n async updateCampaignGroup(\n id: string,\n body: UpdateCampaignGroupRequest\n ): Promise<Result<CampaignGroupResponse, ApiError>> {\n return call(\n \"PATCH\",\n \"/api/v1/campaign-groups/{group_id}\",\n { params: { path: { group_id: id } }, body },\n parseCampaignGroup\n );\n },\n async runCampaignGroup(id: string): Promise<Result<GroupActionResponse, ApiError>> {\n return call(\n \"POST\",\n \"/api/v1/campaign-groups/{group_id}/run\",\n { params: { path: { group_id: id } } },\n parseGroupAction\n );\n },\n async cancelCampaignGroup(id: string): Promise<Result<GroupActionResponse, ApiError>> {\n return call(\n \"POST\",\n \"/api/v1/campaign-groups/{group_id}/cancel\",\n { params: { path: { group_id: id } } },\n parseGroupAction\n );\n },\n async archiveCampaignGroup(id: string): Promise<Result<GroupActionResponse, ApiError>> {\n return call(\n \"POST\",\n \"/api/v1/campaign-groups/{group_id}/archive\",\n { params: { path: { group_id: id } } },\n parseGroupAction\n );\n },\n async unarchiveCampaignGroup(id: string): Promise<Result<GroupActionResponse, ApiError>> {\n return call(\n \"POST\",\n \"/api/v1/campaign-groups/{group_id}/unarchive\",\n { params: { path: { group_id: id } } },\n parseGroupAction\n );\n },\n async pauseCampaignGroupSchedule(id: string): Promise<Result<CampaignGroupResponse, ApiError>> {\n return call(\n \"POST\",\n \"/api/v1/campaign-groups/{group_id}/pause-schedule\",\n { params: { path: { group_id: id } } },\n parseCampaignGroup\n );\n },\n async resumeCampaignGroupSchedule(\n id: string\n ): Promise<Result<CampaignGroupResponse, ApiError>> {\n return call(\n \"POST\",\n \"/api/v1/campaign-groups/{group_id}/resume-schedule\",\n { params: { path: { group_id: id } } },\n parseCampaignGroup\n );\n },\n\n // ── Tag definitions ───────────────────────────────────────────\n async listTags(): Promise<Result<readonly TagDefinitionResponse[], ApiError>> {\n return call(\"GET\", \"/api/v1/tag-definitions\", {}, parseTagDefinitionArray);\n },\n async getTagDefinition(slug: string): Promise<Result<TagDefinitionDetailResponse, ApiError>> {\n return call(\n \"GET\",\n \"/api/v1/tag-definitions/{slug}\",\n { params: { path: { slug } } },\n parseTagDetail\n );\n },\n async updateTagDefinition(\n slug: string,\n body: UpdateTagDefinitionRequest\n ): Promise<Result<null, ApiError>> {\n return call(\n \"PATCH\",\n \"/api/v1/tag-definitions/{slug}\",\n { params: { path: { slug } }, body },\n parseEmpty\n );\n },\n async deleteTagDefinition(slug: string): Promise<Result<null, ApiError>> {\n return call(\n \"DELETE\",\n \"/api/v1/tag-definitions/{slug}\",\n { params: { path: { slug } } },\n parseEmpty\n );\n },\n\n // ── Custom rules ──────────────────────────────────────────────\n async listCustomRules(\n filters: PageFilters\n ): Promise<Result<readonly CustomRuleResponse[], ApiError>> {\n return call(\n \"GET\",\n \"/api/v1/custom-rules\",\n { params: { query: filters } },\n parseCustomRuleArray\n );\n },\n async getCustomRule(id: string): Promise<Result<CustomRuleResponse, ApiError>> {\n return call(\n \"GET\",\n \"/api/v1/custom-rules/{rule_id}\",\n { params: { path: { rule_id: id } } },\n parseCustomRule\n );\n },\n async createCustomRule(\n body: CreateCustomRuleRequest\n ): Promise<Result<CustomRuleResponse, ApiError>> {\n return call(\"POST\", \"/api/v1/custom-rules\", { body }, parseCustomRule);\n },\n async updateCustomRule(\n id: string,\n body: UpdateCustomRuleRequest\n ): Promise<Result<CustomRuleResponse, ApiError>> {\n return call(\n \"PUT\",\n \"/api/v1/custom-rules/{rule_id}\",\n { params: { path: { rule_id: id } }, body },\n parseCustomRule\n );\n },\n async deleteCustomRule(id: string): Promise<Result<null, ApiError>> {\n return call(\n \"DELETE\",\n \"/api/v1/custom-rules/{rule_id}\",\n { params: { path: { rule_id: id } } },\n parseEmpty\n );\n },\n async testCustomRule(body: RuleTestRequest): Promise<Result<RuleTestResponse, ApiError>> {\n return call(\"POST\", \"/api/v1/custom-rules/test\", { body }, parseRuleTest);\n },\n\n // ── Policy sets ───────────────────────────────────────────────\n async listPolicySets(): Promise<Result<readonly PolicySetListItemResponse[], ApiError>> {\n return call(\"GET\", \"/api/v1/policy-sets\", {}, parsePolicySetList);\n },\n async getPolicySet(id: string): Promise<Result<PolicySetResponse, ApiError>> {\n return call(\n \"GET\",\n \"/api/v1/policy-sets/{policy_set_id}\",\n { params: { path: { policy_set_id: id } } },\n parsePolicySet\n );\n },\n async createPolicySet(\n body: CreatePolicySetRequest\n ): Promise<Result<PolicySetResponse, ApiError>> {\n return call(\"POST\", \"/api/v1/policy-sets\", { body }, parsePolicySet);\n },\n async updatePolicySet(\n id: string,\n body: UpdatePolicySetRequest\n ): Promise<Result<PolicySetResponse, ApiError>> {\n return call(\n \"PUT\",\n \"/api/v1/policy-sets/{policy_set_id}\",\n { params: { path: { policy_set_id: id } }, body },\n parsePolicySet\n );\n },\n async deletePolicySet(id: string): Promise<Result<null, ApiError>> {\n return call(\n \"DELETE\",\n \"/api/v1/policy-sets/{policy_set_id}\",\n { params: { path: { policy_set_id: id } } },\n parseEmpty\n );\n },\n async requestPolicySetApproval(id: string): Promise<Result<null, ApiError>> {\n return call(\n \"POST\",\n \"/api/v1/policy-sets/{policy_set_id}/request-approval\",\n { params: { path: { policy_set_id: id } } },\n parseEmpty\n );\n },\n\n // ── Alerts ────────────────────────────────────────────────────\n async listAlerts(\n filters: ListAlertsFilters\n ): Promise<Result<PaginatedResponse<AlertResponse>, ApiError>> {\n return call(\"GET\", \"/api/v1/alerts\", { params: { query: filters } }, parseAlertPage);\n },\n async updateAlertStatus(\n alertId: string,\n body: UpdateAlertStatusRequest\n ): Promise<Result<null, ApiError>> {\n return call(\n \"PATCH\",\n \"/api/v1/alerts/{alert_id}/status\",\n { params: { path: { alert_id: alertId } }, body },\n parseEmpty\n );\n },\n async getAlertStats(): Promise<Result<AlertStatsResponse, ApiError>> {\n return call(\"GET\", \"/api/v1/alerts/stats\", {}, parseAlertStats);\n },\n\n // ── Webhooks ──────────────────────────────────────────────────\n async listWebhooks(): Promise<Result<readonly WebhookResponse[], ApiError>> {\n return call(\"GET\", \"/api/v1/webhooks\", {}, parseWebhookList);\n },\n async getWebhook(id: string): Promise<Result<WebhookResponse, ApiError>> {\n return call(\n \"GET\",\n \"/api/v1/webhooks/{endpoint_id}\",\n { params: { path: { endpoint_id: id } } },\n parseWebhook\n );\n },\n async createWebhook(\n body: CreateWebhookRequest\n ): Promise<Result<WebhookCreatedResponse, ApiError>> {\n return call(\"POST\", \"/api/v1/webhooks\", { body }, parseWebhookCreated);\n },\n async updateWebhook(\n id: string,\n body: UpdateWebhookRequest\n ): Promise<Result<WebhookResponse, ApiError>> {\n return call(\n \"PATCH\",\n \"/api/v1/webhooks/{endpoint_id}\",\n { params: { path: { endpoint_id: id } }, body },\n parseWebhook\n );\n },\n async deleteWebhook(id: string): Promise<Result<null, ApiError>> {\n return call(\n \"DELETE\",\n \"/api/v1/webhooks/{endpoint_id}\",\n { params: { path: { endpoint_id: id } } },\n parseEmpty\n );\n },\n async testWebhook(\n endpointId: string,\n body: TestWebhookRequest\n ): Promise<Result<TestWebhookResponse, ApiError>> {\n return call(\n \"POST\",\n \"/api/v1/webhooks/{endpoint_id}/test\",\n { params: { path: { endpoint_id: endpointId } }, body },\n parseTestWebhookResponse\n );\n },\n async rotateWebhookSecret(\n endpointId: string\n ): Promise<Result<WebhookCreatedResponse, ApiError>> {\n return call(\n \"POST\",\n \"/api/v1/webhooks/{endpoint_id}/rotate-secret\",\n { params: { path: { endpoint_id: endpointId } } },\n parseWebhookCreated\n );\n },\n async listWebhookEventTypes(): Promise<Result<EventCatalogResponse, ApiError>> {\n return call(\"GET\", \"/api/v1/webhooks/event-types\", {}, parseEventCatalog);\n },\n async listWebhookDeliveries(\n endpointId: string,\n filters: PageFilters\n ): Promise<Result<PaginatedResponse<DeliveryAttemptResponse>, ApiError>> {\n return call(\n \"GET\",\n \"/api/v1/webhooks/{endpoint_id}/deliveries\",\n { params: { path: { endpoint_id: endpointId }, query: filters } },\n parsePageOf(parseWebhookDelivery)\n );\n },\n async replayWebhookDelivery(attemptId: string): Promise<Result<null, ApiError>> {\n return call(\n \"POST\",\n \"/api/v1/webhooks/deliveries/{attempt_id}/replay\",\n { params: { path: { attempt_id: attemptId } } },\n parseEmpty\n );\n },\n async bulkReplayWebhook(\n endpointId: string,\n body: BulkReplayRequest\n ): Promise<Result<BulkReplayResponse, ApiError>> {\n return call(\n \"POST\",\n \"/api/v1/webhooks/{endpoint_id}/replay\",\n { params: { path: { endpoint_id: endpointId } }, body },\n parseBulkReplay\n );\n },\n\n // ── Billing ───────────────────────────────────────────────────\n async getBillingSummary(): Promise<Result<BillingSummaryResponse, ApiError>> {\n return call(\"GET\", \"/api/v1/billing\", {}, parseBillingSummary);\n },\n async listUsage(\n filters: ListUsageFilters\n ): Promise<Result<PaginatedResponse<UsageResponse>, ApiError>> {\n return call(\n \"GET\",\n \"/api/v1/billing/usage\",\n { params: { query: filters } },\n parsePageOf(parseUsage)\n );\n },\n async getUsageSummary(): Promise<Result<UsagePeriodSummaryResponse, ApiError>> {\n return call(\"GET\", \"/api/v1/billing/usage/summary\", {}, parseUsageSummary);\n },\n async listBalanceHistory(\n filters: ListBalanceHistoryFilters\n ): Promise<Result<PaginatedResponse<BalanceTransactionResponse>, ApiError>> {\n return call(\n \"GET\",\n \"/api/v1/billing/history\",\n { params: { query: filters } },\n parsePageOf(parseBalanceTx)\n );\n },\n\n // ── Invoicing ─────────────────────────────────────────────────\n async listInvoices(\n filters: PageFilters\n ): Promise<Result<PaginatedResponse<InvoiceResponse>, ApiError>> {\n return call(\n \"GET\",\n \"/api/v1/invoices\",\n { params: { query: filters } },\n parsePageOf(parseInvoice)\n );\n },\n\n // ── Alert notifications ───────────────────────────────────────\n async listAlertDestinations(): Promise<\n Result<readonly AlertNotificationDestinationResponse[], ApiError>\n > {\n return call(\n \"GET\",\n \"/api/v1/alert-notifications/destinations\",\n {},\n parseArrayOf(parseAlertDestination)\n );\n },\n async deleteAlertDestination(id: string): Promise<Result<null, ApiError>> {\n return call(\n \"DELETE\",\n \"/api/v1/alert-notifications/destinations/{destination_id}\",\n { params: { path: { destination_id: id } } },\n parseEmpty\n );\n },\n async setAlertDestinationVersion(\n id: string,\n body: SetDestinationVersionRequest\n ): Promise<Result<null, ApiError>> {\n // API returns 204 No Content. Use `listAlertDestinations` for\n // the new state if you need it.\n return call(\n \"PATCH\",\n \"/api/v1/alert-notifications/destinations/{destination_id}/version\",\n { params: { path: { destination_id: id } }, body },\n parseEmpty\n );\n },\n async getCampaignAlertOverrides(\n campaignId: string\n ): Promise<Result<CampaignOverridesResponse, ApiError>> {\n return call(\n \"GET\",\n \"/api/v1/alert-notifications/campaigns/{campaign_id}/overrides\",\n { params: { path: { campaign_id: campaignId } } },\n parseCampaignAlertOverrides\n );\n },\n async setCampaignAlertOverrides(\n campaignId: string,\n body: SetCampaignOverridesRequest\n ): Promise<Result<null, ApiError>> {\n return call(\n \"PUT\",\n \"/api/v1/alert-notifications/campaigns/{campaign_id}/overrides\",\n { params: { path: { campaign_id: campaignId } }, body },\n parseEmpty\n );\n },\n };\n}\n","/**\n * Production {@link Logger} adapter, backed by pino.\n *\n * Tenant-isolation contract (CONTRIBUTING.md §8 — Bearers never log):\n *\n * - Bearers never appear in logs. pino's redact paths cover the\n * known fields (`Authorization`, `bearer`, `headers.authorization`).\n * - Stdio mode writes to **stderr** (so stdout stays a pure MCP\n * JSON-RPC channel). HTTP mode also writes to stderr; the\n * container's stdout is reserved for crash dumps. This invariant\n * is enforced even in `pretty` format — see the `prettyStream`\n * workaround below.\n */\n\nimport { type Logger as PinoLoggerImpl, type LoggerOptions, pino, stdTimeFunctions } from \"pino\";\n// `pino-pretty` is a runtime `dependency` (not `devDependency`) so\n// `npx -y @kaminari-ad/mcp` works on a fresh install — without it\n// the default `stdio + pretty` path crashes with \"unable to determine\n// transport target\".\nimport pinoPretty from \"pino-pretty\";\n\nimport type { LogFields, Logger } from \"../../domain/ports/logger.js\";\nimport type { LogLevel } from \"../../shared/config.js\";\n\nconst REDACTION_PATHS: readonly string[] = [\n \"authorization\",\n \"Authorization\",\n \"bearer\",\n \"Bearer\",\n \"*.authorization\",\n \"*.Authorization\",\n \"headers.authorization\",\n \"headers.Authorization\",\n \"req.headers.authorization\",\n \"req.headers.Authorization\",\n];\n\n/**\n * Build a `Logger` backed by pino.\n *\n * In `pretty` mode we instantiate `pino-pretty` **synchronously as a\n * write stream** instead of using pino's `transport` option. The\n * `transport` option spawns a worker that defaults to `process.stdout`\n * and ignores any destination we pass to `pino()` — which would\n * corrupt the MCP JSON-RPC channel in stdio mode. The sync stream\n * preserves our stderr invariant.\n *\n * @param level - Minimum level to emit; below this, calls are dropped.\n * @param format - `json` for production / Docker logs, `pretty` for\n * local stdio development.\n * @param destination - Where the log lines go. Defaults to process\n * stderr; tests supply an in-memory sink.\n */\nexport function createPinoLogger(\n level: LogLevel,\n format: \"json\" | \"pretty\" = \"json\",\n destination?: NodeJS.WritableStream\n): Logger {\n const options: LoggerOptions = {\n level,\n redact: { paths: [...REDACTION_PATHS], censor: \"[REDACTED]\" },\n base: null,\n timestamp: stdTimeFunctions.isoTime,\n formatters: {\n level: (label) => ({ level: label }),\n },\n };\n const sink =\n destination ??\n (format === \"pretty\"\n ? pinoPretty({\n colorize: true,\n ignore: \"pid,hostname\",\n destination: process.stderr.fd,\n sync: true,\n })\n : pino.destination(process.stderr.fd));\n return wrap(pino(options, sink));\n}\n\nfunction wrap(impl: PinoLoggerImpl): Logger {\n return {\n child(fields: LogFields): Logger {\n return wrap(impl.child({ ...fields }));\n },\n trace(fields, message): void {\n impl.trace({ ...fields }, message);\n },\n debug(fields, message): void {\n impl.debug({ ...fields }, message);\n },\n info(fields, message): void {\n impl.info({ ...fields }, message);\n },\n warn(fields, message): void {\n impl.warn({ ...fields }, message);\n },\n error(fields, message): void {\n impl.error({ ...fields }, message);\n },\n fatal(fields, message): void {\n impl.fatal({ ...fields }, message);\n },\n };\n}\n","/**\n * Pure mapping from {@link ApiError} (the gateway port's error type)\n * to {@link ToolError} (the tool-level error type).\n *\n * Lives in `application/services/` because `ToolError` is an\n * application-layer concept; mapping infrastructure-shaped errors\n * (`ApiError` carries upstream HTTP status, etc.) into the tool\n * vocabulary is exactly the application layer's job. No I/O.\n */\n\nimport type { ApiError } from \"../../domain/ports/api-gateway.js\";\nimport type { ToolError } from \"../tools/_shared/tool-result.js\";\n\n/** Map an API-level error to a tool-level error. */\nexport function mapApiError(apiError: ApiError): ToolError {\n switch (apiError.kind) {\n case \"unauthorized\":\n return { kind: \"unauthorized\", message: apiError.detail };\n case \"forbidden\":\n return apiError.code === undefined\n ? { kind: \"forbidden\", message: apiError.detail }\n : { kind: \"forbidden\", message: apiError.detail, code: apiError.code };\n case \"not-found\":\n return { kind: \"not-found\", message: apiError.detail };\n case \"rate-limited\":\n return apiError.retryAfterMs === undefined\n ? { kind: \"rate-limited\", message: apiError.detail }\n : { kind: \"rate-limited\", message: apiError.detail, retryAfterMs: apiError.retryAfterMs };\n case \"invalid-input\":\n return apiError.fieldErrors === undefined\n ? { kind: \"invalid-input\", message: apiError.detail }\n : { kind: \"invalid-input\", message: apiError.detail, fieldErrors: apiError.fieldErrors };\n case \"upstream\":\n return apiError.status === undefined\n ? { kind: \"upstream\", message: apiError.detail }\n : { kind: \"upstream\", message: apiError.detail, status: apiError.status };\n }\n}\n","/**\n * Tool: `create_api_key` — mint a new API key.\n *\n * The full secret is returned ONCE in the `full_key` field. After that\n * the server stores only the hash. Display it to the user and tell\n * them to save it; we cannot recover it.\n */\n\nimport { z } from \"zod\";\n\nimport type { ApiKeyCreatedResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst CreateApiKeyInputShape = {\n name: z\n .string()\n .min(1)\n .max(100)\n .describe(\"Human-readable label (e.g. `ci-pipeline`, `claude-mcp`).\"),\n // Accept BOTH `null` and omit for \"no expiry\" — many JSON clients\n // (including a hand-written curl) send `null` explicitly; rejecting\n // it forces awkward request-body construction on the caller side.\n // Either form maps to API-side `expires_at: null` (the only shape\n // the API accepts for \"no expiry\").\n expires_at: z\n .string()\n .datetime()\n .nullable()\n .optional()\n .describe(\n \"Optional ISO-8601 expiry timestamp. Omit or send `null` for a non-expiring key (operator can revoke any time).\"\n ),\n} as const;\ntype CreateApiKeyInputShape = typeof CreateApiKeyInputShape;\n\nexport type CreateApiKeyOutput = ApiKeyCreatedResponse;\n\nexport const createApiKeyTool: Tool<CreateApiKeyInputShape, CreateApiKeyOutput> = {\n name: \"create_api_key\",\n description:\n \"Mint a new API key for the caller's organization. The full secret is returned in `full_key` THIS ONE TIME ONLY — show it to the user and instruct them to store it; the server keeps only a hash and cannot reveal it again.\",\n annotations: {\n title: \"Create API Key\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n inputSchema: z.object(CreateApiKeyInputShape),\n handler: async (input, ctx): Promise<Result<CreateApiKeyOutput, ToolError>> => {\n const body = {\n name: input.name,\n // Forward both `null` and omitted as omitted to the gateway DTO\n // (gateway treats absent field as \"no expiry\"). `null` would\n // collide with the gateway's `Pick<CreateApiKeyRequest, ...>`\n // type that does not include `null`.\n ...(input.expires_at !== undefined && input.expires_at !== null\n ? { expires_at: input.expires_at }\n : {}),\n };\n const result = await ctx.api.createApiKey(body);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `get_account` — wraps `GET /api/v1/account`.\n *\n * Returns the calling principal's organization (id, name, owner_id,\n * is_active, created_at). The API endpoint returns the *organization*\n * scope of the API key, not a user record — there is no separate\n * \"current user\" endpoint in v1. Agents typically call this first to\n * confirm they're authenticated and to capture the org id.\n */\n\nimport { z } from \"zod\";\n\nimport type { OrgResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst GetAccountInputShape = {} as const;\ntype GetAccountInputShape = typeof GetAccountInputShape;\n\nexport type GetAccountOutput = OrgResponse;\n\nexport const getAccountTool: Tool<GetAccountInputShape, GetAccountOutput> = {\n name: \"get_account\",\n description:\n \"Get the organization owning the current API key (id, name, owner_id, is_active, created_at). Use this to confirm authentication and capture the org context for follow-up tool calls.\",\n annotations: {\n title: \"Get Account\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(GetAccountInputShape),\n handler: async (_input, ctx): Promise<Result<GetAccountOutput, ToolError>> => {\n const result = await ctx.api.getAccount();\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `invite_user` — send an invite email to add a new member.\n */\n\nimport { z } from \"zod\";\n\nimport type { UserResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst InviteUserInputShape = {\n email: z.string().email().describe(\"Email of the person to invite. They get a signup link.\"),\n role_id: z\n .string()\n .uuid()\n .describe(\"UUID of the role to assign on accept. Get UUIDs from `list_org_roles`.\"),\n name: z.string().min(1).optional().describe(\"Optional display name for the invitee.\"),\n} as const;\ntype InviteUserInputShape = typeof InviteUserInputShape;\n\nexport type InviteUserOutput = UserResponse;\n\nexport const inviteUserTool: Tool<InviteUserInputShape, InviteUserOutput> = {\n name: \"invite_user\",\n description:\n \"Send an invitation email so a new person can join the caller's organization with a chosen role. Returns the pending member record.\",\n annotations: {\n title: \"Invite User\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n inputSchema: z.object(InviteUserInputShape),\n handler: async (input, ctx): Promise<Result<InviteUserOutput, ToolError>> => {\n const body: { email: string; role_id: string; name?: string } = {\n email: input.email,\n role_id: input.role_id,\n };\n if (input.name !== undefined) body.name = input.name;\n const result = await ctx.api.inviteUser(body);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `list_api_keys` — list the organization's API keys (metadata\n * only; the secret values are never returned).\n */\n\nimport { z } from \"zod\";\n\nimport type { ApiKeyResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListApiKeysInputShape = {} as const;\ntype ListApiKeysInputShape = typeof ListApiKeysInputShape;\n\nexport interface ListApiKeysOutput {\n readonly items: readonly ApiKeyResponse[];\n readonly total: number;\n}\n\nexport const listApiKeysTool: Tool<ListApiKeysInputShape, ListApiKeysOutput> = {\n name: \"list_api_keys\",\n description:\n \"List the organization's API keys: id, key prefix (first 8 chars of the secret), display name, expiry, created_at. The full secret is NEVER returned by this endpoint — only the prefix.\",\n annotations: {\n title: \"List Api Keys\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListApiKeysInputShape),\n handler: async (_input, ctx): Promise<Result<ListApiKeysOutput, ToolError>> => {\n const result = await ctx.api.listApiKeys();\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ items: result.value, total: result.value.length });\n },\n};\n","/**\n * Tool: `list_org_roles` — every role defined for the organization\n * (system + custom), with the permission set each grants.\n */\n\nimport { z } from \"zod\";\n\nimport type { RoleResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListOrgRolesInputShape = {} as const;\ntype ListOrgRolesInputShape = typeof ListOrgRolesInputShape;\n\nexport interface ListOrgRolesOutput {\n readonly items: readonly RoleResponse[];\n readonly total: number;\n}\n\nexport const listOrgRolesTool: Tool<ListOrgRolesInputShape, ListOrgRolesOutput> = {\n name: \"list_org_roles\",\n description:\n \"List the roles defined for the organization — built-in (owner, admin, member) plus any custom roles, with each role's permission set.\",\n annotations: {\n title: \"List Organization Roles\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListOrgRolesInputShape),\n handler: async (_input, ctx): Promise<Result<ListOrgRolesOutput, ToolError>> => {\n const result = await ctx.api.listOrgRoles();\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ items: result.value, total: result.value.length });\n },\n};\n","/**\n * Tool: `list_org_users` — list members of the caller's organization\n * with their role and ownership flag.\n */\n\nimport { z } from \"zod\";\n\nimport type { UserResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListOrgUsersInputShape = {} as const;\ntype ListOrgUsersInputShape = typeof ListOrgUsersInputShape;\n\nexport interface ListOrgUsersOutput {\n readonly items: readonly UserResponse[];\n readonly total: number;\n}\n\nexport const listOrgUsersTool: Tool<ListOrgUsersInputShape, ListOrgUsersOutput> = {\n name: \"list_org_users\",\n description:\n \"List every member of the caller's organization with their role, ownership flag, and join date.\",\n annotations: {\n title: \"List Organization Members\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListOrgUsersInputShape),\n handler: async (_input, ctx): Promise<Result<ListOrgUsersOutput, ToolError>> => {\n const result = await ctx.api.listOrgUsers();\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ items: result.value, total: result.value.length });\n },\n};\n","/**\n * Tool: `remove_user` — revoke a member's access to the organization.\n *\n * Destructive: the user loses access immediately.\n */\n\nimport { z } from \"zod\";\n\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst RemoveUserInputShape = {\n user_id: z.string().uuid().describe(\"UUID of the member to remove.\"),\n} as const;\ntype RemoveUserInputShape = typeof RemoveUserInputShape;\n\nexport interface RemoveUserOutput {\n readonly removed: true;\n}\n\nexport const removeUserTool: Tool<RemoveUserInputShape, RemoveUserOutput> = {\n name: \"remove_user\",\n description:\n \"Revoke a member's access to the organization. The user is signed out and any active API keys they created remain unless revoked separately. CANNOT remove the owner — use `transfer_ownership` first.\",\n annotations: {\n title: \"Remove User\",\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(RemoveUserInputShape),\n handler: async (input, ctx): Promise<Result<RemoveUserOutput, ToolError>> => {\n const result = await ctx.api.removeUser(input.user_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ removed: true });\n },\n};\n","/**\n * Tool: `revoke_api_key` — invalidate an API key immediately.\n *\n * Destructive: any in-flight requests using the key will fail 401 on\n * the next call. Cannot be undone.\n */\n\nimport { z } from \"zod\";\n\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst RevokeApiKeyInputShape = {\n key_id: z.string().uuid().describe(\"UUID of the key to revoke (from `list_api_keys`).\"),\n} as const;\ntype RevokeApiKeyInputShape = typeof RevokeApiKeyInputShape;\n\nexport interface RevokeApiKeyOutput {\n readonly revoked: true;\n}\n\nexport const revokeApiKeyTool: Tool<RevokeApiKeyInputShape, RevokeApiKeyOutput> = {\n name: \"revoke_api_key\",\n description:\n \"Permanently invalidate an API key. Any subsequent request using it returns 401. Cannot be undone — the user would have to `create_api_key` again.\",\n annotations: {\n title: \"Revoke API Key\",\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(RevokeApiKeyInputShape),\n handler: async (input, ctx): Promise<Result<RevokeApiKeyOutput, ToolError>> => {\n const result = await ctx.api.revokeApiKey(input.key_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ revoked: true });\n },\n};\n","/**\n * Tool: `transfer_ownership` — hand the organization owner role to\n * another member.\n *\n * One-way: the previous owner becomes a regular member.\n */\n\nimport { z } from \"zod\";\n\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst TransferOwnershipInputShape = {\n user_id: z.string().uuid().describe(\"UUID of the existing member to become the new owner.\"),\n} as const;\ntype TransferOwnershipInputShape = typeof TransferOwnershipInputShape;\n\nexport interface TransferOwnershipOutput {\n readonly transferred: true;\n}\n\nexport const transferOwnershipTool: Tool<TransferOwnershipInputShape, TransferOwnershipOutput> = {\n name: \"transfer_ownership\",\n description:\n \"Hand the organization owner role to another existing member. ONE-WAY: the previous owner becomes a regular member afterwards. Require explicit confirmation from the user.\",\n annotations: {\n title: \"Transfer Organization Ownership\",\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: false,\n openWorldHint: false,\n },\n inputSchema: z.object(TransferOwnershipInputShape),\n handler: async (input, ctx): Promise<Result<TransferOwnershipOutput, ToolError>> => {\n const result = await ctx.api.transferOwnership(input.user_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ transferred: true });\n },\n};\n","/**\n * Tool: `update_org` — rename the caller's organization or patch its\n * settings JSON blob.\n */\n\nimport { z } from \"zod\";\n\nimport type { OrgResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst UpdateOrgInputShape = {\n name: z.string().min(1).max(200).optional().describe(\"New organization display name.\"),\n settings: z\n .record(z.unknown())\n .optional()\n .describe(\"Replacement settings object. Fields not supplied are left unchanged.\"),\n} as const;\ntype UpdateOrgInputShape = typeof UpdateOrgInputShape;\n\nexport type UpdateOrgOutput = OrgResponse;\n\nexport const updateOrgTool: Tool<UpdateOrgInputShape, UpdateOrgOutput> = {\n name: \"update_org\",\n description:\n \"Update the caller's organization — display name and/or settings object. Only supplied fields are touched.\",\n annotations: {\n title: \"Update Organization\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(UpdateOrgInputShape),\n handler: async (input, ctx): Promise<Result<UpdateOrgOutput, ToolError>> => {\n const body = {\n ...(input.name !== undefined ? { name: input.name } : {}),\n ...(input.settings !== undefined ? { settings: input.settings } : {}),\n };\n const result = await ctx.api.updateOrg(body);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `update_user_role` — change a member's role.\n */\n\nimport { z } from \"zod\";\n\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst UpdateUserRoleInputShape = {\n user_id: z.string().uuid().describe(\"UUID of the member to update.\"),\n role_id: z.string().uuid().describe(\"UUID of the new role (see `list_org_roles`).\"),\n} as const;\ntype UpdateUserRoleInputShape = typeof UpdateUserRoleInputShape;\n\nexport interface UpdateUserRoleOutput {\n readonly updated: true;\n}\n\nexport const updateUserRoleTool: Tool<UpdateUserRoleInputShape, UpdateUserRoleOutput> = {\n name: \"update_user_role\",\n description:\n \"Change an organization member's role. The owner role can only be transferred via `transfer_ownership`. Returns `{updated: true}` on success; refetch with `list_org_users` if you need the new role echoed.\",\n annotations: {\n title: \"Update User Role\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(UpdateUserRoleInputShape),\n handler: async (input, ctx): Promise<Result<UpdateUserRoleOutput, ToolError>> => {\n // API returns 204 No Content on success.\n const result = await ctx.api.updateUserRole(input.user_id, { role_id: input.role_id });\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ updated: true });\n },\n};\n","/**\n * Tool: `delete_alert_destination` — remove a notification channel.\n * The org stops receiving pings on this channel immediately.\n */\n\nimport { z } from \"zod\";\n\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst DeleteAlertDestinationInputShape = {\n destination_id: z.string().uuid().describe(\"Destination UUID.\"),\n} as const;\ntype DeleteAlertDestinationInputShape = typeof DeleteAlertDestinationInputShape;\n\nexport interface DeleteAlertDestinationOutput {\n readonly deleted: true;\n}\n\nexport const deleteAlertDestinationTool: Tool<\n DeleteAlertDestinationInputShape,\n DeleteAlertDestinationOutput\n> = {\n name: \"delete_alert_destination\",\n description:\n \"Remove an alert-notification destination. The org stops receiving pings on this channel immediately; campaign-level overrides referencing it are pruned.\",\n annotations: {\n title: \"Delete Alert Destination\",\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(DeleteAlertDestinationInputShape),\n handler: async (input, ctx): Promise<Result<DeleteAlertDestinationOutput, ToolError>> => {\n const result = await ctx.api.deleteAlertDestination(input.destination_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ deleted: true });\n },\n};\n","/**\n * Tool: `get_campaign_alert_overrides` — per-campaign override of\n * which destinations receive its alerts (and a mute toggle).\n */\n\nimport { z } from \"zod\";\n\nimport type { CampaignOverridesResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst GetCampaignAlertOverridesInputShape = {\n campaign_id: z.string().uuid().describe(\"Campaign UUID.\"),\n} as const;\ntype GetCampaignAlertOverridesInputShape = typeof GetCampaignAlertOverridesInputShape;\n\nexport type GetCampaignAlertOverridesOutput = CampaignOverridesResponse;\n\nexport const getCampaignAlertOverridesTool: Tool<\n GetCampaignAlertOverridesInputShape,\n GetCampaignAlertOverridesOutput\n> = {\n name: \"get_campaign_alert_overrides\",\n description:\n \"Get the per-campaign override of which alert destinations receive its alerts. `mode` is one of `inherit` (use org defaults), `include` (use the listed destinations), or `exclude` (use everything EXCEPT the listed destinations).\",\n annotations: {\n title: \"Get Campaign Alert Overrides\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(GetCampaignAlertOverridesInputShape),\n handler: async (input, ctx): Promise<Result<GetCampaignAlertOverridesOutput, ToolError>> => {\n const result = await ctx.api.getCampaignAlertOverrides(input.campaign_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `list_alert_destinations` — channels (Slack / Telegram /\n * Email / Webhook) the org has wired up to receive alert pings.\n */\n\nimport { z } from \"zod\";\n\nimport type { AlertNotificationDestinationResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListAlertDestinationsInputShape = {} as const;\ntype ListAlertDestinationsInputShape = typeof ListAlertDestinationsInputShape;\n\nexport interface ListAlertDestinationsOutput {\n readonly items: readonly AlertNotificationDestinationResponse[];\n readonly total: number;\n}\n\nexport const listAlertDestinationsTool: Tool<\n ListAlertDestinationsInputShape,\n ListAlertDestinationsOutput\n> = {\n name: \"list_alert_destinations\",\n description:\n \"List configured alert-notification destinations (channels): Slack workspaces, Telegram chats, email lists, generic webhooks. Each entry has id, kind, display name, version, and creation timestamp.\",\n annotations: {\n title: \"List Alert Destinations\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListAlertDestinationsInputShape),\n handler: async (_input, ctx): Promise<Result<ListAlertDestinationsOutput, ToolError>> => {\n const result = await ctx.api.listAlertDestinations();\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ items: result.value, total: result.value.length });\n },\n};\n","/**\n * Tool: `set_alert_destination_version` — switch a destination to a\n * different versioned config (e.g. swap Slack workspace after re-auth).\n *\n * API returns 204 No Content. The tool surfaces `{ updated: true }`\n * so JSON output stays a plain object; fetch the updated destination\n * via `list_alert_destinations` if the new state is needed.\n */\n\nimport { z } from \"zod\";\n\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst SetAlertDestinationVersionInputShape = {\n destination_id: z.string().uuid().describe(\"Destination UUID.\"),\n version: z\n .enum([\"public\", \"internal\"])\n .describe(\n \"Which version of the scan-report link to embed in alert messages: `public` (anonymous, no auth) or `internal` (requires UI login).\"\n ),\n} as const;\ntype SetAlertDestinationVersionInputShape = typeof SetAlertDestinationVersionInputShape;\n\nexport interface SetAlertDestinationVersionOutput {\n readonly updated: true;\n}\n\nexport const setAlertDestinationVersionTool: Tool<\n SetAlertDestinationVersionInputShape,\n SetAlertDestinationVersionOutput\n> = {\n name: \"set_alert_destination_version\",\n description:\n \"Switch a destination to a specific versioned config — used after re-authorizing a Slack workspace, rotating a Telegram bot token, etc. The new version must already exist in the destination's history. The API returns no body on success; this tool reports `{ updated: true }`. Use `list_alert_destinations` to read the new state if needed.\",\n annotations: {\n title: \"Set Destination Version\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(SetAlertDestinationVersionInputShape),\n handler: async (input, ctx): Promise<Result<SetAlertDestinationVersionOutput, ToolError>> => {\n const result = await ctx.api.setAlertDestinationVersion(input.destination_id, {\n version: input.version,\n });\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ updated: true });\n },\n};\n","/**\n * Tool: `set_campaign_alert_overrides` — REPLACE per-campaign\n * notification routing.\n */\n\nimport { z } from \"zod\";\n\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst SetCampaignAlertOverridesInputShape = {\n campaign_id: z.string().uuid().describe(\"Campaign UUID.\"),\n mode: z\n .enum([\"inherit\", \"include\", \"exclude\"])\n .describe(\n \"Routing mode: `inherit` (use org defaults), `include` (route ONLY to listed destinations), `exclude` (route everywhere EXCEPT listed).\"\n ),\n destination_ids: z\n .array(z.string().uuid())\n .max(50)\n .default([])\n .describe(\n \"Destination UUIDs the mode acts on. Required for `include`/`exclude`; ignored for `inherit`.\"\n ),\n} as const;\ntype SetCampaignAlertOverridesInputShape = typeof SetCampaignAlertOverridesInputShape;\n\nexport interface SetCampaignAlertOverridesOutput {\n readonly updated: true;\n}\n\nexport const setCampaignAlertOverridesTool: Tool<\n SetCampaignAlertOverridesInputShape,\n SetCampaignAlertOverridesOutput\n> = {\n name: \"set_campaign_alert_overrides\",\n description:\n \"REPLACE the per-campaign alert-routing override. `mode=inherit` falls back to org defaults; `mode=include` routes ONLY to the listed destinations; `mode=exclude` routes everywhere EXCEPT the listed destinations. To read the new state, follow up with `get_campaign_alert_overrides`.\",\n annotations: {\n title: \"Set Campaign Alert Overrides\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(SetCampaignAlertOverridesInputShape),\n handler: async (input, ctx): Promise<Result<SetCampaignAlertOverridesOutput, ToolError>> => {\n // API returns 204 No Content on success.\n const result = await ctx.api.setCampaignAlertOverrides(input.campaign_id, {\n mode: input.mode,\n destination_ids: input.destination_ids,\n });\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ updated: true });\n },\n};\n","/**\n * Tool: `get_alert_stats` — alert counts grouped by status.\n */\n\nimport { z } from \"zod\";\n\nimport type { AlertStatsResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst GetAlertStatsInputShape = {} as const;\ntype GetAlertStatsInputShape = typeof GetAlertStatsInputShape;\n\nexport type GetAlertStatsOutput = AlertStatsResponse;\n\nexport const getAlertStatsTool: Tool<GetAlertStatsInputShape, GetAlertStatsOutput> = {\n name: \"get_alert_stats\",\n description: \"Get alert counts grouped by status: open, ack, resolved, ignored, total.\",\n annotations: {\n title: \"Get Alert Stats\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(GetAlertStatsInputShape),\n handler: async (_input, ctx): Promise<Result<GetAlertStatsOutput, ToolError>> => {\n const result = await ctx.api.getAlertStats();\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `list_alerts` — paginated alert list with filters by campaign and status.\n */\n\nimport { z } from \"zod\";\n\nimport type { AlertResponse, PaginatedResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListAlertsInputShape = {\n campaign_id: z.string().uuid().optional().describe(\"Filter to one campaign's alerts.\"),\n status: z\n .enum([\"open\", \"ack\", \"resolved\", \"ignored\"])\n .optional()\n .describe(\"Filter by alert status.\"),\n page: z.number().int().min(1).max(500).default(1).describe(\"1-indexed page number.\"),\n limit: z.number().int().min(1).max(200).default(50).describe(\"Page size.\"),\n} as const;\ntype ListAlertsInputShape = typeof ListAlertsInputShape;\n\nexport type ListAlertsOutput = PaginatedResponse<AlertResponse>;\n\nexport const listAlertsTool: Tool<ListAlertsInputShape, ListAlertsOutput> = {\n name: \"list_alerts\",\n description:\n \"List violation alerts (one per scan + violating-tag combo) with offer URL, tag, country, status, scan back-reference.\",\n annotations: {\n title: \"List Alerts\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListAlertsInputShape),\n handler: async (input, ctx): Promise<Result<ListAlertsOutput, ToolError>> => {\n const filters = {\n page: input.page,\n limit: input.limit,\n ...(input.campaign_id !== undefined ? { campaign_id: input.campaign_id } : {}),\n ...(input.status !== undefined ? { status: input.status } : {}),\n };\n const result = await ctx.api.listAlerts(filters);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `update_alert_status` — move an alert through its lifecycle\n * (open → ack → resolved | ignored).\n */\n\nimport { z } from \"zod\";\n\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst UpdateAlertStatusInputShape = {\n alert_id: z.string().uuid().describe(\"Alert UUID.\"),\n status: z\n .enum([\"open\", \"acknowledged\", \"resolved\", \"dismissed\"])\n .describe(\"New status: open | acknowledged | resolved | dismissed.\"),\n} as const;\ntype UpdateAlertStatusInputShape = typeof UpdateAlertStatusInputShape;\n\nexport interface UpdateAlertStatusOutput {\n readonly updated: true;\n}\n\nexport const updateAlertStatusTool: Tool<UpdateAlertStatusInputShape, UpdateAlertStatusOutput> = {\n name: \"update_alert_status\",\n description:\n \"Update an alert's status in its lifecycle: open → acknowledged → resolved | dismissed. The API enforces valid transitions; an invalid one returns 422.\",\n annotations: {\n title: \"Update Alert Status\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(UpdateAlertStatusInputShape),\n handler: async (input, ctx): Promise<Result<UpdateAlertStatusOutput, ToolError>> => {\n const result = await ctx.api.updateAlertStatus(input.alert_id, { status: input.status });\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ updated: true });\n },\n};\n","/**\n * Tool: `get_billing_summary` — credit balance, plan, period usage,\n * suspension state. Useful for agents before creating scans (cost) or\n * when troubleshooting \"why was my scan rejected\".\n */\n\nimport { z } from \"zod\";\n\nimport type { BillingSummaryResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst GetBillingSummaryInputShape = {} as const;\ntype GetBillingSummaryInputShape = typeof GetBillingSummaryInputShape;\n\nexport type GetBillingSummaryOutput = BillingSummaryResponse;\n\nexport const getBillingSummaryTool: Tool<GetBillingSummaryInputShape, GetBillingSummaryOutput> = {\n name: \"get_billing_summary\",\n description:\n \"Get the organization's billing snapshot: balance (in micros), current plan, period usage counters, suspension state, and whether new scans are accepted right now.\",\n annotations: {\n title: \"Get Billing Summary\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(GetBillingSummaryInputShape),\n handler: async (_input, ctx): Promise<Result<GetBillingSummaryOutput, ToolError>> => {\n const result = await ctx.api.getBillingSummary();\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `get_usage_summary` — one-liner aggregate over the current\n * billing period.\n */\n\nimport { z } from \"zod\";\n\nimport type { UsagePeriodSummaryResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst GetUsageSummaryInputShape = {} as const;\ntype GetUsageSummaryInputShape = typeof GetUsageSummaryInputShape;\n\nexport type GetUsageSummaryOutput = UsagePeriodSummaryResponse;\n\nexport const getUsageSummaryTool: Tool<GetUsageSummaryInputShape, GetUsageSummaryOutput> = {\n name: \"get_usage_summary\",\n description:\n \"Get a one-liner aggregate of usage for the current billing period: total cost (micros), check count, period start/end.\",\n annotations: {\n title: \"Get Usage Summary\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(GetUsageSummaryInputShape),\n handler: async (_input, ctx): Promise<Result<GetUsageSummaryOutput, ToolError>> => {\n const result = await ctx.api.getUsageSummary();\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `list_balance_history` — paginated ledger view of the\n * organization's credit movements (charges, refunds, top-ups).\n */\n\nimport { z } from \"zod\";\n\nimport type {\n BalanceTransactionResponse,\n PaginatedResponse,\n} from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListBalanceHistoryInputShape = {\n date_from: z.string().date().optional().describe(\"ISO date, inclusive.\"),\n date_to: z.string().date().optional().describe(\"ISO date, inclusive.\"),\n page: z.number().int().min(1).max(500).default(1).describe(\"1-indexed page.\"),\n limit: z.number().int().min(1).max(200).default(50).describe(\"Page size.\"),\n} as const;\ntype ListBalanceHistoryInputShape = typeof ListBalanceHistoryInputShape;\n\nexport type ListBalanceHistoryOutput = PaginatedResponse<BalanceTransactionResponse>;\n\nexport const listBalanceHistoryTool: Tool<ListBalanceHistoryInputShape, ListBalanceHistoryOutput> =\n {\n name: \"list_balance_history\",\n description:\n \"List ledger transactions (charges, refunds, top-ups, invoice settlements) on the organization's balance. Each row: type, amount in micros, description, timestamp.\",\n annotations: {\n title: \"List Balance History\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListBalanceHistoryInputShape),\n handler: async (input, ctx): Promise<Result<ListBalanceHistoryOutput, ToolError>> => {\n const filters = {\n page: input.page,\n limit: input.limit,\n ...(input.date_from !== undefined ? { date_from: input.date_from } : {}),\n ...(input.date_to !== undefined ? { date_to: input.date_to } : {}),\n };\n const result = await ctx.api.listBalanceHistory(filters);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n };\n","/**\n * Tool: `list_usage` — paginated per-scan usage / cost log.\n */\n\nimport { z } from \"zod\";\n\nimport type { PaginatedResponse, UsageResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListUsageInputShape = {\n date_from: z.string().date().optional().describe(\"ISO date (YYYY-MM-DD), inclusive.\"),\n date_to: z.string().date().optional().describe(\"ISO date (YYYY-MM-DD), inclusive.\"),\n scan_id: z.string().uuid().optional().describe(\"Filter to one scan's cost rows.\"),\n page: z.number().int().min(1).max(500).default(1).describe(\"1-indexed page.\"),\n limit: z.number().int().min(1).max(200).default(50).describe(\"Page size.\"),\n} as const;\ntype ListUsageInputShape = typeof ListUsageInputShape;\n\nexport type ListUsageOutput = PaginatedResponse<UsageResponse>;\n\nexport const listUsageTool: Tool<ListUsageInputShape, ListUsageOutput> = {\n name: \"list_usage\",\n description:\n \"List per-scan usage rows (cost in micros, kind, scan id, timestamp). Use to attribute cost to specific scans or campaigns.\",\n annotations: {\n title: \"List Usage\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListUsageInputShape),\n handler: async (input, ctx): Promise<Result<ListUsageOutput, ToolError>> => {\n const filters = {\n page: input.page,\n limit: input.limit,\n ...(input.date_from !== undefined ? { date_from: input.date_from } : {}),\n ...(input.date_to !== undefined ? { date_to: input.date_to } : {}),\n ...(input.scan_id !== undefined ? { scan_id: input.scan_id } : {}),\n };\n const result = await ctx.api.listUsage(filters);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `archive_campaign_group` — soft-delete the group AND every\n * campaign inside it.\n */\n\nimport { z } from \"zod\";\n\nimport type { GroupActionResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ArchiveCampaignGroupInputShape = {\n group_id: z.string().uuid().describe(\"Campaign group UUID.\"),\n} as const;\ntype ArchiveCampaignGroupInputShape = typeof ArchiveCampaignGroupInputShape;\n\n/**\n * API returns a `GroupActionResponse` action summary (campaigns\n * affected, pending scans cancelled, failed campaign ids), NOT the\n * group entity. Same shape as `run_campaign_group` /\n * `cancel_campaign_group`.\n */\nexport type ArchiveCampaignGroupOutput = GroupActionResponse;\n\nexport const archiveCampaignGroupTool: Tool<\n ArchiveCampaignGroupInputShape,\n ArchiveCampaignGroupOutput\n> = {\n name: \"archive_campaign_group\",\n description:\n \"Soft-delete the group AND every campaign in it. The default group cannot be archived; ask the user to move campaigns out first.\",\n annotations: {\n title: \"Archive Campaign Group\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ArchiveCampaignGroupInputShape),\n handler: async (input, ctx): Promise<Result<ArchiveCampaignGroupOutput, ToolError>> => {\n const result = await ctx.api.archiveCampaignGroup(input.group_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `cancel_campaign_group` — cancel every pending scan across\n * every campaign in the group.\n */\n\nimport { z } from \"zod\";\n\nimport type { GroupActionResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst CancelCampaignGroupInputShape = {\n group_id: z.string().uuid().describe(\"Campaign group UUID.\"),\n} as const;\ntype CancelCampaignGroupInputShape = typeof CancelCampaignGroupInputShape;\n\nexport type CancelCampaignGroupOutput = GroupActionResponse;\n\nexport const cancelCampaignGroupTool: Tool<\n CancelCampaignGroupInputShape,\n CancelCampaignGroupOutput\n> = {\n name: \"cancel_campaign_group\",\n description:\n \"Cancel every pending scan across every campaign in the group. Refunds credits for cancelled scans. Returns the total cancelled count.\",\n annotations: {\n title: \"Cancel Campaign Group\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(CancelCampaignGroupInputShape),\n handler: async (input, ctx): Promise<Result<CancelCampaignGroupOutput, ToolError>> => {\n const result = await ctx.api.cancelCampaignGroup(input.group_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `create_campaign_group` — create a new folder for grouping campaigns.\n *\n * Cheap — no scans queued.\n */\n\nimport { z } from \"zod\";\n\nimport type { CampaignGroupResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst CreateCampaignGroupInputShape = {\n name: z.string().min(1).max(200).describe(\"Display name (1-200 chars).\"),\n} as const;\ntype CreateCampaignGroupInputShape = typeof CreateCampaignGroupInputShape;\n\nexport type CreateCampaignGroupOutput = CampaignGroupResponse;\n\nexport const createCampaignGroupTool: Tool<\n CreateCampaignGroupInputShape,\n CreateCampaignGroupOutput\n> = {\n name: \"create_campaign_group\",\n description: \"Create a new campaign group (folder). Free operation, no scans queued.\",\n annotations: {\n title: \"Create Campaign Group\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n inputSchema: z.object(CreateCampaignGroupInputShape),\n handler: async (input, ctx): Promise<Result<CreateCampaignGroupOutput, ToolError>> => {\n const result = await ctx.api.createCampaignGroup({ name: input.name });\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `get_campaign_group` — one group by UUID.\n */\n\nimport { z } from \"zod\";\n\nimport type { CampaignGroupResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst GetCampaignGroupInputShape = {\n group_id: z.string().uuid().describe(\"Campaign group UUID.\"),\n} as const;\ntype GetCampaignGroupInputShape = typeof GetCampaignGroupInputShape;\n\nexport type GetCampaignGroupOutput = CampaignGroupResponse;\n\nexport const getCampaignGroupTool: Tool<GetCampaignGroupInputShape, GetCampaignGroupOutput> = {\n name: \"get_campaign_group\",\n description:\n \"Get one campaign group by UUID with default/archive/pause flags and campaign count.\",\n annotations: {\n title: \"Get Campaign Group\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(GetCampaignGroupInputShape),\n handler: async (input, ctx): Promise<Result<GetCampaignGroupOutput, ToolError>> => {\n const result = await ctx.api.getCampaignGroup(input.group_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `list_campaign_groups` — list campaign groups (not paginated).\n *\n * The `/api/v1/campaign-groups` endpoint returns a bare array. The\n * only documented filter is `archived` (default false). To agents we\n * expose just that.\n */\n\nimport { z } from \"zod\";\n\nimport type { CampaignGroupResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListCampaignGroupsInputShape = {\n archived: z\n .boolean()\n .optional()\n .describe(\"If true, list ONLY archived groups. Default: only active groups.\"),\n} as const;\ntype ListCampaignGroupsInputShape = typeof ListCampaignGroupsInputShape;\n\nexport interface ListCampaignGroupsOutput {\n readonly items: readonly CampaignGroupResponse[];\n}\n\nexport const listCampaignGroupsTool: Tool<ListCampaignGroupsInputShape, ListCampaignGroupsOutput> =\n {\n name: \"list_campaign_groups\",\n description:\n \"List campaign groups — folders that group related campaigns. Includes per-group campaign count. Not paginated; the org-scoped list is typically small (a few dozen groups max).\",\n annotations: {\n title: \"List Campaign Groups\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListCampaignGroupsInputShape),\n handler: async (input, ctx): Promise<Result<ListCampaignGroupsOutput, ToolError>> => {\n const filters = input.archived === undefined ? {} : { archived: input.archived };\n const result = await ctx.api.listCampaignGroups(filters);\n if (result.isErr()) return err(mapApiError(result.error));\n // Wrap the bare array in `{ items }` so tool output is a JSON\n // object — consistent with every other `list_*` tool's shape.\n return ok({ items: result.value });\n },\n };\n","/**\n * Tool: `pause_campaign_group_schedule` — stop scheduled runs of\n * every campaign in the group. Existing pending scans keep running.\n */\n\nimport { z } from \"zod\";\n\nimport type { CampaignGroupResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst PauseCampaignGroupScheduleInputShape = {\n group_id: z.string().uuid().describe(\"Campaign group UUID.\"),\n} as const;\ntype PauseCampaignGroupScheduleInputShape = typeof PauseCampaignGroupScheduleInputShape;\n\nexport type PauseCampaignGroupScheduleOutput = CampaignGroupResponse;\n\nexport const pauseCampaignGroupScheduleTool: Tool<\n PauseCampaignGroupScheduleInputShape,\n PauseCampaignGroupScheduleOutput\n> = {\n name: \"pause_campaign_group_schedule\",\n description:\n \"Pause the scheduler for EVERY campaign in the group. Already-pending scans complete; no new scheduled runs are produced until you `resume_campaign_group_schedule`.\",\n annotations: {\n title: \"Pause Group Schedule\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(PauseCampaignGroupScheduleInputShape),\n handler: async (input, ctx): Promise<Result<PauseCampaignGroupScheduleOutput, ToolError>> => {\n const result = await ctx.api.pauseCampaignGroupSchedule(input.group_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `resume_campaign_group_schedule` — re-enable the scheduler\n * for every campaign in the group.\n */\n\nimport { z } from \"zod\";\n\nimport type { CampaignGroupResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ResumeCampaignGroupScheduleInputShape = {\n group_id: z.string().uuid().describe(\"Campaign group UUID.\"),\n} as const;\ntype ResumeCampaignGroupScheduleInputShape = typeof ResumeCampaignGroupScheduleInputShape;\n\nexport type ResumeCampaignGroupScheduleOutput = CampaignGroupResponse;\n\nexport const resumeCampaignGroupScheduleTool: Tool<\n ResumeCampaignGroupScheduleInputShape,\n ResumeCampaignGroupScheduleOutput\n> = {\n name: \"resume_campaign_group_schedule\",\n description:\n \"Re-enable the scheduler for every campaign in the group. Inverse of `pause_campaign_group_schedule`.\",\n annotations: {\n title: \"Resume Group Schedule\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ResumeCampaignGroupScheduleInputShape),\n handler: async (input, ctx): Promise<Result<ResumeCampaignGroupScheduleOutput, ToolError>> => {\n const result = await ctx.api.resumeCampaignGroupSchedule(input.group_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `run_campaign_group` — fire an immediate run of every active\n * campaign in the group.\n */\n\nimport { z } from \"zod\";\n\nimport type { GroupActionResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst RunCampaignGroupInputShape = {\n group_id: z.string().uuid().describe(\"Campaign group UUID.\"),\n} as const;\ntype RunCampaignGroupInputShape = typeof RunCampaignGroupInputShape;\n\nexport type RunCampaignGroupOutput = GroupActionResponse;\n\nexport const runCampaignGroupTool: Tool<RunCampaignGroupInputShape, RunCampaignGroupOutput> = {\n name: \"run_campaign_group\",\n description:\n \"Fire an immediate run of every active (non-archived, non-paused) campaign in the group. Returns aggregate stats: how many campaigns triggered, the per-campaign run UUIDs, and any per-campaign failures.\",\n annotations: {\n title: \"Run Campaign Group\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n inputSchema: z.object(RunCampaignGroupInputShape),\n handler: async (input, ctx): Promise<Result<RunCampaignGroupOutput, ToolError>> => {\n const result = await ctx.api.runCampaignGroup(input.group_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `unarchive_campaign_group` — restore an archived group.\n */\n\nimport { z } from \"zod\";\n\nimport type { GroupActionResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst UnarchiveCampaignGroupInputShape = {\n group_id: z.string().uuid().describe(\"Campaign group UUID.\"),\n} as const;\ntype UnarchiveCampaignGroupInputShape = typeof UnarchiveCampaignGroupInputShape;\n\n/**\n * API returns a `GroupActionResponse` action summary (typically with\n * `cancelled_count: 0` because unarchive does not touch pending scans).\n */\nexport type UnarchiveCampaignGroupOutput = GroupActionResponse;\n\nexport const unarchiveCampaignGroupTool: Tool<\n UnarchiveCampaignGroupInputShape,\n UnarchiveCampaignGroupOutput\n> = {\n name: \"unarchive_campaign_group\",\n description: \"Restore an archived campaign group and re-expose its campaigns in default lists.\",\n annotations: {\n title: \"Unarchive Campaign Group\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(UnarchiveCampaignGroupInputShape),\n handler: async (input, ctx): Promise<Result<UnarchiveCampaignGroupOutput, ToolError>> => {\n const result = await ctx.api.unarchiveCampaignGroup(input.group_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `update_campaign_group` — rename or pause a group's scheduler.\n *\n * Pausing a group pauses every campaign inside it.\n */\n\nimport { z } from \"zod\";\n\nimport type { CampaignGroupResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst UpdateCampaignGroupInputShape = {\n group_id: z.string().uuid().describe(\"Group UUID to update.\"),\n name: z.string().min(1).max(200).optional().describe(\"New display name.\"),\n schedule_paused: z\n .boolean()\n .optional()\n .describe(\"Pause/resume the scheduler for every campaign in this group.\"),\n} as const;\ntype UpdateCampaignGroupInputShape = typeof UpdateCampaignGroupInputShape;\n\nexport type UpdateCampaignGroupOutput = CampaignGroupResponse;\n\nexport const updateCampaignGroupTool: Tool<\n UpdateCampaignGroupInputShape,\n UpdateCampaignGroupOutput\n> = {\n name: \"update_campaign_group\",\n description:\n \"Update a campaign group: rename, or pause/resume the scheduler (the pause cascades to every campaign in the group).\",\n annotations: {\n title: \"Update Campaign Group\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(UpdateCampaignGroupInputShape),\n handler: async (input, ctx): Promise<Result<UpdateCampaignGroupOutput, ToolError>> => {\n const body = {\n ...(input.name !== undefined ? { name: input.name } : {}),\n ...(input.schedule_paused !== undefined ? { schedule_paused: input.schedule_paused } : {}),\n };\n const result = await ctx.api.updateCampaignGroup(input.group_id, body);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `archive_campaign` — soft-delete a campaign.\n *\n * Wraps `POST /api/v1/campaigns/{id}/archive`. The campaign is hidden\n * from default lists; existing scan history is preserved.\n */\n\nimport { z } from \"zod\";\n\nimport type { CampaignResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ArchiveCampaignInputShape = {\n campaign_id: z.string().uuid().describe(\"Campaign UUID to archive.\"),\n} as const;\ntype ArchiveCampaignInputShape = typeof ArchiveCampaignInputShape;\n\nexport type ArchiveCampaignOutput = CampaignResponse;\n\nexport const archiveCampaignTool: Tool<ArchiveCampaignInputShape, ArchiveCampaignOutput> = {\n name: \"archive_campaign\",\n description:\n \"Soft-delete (archive) a campaign. Removes it from default lists and stops the scheduler; previously-collected scans are preserved.\",\n annotations: {\n title: \"Archive Campaign\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ArchiveCampaignInputShape),\n handler: async (input, ctx): Promise<Result<ArchiveCampaignOutput, ToolError>> => {\n const result = await ctx.api.archiveCampaign(input.campaign_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `cancel_campaign` — cancel every pending scan across all\n * unfinished runs of a campaign. Pending scans get refunded.\n */\n\nimport { z } from \"zod\";\n\nimport type { CancelPendingResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst CancelCampaignInputShape = {\n campaign_id: z.string().uuid().describe(\"Campaign UUID.\"),\n} as const;\ntype CancelCampaignInputShape = typeof CancelCampaignInputShape;\n\nexport type CancelCampaignOutput = CancelPendingResponse;\n\nexport const cancelCampaignTool: Tool<CancelCampaignInputShape, CancelCampaignOutput> = {\n name: \"cancel_campaign\",\n description:\n \"Cancel every pending scan across all unfinished runs of a campaign. Running scans complete normally; pending scans are marked cancelled and credits refunded. Returns count of cancelled scans.\",\n annotations: {\n title: \"Cancel Campaign\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(CancelCampaignInputShape),\n handler: async (input, ctx): Promise<Result<CancelCampaignOutput, ToolError>> => {\n const result = await ctx.api.cancelCampaign(input.campaign_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `create_campaign` — create a campaign with scheduled scans.\n *\n * Wraps `POST /api/v1/campaigns`. **A campaign is a recurring template;**\n * actual scans are queued by the scheduler each run. Cost is per-run,\n * not per-create.\n */\n\nimport { z } from \"zod\";\n\nimport type { CampaignResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst CreateCampaignInputShape = {\n name: z.string().min(1).max(200).describe(\"Display name (1-200 chars).\"),\n campaign_type: z\n .enum([\"url\", \"ad_tag\"])\n .describe(\"`url` or `ad_tag` — must match the target field below.\"),\n url: z.string().url().optional().describe(\"Target URL (required if campaign_type=url).\"),\n ad_tag: z.string().optional().describe(\"Ad-tag HTML/JS (required if campaign_type=ad_tag).\"),\n country_codes: z\n .array(z.string().length(2))\n .min(1)\n .describe(\"ISO 3166-1 alpha-2 codes — one scan per country per run.\"),\n group_id: z\n .string()\n .uuid()\n .optional()\n .describe(\"Parent group UUID; defaults to the org's default group.\"),\n emulator_categories: z\n .array(z.string())\n .optional()\n .describe(\"Categories of device profiles to rotate through. Default: all available.\"),\n labels: z\n .record(z.string())\n .optional()\n .describe(\"Arbitrary metadata applied to every queued scan.\"),\n policy_set_id: z\n .string()\n .uuid()\n .optional()\n .describe(\"Policy set to evaluate every scan against.\"),\n schedule_enabled: z\n .boolean()\n .optional()\n .describe(\"If true, the scheduler runs immediately. Default: false (manual run).\"),\n} as const;\ntype CreateCampaignInputShape = typeof CreateCampaignInputShape;\n\nexport type CreateCampaignOutput = CampaignResponse;\n\nexport const createCampaignTool: Tool<CreateCampaignInputShape, CreateCampaignOutput> = {\n name: \"create_campaign\",\n description:\n \"Create a recurring scan campaign (template). The schedule produces N scans per run where N = number of countries times number of device profiles. Scans cost credits when they run, not when the campaign is created.\",\n annotations: {\n title: \"Create Campaign\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n inputSchema: z.object(CreateCampaignInputShape),\n handler: async (input, ctx): Promise<Result<CreateCampaignOutput, ToolError>> => {\n const body = {\n name: input.name,\n campaign_type: input.campaign_type,\n country_codes: input.country_codes,\n ...(input.url !== undefined ? { url: input.url } : {}),\n ...(input.ad_tag !== undefined ? { ad_tag: input.ad_tag } : {}),\n ...(input.group_id !== undefined ? { group_id: input.group_id } : {}),\n ...(input.emulator_categories !== undefined\n ? { emulator_categories: input.emulator_categories }\n : {}),\n ...(input.labels !== undefined ? { labels: input.labels } : {}),\n ...(input.policy_set_id !== undefined ? { policy_set_id: input.policy_set_id } : {}),\n ...(input.schedule_enabled !== undefined ? { schedule_enabled: input.schedule_enabled } : {}),\n };\n const result = await ctx.api.createCampaign(body);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `get_campaign` — one campaign by UUID.\n */\n\nimport { z } from \"zod\";\n\nimport type { CampaignResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst GetCampaignInputShape = {\n campaign_id: z.string().uuid().describe(\"Campaign UUID.\"),\n} as const;\ntype GetCampaignInputShape = typeof GetCampaignInputShape;\n\nexport type GetCampaignOutput = CampaignResponse;\n\nexport const getCampaignTool: Tool<GetCampaignInputShape, GetCampaignOutput> = {\n name: \"get_campaign\",\n description:\n \"Get one campaign by UUID: name, type, target URL/ad-tag, countries, schedule status, archive status, parent group.\",\n annotations: {\n title: \"Get Campaign\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(GetCampaignInputShape),\n handler: async (input, ctx): Promise<Result<GetCampaignOutput, ToolError>> => {\n const result = await ctx.api.getCampaign(input.campaign_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `list_campaign_runs` — paginated runs of ONE campaign with\n * progress counters. Use when you have a campaign-id and want its\n * history; for a global list across campaigns use `list_runs`.\n */\n\nimport { z } from \"zod\";\n\nimport type { PaginatedResponse, RunResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListCampaignRunsInputShape = {\n campaign_id: z.string().uuid().describe(\"Campaign UUID.\"),\n page: z.number().int().min(1).max(500).default(1).describe(\"1-indexed page.\"),\n limit: z.number().int().min(1).max(200).default(50).describe(\"Page size.\"),\n} as const;\ntype ListCampaignRunsInputShape = typeof ListCampaignRunsInputShape;\n\nexport type ListCampaignRunsOutput = PaginatedResponse<RunResponse>;\n\nexport const listCampaignRunsTool: Tool<ListCampaignRunsInputShape, ListCampaignRunsOutput> = {\n name: \"list_campaign_runs\",\n description:\n \"List every run (scheduled execution) of one campaign, paginated, with per-run counters.\",\n annotations: {\n title: \"List Campaign Runs\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListCampaignRunsInputShape),\n handler: async (input, ctx): Promise<Result<ListCampaignRunsOutput, ToolError>> => {\n const result = await ctx.api.listCampaignRuns(input.campaign_id, {\n page: input.page,\n limit: input.limit,\n });\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `list_campaigns` — paginated list of campaigns.\n *\n * Wraps `GET /api/v1/campaigns`.\n */\n\nimport { z } from \"zod\";\n\nimport type { CampaignResponse, PaginatedResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListCampaignsInputShape = {\n group_id: z.string().uuid().optional().describe(\"Optional campaign-group UUID to filter by.\"),\n page: z.number().int().min(1).max(500).default(1).describe(\"1-indexed page number.\"),\n limit: z.number().int().min(1).max(200).default(50).describe(\"Page size (1-200).\"),\n} as const;\ntype ListCampaignsInputShape = typeof ListCampaignsInputShape;\n\nexport type ListCampaignsOutput = PaginatedResponse<CampaignResponse>;\n\nexport const listCampaignsTool: Tool<ListCampaignsInputShape, ListCampaignsOutput> = {\n name: \"list_campaigns\",\n description:\n \"List campaigns for the caller's organization, optionally filtered by group, paginated.\",\n annotations: {\n title: \"List Campaigns\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListCampaignsInputShape),\n handler: async (input, ctx): Promise<Result<ListCampaignsOutput, ToolError>> => {\n const filters = {\n page: input.page,\n limit: input.limit,\n ...(input.group_id !== undefined ? { group_id: input.group_id } : {}),\n };\n const result = await ctx.api.listCampaigns(filters);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `run_campaign` — trigger a single immediate run of a campaign\n * (in addition to whatever its schedule does).\n */\n\nimport { z } from \"zod\";\n\nimport type { RunResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst RunCampaignInputShape = {\n campaign_id: z.string().uuid().describe(\"Campaign UUID to run now.\"),\n} as const;\ntype RunCampaignInputShape = typeof RunCampaignInputShape;\n\nexport type RunCampaignOutput = RunResponse;\n\nexport const runCampaignTool: Tool<RunCampaignInputShape, RunCampaignOutput> = {\n name: \"run_campaign\",\n description:\n \"Trigger an immediate, ad-hoc run of a campaign. Costs N credits where N = number of countries × number of emulators in the campaign config. Returns the new run with progress counters (total / completed / failed / partial / cancelled); track further progress via `get_run`.\",\n annotations: {\n title: \"Run Campaign Now\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n inputSchema: z.object(RunCampaignInputShape),\n handler: async (input, ctx): Promise<Result<RunCampaignOutput, ToolError>> => {\n const result = await ctx.api.runCampaign(input.campaign_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `unarchive_campaign` — restore an archived campaign so it\n * appears in default lists and (if `schedule_enabled`) starts running\n * again.\n */\n\nimport { z } from \"zod\";\n\nimport type { CampaignResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst UnarchiveCampaignInputShape = {\n campaign_id: z.string().uuid().describe(\"Campaign UUID.\"),\n} as const;\ntype UnarchiveCampaignInputShape = typeof UnarchiveCampaignInputShape;\n\nexport type UnarchiveCampaignOutput = CampaignResponse;\n\nexport const unarchiveCampaignTool: Tool<UnarchiveCampaignInputShape, UnarchiveCampaignOutput> = {\n name: \"unarchive_campaign\",\n description:\n \"Restore an archived campaign. Inverse of `archive_campaign`. The campaign re-appears in default lists; if `schedule_enabled` was true, the scheduler resumes producing runs.\",\n annotations: {\n title: \"Unarchive Campaign\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(UnarchiveCampaignInputShape),\n handler: async (input, ctx): Promise<Result<UnarchiveCampaignOutput, ToolError>> => {\n const result = await ctx.api.unarchiveCampaign(input.campaign_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `update_campaign` — patch one campaign.\n *\n * Wraps `PATCH /api/v1/campaigns/{id}`. Only fields explicitly supplied\n * are updated. To clear `policy_set_id`, pass `null`.\n */\n\nimport { z } from \"zod\";\n\nimport type { CampaignResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst UpdateCampaignInputShape = {\n campaign_id: z.string().uuid().describe(\"Campaign UUID to update.\"),\n name: z.string().min(1).max(200).optional().describe(\"New display name.\"),\n country_codes: z.array(z.string().length(2)).optional().describe(\"Replace the country list.\"),\n labels: z.record(z.string()).optional().describe(\"Replace the label map.\"),\n policy_set_id: z\n .string()\n .uuid()\n .nullable()\n .optional()\n .describe(\"New policy set UUID; pass null to clear.\"),\n schedule_enabled: z.boolean().optional().describe(\"Pause / resume the scheduler.\"),\n} as const;\ntype UpdateCampaignInputShape = typeof UpdateCampaignInputShape;\n\nexport type UpdateCampaignOutput = CampaignResponse;\n\nexport const updateCampaignTool: Tool<UpdateCampaignInputShape, UpdateCampaignOutput> = {\n name: \"update_campaign\",\n description:\n \"Update one or more fields of a campaign. Fields not supplied are left unchanged. `policy_set_id` accepts null to clear the binding.\",\n annotations: {\n title: \"Update Campaign\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(UpdateCampaignInputShape),\n handler: async (input, ctx): Promise<Result<UpdateCampaignOutput, ToolError>> => {\n const body = {\n ...(input.name !== undefined ? { name: input.name } : {}),\n ...(input.country_codes !== undefined ? { country_codes: input.country_codes } : {}),\n ...(input.labels !== undefined ? { labels: input.labels } : {}),\n ...(input.policy_set_id !== undefined ? { policy_set_id: input.policy_set_id } : {}),\n ...(input.schedule_enabled !== undefined ? { schedule_enabled: input.schedule_enabled } : {}),\n };\n const result = await ctx.api.updateCampaign(input.campaign_id, body);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `create_custom_rule` — define a new tag-detection rule.\n *\n * Wraps `POST /api/v1/custom-rules`. `config` shape is rule-type\n * specific; the API validates.\n */\n\nimport { z } from \"zod\";\n\nimport type { CustomRuleResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst CreateCustomRuleInputShape = {\n name: z.string().min(1).max(200).describe(\"Display name.\"),\n tag_slug: z\n .string()\n .max(100)\n .optional()\n .describe(\"Tag slug to assign on match. Empty = create-only (advanced).\"),\n rule_type: z\n .string()\n .max(50)\n .describe(\"Rule engine: regex | substring | iab_category | etc. (API validates).\"),\n config: z\n .record(z.unknown())\n .describe(\"Rule-type-specific configuration object. Shape depends on rule_type.\"),\n target: z\n .string()\n .max(30)\n .optional()\n .describe(\"Where to apply: page | offer_url | html. Default: page.\"),\n} as const;\ntype CreateCustomRuleInputShape = typeof CreateCustomRuleInputShape;\n\nexport type CreateCustomRuleOutput = CustomRuleResponse;\n\nexport const createCustomRuleTool: Tool<CreateCustomRuleInputShape, CreateCustomRuleOutput> = {\n name: \"create_custom_rule\",\n description:\n \"Define a custom tag-detection rule (regex / substring / category). Matches will tag every future scan; existing scans are untouched until you call `recheck_scans`.\",\n annotations: {\n title: \"Create Custom Rule\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n inputSchema: z.object(CreateCustomRuleInputShape),\n handler: async (input, ctx): Promise<Result<CreateCustomRuleOutput, ToolError>> => {\n const body: {\n name: string;\n rule_type: string;\n config: Record<string, unknown>;\n tag_slug?: string;\n target?: string;\n } = {\n name: input.name,\n rule_type: input.rule_type,\n config: input.config,\n };\n if (input.tag_slug !== undefined) body.tag_slug = input.tag_slug;\n if (input.target !== undefined) body.target = input.target;\n const result = await ctx.api.createCustomRule(body);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `delete_custom_rule` — permanently remove a rule.\n *\n * Wraps `DELETE /api/v1/custom-rules/{id}`. Past scans keep any tag\n * the rule produced; future scans won't get the tag.\n */\n\nimport { z } from \"zod\";\n\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst DeleteCustomRuleInputShape = {\n rule_id: z.string().uuid().describe(\"Rule UUID to delete.\"),\n} as const;\ntype DeleteCustomRuleInputShape = typeof DeleteCustomRuleInputShape;\n\nexport interface DeleteCustomRuleOutput {\n readonly deleted: true;\n}\n\nexport const deleteCustomRuleTool: Tool<DeleteCustomRuleInputShape, DeleteCustomRuleOutput> = {\n name: \"delete_custom_rule\",\n description:\n \"Permanently delete a custom rule. Already-applied tags on past scans are preserved; the rule simply stops running on future scans.\",\n annotations: {\n title: \"Delete Custom Rule\",\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(DeleteCustomRuleInputShape),\n handler: async (input, ctx): Promise<Result<DeleteCustomRuleOutput, ToolError>> => {\n const result = await ctx.api.deleteCustomRule(input.rule_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ deleted: true });\n },\n};\n","/**\n * Tool: `get_custom_rule` — full config of one rule.\n */\n\nimport { z } from \"zod\";\n\nimport type { CustomRuleResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst GetCustomRuleInputShape = { rule_id: z.string().uuid().describe(\"Rule UUID.\") } as const;\ntype GetCustomRuleInputShape = typeof GetCustomRuleInputShape;\n\nexport type GetCustomRuleOutput = CustomRuleResponse;\n\nexport const getCustomRuleTool: Tool<GetCustomRuleInputShape, GetCustomRuleOutput> = {\n name: \"get_custom_rule\",\n description:\n \"Get one custom rule by UUID with name, tag-slug, type, config object, target, active flag.\",\n annotations: {\n title: \"Get Custom Rule\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(GetCustomRuleInputShape),\n handler: async (input, ctx): Promise<Result<GetCustomRuleOutput, ToolError>> => {\n const result = await ctx.api.getCustomRule(input.rule_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `list_custom_rules` — org custom rule list.\n *\n * API endpoint: `GET /api/v1/custom-rules` returns a flat array (no\n * pagination per OpenAPI), so the tool surfaces all rules at once.\n */\n\nimport { z } from \"zod\";\n\nimport type { CustomRuleResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListCustomRulesInputShape = {\n page: z.number().int().min(1).max(500).default(1).describe(\"1-indexed page number.\"),\n limit: z.number().int().min(1).max(200).default(50).describe(\"Page size.\"),\n} as const;\ntype ListCustomRulesInputShape = typeof ListCustomRulesInputShape;\n\nexport interface ListCustomRulesOutput {\n readonly items: readonly CustomRuleResponse[];\n readonly total: number;\n}\n\nexport const listCustomRulesTool: Tool<ListCustomRulesInputShape, ListCustomRulesOutput> = {\n name: \"list_custom_rules\",\n description:\n \"List the organization's custom tag-detection rules (regex / heuristics) with their config, target, and active flag.\",\n annotations: {\n title: \"List Custom Rules\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListCustomRulesInputShape),\n handler: async (input, ctx): Promise<Result<ListCustomRulesOutput, ToolError>> => {\n const result = await ctx.api.listCustomRules({ page: input.page, limit: input.limit });\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ items: result.value, total: result.value.length });\n },\n};\n","/**\n * Tool: `test_custom_rule` — preview-test a rule config against an\n * existing scan, without saving the rule. Useful for \"would this\n * regex match my malware example?\"\n */\n\nimport { z } from \"zod\";\n\nimport type { RuleTestResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst TestCustomRuleInputShape = {\n rule_type: z.string().max(50).describe(\"Rule engine type (regex, substring, ...).\"),\n config: z.record(z.unknown()).describe(\"Rule-type-specific config to test.\"),\n target: z.string().max(30).describe(\"Where to apply the rule: page / offer_url / html.\"),\n scan_id: z.string().uuid().describe(\"Existing scan UUID to evaluate the rule against.\"),\n} as const;\ntype TestCustomRuleInputShape = typeof TestCustomRuleInputShape;\n\nexport type TestCustomRuleOutput = RuleTestResponse;\n\nexport const testCustomRuleTool: Tool<TestCustomRuleInputShape, TestCustomRuleOutput> = {\n name: \"test_custom_rule\",\n description:\n \"Preview-test a rule definition against an existing scan WITHOUT persisting the rule. Returns `matched: bool`, evaluation time, and per-tag-slug details. Use to validate config before `create_custom_rule`.\",\n annotations: {\n title: \"Test Custom Rule\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(TestCustomRuleInputShape),\n handler: async (input, ctx): Promise<Result<TestCustomRuleOutput, ToolError>> => {\n const result = await ctx.api.testCustomRule({\n rule_type: input.rule_type,\n config: input.config,\n target: input.target,\n scan_id: input.scan_id,\n });\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `update_custom_rule` — patch any field of a rule. Sends a\n * PUT (full replace semantics on the API side), so all supplied\n * fields overwrite, all omitted fields remain unchanged from the\n * caller's perspective via this MCP wrapper (we forward only what\n * the agent provides).\n */\n\nimport { z } from \"zod\";\n\nimport type { CustomRuleResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst UpdateCustomRuleInputShape = {\n rule_id: z.string().uuid().describe(\"Rule UUID to update.\"),\n name: z.string().min(1).max(200).optional().describe(\"New display name.\"),\n tag_slug: z.string().max(100).optional().describe(\"New tag slug to assign on match.\"),\n config: z.record(z.unknown()).optional().describe(\"New rule-type-specific config object.\"),\n target: z.string().max(30).optional().describe(\"Where to apply: page / offer_url / html.\"),\n is_active: z.boolean().optional().describe(\"Enable/disable the rule.\"),\n} as const;\ntype UpdateCustomRuleInputShape = typeof UpdateCustomRuleInputShape;\n\nexport type UpdateCustomRuleOutput = CustomRuleResponse;\n\nexport const updateCustomRuleTool: Tool<UpdateCustomRuleInputShape, UpdateCustomRuleOutput> = {\n name: \"update_custom_rule\",\n description:\n \"Update a custom tag-detection rule. Only supplied fields are sent. To toggle activation, pass `is_active`. Existing tagged scans are NOT re-evaluated — call `recheck_scans` for that. (Rule engine `rule_type` cannot be changed after creation; create a new rule instead.)\",\n annotations: {\n title: \"Update Custom Rule\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(UpdateCustomRuleInputShape),\n handler: async (input, ctx): Promise<Result<UpdateCustomRuleOutput, ToolError>> => {\n const body: {\n name?: string;\n tag_slug?: string;\n config?: Record<string, unknown>;\n target?: string;\n is_active?: boolean;\n } = {};\n if (input.name !== undefined) body.name = input.name;\n if (input.tag_slug !== undefined) body.tag_slug = input.tag_slug;\n if (input.config !== undefined) body.config = input.config;\n if (input.target !== undefined) body.target = input.target;\n if (input.is_active !== undefined) body.is_active = input.is_active;\n const result = await ctx.api.updateCustomRule(input.rule_id, body);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `list_emulators` — the catalog of device/OS profiles for scans.\n *\n * Use this BEFORE `create_scan` / `create_campaign` to pick a valid\n * `emulator_id` (the `id` field of an entry).\n */\n\nimport { z } from \"zod\";\n\nimport type { EmulatorResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListEmulatorsInputShape = {} as const;\ntype ListEmulatorsInputShape = typeof ListEmulatorsInputShape;\n\nexport interface ListEmulatorsOutput {\n readonly items: readonly EmulatorResponse[];\n readonly total: number;\n}\n\nexport const listEmulatorsTool: Tool<ListEmulatorsInputShape, ListEmulatorsOutput> = {\n name: \"list_emulators\",\n description:\n \"List every device/OS emulator profile available for scans (id, display name, category, browser). Use the `id` as `emulator_id` in `create_scan` / `create_campaign`.\",\n annotations: {\n title: \"List Emulators\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListEmulatorsInputShape),\n handler: async (_input, ctx): Promise<Result<ListEmulatorsOutput, ToolError>> => {\n const result = await ctx.api.listEmulators();\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ items: result.value, total: result.value.length });\n },\n};\n","/**\n * Tool: `list_geos` — every country the Kaminari Ad platform can scan from.\n *\n * Wraps `GET /api/v1/geos`. Useful for an agent that wants to choose a\n * valid `country_code` before calling `create_scan`. Cheap call, no\n * pagination — the full list is ~250 entries.\n */\n\nimport { z } from \"zod\";\n\nimport type { GeoResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListGeosInputShape = {} as const;\ntype ListGeosInputShape = typeof ListGeosInputShape;\n\nexport interface ListGeosOutput {\n readonly items: readonly GeoResponse[];\n readonly total: number;\n}\n\nexport const listGeosTool: Tool<ListGeosInputShape, ListGeosOutput> = {\n name: \"list_geos\",\n description:\n \"List every country the Kaminari Ad platform can scan ads from, with ISO 3166-1 alpha-2 code, name, continent, and emoji.\",\n annotations: {\n title: \"List Geos\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListGeosInputShape),\n handler: async (_input, ctx): Promise<Result<ListGeosOutput, ToolError>> => {\n const result = await ctx.api.listGeos();\n if (result.isErr()) {\n return err(mapApiError(result.error));\n }\n return ok({ items: result.value, total: result.value.length });\n },\n};\n","/**\n * Tool: `list_invoices` — paginated list of invoices issued to the org.\n */\n\nimport { z } from \"zod\";\n\nimport type { InvoiceResponse, PaginatedResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListInvoicesInputShape = {\n page: z.number().int().min(1).max(500).default(1).describe(\"1-indexed page.\"),\n limit: z.number().int().min(1).max(200).default(50).describe(\"Page size.\"),\n} as const;\ntype ListInvoicesInputShape = typeof ListInvoicesInputShape;\n\nexport type ListInvoicesOutput = PaginatedResponse<InvoiceResponse>;\n\nexport const listInvoicesTool: Tool<ListInvoicesInputShape, ListInvoicesOutput> = {\n name: \"list_invoices\",\n description:\n \"List invoices issued to the organization with number, status, total in micros, currency, due/paid dates. Use to find an invoice id; PDFs are available at https://app.kaminari.ad/api/v1/invoices/{id}/pdf (not exposed via MCP — agents return the URL to the user).\",\n annotations: {\n title: \"List Invoices\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListInvoicesInputShape),\n handler: async (input, ctx): Promise<Result<ListInvoicesOutput, ToolError>> => {\n const result = await ctx.api.listInvoices({ page: input.page, limit: input.limit });\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `create_policy_set` — define a new violation policy.\n */\n\nimport { z } from \"zod\";\n\nimport type { PolicySetResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst PolicyEntryShape = z.object({\n tag_slug: z.string().min(1).max(100).describe(\"Tag slug that triggers a violation.\"),\n country_codes: z\n .array(z.string().length(2))\n .max(50)\n .describe(\"Restrict the violation to these countries. Empty array = all countries.\"),\n});\n\nconst CreatePolicySetInputShape = {\n name: z.string().min(1).max(200).describe(\"Display name.\"),\n description: z.string().max(2000).describe(\"Free-form description (use empty string for none).\"),\n entries: z\n .array(PolicyEntryShape)\n .min(1)\n .max(500)\n .describe(\"At least one entry. Each entry pairs a tag-slug with country codes.\"),\n} as const;\ntype CreatePolicySetInputShape = typeof CreatePolicySetInputShape;\n\nexport type CreatePolicySetOutput = PolicySetResponse;\n\nexport const createPolicySetTool: Tool<CreatePolicySetInputShape, CreatePolicySetOutput> = {\n name: \"create_policy_set\",\n description:\n \"Create a new policy set (named collection of tag + country-list entries). Once created, you can bind campaigns to it via `update_campaign`.\",\n annotations: {\n title: \"Create Policy Set\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n inputSchema: z.object(CreatePolicySetInputShape),\n handler: async (input, ctx): Promise<Result<CreatePolicySetOutput, ToolError>> => {\n const result = await ctx.api.createPolicySet({\n name: input.name,\n description: input.description,\n entries: input.entries.map((e) => ({ tag_slug: e.tag_slug, country_codes: e.country_codes })),\n });\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `delete_policy_set` — permanently remove a policy set.\n *\n * Campaigns bound to it lose the binding; alerts created under it\n * persist with `policy_set_id = null`.\n */\n\nimport { z } from \"zod\";\n\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst DeletePolicySetInputShape = {\n policy_set_id: z.string().uuid().describe(\"Policy set UUID.\"),\n} as const;\ntype DeletePolicySetInputShape = typeof DeletePolicySetInputShape;\n\nexport interface DeletePolicySetOutput {\n readonly deleted: true;\n}\n\nexport const deletePolicySetTool: Tool<DeletePolicySetInputShape, DeletePolicySetOutput> = {\n name: \"delete_policy_set\",\n description:\n \"Permanently delete a policy set. Campaigns bound to it lose the binding; alerts persist (their policy_set_id becomes null).\",\n annotations: {\n title: \"Delete Policy Set\",\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(DeletePolicySetInputShape),\n handler: async (input, ctx): Promise<Result<DeletePolicySetOutput, ToolError>> => {\n const result = await ctx.api.deletePolicySet(input.policy_set_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ deleted: true });\n },\n};\n","/**\n * Tool: `get_policy_set` — one policy set with its full entry list.\n */\n\nimport { z } from \"zod\";\n\nimport type { PolicySetResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst GetPolicySetInputShape = {\n policy_set_id: z.string().uuid().describe(\"Policy set UUID.\"),\n} as const;\ntype GetPolicySetInputShape = typeof GetPolicySetInputShape;\n\nexport type GetPolicySetOutput = PolicySetResponse;\n\nexport const getPolicySetTool: Tool<GetPolicySetInputShape, GetPolicySetOutput> = {\n name: \"get_policy_set\",\n description:\n \"Get one policy set by UUID with its complete list of entries (tag-slug + applicable country codes).\",\n annotations: {\n title: \"Get Policy Set\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(GetPolicySetInputShape),\n handler: async (input, ctx): Promise<Result<GetPolicySetOutput, ToolError>> => {\n const result = await ctx.api.getPolicySet(input.policy_set_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `list_policy_sets` — all policy sets for the caller's org.\n *\n * Policy sets define which tags are considered violations in which\n * countries; campaigns bind to one policy set.\n */\n\nimport { z } from \"zod\";\n\nimport type { PolicySetListItemResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListPolicySetsInputShape = {} as const;\ntype ListPolicySetsInputShape = typeof ListPolicySetsInputShape;\n\nexport interface ListPolicySetsOutput {\n readonly items: readonly PolicySetListItemResponse[];\n readonly total: number;\n}\n\nexport const listPolicySetsTool: Tool<ListPolicySetsInputShape, ListPolicySetsOutput> = {\n name: \"list_policy_sets\",\n description:\n \"List policy sets: named collections of (tag, country-list) entries that define what counts as a violation. Campaigns bind to one policy set. List items omit `entries` (the tag/country bindings) for payload size — fetch a single set via `get_policy_set` when you need them.\",\n annotations: {\n title: \"List Policy Sets\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListPolicySetsInputShape),\n handler: async (_input, ctx): Promise<Result<ListPolicySetsOutput, ToolError>> => {\n const result = await ctx.api.listPolicySets();\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ items: result.value, total: result.value.length });\n },\n};\n","/**\n * Tool: `request_policy_set_approval` — submit the set for review so\n * it can be used in PUBLIC scope (other organizations can subscribe).\n */\n\nimport { z } from \"zod\";\n\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst RequestPolicySetApprovalInputShape = {\n policy_set_id: z.string().uuid().describe(\"Policy set UUID.\"),\n} as const;\ntype RequestPolicySetApprovalInputShape = typeof RequestPolicySetApprovalInputShape;\n\nexport interface RequestPolicySetApprovalOutput {\n readonly requested: true;\n}\n\nexport const requestPolicySetApprovalTool: Tool<\n RequestPolicySetApprovalInputShape,\n RequestPolicySetApprovalOutput\n> = {\n name: \"request_policy_set_approval\",\n description:\n \"Submit a private policy set for Kaminari Ad team review so it can be marked PUBLIC and used by other organizations. The set must be complete and well-formed. Returns immediately; approval status is reflected on the policy set entity once the review completes.\",\n annotations: {\n title: \"Request Policy Set Approval\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n inputSchema: z.object(RequestPolicySetApprovalInputShape),\n handler: async (input, ctx): Promise<Result<RequestPolicySetApprovalOutput, ToolError>> => {\n // API returns 204 No Content on success.\n const result = await ctx.api.requestPolicySetApproval(input.policy_set_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ requested: true });\n },\n};\n","/**\n * Tool: `update_policy_set` — replace name / description / entries.\n */\n\nimport { z } from \"zod\";\n\nimport type { PolicySetResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst PolicyEntryShape = z.object({\n tag_slug: z.string().min(1).max(100),\n country_codes: z.array(z.string().length(2)).max(50),\n});\n\nconst UpdatePolicySetInputShape = {\n policy_set_id: z.string().uuid().describe(\"Policy set UUID.\"),\n name: z.string().min(1).max(200).describe(\"New name (always required by the API on update).\"),\n description: z.string().max(2000).describe(\"New description (empty string allowed).\"),\n entries: z\n .array(PolicyEntryShape)\n .min(1)\n .max(500)\n .describe(\"REPLACEMENT entries list — REPLACES the current list, not a merge.\"),\n} as const;\ntype UpdatePolicySetInputShape = typeof UpdatePolicySetInputShape;\n\nexport type UpdatePolicySetOutput = PolicySetResponse;\n\nexport const updatePolicySetTool: Tool<UpdatePolicySetInputShape, UpdatePolicySetOutput> = {\n name: \"update_policy_set\",\n description:\n \"REPLACE a policy set's name, description, and entry list. The API requires all three fields on every update — read the current set with `get_policy_set` first if you only want to change one thing.\",\n annotations: {\n title: \"Update Policy Set\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(UpdatePolicySetInputShape),\n handler: async (input, ctx): Promise<Result<UpdatePolicySetOutput, ToolError>> => {\n const result = await ctx.api.updatePolicySet(input.policy_set_id, {\n name: input.name,\n description: input.description,\n entries: input.entries.map((e) => ({ tag_slug: e.tag_slug, country_codes: e.country_codes })),\n });\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `cancel_run` — cancel every pending scan in one run.\n */\n\nimport { z } from \"zod\";\n\nimport type { CancelPendingResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst CancelRunInputShape = { run_id: z.string().uuid().describe(\"Run UUID.\") } as const;\ntype CancelRunInputShape = typeof CancelRunInputShape;\n\nexport type CancelRunOutput = CancelPendingResponse;\n\nexport const cancelRunTool: Tool<CancelRunInputShape, CancelRunOutput> = {\n name: \"cancel_run\",\n description:\n \"Cancel every pending scan within one run. Running scans complete; pending ones get refunded. Returns the count of cancelled scans.\",\n annotations: {\n title: \"Cancel Run\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(CancelRunInputShape),\n handler: async (input, ctx): Promise<Result<CancelRunOutput, ToolError>> => {\n const result = await ctx.api.cancelRun(input.run_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `get_run` — one run by UUID with progress counters.\n */\n\nimport { z } from \"zod\";\n\nimport type { RunResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst GetRunInputShape = { run_id: z.string().uuid().describe(\"Run UUID.\") } as const;\ntype GetRunInputShape = typeof GetRunInputShape;\n\nexport type GetRunOutput = RunResponse;\n\nexport const getRunTool: Tool<GetRunInputShape, GetRunOutput> = {\n name: \"get_run\",\n description:\n \"Get one run by UUID with totals (queued, completed, failed, partial, cancelled), parent campaign, label, source.\",\n annotations: {\n title: \"Get Run\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(GetRunInputShape),\n handler: async (input, ctx): Promise<Result<GetRunOutput, ToolError>> => {\n const result = await ctx.api.getRun(input.run_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `list_run_scans` — paginated brief-scan list for ONE run.\n */\n\nimport { z } from \"zod\";\n\nimport type { PaginatedResponse, ScanBriefResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListRunScansInputShape = {\n run_id: z.string().uuid().describe(\"Run UUID.\"),\n page: z.number().int().min(1).max(500).default(1).describe(\"1-indexed page.\"),\n limit: z.number().int().min(1).max(200).default(50).describe(\"Page size.\"),\n} as const;\ntype ListRunScansInputShape = typeof ListRunScansInputShape;\n\nexport type ListRunScansOutput = PaginatedResponse<ScanBriefResponse>;\n\nexport const listRunScansTool: Tool<ListRunScansInputShape, ListRunScansOutput> = {\n name: \"list_run_scans\",\n description: \"List the brief-scan items produced by one run (status, country, URL, timestamps).\",\n annotations: {\n title: \"List Run Scans\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListRunScansInputShape),\n handler: async (input, ctx): Promise<Result<ListRunScansOutput, ToolError>> => {\n const result = await ctx.api.listRunScans(input.run_id, {\n page: input.page,\n limit: input.limit,\n });\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `cancel_scan` — cancel a single pending scan.\n *\n * Wraps `POST /api/v1/scans/{id}/cancel`. Only `pending` scans can be\n * cancelled; running and completed scans are no-ops (the API enforces).\n * Returns the count of cancelled scans (0 or 1) — refunds credits.\n */\n\nimport { z } from \"zod\";\n\nimport type { CancelPendingResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst CancelScanInputShape = {\n scan_id: z.string().uuid().describe(\"UUID of the pending scan to cancel.\"),\n} as const;\ntype CancelScanInputShape = typeof CancelScanInputShape;\n\nexport type CancelScanOutput = CancelPendingResponse;\n\nexport const cancelScanTool: Tool<CancelScanInputShape, CancelScanOutput> = {\n name: \"cancel_scan\",\n description:\n \"Cancel one pending scan by UUID. Already-running or completed scans are no-ops. Cancellation refunds the scan credit.\",\n annotations: {\n title: \"Cancel Scan\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(CancelScanInputShape),\n handler: async (input, ctx): Promise<Result<CancelScanOutput, ToolError>> => {\n const result = await ctx.api.cancelScan(input.scan_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `create_bulk_scans` — queue one scan per country in a single call.\n *\n * Wraps `POST /api/v1/scans/bulk`. **Costs N credits** where N is the\n * number of countries. Either `url` or `ad_tag` is required (XOR).\n */\n\nimport { z } from \"zod\";\n\nimport type { ScanResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst CreateBulkScansInputShape = {\n url: z.string().url().optional().describe(\"Direct URL. EITHER `url` OR `ad_tag` is required.\"),\n ad_tag: z\n .string()\n .optional()\n .describe(\"Raw ad-tag HTML/JS. EITHER `url` OR `ad_tag` is required.\"),\n country_codes: z\n .array(z.string().length(2))\n .min(1)\n .max(50)\n .describe(\"List of ISO 3166-1 alpha-2 country codes; one scan per country is created.\"),\n emulator_id: z\n .string()\n .min(1)\n .max(100)\n .describe(\"Device/OS profile slug; same for every country in the batch.\"),\n labels: z\n .record(z.string())\n .optional()\n .describe(\"Arbitrary metadata copied onto every created scan.\"),\n} as const;\ntype CreateBulkScansInputShape = typeof CreateBulkScansInputShape;\n\nexport interface CreateBulkScansOutput {\n readonly items: readonly ScanResponse[];\n readonly total: number;\n}\n\nexport const createBulkScansTool: Tool<CreateBulkScansInputShape, CreateBulkScansOutput> = {\n name: \"create_bulk_scans\",\n description:\n \"Queue one new scan per country in a single call (e.g. test the same URL from US + DE + JP). COSTS N CREDITS where N = number of countries. Returns the list of created scans.\",\n annotations: {\n title: \"Create Bulk Scans\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n inputSchema: z.object(CreateBulkScansInputShape),\n handler: async (input, ctx): Promise<Result<CreateBulkScansOutput, ToolError>> => {\n const body = {\n country_codes: input.country_codes,\n emulator_id: input.emulator_id,\n ...(input.url !== undefined ? { url: input.url } : {}),\n ...(input.ad_tag !== undefined ? { ad_tag: input.ad_tag } : {}),\n ...(input.labels !== undefined ? { labels: input.labels } : {}),\n };\n const result = await ctx.api.createBulkScans(body);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ items: result.value, total: result.value.length });\n },\n};\n","/**\n * Tool: `create_scan` — queue a single new scan.\n *\n * Wraps `POST /api/v1/scans`. **Costs credits.** Either `url` or\n * `ad_tag` is required (XOR enforced by the API).\n */\n\nimport { z } from \"zod\";\n\nimport type { ScanResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst CreateScanInputShape = {\n url: z\n .string()\n .url()\n .optional()\n .describe(\"Direct URL of the ad / landing page. EITHER `url` OR `ad_tag` is required.\"),\n ad_tag: z\n .string()\n .optional()\n .describe(\"Raw HTML/JS ad tag (script, iframe, image). EITHER `url` OR `ad_tag` is required.\"),\n country_code: z\n .string()\n .length(2)\n .describe(\"ISO 3166-1 alpha-2 country code, e.g. US, DE, JP. Determines proxy geo.\"),\n emulator_id: z\n .string()\n .min(1)\n .max(100)\n .describe(\"Device/OS profile slug; use `list_emulators` to discover valid values.\"),\n labels: z\n .record(z.string())\n .optional()\n .describe(\"Arbitrary string -> string metadata attached to the scan.\"),\n campaign_id: z\n .string()\n .uuid()\n .optional()\n .describe(\"Optional campaign UUID to attribute the scan to.\"),\n run_id: z.string().uuid().optional().describe(\"Optional run UUID inside the campaign.\"),\n} as const;\ntype CreateScanInputShape = typeof CreateScanInputShape;\n\nexport type CreateScanOutput = ScanResponse;\n\nexport const createScanTool: Tool<CreateScanInputShape, CreateScanOutput> = {\n name: \"create_scan\",\n description:\n \"Queue a single new scan for a URL or ad-tag against one country. COSTS CREDITS and bills the caller's organization. Returns the newly-created scan record.\",\n annotations: {\n title: \"Create Scan\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n inputSchema: z.object(CreateScanInputShape),\n handler: async (input, ctx): Promise<Result<CreateScanOutput, ToolError>> => {\n const body = {\n country_code: input.country_code,\n emulator_id: input.emulator_id,\n ...(input.url !== undefined ? { url: input.url } : {}),\n ...(input.ad_tag !== undefined ? { ad_tag: input.ad_tag } : {}),\n ...(input.labels !== undefined ? { labels: input.labels } : {}),\n ...(input.campaign_id !== undefined ? { campaign_id: input.campaign_id } : {}),\n ...(input.run_id !== undefined ? { run_id: input.run_id } : {}),\n };\n const result = await ctx.api.createScan(body);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `get_scan` — full detail for one scan by UUID.\n *\n * Wraps `GET /api/v1/scans/{id}`. Returns the most-used fields; nested\n * arrays (`redirect_chain`, `landings`) are omitted on purpose — they\n * are large and usually overkill for an agent answer. Add follow-up\n * tools later if needed.\n */\n\nimport { z } from \"zod\";\n\nimport type { ScanResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst GetScanInputShape = {\n scan_id: z\n .string()\n .uuid()\n .describe(\"The scan's UUID (returned by `list_scans` or `create_scan`).\"),\n} as const;\ntype GetScanInputShape = typeof GetScanInputShape;\n\nexport type GetScanOutput = ScanResponse;\n\nexport const getScanTool: Tool<GetScanInputShape, GetScanOutput> = {\n name: \"get_scan\",\n description:\n \"Get full detail for one scan by UUID: status, offer URL, screenshot URL, timing, labels, and the parent campaign if any.\",\n annotations: {\n title: \"Get Scan\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(GetScanInputShape),\n handler: async (input, ctx): Promise<Result<GetScanOutput, ToolError>> => {\n const result = await ctx.api.getScan(input.scan_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `list_scans` — paginated list of scans for the caller's org.\n *\n * Wraps `GET /api/v1/scans`. Filters are pass-through to the API; this\n * file does NOT contain business logic about what filters mean. Default\n * date window (last 7 days) is applied in the API, not here, so the\n * agent sees consistent behaviour whether it sets `date_from` or not.\n */\n\nimport { z } from \"zod\";\n\nimport type { PaginatedResponse, ScanBriefResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListScansInputShape = {\n status: z\n .string()\n .optional()\n .describe(\n \"Comma-separated statuses to filter by. One of: pending, running, done, failed, cancelled.\"\n ),\n country_code: z\n .string()\n .optional()\n .describe(\"Comma-separated ISO 3166-1 alpha-2 country codes, e.g. US,DE,JP.\"),\n url: z.string().optional().describe(\"Substring match against the scanned URL.\"),\n scan_id: z.string().optional().describe(\"Comma-separated scan UUIDs to fetch a specific set.\"),\n date_from: z\n .string()\n .date()\n .optional()\n .describe(\"ISO date (YYYY-MM-DD), inclusive lower bound on scan creation.\"),\n date_to: z\n .string()\n .date()\n .optional()\n .describe(\"ISO date (YYYY-MM-DD), inclusive upper bound on scan creation.\"),\n tag: z.string().optional().describe(\"Comma-separated tag slugs to filter by.\"),\n page: z.number().int().min(1).max(500).default(1).describe(\"1-indexed page number.\"),\n limit: z.number().int().min(1).max(200).default(50).describe(\"Page size (1-200). Default 50.\"),\n} as const;\ntype ListScansInputShape = typeof ListScansInputShape;\n\nexport type ListScansOutput = PaginatedResponse<ScanBriefResponse>;\n\nexport const listScansTool: Tool<ListScansInputShape, ListScansOutput> = {\n name: \"list_scans\",\n description:\n \"List scans for the caller's organization with optional filters (status, country, URL substring, date range, tags). Returns a paginated envelope.\",\n annotations: {\n title: \"List Scans\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListScansInputShape),\n handler: async (input, ctx): Promise<Result<ListScansOutput, ToolError>> => {\n // exactOptionalPropertyTypes: only forward defined fields.\n const filters: Parameters<typeof ctx.api.listScans>[0] = {\n page: input.page,\n limit: input.limit,\n ...(input.status !== undefined ? { status: input.status } : {}),\n ...(input.country_code !== undefined ? { country_code: input.country_code } : {}),\n ...(input.url !== undefined ? { url: input.url } : {}),\n ...(input.scan_id !== undefined ? { scan_id: input.scan_id } : {}),\n ...(input.date_from !== undefined ? { date_from: input.date_from } : {}),\n ...(input.date_to !== undefined ? { date_to: input.date_to } : {}),\n ...(input.tag !== undefined ? { tag: input.tag } : {}),\n };\n const result = await ctx.api.listScans(filters);\n if (result.isErr()) {\n return err(mapApiError(result.error));\n }\n return ok(result.value);\n },\n};\n","/**\n * Tool: `recheck_scans` — re-run the checker pipeline against recent\n * completed scans (e.g. after policies were updated).\n *\n * Wraps `POST /api/v1/scans/recheck`. Scope is either \"the last N\n * scans\" or \"all scans from the last N hours\". Both have API-side\n * caps to prevent abuse.\n */\n\nimport { z } from \"zod\";\n\nimport type { RecheckResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst RecheckScansInputShape = {\n scope_type: z\n .enum([\"last_n\", \"hours\"])\n .describe(\n \"Selection mode. `last_n` = most recent N scans; `hours` = scans from the past N hours.\"\n ),\n scope_value: z\n .number()\n .int()\n .min(1)\n .max(5000)\n .describe(\n \"Number of scans (`last_n`, max 5000) OR number of hours (`hours`, max 72). API enforces tighter caps per mode.\"\n ),\n} as const;\ntype RecheckScansInputShape = typeof RecheckScansInputShape;\n\nexport type RecheckScansOutput = RecheckResponse;\n\nexport const recheckScansTool: Tool<RecheckScansInputShape, RecheckScansOutput> = {\n name: \"recheck_scans\",\n description:\n \"Re-run the checker pipeline against recent COMPLETED scans (e.g. after updating policies or custom rules). Returns the number of scans queued for re-evaluation. No new crawl fee — only the checker cost.\",\n annotations: {\n title: \"Recheck Scans\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n inputSchema: z.object(RecheckScansInputShape),\n handler: async (input, ctx): Promise<Result<RecheckScansOutput, ToolError>> => {\n const result = await ctx.api.recheckScans({\n scope_type: input.scope_type,\n scope_value: input.scope_value,\n });\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `delete_tag_definition` — delete a CUSTOM tag definition.\n * Past tag assignments stay on historical scans; future scans won't\n * receive the tag.\n */\n\nimport { z } from \"zod\";\n\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst DeleteTagDefinitionInputShape = {\n slug: z.string().min(1).max(100).describe(\"Custom tag slug to delete.\"),\n} as const;\ntype DeleteTagDefinitionInputShape = typeof DeleteTagDefinitionInputShape;\n\nexport interface DeleteTagDefinitionOutput {\n readonly deleted: true;\n}\n\nexport const deleteTagDefinitionTool: Tool<\n DeleteTagDefinitionInputShape,\n DeleteTagDefinitionOutput\n> = {\n name: \"delete_tag_definition\",\n description:\n \"Delete a CUSTOM tag definition. Historical tag assignments are preserved; future scans will not receive this tag. System tags cannot be deleted.\",\n annotations: {\n title: \"Delete Tag Definition\",\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(DeleteTagDefinitionInputShape),\n handler: async (input, ctx): Promise<Result<DeleteTagDefinitionOutput, ToolError>> => {\n const result = await ctx.api.deleteTagDefinition(input.slug);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ deleted: true });\n },\n};\n","/**\n * Tool: `get_tag_definition` — full detail for one tag (system or custom).\n */\n\nimport { z } from \"zod\";\n\nimport type { TagDefinitionDetailResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst GetTagDefinitionInputShape = {\n slug: z\n .string()\n .min(1)\n .max(100)\n .describe(\"Tag slug (e.g. `malware`, `redirect_chain_too_long`).\"),\n} as const;\ntype GetTagDefinitionInputShape = typeof GetTagDefinitionInputShape;\n\nexport type GetTagDefinitionOutput = TagDefinitionDetailResponse;\n\nexport const getTagDefinitionTool: Tool<GetTagDefinitionInputShape, GetTagDefinitionOutput> = {\n name: \"get_tag_definition\",\n description:\n \"Get full definition of one tag: display name, description, severity, category, source (system vs custom), public-report visibility, usage counts.\",\n annotations: {\n title: \"Get Tag Definition\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(GetTagDefinitionInputShape),\n handler: async (input, ctx): Promise<Result<GetTagDefinitionOutput, ToolError>> => {\n const result = await ctx.api.getTagDefinition(input.slug);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `list_scan_tags` — every tag the checker pipeline attached\n * to one scan.\n */\n\nimport { z } from \"zod\";\n\nimport type { ScanTagResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListScanTagsInputShape = {\n scan_id: z.string().uuid().describe(\"Scan UUID.\"),\n} as const;\ntype ListScanTagsInputShape = typeof ListScanTagsInputShape;\n\nexport interface ListScanTagsOutput {\n readonly items: readonly ScanTagResponse[];\n readonly total: number;\n}\n\nexport const listScanTagsTool: Tool<ListScanTagsInputShape, ListScanTagsOutput> = {\n name: \"list_scan_tags\",\n description:\n \"List every tag (system + custom) attached to one scan by the checker pipeline, with display name, category, and severity.\",\n annotations: {\n title: \"List Scan Tags\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListScanTagsInputShape),\n handler: async (input, ctx): Promise<Result<ListScanTagsOutput, ToolError>> => {\n const result = await ctx.api.listScanTags(input.scan_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ items: result.value, total: result.value.length });\n },\n};\n","/**\n * Tool: `list_tags` — every tag definition (system + custom) with\n * usage stats.\n *\n * API endpoint: `GET /api/v1/tag-definitions` returns a flat array\n * (no pagination), so this tool surfaces all tags at once.\n */\n\nimport { z } from \"zod\";\n\nimport type { TagDefinitionResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListTagsInputShape = {} as const;\ntype ListTagsInputShape = typeof ListTagsInputShape;\n\nexport interface ListTagsOutput {\n readonly items: readonly TagDefinitionResponse[];\n readonly total: number;\n}\n\nexport const listTagsTool: Tool<ListTagsInputShape, ListTagsOutput> = {\n name: \"list_tags\",\n description:\n \"List every tag definition the platform knows (system tags + organization custom tags) with category, severity, and usage counters (scans + rules per tag).\",\n annotations: {\n title: \"List Tags\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListTagsInputShape),\n handler: async (_input, ctx): Promise<Result<ListTagsOutput, ToolError>> => {\n const result = await ctx.api.listTags();\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ items: result.value, total: result.value.length });\n },\n};\n","/**\n * Tool: `update_tag_definition` — patch a tag's display fields. Only\n * custom (organization-owned) tags are editable.\n */\n\nimport { z } from \"zod\";\n\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst UpdateTagDefinitionInputShape = {\n slug: z.string().min(1).max(100).describe(\"Tag slug.\"),\n display_name: z.string().min(1).max(200).optional().describe(\"New human-readable name.\"),\n description: z.string().max(2000).optional().describe(\"New description.\"),\n severity: z.enum([\"high\", \"medium\", \"low\"]).optional().describe(\"New severity level.\"),\n show_in_public_report: z\n .boolean()\n .optional()\n .describe(\"Whether the tag appears in the public scan-report view.\"),\n} as const;\ntype UpdateTagDefinitionInputShape = typeof UpdateTagDefinitionInputShape;\n\nexport interface UpdateTagDefinitionOutput {\n readonly updated: true;\n}\n\nexport const updateTagDefinitionTool: Tool<\n UpdateTagDefinitionInputShape,\n UpdateTagDefinitionOutput\n> = {\n name: \"update_tag_definition\",\n description:\n \"Update display fields of a CUSTOM tag (system tags are read-only). Only supplied fields are touched. To read the updated definition, follow up with `get_tag_definition`.\",\n annotations: {\n title: \"Update Tag Definition\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(UpdateTagDefinitionInputShape),\n handler: async (input, ctx): Promise<Result<UpdateTagDefinitionOutput, ToolError>> => {\n const body: {\n display_name?: string;\n description?: string;\n severity?: \"high\" | \"medium\" | \"low\";\n show_in_public_report?: boolean;\n } = {};\n if (input.display_name !== undefined) body.display_name = input.display_name;\n if (input.description !== undefined) body.description = input.description;\n if (input.severity !== undefined) body.severity = input.severity;\n if (input.show_in_public_report !== undefined) {\n body.show_in_public_report = input.show_in_public_report;\n }\n // API returns 204 No Content on success.\n const result = await ctx.api.updateTagDefinition(input.slug, body);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ updated: true });\n },\n};\n","/**\n * Tool: `bulk_replay_webhook` — replay every delivery attempt for an\n * endpoint within a time range.\n *\n * Wraps `POST /api/v1/webhooks/{endpoint_id}/replay`. The API replays\n * by `[from_ts, to_ts]` window, NOT by explicit attempt id list.\n */\n\nimport { z } from \"zod\";\n\nimport type { BulkReplayResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst BulkReplayWebhookInputShape = {\n webhook_id: z.string().uuid().describe(\"Webhook endpoint UUID.\"),\n from_ts: z\n .string()\n .datetime()\n .describe(\"ISO-8601 lower bound (inclusive) of the time window to replay.\"),\n to_ts: z\n .string()\n .datetime()\n .describe(\"ISO-8601 upper bound (exclusive) of the time window to replay.\"),\n} as const;\ntype BulkReplayWebhookInputShape = typeof BulkReplayWebhookInputShape;\n\nexport type BulkReplayWebhookOutput = BulkReplayResponse;\n\nexport const bulkReplayWebhookTool: Tool<BulkReplayWebhookInputShape, BulkReplayWebhookOutput> = {\n name: \"bulk_replay_webhook\",\n description:\n \"Replay every delivery attempt for this webhook endpoint that landed in [from_ts, to_ts). Returns `{ replayed, skipped }` counts. Use to recover after a downstream outage — every event in the window is re-fired.\",\n annotations: {\n title: \"Bulk Replay Webhook\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n inputSchema: z.object(BulkReplayWebhookInputShape),\n handler: async (input, ctx): Promise<Result<BulkReplayWebhookOutput, ToolError>> => {\n const result = await ctx.api.bulkReplayWebhook(input.webhook_id, {\n from_ts: input.from_ts,\n to_ts: input.to_ts,\n });\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `create_webhook` — register a new HTTP endpoint for events.\n *\n * Returns the wrapped `{ webhook, secret }` envelope — `secret` is the\n * HMAC-SHA256 signing secret shown exactly once. The caller MUST\n * persist it; the server stores only a hash.\n */\n\nimport { z } from \"zod\";\n\nimport type { WebhookCreatedResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst CreateWebhookInputShape = {\n url: z.string().url().describe(\"HTTPS endpoint URL.\"),\n description: z.string().max(200).default(\"\").describe(\"Free-form label shown in the dashboard.\"),\n event_types: z\n .array(z.string())\n .min(0)\n .max(50)\n .default([])\n .describe(\n \"Event-type slugs to subscribe to (see `list_webhook_event_types`). Empty array = subscribe to ALL events.\"\n ),\n campaign_ids: z\n .array(z.string().uuid())\n .max(50)\n .default([])\n .describe(\"Restrict to events from these campaigns. Empty array = events from every campaign.\"),\n} as const;\ntype CreateWebhookInputShape = typeof CreateWebhookInputShape;\n\nexport type CreateWebhookOutput = WebhookCreatedResponse;\n\nexport const createWebhookTool: Tool<CreateWebhookInputShape, CreateWebhookOutput> = {\n name: \"create_webhook\",\n description:\n \"Register a webhook endpoint for the chosen event types. Response is a `{ webhook, secret }` envelope — the HMAC-SHA256 SIGNING SECRET is returned once and the caller MUST store it to verify event signatures.\",\n annotations: {\n title: \"Create Webhook\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n inputSchema: z.object(CreateWebhookInputShape),\n handler: async (input, ctx): Promise<Result<CreateWebhookOutput, ToolError>> => {\n const result = await ctx.api.createWebhook({\n url: input.url,\n description: input.description,\n event_types: input.event_types,\n campaign_ids: input.campaign_ids,\n });\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `delete_webhook` — unregister an endpoint.\n *\n * No further events are delivered; in-flight retries are dropped.\n */\n\nimport { z } from \"zod\";\n\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst DeleteWebhookInputShape = {\n webhook_id: z.string().uuid().describe(\"Webhook endpoint UUID to remove.\"),\n} as const;\ntype DeleteWebhookInputShape = typeof DeleteWebhookInputShape;\n\nexport interface DeleteWebhookOutput {\n readonly deleted: true;\n}\n\nexport const deleteWebhookTool: Tool<DeleteWebhookInputShape, DeleteWebhookOutput> = {\n name: \"delete_webhook\",\n description:\n \"Unregister a webhook endpoint. No further events are delivered; in-flight retries are dropped. Past delivery history is preserved.\",\n annotations: {\n title: \"Delete Webhook\",\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(DeleteWebhookInputShape),\n handler: async (input, ctx): Promise<Result<DeleteWebhookOutput, ToolError>> => {\n const result = await ctx.api.deleteWebhook(input.webhook_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ deleted: true });\n },\n};\n","/**\n * Tool: `get_webhook` — one webhook by UUID.\n */\n\nimport { z } from \"zod\";\n\nimport type { WebhookResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst GetWebhookInputShape = {\n webhook_id: z.string().uuid().describe(\"Webhook endpoint UUID.\"),\n} as const;\ntype GetWebhookInputShape = typeof GetWebhookInputShape;\n\nexport type GetWebhookOutput = WebhookResponse;\n\nexport const getWebhookTool: Tool<GetWebhookInputShape, GetWebhookOutput> = {\n name: \"get_webhook\",\n description: \"Get one webhook endpoint by UUID with URL, subscribed event types, active flag.\",\n annotations: {\n title: \"Get Webhook\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(GetWebhookInputShape),\n handler: async (input, ctx): Promise<Result<GetWebhookOutput, ToolError>> => {\n const result = await ctx.api.getWebhook(input.webhook_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `list_webhook_deliveries` — paginated delivery-attempt log\n * for one webhook. Useful for debugging \"did Kaminari try to call me?\"\n */\n\nimport { z } from \"zod\";\n\nimport type {\n DeliveryAttemptResponse,\n PaginatedResponse,\n} from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListWebhookDeliveriesInputShape = {\n webhook_id: z.string().uuid().describe(\"Webhook endpoint UUID.\"),\n page: z.number().int().min(1).max(500).default(1).describe(\"1-indexed page.\"),\n limit: z.number().int().min(1).max(200).default(50).describe(\"Page size.\"),\n} as const;\ntype ListWebhookDeliveriesInputShape = typeof ListWebhookDeliveriesInputShape;\n\nexport type ListWebhookDeliveriesOutput = PaginatedResponse<DeliveryAttemptResponse>;\n\nexport const listWebhookDeliveriesTool: Tool<\n ListWebhookDeliveriesInputShape,\n ListWebhookDeliveriesOutput\n> = {\n name: \"list_webhook_deliveries\",\n description:\n \"List delivery attempts for one webhook endpoint with event type, status (pending / delivered / failed), HTTP response status if any, and attempt timestamp. Paginated.\",\n annotations: {\n title: \"List Webhook Deliveries\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListWebhookDeliveriesInputShape),\n handler: async (input, ctx): Promise<Result<ListWebhookDeliveriesOutput, ToolError>> => {\n const result = await ctx.api.listWebhookDeliveries(input.webhook_id, {\n page: input.page,\n limit: input.limit,\n });\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `list_webhook_event_types` — catalog of events a webhook\n * can subscribe to.\n */\n\nimport { z } from \"zod\";\n\nimport type { EventCatalogEntryResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListWebhookEventTypesInputShape = {} as const;\ntype ListWebhookEventTypesInputShape = typeof ListWebhookEventTypesInputShape;\n\nexport interface ListWebhookEventTypesOutput {\n readonly items: readonly EventCatalogEntryResponse[];\n readonly total: number;\n}\n\nexport const listWebhookEventTypesTool: Tool<\n ListWebhookEventTypesInputShape,\n ListWebhookEventTypesOutput\n> = {\n name: \"list_webhook_event_types\",\n description:\n \"List the catalog of event types a webhook can subscribe to (e.g. `scan.done`, `alert.opened`, `campaign.run.completed`) with each event's description and a sample payload.\",\n annotations: {\n title: \"List Webhook Event Types\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListWebhookEventTypesInputShape),\n handler: async (_input, ctx): Promise<Result<ListWebhookEventTypesOutput, ToolError>> => {\n const result = await ctx.api.listWebhookEventTypes();\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ items: result.value.entries, total: result.value.entries.length });\n },\n};\n","/**\n * Tool: `list_webhooks` — registered webhook endpoints.\n */\n\nimport { z } from \"zod\";\n\nimport type { WebhookResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ListWebhooksInputShape = {} as const;\ntype ListWebhooksInputShape = typeof ListWebhooksInputShape;\n\nexport interface ListWebhooksOutput {\n readonly items: readonly WebhookResponse[];\n readonly total: number;\n}\n\nexport const listWebhooksTool: Tool<ListWebhooksInputShape, ListWebhooksOutput> = {\n name: \"list_webhooks\",\n description:\n \"List the organization's registered webhook endpoints with their URL, subscribed event types, and active flag.\",\n annotations: {\n title: \"List Webhooks\",\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(ListWebhooksInputShape),\n handler: async (_input, ctx): Promise<Result<ListWebhooksOutput, ToolError>> => {\n const result = await ctx.api.listWebhooks();\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ items: result.value, total: result.value.length });\n },\n};\n","/**\n * Tool: `replay_webhook_delivery` — re-fire ONE specific delivery\n * attempt (e.g. one that failed) by attempt-id.\n */\n\nimport { z } from \"zod\";\n\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst ReplayWebhookDeliveryInputShape = {\n attempt_id: z.string().uuid().describe(\"Delivery-attempt UUID (from `list_webhook_deliveries`).\"),\n} as const;\ntype ReplayWebhookDeliveryInputShape = typeof ReplayWebhookDeliveryInputShape;\n\nexport interface ReplayWebhookDeliveryOutput {\n readonly queued: true;\n}\n\nexport const replayWebhookDeliveryTool: Tool<\n ReplayWebhookDeliveryInputShape,\n ReplayWebhookDeliveryOutput\n> = {\n name: \"replay_webhook_delivery\",\n description:\n \"Queue a re-attempt for one specific webhook-delivery attempt by id. Useful when an endpoint was temporarily down. Result of the replay shows up as a new entry in `list_webhook_deliveries`.\",\n annotations: {\n title: \"Replay Webhook Delivery\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n inputSchema: z.object(ReplayWebhookDeliveryInputShape),\n handler: async (input, ctx): Promise<Result<ReplayWebhookDeliveryOutput, ToolError>> => {\n const result = await ctx.api.replayWebhookDelivery(input.attempt_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok({ queued: true });\n },\n};\n","/**\n * Tool: `rotate_webhook_secret` — mint a new signing secret for a\n * webhook. Returns the FULL new secret once; the old secret is no\n * longer accepted on subsequent deliveries.\n */\n\nimport { z } from \"zod\";\n\nimport type { WebhookCreatedResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst RotateWebhookSecretInputShape = {\n webhook_id: z.string().uuid().describe(\"Webhook endpoint UUID.\"),\n} as const;\ntype RotateWebhookSecretInputShape = typeof RotateWebhookSecretInputShape;\n\nexport type RotateWebhookSecretOutput = WebhookCreatedResponse;\n\nexport const rotateWebhookSecretTool: Tool<\n RotateWebhookSecretInputShape,\n RotateWebhookSecretOutput\n> = {\n name: \"rotate_webhook_secret\",\n description:\n \"Generate a new signing secret for a webhook. The new secret is returned IN FULL once — tell the user to store it. Subsequent deliveries are signed with the new secret; the old one stops working immediately.\",\n annotations: {\n title: \"Rotate Webhook Secret\",\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: false,\n openWorldHint: false,\n },\n inputSchema: z.object(RotateWebhookSecretInputShape),\n handler: async (input, ctx): Promise<Result<RotateWebhookSecretOutput, ToolError>> => {\n const result = await ctx.api.rotateWebhookSecret(input.webhook_id);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `test_webhook` — fire a synthetic event to a webhook endpoint\n * and return the receiver's response synchronously.\n *\n * Unlike a real production delivery (which goes through the outbox\n * and retries), this is a one-shot blocking call so the operator can\n * see immediately whether their receiver works.\n */\n\nimport { z } from \"zod\";\n\nimport type { TestWebhookResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst TestWebhookInputShape = {\n webhook_id: z.string().uuid().describe(\"Webhook endpoint UUID.\"),\n event_type: z\n .string()\n .min(1)\n .max(100)\n .describe(\n \"Event type slug whose sample payload to send (see `list_webhook_event_types` for the catalog).\"\n ),\n} as const;\ntype TestWebhookInputShape = typeof TestWebhookInputShape;\n\nexport type TestWebhookOutput = TestWebhookResponse;\n\nexport const testWebhookTool: Tool<TestWebhookInputShape, TestWebhookOutput> = {\n name: \"test_webhook\",\n description:\n \"Dispatch a synthetic event with the sample payload for the given `event_type` to the webhook endpoint and return the receiver's response synchronously. Includes HTTP status, elapsed time, and a snippet of the response body so the operator can diagnose receiver bugs.\",\n annotations: {\n title: \"Test Webhook\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: true,\n },\n inputSchema: z.object(TestWebhookInputShape),\n handler: async (input, ctx): Promise<Result<TestWebhookOutput, ToolError>> => {\n const result = await ctx.api.testWebhook(input.webhook_id, { event_type: input.event_type });\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Tool: `update_webhook` — patch url / event_types / active.\n */\n\nimport { z } from \"zod\";\n\nimport type { WebhookResponse } from \"../../../domain/ports/api-gateway.js\";\nimport { err, ok, type Result } from \"../../../shared/result.js\";\nimport { mapApiError } from \"../../services/api-error-mapper.js\";\nimport type { Tool } from \"../_shared/tool.js\";\nimport type { ToolError } from \"../_shared/tool-result.js\";\n\nconst UpdateWebhookInputShape = {\n webhook_id: z.string().uuid().describe(\"Webhook UUID.\"),\n url: z.string().url().optional().describe(\"New endpoint URL.\"),\n event_types: z\n .array(z.string())\n .max(50)\n .optional()\n .describe(\"Replace the subscribed-event-types list.\"),\n is_active: z.boolean().optional().describe(\"Enable / disable delivery.\"),\n} as const;\ntype UpdateWebhookInputShape = typeof UpdateWebhookInputShape;\n\nexport type UpdateWebhookOutput = WebhookResponse;\n\nexport const updateWebhookTool: Tool<UpdateWebhookInputShape, UpdateWebhookOutput> = {\n name: \"update_webhook\",\n description:\n \"Update a webhook endpoint's URL, event-type subscriptions, and/or active flag. Signing secret is NOT rotated by this call — use `rotate_webhook_secret` for that.\",\n annotations: {\n title: \"Update Webhook\",\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n inputSchema: z.object(UpdateWebhookInputShape),\n handler: async (input, ctx): Promise<Result<UpdateWebhookOutput, ToolError>> => {\n const body = {\n ...(input.url !== undefined ? { url: input.url } : {}),\n ...(input.event_types !== undefined ? { event_types: input.event_types } : {}),\n ...(input.is_active !== undefined ? { is_active: input.is_active } : {}),\n };\n const result = await ctx.api.updateWebhook(input.webhook_id, body);\n if (result.isErr()) return err(mapApiError(result.error));\n return ok(result.value);\n },\n};\n","/**\n * Central registry of every {@link Tool} the server exposes.\n *\n * Imported by both transport bootstraps. The transport passes a\n * `register` callback that wires each tool into the underlying MCP\n * SDK. This indirection keeps every tool's generic types narrow:\n * the registry never widens `Tool<Input, Output>` to `Tool<unknown,\n * unknown>` and there is no `any` anywhere on the data path.\n *\n * Composition-root-style file: grandfathered for the 200-LOC file-size\n * rule because its length scales with tool count, not design\n * complexity (`scripts/check-file-sizes.ts` GRANDFATHERED).\n */\n\nimport type { RegisterTool } from \"./tools/_shared/tool.js\";\nimport { createApiKeyTool } from \"./tools/account/create-api-key.tool.js\";\nimport { getAccountTool } from \"./tools/account/get-account.tool.js\";\nimport { inviteUserTool } from \"./tools/account/invite-user.tool.js\";\nimport { listApiKeysTool } from \"./tools/account/list-api-keys.tool.js\";\nimport { listOrgRolesTool } from \"./tools/account/list-org-roles.tool.js\";\nimport { listOrgUsersTool } from \"./tools/account/list-org-users.tool.js\";\nimport { removeUserTool } from \"./tools/account/remove-user.tool.js\";\nimport { revokeApiKeyTool } from \"./tools/account/revoke-api-key.tool.js\";\nimport { transferOwnershipTool } from \"./tools/account/transfer-ownership.tool.js\";\nimport { updateOrgTool } from \"./tools/account/update-org.tool.js\";\nimport { updateUserRoleTool } from \"./tools/account/update-user-role.tool.js\";\nimport { deleteAlertDestinationTool } from \"./tools/alert-notifications/delete-alert-destination.tool.js\";\nimport { getCampaignAlertOverridesTool } from \"./tools/alert-notifications/get-campaign-alert-overrides.tool.js\";\nimport { listAlertDestinationsTool } from \"./tools/alert-notifications/list-alert-destinations.tool.js\";\nimport { setAlertDestinationVersionTool } from \"./tools/alert-notifications/set-alert-destination-version.tool.js\";\nimport { setCampaignAlertOverridesTool } from \"./tools/alert-notifications/set-campaign-alert-overrides.tool.js\";\nimport { getAlertStatsTool } from \"./tools/alerts/get-alert-stats.tool.js\";\nimport { listAlertsTool } from \"./tools/alerts/list-alerts.tool.js\";\nimport { updateAlertStatusTool } from \"./tools/alerts/update-alert-status.tool.js\";\nimport { getBillingSummaryTool } from \"./tools/billing/get-billing-summary.tool.js\";\nimport { getUsageSummaryTool } from \"./tools/billing/get-usage-summary.tool.js\";\nimport { listBalanceHistoryTool } from \"./tools/billing/list-balance-history.tool.js\";\nimport { listUsageTool } from \"./tools/billing/list-usage.tool.js\";\nimport { archiveCampaignGroupTool } from \"./tools/campaign-groups/archive-campaign-group.tool.js\";\nimport { cancelCampaignGroupTool } from \"./tools/campaign-groups/cancel-campaign-group.tool.js\";\nimport { createCampaignGroupTool } from \"./tools/campaign-groups/create-campaign-group.tool.js\";\nimport { getCampaignGroupTool } from \"./tools/campaign-groups/get-campaign-group.tool.js\";\nimport { listCampaignGroupsTool } from \"./tools/campaign-groups/list-campaign-groups.tool.js\";\nimport { pauseCampaignGroupScheduleTool } from \"./tools/campaign-groups/pause-campaign-group-schedule.tool.js\";\nimport { resumeCampaignGroupScheduleTool } from \"./tools/campaign-groups/resume-campaign-group-schedule.tool.js\";\nimport { runCampaignGroupTool } from \"./tools/campaign-groups/run-campaign-group.tool.js\";\nimport { unarchiveCampaignGroupTool } from \"./tools/campaign-groups/unarchive-campaign-group.tool.js\";\nimport { updateCampaignGroupTool } from \"./tools/campaign-groups/update-campaign-group.tool.js\";\nimport { archiveCampaignTool } from \"./tools/campaigns/archive-campaign.tool.js\";\nimport { cancelCampaignTool } from \"./tools/campaigns/cancel-campaign.tool.js\";\nimport { createCampaignTool } from \"./tools/campaigns/create-campaign.tool.js\";\nimport { getCampaignTool } from \"./tools/campaigns/get-campaign.tool.js\";\nimport { listCampaignRunsTool } from \"./tools/campaigns/list-campaign-runs.tool.js\";\nimport { listCampaignsTool } from \"./tools/campaigns/list-campaigns.tool.js\";\nimport { runCampaignTool } from \"./tools/campaigns/run-campaign.tool.js\";\nimport { unarchiveCampaignTool } from \"./tools/campaigns/unarchive-campaign.tool.js\";\nimport { updateCampaignTool } from \"./tools/campaigns/update-campaign.tool.js\";\nimport { createCustomRuleTool } from \"./tools/custom-rules/create-custom-rule.tool.js\";\nimport { deleteCustomRuleTool } from \"./tools/custom-rules/delete-custom-rule.tool.js\";\nimport { getCustomRuleTool } from \"./tools/custom-rules/get-custom-rule.tool.js\";\nimport { listCustomRulesTool } from \"./tools/custom-rules/list-custom-rules.tool.js\";\nimport { testCustomRuleTool } from \"./tools/custom-rules/test-custom-rule.tool.js\";\nimport { updateCustomRuleTool } from \"./tools/custom-rules/update-custom-rule.tool.js\";\nimport { listEmulatorsTool } from \"./tools/emulators/list-emulators.tool.js\";\nimport { listGeosTool } from \"./tools/geos/list-geos.tool.js\";\nimport { listInvoicesTool } from \"./tools/invoicing/list-invoices.tool.js\";\nimport { createPolicySetTool } from \"./tools/policy-sets/create-policy-set.tool.js\";\nimport { deletePolicySetTool } from \"./tools/policy-sets/delete-policy-set.tool.js\";\nimport { getPolicySetTool } from \"./tools/policy-sets/get-policy-set.tool.js\";\nimport { listPolicySetsTool } from \"./tools/policy-sets/list-policy-sets.tool.js\";\nimport { requestPolicySetApprovalTool } from \"./tools/policy-sets/request-policy-set-approval.tool.js\";\nimport { updatePolicySetTool } from \"./tools/policy-sets/update-policy-set.tool.js\";\nimport { cancelRunTool } from \"./tools/runs/cancel-run.tool.js\";\nimport { getRunTool } from \"./tools/runs/get-run.tool.js\";\nimport { listRunScansTool } from \"./tools/runs/list-run-scans.tool.js\";\nimport { cancelScanTool } from \"./tools/scans/cancel-scan.tool.js\";\nimport { createBulkScansTool } from \"./tools/scans/create-bulk-scans.tool.js\";\nimport { createScanTool } from \"./tools/scans/create-scan.tool.js\";\nimport { getScanTool } from \"./tools/scans/get-scan.tool.js\";\nimport { listScansTool } from \"./tools/scans/list-scans.tool.js\";\nimport { recheckScansTool } from \"./tools/scans/recheck-scans.tool.js\";\nimport { deleteTagDefinitionTool } from \"./tools/tags/delete-tag-definition.tool.js\";\nimport { getTagDefinitionTool } from \"./tools/tags/get-tag-definition.tool.js\";\nimport { listScanTagsTool } from \"./tools/tags/list-scan-tags.tool.js\";\nimport { listTagsTool } from \"./tools/tags/list-tags.tool.js\";\nimport { updateTagDefinitionTool } from \"./tools/tags/update-tag-definition.tool.js\";\nimport { bulkReplayWebhookTool } from \"./tools/webhooks/bulk-replay-webhook.tool.js\";\nimport { createWebhookTool } from \"./tools/webhooks/create-webhook.tool.js\";\nimport { deleteWebhookTool } from \"./tools/webhooks/delete-webhook.tool.js\";\nimport { getWebhookTool } from \"./tools/webhooks/get-webhook.tool.js\";\nimport { listWebhookDeliveriesTool } from \"./tools/webhooks/list-webhook-deliveries.tool.js\";\nimport { listWebhookEventTypesTool } from \"./tools/webhooks/list-webhook-event-types.tool.js\";\nimport { listWebhooksTool } from \"./tools/webhooks/list-webhooks.tool.js\";\nimport { replayWebhookDeliveryTool } from \"./tools/webhooks/replay-webhook-delivery.tool.js\";\nimport { rotateWebhookSecretTool } from \"./tools/webhooks/rotate-webhook-secret.tool.js\";\nimport { testWebhookTool } from \"./tools/webhooks/test-webhook.tool.js\";\nimport { updateWebhookTool } from \"./tools/webhooks/update-webhook.tool.js\";\n\n/**\n * Register every tool with the supplied callback. Grouped by domain\n * for readability — no order significance.\n */\nexport function registerAllTools(register: RegisterTool): void {\n // account\n register(getAccountTool);\n register(updateOrgTool);\n register(listOrgUsersTool);\n register(inviteUserTool);\n register(updateUserRoleTool);\n register(removeUserTool);\n register(transferOwnershipTool);\n register(listOrgRolesTool);\n register(listApiKeysTool);\n register(createApiKeyTool);\n register(revokeApiKeyTool);\n // reference data\n register(listGeosTool);\n register(listEmulatorsTool);\n // scans\n register(getScanTool);\n register(listScansTool);\n register(cancelScanTool);\n register(createBulkScansTool);\n register(createScanTool);\n register(recheckScansTool);\n // campaigns\n register(getCampaignTool);\n register(listCampaignsTool);\n register(archiveCampaignTool);\n register(unarchiveCampaignTool);\n register(cancelCampaignTool);\n register(runCampaignTool);\n register(createCampaignTool);\n register(updateCampaignTool);\n register(listCampaignRunsTool);\n // runs\n register(getRunTool);\n register(listRunScansTool);\n register(cancelRunTool);\n // campaign groups\n register(getCampaignGroupTool);\n register(listCampaignGroupsTool);\n register(createCampaignGroupTool);\n register(updateCampaignGroupTool);\n register(runCampaignGroupTool);\n register(cancelCampaignGroupTool);\n register(archiveCampaignGroupTool);\n register(unarchiveCampaignGroupTool);\n register(pauseCampaignGroupScheduleTool);\n register(resumeCampaignGroupScheduleTool);\n // tags\n register(listTagsTool);\n register(getTagDefinitionTool);\n register(updateTagDefinitionTool);\n register(deleteTagDefinitionTool);\n register(listScanTagsTool);\n // custom rules\n register(listCustomRulesTool);\n register(getCustomRuleTool);\n register(createCustomRuleTool);\n register(updateCustomRuleTool);\n register(deleteCustomRuleTool);\n register(testCustomRuleTool);\n // policy sets\n register(listPolicySetsTool);\n register(getPolicySetTool);\n register(createPolicySetTool);\n register(updatePolicySetTool);\n register(deletePolicySetTool);\n register(requestPolicySetApprovalTool);\n // alerts\n register(listAlertsTool);\n register(updateAlertStatusTool);\n register(getAlertStatsTool);\n // webhooks\n register(listWebhooksTool);\n register(getWebhookTool);\n register(createWebhookTool);\n register(updateWebhookTool);\n register(deleteWebhookTool);\n register(listWebhookEventTypesTool);\n register(listWebhookDeliveriesTool);\n register(testWebhookTool);\n register(rotateWebhookSecretTool);\n register(replayWebhookDeliveryTool);\n register(bulkReplayWebhookTool);\n // billing\n register(getBillingSummaryTool);\n register(listUsageTool);\n register(getUsageSummaryTool);\n register(listBalanceHistoryTool);\n // invoicing\n register(listInvoicesTool);\n // alert notifications\n register(listAlertDestinationsTool);\n register(deleteAlertDestinationTool);\n register(setAlertDestinationVersionTool);\n register(getCampaignAlertOverridesTool);\n register(setCampaignAlertOverridesTool);\n}\n","/**\n * Bridge from the {@link Tool} contract to the MCP SDK's\n * `server.registerTool(...)` call.\n *\n * Used by both transport bootstraps. Keeps the SDK-specific shape of\n * `CallToolResult` and the conversion of `ToolError` -> error envelope\n * out of every individual tool — tools only know about `Result` and\n * `ToolError`.\n *\n * The `ctxProvider` indirection lets the HTTP bootstrap supply a\n * fresh per-request {@link ToolContext} via a lexical closure captured\n * inside `createHttpRequestHandler.handle`, while the stdio bootstrap\n * supplies a process-wide constant. The tool registry stays oblivious\n * to the difference.\n */\n\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\";\n\nimport { registerAllTools } from \"../../application/tool-registry.js\";\nimport type { ToolContext } from \"../../application/tools/_shared/tool-context.js\";\nimport type { ToolError } from \"../../application/tools/_shared/tool-result.js\";\n\n/**\n * Provider returning the {@link ToolContext} active for the current\n * tool call. In stdio mode, always the same instance. In HTTP mode,\n * a per-request closure created inside the request handler so the SDK\n * callback (invoked synchronously during `Server.connect`) sees the\n * correct caller's API gateway / logger / request-id.\n */\nexport type ToolContextProvider = () => ToolContext;\n\n/**\n * Register every tool from the registry into the given MCP server.\n *\n * @param server - SDK `McpServer` to receive the registrations.\n * @param ctxProvider - Function returning the active `ToolContext`.\n */\nexport function wireToolsIntoMcpServer(server: McpServer, ctxProvider: ToolContextProvider): void {\n registerAllTools((tool) => {\n // The SDK accepts either a `ZodRawShape` (record of zod schemas)\n // or a full `ZodObject` for `inputSchema`. We pass the `ZodObject`\n // — same source of truth as the handler's input type, no chance\n // of drift between schema and TS type.\n //\n // The two casts below work around a typing limitation in\n // `@modelcontextprotocol/sdk@1.29`:\n // 1. `inputSchema: ... as never` — the SDK's union of\n // `RegisterToolParams` overloads makes TS try to resolve our\n // `ZodObject<RawShape>` against `ZodRawShape | ZodObject<...>`\n // and blow the instantiation depth limit. The cast skips the\n // union-check; the SDK reads the value at runtime and accepts\n // both shapes.\n // 2. The callback cast at the end — because of (1), TS picks the\n // no-input-schema overload whose callback is `(extra) => ...`\n // instead of `(args, extra) => ...`. The runtime invokes our\n // callback with both args; the cast realigns the signatures.\n //\n // Both casts are unsafe to TS only; runtime behaviour is identical\n // to the strictly-typed path. When the SDK ships a zod-version-\n // agnostic public type for `registerTool`, drop both.\n server.registerTool(\n tool.name,\n {\n title: tool.annotations.title,\n description: tool.description,\n inputSchema: tool.inputSchema as never,\n annotations: {\n title: tool.annotations.title,\n readOnlyHint: tool.annotations.readOnlyHint,\n destructiveHint: tool.annotations.destructiveHint,\n idempotentHint: tool.annotations.idempotentHint,\n openWorldHint: tool.annotations.openWorldHint,\n },\n },\n (async (rawArgs: unknown, _extra: unknown): Promise<CallToolResult> => {\n const ctx = ctxProvider();\n // `rawArgs` was already validated by the SDK; re-parse once\n // through our schema to recover the precise narrow type the\n // handler needs. Cheap; runs only once per call.\n const parsed = tool.inputSchema.parse(rawArgs);\n const result = await tool.handler(parsed, ctx);\n if (result.isErr()) {\n return toolErrorToMcpResult(result.error);\n }\n return toolOkToMcpResult(result.value);\n }) as never\n );\n });\n}\n\nfunction toolOkToMcpResult(value: unknown): CallToolResult {\n const isPlainObject = value !== null && typeof value === \"object\" && !Array.isArray(value);\n return {\n content: [{ type: \"text\", text: JSON.stringify(value, null, 2) }],\n ...(isPlainObject ? { structuredContent: value as Record<string, unknown> } : {}),\n };\n}\n\nfunction toolErrorToMcpResult(error: ToolError): CallToolResult {\n return {\n isError: true,\n content: [{ type: \"text\", text: formatToolError(error) }],\n };\n}\n\nfunction formatToolError(error: ToolError): string {\n switch (error.kind) {\n case \"unauthorized\":\n return `Unauthorized: ${error.message}`;\n case \"forbidden\":\n return `Forbidden${error.code === undefined ? \"\" : ` (${error.code})`}: ${error.message}`;\n case \"not-found\":\n return `Not found: ${error.message}`;\n case \"rate-limited\":\n return `Rate limited: ${error.message}${\n error.retryAfterMs === undefined ? \"\" : ` (retry after ${String(error.retryAfterMs)} ms)`\n }`;\n case \"invalid-input\":\n return `Invalid input: ${error.message}`;\n case \"upstream\":\n return `Upstream error: ${error.message}`;\n case \"internal\":\n return `Internal error: ${error.message}`;\n }\n}\n","/**\n * Composition root for the stdio transport.\n *\n * One process = one tenant. The bearer comes from the\n * `KAMINARI_AD_API_KEY` env var (parsed into `Config.stdioApiKey`).\n * All adapters are constructed once, threaded into a single\n * {@link ToolContext}, and shared across tool calls — safe because\n * there is no cross-tenant boundary in stdio mode.\n *\n * For tenant-isolation rules, see the http bootstrap and\n * CONTRIBUTING.md \"Tenant isolation\".\n */\n\nimport process from \"node:process\";\n\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\n\nimport { BearerToken } from \"../../domain/value-objects/bearer-token.js\";\nimport { newRequestId } from \"../../domain/value-objects/request-id.js\";\nimport { createHttpApiGateway } from \"../../infrastructure/api/http-api-gateway.js\";\nimport { createPinoLogger } from \"../../infrastructure/logging/pino-logger.js\";\nimport type { Config } from \"../../shared/config.js\";\nimport { NAME, VERSION } from \"../../shared/version.js\";\nimport { wireToolsIntoMcpServer } from \"../shared/wire-tools.js\";\n\n/**\n * Build the stdio MCP server, connect its transport, and resolve when\n * the transport closes. Returns a process exit code.\n */\nexport async function bootstrapStdio(config: Config): Promise<number> {\n const logger = createPinoLogger(config.logLevel, config.logFormat);\n\n if (config.stdioApiKey === undefined) {\n logger.fatal({}, \"stdio.missing_api_key\");\n process.stderr.write(\n \"KAMINARI_AD_API_KEY is required in stdio mode. Generate one in Settings -> API Keys.\\n\"\n );\n return 2;\n }\n const bearer = BearerToken.fromString(config.stdioApiKey);\n if (bearer === undefined) {\n logger.fatal({}, \"stdio.invalid_api_key\");\n return 2;\n }\n\n const requestId = newRequestId();\n const scopedLogger = logger.child({ request_id: requestId, bearer_hash: bearer.hash() });\n const api = createHttpApiGateway({\n baseUrl: config.apiBaseUrl,\n bearer,\n requestId,\n logger: scopedLogger,\n });\n\n const ctx = { api, logger: scopedLogger, requestId };\n const server = new McpServer({ name: NAME, version: VERSION });\n wireToolsIntoMcpServer(server, () => ctx);\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n scopedLogger.info({}, \"stdio.ready\");\n\n await new Promise<void>((resolve) => {\n transport.onclose = (): void => {\n resolve();\n };\n });\n scopedLogger.info({}, \"stdio.shutdown\");\n return 0;\n}\n","/**\n * Production {@link Clock} adapter. Reads the system clock via\n * `Date.now()`. Tests use `FakeClock` instead.\n */\n\nimport type { Clock } from \"../../domain/ports/clock.js\";\n\n/**\n * Returns a fresh `Clock` backed by `Date.now()`.\n */\nexport function createSystemClock(): Clock {\n return {\n nowMs(): number {\n return Date.now();\n },\n };\n}\n","/**\n * Per-tenant leaky-bucket rate limiter.\n *\n * Tenant key = `bearerHash` (NOT the raw bearer). Each bucket has a\n * capacity of `rpm` tokens and refills `rpm / 60` tokens per second.\n *\n * The store is in-memory per process: it does NOT coordinate across\n * replicas. A multi-replica deployment would multiply the effective\n * limit by N. This is acceptable as a first-line defense against\n * runaway agent loops and brute-force token scans; the API has its\n * own rate limit as the authoritative gate.\n *\n * Memory: we sweep the bucket map every {@link SWEEP_EVERY_N_CHECKS}\n * `check()` calls and evict any bucket that hasn't been touched in\n * {@link SWEEP_IDLE_MS}. After that long an idle period the bucket\n * is fully refilled (refill rate is `rpm / 60_000` ms, so anything\n * past the refill window is at capacity), and dropping a full bucket\n * is equivalent to a fresh allocation on the next request — no\n * loss of rate-limit fidelity. Prevents unbounded growth from\n * one-shot bearers / rotated API keys.\n *\n * The bucket map only holds hashes — no tenant data ever leaks here.\n */\n\nimport type { Clock } from \"../../domain/ports/clock.js\";\nimport type { RateLimitDecision, RateLimiter } from \"../../domain/ports/rate-limiter.js\";\n\ninterface Bucket {\n /** Available tokens (fractional, refilled over time). */\n tokens: number;\n /** When tokens were last refilled (epoch ms). */\n lastRefillMs: number;\n}\n\n/**\n * How often (in `check()` calls) the limiter walks its bucket map to\n * evict full-and-idle buckets. Tuned so a single-request burst of N\n * distinct bearers cannot grow the map past ~`2 * SWEEP_EVERY_N_CHECKS`.\n */\nconst SWEEP_EVERY_N_CHECKS = 256;\n/**\n * Bucket must be idle for at least this long since the last `check`\n * to be sweep-eligible. Equal to the refill window (60s) so the\n * bucket is guaranteed to be at full capacity when we drop it —\n * eviction has no observable effect on the next caller.\n */\nconst SWEEP_IDLE_MS = 60_000;\n\n/**\n * Build a leaky-bucket rate limiter.\n *\n * @param clock - Clock for token refill calculations.\n * @param rpm - Requests-per-minute capacity per tenant hash.\n */\nexport function createLeakyBucketRateLimiter(clock: Clock, rpm: number): RateLimiter {\n if (rpm < 1) throw new Error(\"rpm must be >= 1\");\n const refillPerMs = rpm / 60_000;\n const buckets = new Map<string, Bucket>();\n let checkCount = 0;\n\n function refill(bucket: Bucket): void {\n const now = clock.nowMs();\n const elapsed = now - bucket.lastRefillMs;\n if (elapsed > 0) {\n bucket.tokens = Math.min(rpm, bucket.tokens + elapsed * refillPerMs);\n bucket.lastRefillMs = now;\n }\n }\n\n function sweepIfDue(): void {\n checkCount += 1;\n if (checkCount % SWEEP_EVERY_N_CHECKS !== 0) return;\n const now = clock.nowMs();\n for (const [hash, bucket] of buckets) {\n if (now - bucket.lastRefillMs >= SWEEP_IDLE_MS) {\n buckets.delete(hash);\n }\n }\n }\n\n return {\n check(tenantHash: string): RateLimitDecision {\n sweepIfDue();\n let bucket = buckets.get(tenantHash);\n if (bucket === undefined) {\n bucket = { tokens: rpm, lastRefillMs: clock.nowMs() };\n buckets.set(tenantHash, bucket);\n }\n refill(bucket);\n if (bucket.tokens >= 1) {\n bucket.tokens -= 1;\n return { allowed: true };\n }\n const deficit = 1 - bucket.tokens;\n const retryAfterMs = Math.ceil(deficit / refillPerMs);\n return { allowed: false, retryAfterMs };\n },\n };\n}\n","/**\n * In-memory implementation of {@link SessionStore}.\n *\n * Holds entries keyed by `Mcp-Session-Id`, valued by\n * `{ bearerHash, expiresAtMs }`. The bearer hash is what makes\n * tenant-isolation rule #9 work: a session bound to bearer A cannot be\n * re-used by bearer B.\n *\n * State characteristics:\n * - Per-process, in-memory only. Not durable; restart wipes sessions.\n * - Idle TTL: the entry is refreshed on every successful checkAndTouch.\n * - Opportunistic sweep on `bind`: every {@link SWEEP_EVERY_N_BINDS}\n * binds we walk the map and evict every expired entry. Prevents\n * unbounded growth when sessions are created but never re-visited\n * (a common pattern when clients reconnect with a fresh session id\n * instead of resuming the old one). Lazy in steady state, bounded\n * in worst case by `2 * SWEEP_EVERY_N_BINDS` extra map entries.\n *\n * No tenant data ever lives in this store — only short hex hashes.\n */\n\nimport type { Clock } from \"../../domain/ports/clock.js\";\nimport type { SessionCheck, SessionStore } from \"../../domain/ports/session-store.js\";\nimport type { SessionId } from \"../../domain/value-objects/session-id.js\";\n\ninterface Entry {\n readonly bearerHash: string;\n expiresAtMs: number;\n}\n\n/**\n * How often (in `bind()` calls) the store walks its own map to evict\n * expired entries. Picked low enough that a one-shot client storm of\n * never-revisited sessions cannot grow the map past ~2x this value.\n */\nconst SWEEP_EVERY_N_BINDS = 128;\n\n/**\n * Build an in-memory session store.\n *\n * @param clock - Clock used to compute expiry. Injected for tests.\n * @param ttlMs - Idle TTL in milliseconds. After this much elapsed\n * time without a checkAndTouch the entry is treated\n * as expired.\n */\nexport function createInMemorySessionStore(clock: Clock, ttlMs: number): SessionStore {\n const entries = new Map<SessionId, Entry>();\n let bindCount = 0;\n\n function isExpired(entry: Entry): boolean {\n return entry.expiresAtMs < clock.nowMs();\n }\n\n function sweepIfDue(): void {\n bindCount += 1;\n if (bindCount % SWEEP_EVERY_N_BINDS !== 0) return;\n const now = clock.nowMs();\n for (const [id, entry] of entries) {\n if (entry.expiresAtMs < now) entries.delete(id);\n }\n }\n\n return {\n bind(sessionId: SessionId, bearerHash: string): SessionCheck {\n sweepIfDue();\n const existing = entries.get(sessionId);\n if (existing !== undefined && !isExpired(existing)) {\n if (existing.bearerHash !== bearerHash) {\n return { kind: \"bound-to-other-bearer\" };\n }\n existing.expiresAtMs = clock.nowMs() + ttlMs;\n return { kind: \"ok\" };\n }\n entries.set(sessionId, { bearerHash, expiresAtMs: clock.nowMs() + ttlMs });\n return { kind: \"ok\" };\n },\n\n checkAndTouch(sessionId: SessionId, bearerHash: string): SessionCheck {\n const entry = entries.get(sessionId);\n if (entry === undefined || isExpired(entry)) {\n if (entry !== undefined) entries.delete(sessionId);\n return { kind: \"unknown\" };\n }\n if (entry.bearerHash !== bearerHash) {\n return { kind: \"bound-to-other-bearer\" };\n }\n entry.expiresAtMs = clock.nowMs() + ttlMs;\n return { kind: \"ok\" };\n },\n\n destroy(sessionId: SessionId): void {\n entries.delete(sessionId);\n },\n };\n}\n","/**\n * MCP `Mcp-Session-Id` header value, issued by the server on a\n * successful `initialize` and presented by the client on every\n * subsequent request.\n *\n * Branded so it can't be confused with a {@link RequestId} or any\n * other string ID flowing through the system.\n */\n\nimport { randomUUID } from \"node:crypto\";\n\ndeclare const sessionIdBrand: unique symbol;\n\nexport type SessionId = string & { readonly [sessionIdBrand]: never };\n\nconst SESSION_ID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-7][0-9a-f]{3}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\n/**\n * Generate a fresh session ID. UUID v4.\n */\nexport function newSessionId(): SessionId {\n return randomUUID() as SessionId;\n}\n\n/**\n * Parse a client-supplied `Mcp-Session-Id` header. Returns `undefined`\n * for malformed input — the transport then rejects the request 400.\n */\nexport function parseSessionId(raw: string): SessionId | undefined {\n return SESSION_ID_RE.test(raw) ? (raw as SessionId) : undefined;\n}\n","/**\n * Build a fresh {@link McpServer} + {@link StreamableHTTPServerTransport}\n * pair for a brand-new session.\n *\n * The transport's `onsessioninitialized` callback writes the new\n * session-id into the {@link SessionStore} (binding it to this\n * request's `bearerHash`) and into the in-process `liveSessions` cache\n * so subsequent requests on the same id reuse the same SDK state.\n * `onsessionclosed` and the defensive `onclose` walker free both\n * references when the transport tears down for any reason.\n *\n * Extracted from {@link createHttpRequestHandler} for the same reasons\n * as {@link resolveExistingSession}: under the file-size cap, plus\n * the factory is a natural unit-test seam.\n */\n\nimport { randomUUID } from \"node:crypto\";\n\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StreamableHTTPServerTransport } from \"@modelcontextprotocol/sdk/server/streamableHttp.js\";\n\nimport type { ApiGateway } from \"../../domain/ports/api-gateway.js\";\nimport type { Logger } from \"../../domain/ports/logger.js\";\nimport type { SessionStore } from \"../../domain/ports/session-store.js\";\nimport type { BearerToken } from \"../../domain/value-objects/bearer-token.js\";\nimport type { RequestId } from \"../../domain/value-objects/request-id.js\";\nimport { parseSessionId, type SessionId } from \"../../domain/value-objects/session-id.js\";\nimport { NAME, VERSION } from \"../../shared/version.js\";\nimport { wireToolsIntoMcpServer } from \"../shared/wire-tools.js\";\n\n/**\n * Per-session SDK state cached between requests. The transport holds\n * the JSON-RPC initialize/initialized handshake; the `ctxRef` lets the\n * MCP tool callback see a freshly-built `ApiGateway` for each request,\n * because the `Bearer` is per-request even though the transport is\n * per-session.\n */\nexport interface SessionEntry {\n readonly server: McpServer;\n readonly transport: StreamableHTTPServerTransport;\n readonly ctxRef: { current: { api: ApiGateway; logger: Logger; requestId: RequestId } };\n}\n\nexport interface InitNewSessionArgs {\n readonly requestId: RequestId;\n readonly reqLogger: Logger;\n readonly liveSessions: Map<SessionId, SessionEntry>;\n readonly sessions: SessionStore;\n readonly bearer: BearerToken;\n}\n\n/**\n * Create a fresh MCP server + transport pair, hook it into the\n * session store + cache, and return the cached entry ready for the\n * caller to set `ctxRef.current.api`.\n */\nexport async function initNewSession(args: InitNewSessionArgs): Promise<SessionEntry> {\n const { reqLogger, liveSessions, sessions, bearer } = args;\n const server = new McpServer({ name: NAME, version: VERSION });\n\n // `api` is the only field that MUST be overwritten before the first\n // SDK tool callback fires; the calling handler sets it back. The\n // seed value is a sentinel `Proxy` that throws on any property\n // access — guarantees that a buggy code path skipping the overwrite\n // blows up loudly instead of silently calling through to a stale\n // gateway.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const seedTarget = {} as ApiGateway;\n const seedApi = new Proxy(seedTarget, {\n get(): never {\n throw new Error(\"HttpRequestHandler invariant violated: ctxRef.api not set for this request\");\n },\n });\n const ctxRef: SessionEntry[\"ctxRef\"] = {\n current: { api: seedApi, logger: reqLogger, requestId: args.requestId },\n };\n wireToolsIntoMcpServer(server, () => ctxRef.current);\n\n const transport = new StreamableHTTPServerTransport({\n sessionIdGenerator: (): string => randomUUID(),\n enableJsonResponse: true,\n onsessioninitialized: (issued: string): void => {\n const sid = parseSessionId(issued);\n if (sid === undefined) return;\n sessions.bind(sid, bearer.fullHash());\n liveSessions.set(sid, { server, transport, ctxRef });\n },\n onsessionclosed: (closed: string): void => {\n const sid = parseSessionId(closed);\n if (sid === undefined) return;\n sessions.destroy(sid);\n liveSessions.delete(sid);\n },\n });\n transport.onclose = (): void => {\n // Defensive — `onsessionclosed` should already have fired, but if\n // the SDK tore down for any other reason (parse error, IO error)\n // walk the map and drop our cached reference too.\n for (const [sid, entry] of liveSessions) {\n if (entry.transport === transport) liveSessions.delete(sid);\n }\n };\n\n // @ts-expect-error SDK's Transport.onclose union (() => void) | undefined\n // mismatches Server.connect's expected non-optional type. Harmless;\n // fixed upstream in a future SDK release.\n await server.connect(transport);\n return { server, transport, ctxRef };\n}\n","/**\n * Pure decision policy: given the result of a {@link SessionStore}\n * lookup, what action should the transport take?\n *\n * Returned as a `SessionAction` union the transport switches on. No\n * I/O, no logging, no side effects.\n *\n * The transport (the only caller) then performs the action: continue,\n * destroy + 401, or 400.\n */\n\nimport type { SessionCheck } from \"../ports/session-store.js\";\n\nexport type SessionAction =\n /** Session is valid for this bearer; continue processing. */\n | { readonly kind: \"allow\" }\n /** Session-id unknown — likely the client never `initialize`d. */\n | { readonly kind: \"unknown-session\" }\n /**\n * Session-id is bound to a different bearer (potential token-swap\n * attack). Caller MUST destroy the session and respond 401.\n */\n | { readonly kind: \"reject-bearer-mismatch\" };\n\n/**\n * Map a raw {@link SessionCheck} into a {@link SessionAction}.\n *\n * @param check - The store's verdict.\n * @returns The action the transport must take.\n */\nexport function decideSessionAction(check: SessionCheck): SessionAction {\n switch (check.kind) {\n case \"ok\":\n return { kind: \"allow\" };\n case \"unknown\":\n return { kind: \"unknown-session\" };\n case \"bound-to-other-bearer\":\n return { kind: \"reject-bearer-mismatch\" };\n }\n}\n","/**\n * Look up a cached MCP session entry for an incoming `Mcp-Session-Id`\n * header, verifying tenant binding via the {@link SessionStore}.\n *\n * Extracted from {@link createHttpRequestHandler} so the handler stays\n * under the project's 200-effective-line cap and the session-lookup\n * branch can be unit-tested in isolation.\n *\n * Returns one of:\n * - `undefined` — no session header. Caller mints a fresh session.\n * - `\"rejected\"` — bad / wrong-bearer / expired session. The\n * response has already been written.\n * - `SessionEntry` — found, bearer matches, ready to reuse.\n */\n\nimport type { ServerResponse } from \"node:http\";\n\nimport type { Logger } from \"../../domain/ports/logger.js\";\nimport type { SessionStore } from \"../../domain/ports/session-store.js\";\nimport { decideSessionAction } from \"../../domain/services/session-binding-policy.js\";\nimport type { BearerToken } from \"../../domain/value-objects/bearer-token.js\";\nimport { parseSessionId, type SessionId } from \"../../domain/value-objects/session-id.js\";\nimport type { SessionEntry } from \"./mcp-session-factory.js\";\n\nexport interface SessionResolverArgs {\n readonly sessionIdRaw: string | undefined;\n readonly bearer: BearerToken;\n readonly reqLogger: Logger;\n readonly sessions: SessionStore;\n readonly liveSessions: Map<SessionId, SessionEntry>;\n readonly res: ServerResponse;\n}\n\nexport type ResolveResult = SessionEntry | undefined | \"rejected\";\n\n/**\n * Resolve the cached session for this request, or signal rejection.\n *\n * Writes the response body itself only when rejecting (400 / 401);\n * otherwise the caller is responsible for handing the request to the\n * SDK transport.\n */\nexport async function resolveExistingSession(args: SessionResolverArgs): Promise<ResolveResult> {\n const { sessionIdRaw, bearer, reqLogger, sessions, liveSessions, res } = args;\n if (sessionIdRaw === undefined) return undefined;\n\n const sessionId = parseSessionId(sessionIdRaw);\n if (sessionId === undefined) {\n writeJson(res, 400, { error: \"Invalid Mcp-Session-Id\" });\n return \"rejected\";\n }\n\n const action = decideSessionAction(sessions.checkAndTouch(sessionId, bearer.fullHash()));\n if (action.kind === \"reject-bearer-mismatch\") {\n sessions.destroy(sessionId);\n const evicted = liveSessions.get(sessionId);\n liveSessions.delete(sessionId);\n if (evicted !== undefined) await evicted.transport.close().catch(() => undefined);\n reqLogger.warn({}, \"http.session_bearer_mismatch\");\n writeJson(res, 401, { error: \"Session bound to a different bearer\" });\n return \"rejected\";\n }\n\n const cached = liveSessions.get(sessionId);\n if (cached !== undefined && action.kind === \"allow\") return cached;\n\n // Session unknown (TTL-evicted or never-initialised) — drop any\n // stale transport and let the caller mint a fresh one. The SDK will\n // respond 400 if the client tried to skip `initialize`.\n if (cached !== undefined) {\n liveSessions.delete(sessionId);\n await cached.transport.close().catch(() => undefined);\n }\n return undefined;\n}\n\nfunction writeJson(res: ServerResponse, status: number, body: unknown): void {\n res.writeHead(status, { \"content-type\": \"application/json\" });\n res.end(JSON.stringify(body));\n}\n","/**\n * Per-request HTTP handler for the hosted MCP endpoint.\n *\n * This module is the single place that enforces the 16 tenant-isolation\n * rules from CONTRIBUTING.md. Each rule reference (#N) maps to the\n * corresponding numbered entry there.\n *\n * The function returned by {@link createHttpRequestHandler} is pure\n * over its dependencies — no module-level state, no shared mutable\n * caches across handler factories. Long-lived dependencies\n * (`SessionStore`, `RateLimiter`, top-level `Logger`) are supplied by\n * the caller (`http-bootstrap.ts`), and each request constructs a\n * fresh per-request `ApiGateway` from the incoming Bearer.\n *\n * Session lifecycle (Streamable HTTP):\n *\n * 1. First POST (`initialize`) — no `Mcp-Session-Id` header. We\n * build a fresh {@link McpServer} + {@link StreamableHTTPServerTransport}\n * via {@link initNewSession}, let the SDK generate a session id,\n * then bind it to `bearerHash` in {@link SessionStore} and cache\n * the transport so the next request on the same session reuses\n * the same SDK state.\n * 2. Subsequent requests on the same session — same bearer ⇒ reuse\n * the cached transport (rule #9 enforced via `SessionStore`\n * bearer-hash equality); different bearer ⇒ destroy the session\n * and respond 401.\n * 3. Session close — when the SDK fires `transport.onclose` (client\n * sent DELETE /mcp, or session TTL expired and we evicted) we\n * drop the transport from the cache to free memory.\n *\n * Rule #10 (\"fresh state per tenant\") still holds: every cached\n * transport is bound to exactly one bearer (rule #9), and any attempt\n * to reuse a session id with a different bearer is rejected before any\n * SDK code runs.\n */\n\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\n\nimport type { Logger } from \"../../domain/ports/logger.js\";\nimport type { RateLimiter } from \"../../domain/ports/rate-limiter.js\";\nimport type { SessionStore } from \"../../domain/ports/session-store.js\";\nimport { BearerToken } from \"../../domain/value-objects/bearer-token.js\";\nimport { newRequestId } from \"../../domain/value-objects/request-id.js\";\nimport type { SessionId } from \"../../domain/value-objects/session-id.js\";\nimport { createHttpApiGateway } from \"../../infrastructure/api/http-api-gateway.js\";\nimport type { Config } from \"../../shared/config.js\";\nimport { initNewSession, type SessionEntry } from \"./mcp-session-factory.js\";\nimport { resolveExistingSession } from \"./session-resolver.js\";\n\nexport interface HttpRequestHandlerDeps {\n readonly config: Config;\n readonly logger: Logger;\n readonly sessions: SessionStore;\n readonly rateLimiter: RateLimiter;\n}\n\n/**\n * Build the per-request handler. Returns an async function with the\n * Node `http.Server` request-handler signature.\n */\nexport function createHttpRequestHandler(\n deps: HttpRequestHandlerDeps\n): (req: IncomingMessage, res: ServerResponse) => Promise<void> {\n const { config, logger, sessions, rateLimiter } = deps;\n\n // Transport cache. Closed over by the handler — one cache per\n // bootstrap, never shared across factories. Cleared on transport\n // close (see `mcp-session-factory.ts`).\n const liveSessions = new Map<SessionId, SessionEntry>();\n\n async function handle(req: IncomingMessage, res: ServerResponse): Promise<void> {\n // Rule #16 — health probe carries no tenant data and needs no auth.\n if (req.method === \"GET\" && req.url === \"/healthz\") {\n writeJson(res, 200, { status: \"ok\" });\n return;\n }\n\n if (\n req.url !== \"/mcp\" ||\n (req.method !== \"POST\" && req.method !== \"GET\" && req.method !== \"DELETE\")\n ) {\n writeJson(res, 404, { error: \"Not found\" });\n return;\n }\n\n // Rule #6 — missing Authorization is rejected without touching the API.\n const authHeader = first(req.headers.authorization);\n const bearer = BearerToken.fromAuthorizationHeader(authHeader);\n if (bearer === undefined) {\n writeJson(res, 401, { error: \"Authorization Bearer token required\" });\n return;\n }\n\n const requestId = newRequestId();\n const bearerHash = bearer.hash();\n const reqLogger = logger.child({ request_id: requestId, bearer_hash: bearerHash });\n\n // Rule #14 — per-bearer rate limit, checked before any API work.\n const rate = rateLimiter.check(bearer.fullHash());\n if (!rate.allowed) {\n reqLogger.warn(\n { rate_limited: true, retry_after_ms: rate.retryAfterMs ?? 0 },\n \"http.rate_limited\"\n );\n const headers =\n rate.retryAfterMs !== undefined\n ? { \"retry-after\": String(Math.ceil(rate.retryAfterMs / 1000)) }\n : {};\n writeJson(res, 429, { error: \"Rate limited\" }, headers);\n return;\n }\n\n const sessionIdRaw = first(req.headers[\"mcp-session-id\"]);\n const existingEntry = await resolveExistingSession({\n sessionIdRaw,\n bearer,\n reqLogger,\n sessions,\n liveSessions,\n res,\n });\n if (existingEntry === \"rejected\") return;\n\n // Rule #3 — per-request ApiGateway, holding only this request's Bearer.\n const api = createHttpApiGateway({\n baseUrl: config.apiBaseUrl,\n bearer,\n requestId,\n logger: reqLogger,\n });\n\n const entry =\n existingEntry ??\n (await initNewSession({ requestId, reqLogger, liveSessions, sessions, bearer }));\n\n // Swap the per-request context BEFORE handing off to the SDK so\n // the tool callback's lexical-closure read sees this request's\n // gateway.\n entry.ctxRef.current = { api, logger: reqLogger, requestId };\n\n try {\n await entry.transport.handleRequest(req, res);\n reqLogger.info({}, \"http.request_done\");\n } catch (cause) {\n reqLogger.error(\n { error_message: cause instanceof Error ? cause.message : \"unknown\" },\n \"http.handler_error\"\n );\n if (!res.headersSent) {\n writeJson(res, 500, { error: \"Internal server error\" });\n }\n }\n }\n\n return handle;\n}\n\nfunction writeJson(\n res: ServerResponse,\n status: number,\n body: unknown,\n extraHeaders: Readonly<Record<string, string>> = {}\n): void {\n res.writeHead(status, { \"content-type\": \"application/json\", ...extraHeaders });\n res.end(JSON.stringify(body));\n}\n\nfunction first(headerValue: string | string[] | number | undefined): string | undefined {\n if (headerValue === undefined) return undefined;\n if (Array.isArray(headerValue)) return headerValue[0];\n if (typeof headerValue === \"number\") return String(headerValue);\n return headerValue;\n}\n","/**\n * Composition root for the HTTP transport.\n *\n * Wires the long-lived per-process dependencies (logger, session store,\n * rate limiter) and hands the per-request handling off to\n * {@link createHttpRequestHandler} — which enforces every\n * tenant-isolation rule from CONTRIBUTING.md.\n *\n * Invariants enforced by this bootstrap itself:\n *\n * - Rule #5: `KAMINARI_AD_API_KEY` env var is REJECTED in HTTP mode.\n * If present, the process exits non-zero on startup so it can never\n * accidentally serve a default-Bearer fallback.\n * - Rule #1: every binding here is `const`. No module-level mutables.\n * - Rule #15: no telemetry SDK wired by default.\n */\n\nimport { createServer } from \"node:http\";\nimport process from \"node:process\";\n\nimport { createSystemClock } from \"../../infrastructure/clock/system-clock.js\";\nimport { createPinoLogger } from \"../../infrastructure/logging/pino-logger.js\";\nimport { createLeakyBucketRateLimiter } from \"../../infrastructure/rate-limit/leaky-bucket-rate-limiter.js\";\nimport { createInMemorySessionStore } from \"../../infrastructure/session/in-memory-session-store.js\";\nimport type { Config } from \"../../shared/config.js\";\nimport { createHttpRequestHandler } from \"./http-request-handler.js\";\n\n/**\n * Build and start the HTTP MCP server. Resolves with a process exit\n * code when the server shuts down (SIGTERM / SIGINT).\n */\nexport async function bootstrapHttp(config: Config): Promise<number> {\n const logger = createPinoLogger(config.logLevel, config.logFormat);\n\n // Rule #5 — KAMINARI_AD_API_KEY is stdio-only. Refuse to start with\n // it set in HTTP mode so we never serve a default-Bearer fallback.\n if (config.stdioApiKey !== undefined) {\n logger.fatal({}, \"http.api_key_env_forbidden\");\n return 2;\n }\n\n const clock = createSystemClock();\n const sessions = createInMemorySessionStore(clock, config.sessionTtlSec * 1000);\n const rateLimiter = createLeakyBucketRateLimiter(clock, config.rateLimitRpm);\n\n const handle = createHttpRequestHandler({ config, logger, sessions, rateLimiter });\n\n const httpServer = createServer((req, res) => {\n handle(req, res).catch((cause: unknown) => {\n logger.error(\n { error_message: cause instanceof Error ? cause.message : String(cause) },\n \"http.unhandled\"\n );\n if (!res.headersSent) {\n res.writeHead(500, { \"content-type\": \"application/json\" });\n res.end(JSON.stringify({ error: \"Internal server error\" }));\n }\n });\n });\n\n await new Promise<void>((resolve) => {\n httpServer.listen(config.httpPort, () => {\n logger.info({ http_port: config.httpPort }, \"http.ready\");\n resolve();\n });\n });\n\n await new Promise<void>((resolve) => {\n const onSignal = (): void => {\n logger.info({}, \"http.shutdown\");\n httpServer.close(() => {\n resolve();\n });\n };\n process.once(\"SIGTERM\", onSignal);\n process.once(\"SIGINT\", onSignal);\n });\n return 0;\n}\n","/**\n * Runtime configuration for `@kaminari-ad/mcp`.\n *\n * The single source of truth for all env-var reads. `process.env.X`\n * outside this file is a code-review blocker — every config value flows\n * through the zod-parsed {@link Config} object.\n */\n\nimport { z } from \"zod\";\n\nimport { err, ok, type Result } from \"./result.js\";\n\n/**\n * MCP transport. `stdio` is for local install (one process per user);\n * `http` is for the hosted multi-tenant endpoint.\n */\nexport const TransportSchema = z.enum([\"stdio\", \"http\"]);\nexport type Transport = z.infer<typeof TransportSchema>;\n\n/**\n * pino log level.\n */\nexport const LogLevelSchema = z.enum([\"trace\", \"debug\", \"info\", \"warn\", \"error\", \"fatal\"]);\nexport type LogLevel = z.infer<typeof LogLevelSchema>;\n\n/**\n * pino log output format.\n *\n * - `pretty` — colorised single-line ANSI output for terminals. Default\n * in stdio mode (operator reads stderr in their shell).\n * - `json` — newline-delimited JSON, one record per line. Default in\n * HTTP mode (Docker/k8s log aggregators expect JSON). MCP hosts that\n * capture stderr from the stdio process (Cursor, Claude Desktop)\n * parse much better with `json` — flip this when the operator is a\n * machine, not a human.\n */\nexport const LogFormatSchema = z.enum([\"pretty\", \"json\"]);\nexport type LogFormat = z.infer<typeof LogFormatSchema>;\n\n/**\n * Parsed configuration. All fields are `readonly` — mutation post-load\n * is a bug.\n */\nexport interface Config {\n readonly transport: Transport;\n readonly apiBaseUrl: string;\n readonly logLevel: LogLevel;\n readonly logFormat: LogFormat;\n readonly httpPort: number;\n readonly sessionTtlSec: number;\n readonly rateLimitRpm: number;\n /**\n * Set only in stdio mode. In HTTP mode the bootstrap MUST assert\n * this is `undefined` (see CONTRIBUTING.md \"Tenant isolation\" §5).\n */\n readonly stdioApiKey: string | undefined;\n}\n\n/**\n * Every env var carries the `KAMINARI_AD_` namespace prefix.\n *\n * Why: this process inherits the host's full environment (Cursor /\n * Claude Desktop / Docker compose / k8s pod), where `API_BASE_URL` /\n * `LOG_LEVEL` / `HTTP_PORT` are common generic names. Without a\n * namespace, another tool in the same shell trivially poisons our\n * config — e.g. `LOG_LEVEL=debug` set for some app library suddenly\n * makes the MCP server log every secret-redacted-but-still-noisy\n * request to stderr, and the user has no idea why. With the prefix\n * the boundary is explicit and `env | grep KAMINARI_AD_` enumerates\n * exactly what we read.\n */\nconst RawSchema = z.object({\n KAMINARI_AD_TRANSPORT: TransportSchema.default(\"stdio\"),\n KAMINARI_AD_API_URL: z.string().url().default(\"https://kaminari.ad\"),\n KAMINARI_AD_LOG_LEVEL: LogLevelSchema.default(\"info\"),\n KAMINARI_AD_LOG_FORMAT: LogFormatSchema.optional(),\n KAMINARI_AD_HTTP_PORT: z.coerce.number().int().min(0).max(65535).default(8080),\n KAMINARI_AD_SESSION_TTL_SEC: z.coerce.number().int().min(60).max(86_400).default(1800),\n KAMINARI_AD_RATE_LIMIT_RPM: z.coerce.number().int().min(1).max(10_000).default(120),\n KAMINARI_AD_API_KEY: z.string().min(8).optional(),\n});\n\n/**\n * Parse and validate environment variables into a {@link Config}.\n *\n * Returns `Err<ConfigError>` on validation failure. Caller (typically\n * `bin.ts`) prints the error and exits non-zero.\n *\n * `KAMINARI_AD_LOG_FORMAT` defaults are transport-dependent: `pretty`\n * for stdio (terminal-facing) and `json` for http (aggregator-facing).\n * If the user sets the env var explicitly, that wins.\n */\nexport function loadConfig(env: NodeJS.ProcessEnv): Result<Config, ConfigError> {\n const parsed = RawSchema.safeParse(env);\n if (!parsed.success) {\n return err({ kind: \"invalid\", issues: parsed.error.flatten().fieldErrors });\n }\n const raw = parsed.data;\n const transport = raw.KAMINARI_AD_TRANSPORT;\n const logFormat = raw.KAMINARI_AD_LOG_FORMAT ?? (transport === \"stdio\" ? \"pretty\" : \"json\");\n return ok({\n transport,\n apiBaseUrl: raw.KAMINARI_AD_API_URL,\n logLevel: raw.KAMINARI_AD_LOG_LEVEL,\n logFormat,\n httpPort: raw.KAMINARI_AD_HTTP_PORT,\n sessionTtlSec: raw.KAMINARI_AD_SESSION_TTL_SEC,\n rateLimitRpm: raw.KAMINARI_AD_RATE_LIMIT_RPM,\n stdioApiKey: raw.KAMINARI_AD_API_KEY,\n });\n}\n\n/**\n * Errors from {@link loadConfig}.\n */\nexport interface ConfigError {\n readonly kind: \"invalid\";\n readonly issues: Readonly<Record<string, readonly string[] | undefined>>;\n}\n","/**\n * CLI entrypoint for `@kaminari-ad/mcp`.\n *\n * Dispatches to a transport-specific composition root (stdio or HTTP)\n * based on the `--transport` flag (or `TRANSPORT` env var, with stdio\n * as the default).\n *\n * Wire-up is intentionally minimal — every dependency is constructed\n * inside the chosen bootstrap, never here. This file just parses argv\n * and config, then hands off.\n */\n\nimport process from \"node:process\";\n\nimport { loadConfig, type Transport } from \"./shared/config.js\";\nimport { NAME, VERSION } from \"./shared/version.js\";\n\nfunction parseTransportFlag(argv: readonly string[]): Transport | undefined {\n for (const arg of argv) {\n if (arg === \"--transport=stdio\" || arg === \"--transport=http\") {\n return arg === \"--transport=stdio\" ? \"stdio\" : \"http\";\n }\n if (arg.startsWith(\"--transport=\")) {\n const value = arg.slice(\"--transport=\".length);\n if (value === \"stdio\" || value === \"http\") return value;\n }\n }\n return undefined;\n}\n\nasync function main(): Promise<number> {\n const argv = process.argv.slice(2);\n\n if (argv.includes(\"--version\") || argv.includes(\"-v\")) {\n process.stdout.write(`${NAME} ${VERSION}\\n`);\n return 0;\n }\n if (argv.includes(\"--help\") || argv.includes(\"-h\")) {\n process.stdout.write(\n [\n `${NAME} ${VERSION}`,\n ``,\n `Usage:`,\n ` kaminari-ad-mcp [--transport=stdio|http]`,\n ``,\n `Transports:`,\n ` stdio (default) Local install — auth via KAMINARI_AD_API_KEY env var.`,\n ` http Hosted multi-tenant server — auth via incoming Authorization header.`,\n ``,\n `Configuration is documented in .env.example.`,\n ``,\n ].join(\"\\n\")\n );\n return 0;\n }\n\n const cliTransport = parseTransportFlag(argv);\n const env: NodeJS.ProcessEnv = cliTransport\n ? { ...process.env, KAMINARI_AD_TRANSPORT: cliTransport }\n : process.env;\n\n const configResult = loadConfig(env);\n if (configResult.isErr()) {\n process.stderr.write(`Invalid configuration: ${JSON.stringify(configResult.error.issues)}\\n`);\n return 2;\n }\n const config = configResult.value;\n\n if (config.transport === \"stdio\") {\n const { bootstrapStdio } = await import(\"./presentation/stdio/stdio-bootstrap.js\");\n return bootstrapStdio(config);\n }\n const { bootstrapHttp } = await import(\"./presentation/http/http-bootstrap.js\");\n return bootstrapHttp(config);\n}\n\nmain().then(\n (code) => {\n process.exit(code);\n },\n (error: unknown) => {\n process.stderr.write(`Fatal: ${error instanceof Error ? error.message : String(error)}\\n`);\n process.exit(1);\n }\n);\n"]}